change-password.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. (function (Misago) {
  2. 'use strict';
  3. var viewModel = {
  4. error: null,
  5. isReady: false,
  6. form: null,
  7. init: function(_) {
  8. this.error = null;
  9. this.user = null;
  10. this.isReady = false;
  11. var endpoint = _.api.endpoint('auth').endpoint('change-password');
  12. endpoint = endpoint.endpoint(m.route.param('user_id'));
  13. endpoint = endpoint.endpoint(m.route.param('token'));
  14. return endpoint.get();
  15. },
  16. ondata: function(data, _) {
  17. m.startComputation();
  18. _.title.set(gettext("Change forgotten password"));
  19. this.form = _.form('change-password');
  20. this.isReady = true;
  21. m.endComputation();
  22. },
  23. onerror: function(error, _) {
  24. if (error.status === 400) {
  25. m.startComputation();
  26. this.error = error;
  27. this.isReady = true;
  28. m.endComputation();
  29. } else {
  30. _.router.errorPage(error);
  31. }
  32. }
  33. };
  34. var changePassword = {
  35. controller: function(_) {
  36. this.vm.init(_);
  37. return {
  38. signin: function() {
  39. _.modal('sign-in');
  40. }
  41. };
  42. },
  43. vm: viewModel,
  44. view: function(ctrl, _) {
  45. if (this.vm.error) {
  46. return this.rejected(this.vm.error, _);
  47. } else {
  48. if (this.vm.form.username) {
  49. return this.complete(ctrl, this.vm.form.username, _);
  50. } else {
  51. return this.form(this.vm.form, _);
  52. }
  53. }
  54. },
  55. form: function(form, _) {
  56. return m('.page.page-change-password', [
  57. _.component('header', {
  58. title: gettext("Change forgotten password")
  59. }),
  60. m('.container',
  61. m('.row',
  62. m('.col-md-4.col-md-offset-4',
  63. m('.well.well-form',
  64. m('form', {onsubmit: form.submit}, [
  65. m('.form-group',
  66. m('.control-input',
  67. Misago.input({
  68. disabled: form.isBusy,
  69. value: form.password,
  70. type: 'password',
  71. placeholder: gettext("Enter new password")
  72. })
  73. )
  74. ),
  75. _.component('button', {
  76. class: '.btn-primary.btn-block',
  77. submit: true,
  78. loading: form.isBusy,
  79. label: gettext("Change password")
  80. })
  81. ])
  82. )
  83. )
  84. )
  85. )
  86. ]);
  87. },
  88. complete: function(ctrl, username, _) {
  89. var message = gettext("%(username)s, your password has been changed successfully.");
  90. return m('.page.page-message.page-message-success',
  91. m('.container',
  92. m('.message-panel', [
  93. m('.message-icon',
  94. m('span.material-icon', 'check')
  95. ),
  96. m('.message-body', [
  97. m('p.lead',
  98. interpolate(message, {
  99. username: username
  100. }, true)
  101. ),
  102. m('p',
  103. gettext("You can now sign in to your account using your new password.")
  104. ),
  105. m('p',
  106. _.component('button', {
  107. class: '.btn-default',
  108. submit: false,
  109. label: gettext("Sign in"),
  110. onclick: ctrl.signin
  111. })
  112. )
  113. ])
  114. ])
  115. )
  116. );
  117. },
  118. rejected: function(error) {
  119. return m('.page.page-message.page-message-info',
  120. m('.container',
  121. m('.message-panel', [
  122. m('.message-icon',
  123. m('span.material-icon', 'info_outline')
  124. ),
  125. m('.message-body', [
  126. m('p.lead',
  127. gettext("Your account can't be activated at this time.")
  128. ),
  129. m('p',
  130. error.detail
  131. )
  132. ])
  133. ])
  134. )
  135. );
  136. }
  137. };
  138. Misago.addService('route:change-password', function(_) {
  139. _.route('change-password', changePassword);
  140. },
  141. {
  142. after: 'routes'
  143. });
  144. }(Misago.prototype));