forms.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. (function (Misago) {
  2. 'use strict';
  3. var boilerplate = function(form) {
  4. var _submit = form.submit;
  5. var _success = form.success;
  6. var _error = form.error;
  7. form.isBusy = false;
  8. form.errors = null;
  9. form.submit = function() {
  10. if (form.isBusy) {
  11. return false;
  12. }
  13. if (form.clean) {
  14. if (form.clean()) {
  15. form.isBusy = true;
  16. _submit.apply(form);
  17. }
  18. } else {
  19. form.isBusy = true;
  20. }
  21. return false;
  22. };
  23. form.success = function() {
  24. m.startComputation();
  25. _success.apply(form, arguments);
  26. form.isBusy = false;
  27. m.endComputation();
  28. };
  29. form.error = function() {
  30. m.startComputation();
  31. _error.apply(form, arguments);
  32. form.isBusy = false;
  33. m.endComputation();
  34. };
  35. form.hasErrors = function() {
  36. if (form.errors === null) {
  37. return false;
  38. }
  39. for (var key in form.validation) {
  40. if (form.validation.hasOwnProperty(key)) {
  41. if (form.errors[key] !== true) {
  42. return true;
  43. }
  44. }
  45. }
  46. return false;
  47. };
  48. return form;
  49. };
  50. var form = function(name, constructor) {
  51. if (this._forms[name]) {
  52. if (constructor) {
  53. return boilerplate(new this._forms[name](constructor, this));
  54. } else {
  55. return boilerplate(new this._forms[name](this));
  56. }
  57. } else {
  58. this._forms[name] = constructor;
  59. }
  60. };
  61. Misago.addService('forms', function(_) {
  62. _._forms = {};
  63. _.form = form;
  64. });
  65. }(Misago.prototype));