Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. class EventEmitter {
  2. constructor() {
  3. this.events = Object.create(null);
  4. }
  5.  
  6. on(event, handler) {
  7. if (!this.events[event])
  8. this.events[event] = [handler];
  9. else
  10. this.events[event].push(handler);
  11. return this;
  12. }
  13.  
  14. emit(event, data) {
  15. console.log('emit event ' + event);
  16. if (!(event in this.events))
  17. return;
  18.  
  19. for (let handler of this.events[event])
  20. handler(data);
  21. }
  22. }
  23.  
  24. class FormValidator extends EventEmitter {
  25. submitGuard(formID) {
  26. var form = document.getElementById(formID);
  27. this.form = form;
  28. var that = this;
  29. form.addEventListener('submit', function(event) {
  30. that.form.isValid = true;
  31. var fields = form.getElementsByTagName('input');
  32. for(var i = 0; i < fields.length; i++) {
  33. var input = fields[i];
  34. if(input.type !== 'radio') {
  35.  
  36. that.emit(input.id + '_changed', {value: input.value, field: input});
  37. }
  38. }
  39. var fields = form.getElementsByTagName('select');
  40. for(var i = 0; i < fields.length; i++) {
  41. var select = fields[i];
  42. var value = select.options[select.selectedIndex].value;
  43.  
  44. that.emit(input.id + '_changed', {value: value, field: select});
  45. }
  46. if(that.form.isValid == false) {
  47. event.preventDefault();
  48. }
  49. })
  50. return this;
  51. }
  52. withValidator(validator, errorHandler) {
  53. var that = this;
  54. console.log('should validate ' + validator.id);
  55. this.on(validator.id + '_changed', function(data) {
  56. console.log('validating field ' + validator.id);
  57. for(var i = 0; i < validator.checkers.length; i++) {
  58. if(validator.checkers[i](data.value) == false) {
  59. errorHandler(data.field);
  60. that.form.isValid = false;
  61. break;
  62. }
  63. }
  64. })
  65. return this;
  66. }
  67. }
  68.  
  69. function validator(elementID) {
  70. return {
  71. id: elementID,
  72. checkers: [],
  73. withChecker: function(checker) {
  74. this.checkers.push(checker);
  75. return this;
  76. }
  77. }
  78. }
  79.  
  80. function submitGuard(formID) {
  81. var formValidator = new FormValidator();
  82. formValidator.submitGuard(formID);
  83. return formValidator;
  84. }
  85.  
  86. var titleChecker = function(userInput) {
  87. return true;
  88. }
  89. function lengthChecker(length) {
  90. return function(userInput) {
  91. return true;
  92. }
  93. }
  94.  
  95. function wrongTitleHandler() {
  96.  
  97. }
  98.  
  99. function wrongPriceHandler() {
  100.  
  101. }
  102.  
  103. let titleValidator = validator('title').withChecker(titleChecker);
  104. let priceValidator = validator('price').withChecker(lengthChecker(6));
  105. submitGuard('create_ad_form')
  106. .withValidator(titleValidator, wrongTitleHandler)
  107. .withValidator(priceValidator, wrongPriceHandler);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement