Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class EventEmitter {
- constructor() {
- this.events = Object.create(null);
- }
- on(event, handler) {
- if (!this.events[event])
- this.events[event] = [handler];
- else
- this.events[event].push(handler);
- return this;
- }
- emit(event, data) {
- console.log('emit event ' + event);
- if (!(event in this.events))
- return;
- for (let handler of this.events[event])
- handler(data);
- }
- }
- class FormValidator extends EventEmitter {
- submitGuard(formID) {
- var form = document.getElementById(formID);
- this.form = form;
- var that = this;
- form.addEventListener('submit', function(event) {
- that.form.isValid = true;
- var fields = form.getElementsByTagName('input');
- for(var i = 0; i < fields.length; i++) {
- var input = fields[i];
- if(input.type !== 'radio') {
- that.emit(input.id + '_changed', {value: input.value, field: input});
- }
- }
- var fields = form.getElementsByTagName('select');
- for(var i = 0; i < fields.length; i++) {
- var select = fields[i];
- var value = select.options[select.selectedIndex].value;
- that.emit(input.id + '_changed', {value: value, field: select});
- }
- if(that.form.isValid == false) {
- event.preventDefault();
- }
- })
- return this;
- }
- withValidator(validator, errorHandler) {
- var that = this;
- console.log('should validate ' + validator.id);
- this.on(validator.id + '_changed', function(data) {
- console.log('validating field ' + validator.id);
- for(var i = 0; i < validator.checkers.length; i++) {
- if(validator.checkers[i](data.value) == false) {
- errorHandler(data.field);
- that.form.isValid = false;
- break;
- }
- }
- })
- return this;
- }
- }
- function validator(elementID) {
- return {
- id: elementID,
- checkers: [],
- withChecker: function(checker) {
- this.checkers.push(checker);
- return this;
- }
- }
- }
- function submitGuard(formID) {
- var formValidator = new FormValidator();
- formValidator.submitGuard(formID);
- return formValidator;
- }
- var titleChecker = function(userInput) {
- return true;
- }
- function lengthChecker(length) {
- return function(userInput) {
- return true;
- }
- }
- function wrongTitleHandler() {
- }
- function wrongPriceHandler() {
- }
- let titleValidator = validator('title').withChecker(titleChecker);
- let priceValidator = validator('price').withChecker(lengthChecker(6));
- submitGuard('create_ad_form')
- .withValidator(titleValidator, wrongTitleHandler)
- .withValidator(priceValidator, wrongPriceHandler);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement