"use strict";function _toConsumableArray(e){if(Array.isArray(e)){for(var r=0,t=Array(e.length);r * Github: https://github.com/hassanhibbert/validate-manager * Copyright 2016-2018 Hassan Hibbert, under the MIT License */ !function(){function e(){var e=Object.create(d),t={onSubmitHandler:null,onChangeHandler:null,formName:null,validateOnChange:!0,resetFormOnSubmit:!0,debug:!1};e.errorMessages={lettersOnly:"Please use letters only.",email:"Please enter a valid email address.",equalTo:"Please enter the same value.",digits:"Please enter a valid digit.",range:"Please enter a number between {0} and {1}",required:"This field is required.",minlength:"Please enter a minimum of {0} characters.",maxlength:"Please enter a maximum of {0} characters."},e.form={validationList:[],errorCollection:[]},e.eventHandlers={onChange:e.onChangeHandler.bind(e),onSubmit:e.onSubmitHandler.bind(e)};for(var n=arguments.length,i=Array(n),o=0;o0?e[0]:e},flatten:function(e){var r;return(r=[]).concat.apply(r,_toConsumableArray(e))},removeClass:function(e,r){if(-1!=e.className.indexOf(r)){var t=new RegExp("(\\s|^)"+r+"(\\s|$)");e.className=e.className.replace(t," ").trim()}},addClass:function(e,r){-1===e.className.indexOf(r)&&(""!=e.className&&(r=" "+r),e.className+=r)},parseArguments:function(e){var t={};if(0===e.length)throw new Error("ValidateManager(): Form name or config object is required.");if(1===e.length){var n=e[0];if(this.isString(n))t.formName=n;else{if(!this.isObject(n))throw new Error("ValidateManager(): First argument is not a valid string or object.");r(t,n)}}else if(2===e.length){var i=e[0],o=e[1];if(!this.isString(i))throw new Error("ValidateManager(): First argument should be a string.");if(!this.isObject(o))throw new Error("ValidateManager(): Second argument should be an object.");o.formName=i,r(t,o)}return t},getValidationRulesFromDOM:function(e){var r=this;return[].concat(_toConsumableArray(e)).reduce(function(e,n){var i=r.parseAttributes(n);return t(i).length&&(o.call(e,n.name)||(e[n.name]=i,e[n.name].fieldName=n.name)),e},{})},camelCase:function(e,r){return e.indexOf(r)<0?e:e.split(r).reduce(function(e,r,t){var r=t>0?r.charAt(0).toUpperCase()+r.slice(1):r;return e.push(r),e},[]).join("")},parseAttributes:function(e){var r=this;return[].concat(_toConsumableArray(e.attributes)).reduce(function(e,t){if(t.name.indexOf("data-vm-")>=0){var n=t.name.replace("data-vm-",""),i=r.camelCase(n,"-"),o=t.value.indexOf("'")>=0,a=o?t.value.replace(/[\/']/g,'"'):t.value;try{var s=JSON.parse(a)}catch(e){var s=a}"required"===i?e[i]=s:e.rules?e.rules[i]=s:(e.rules={},e.rules[i]=s)}return e},{})},formatStringTemplate:function(){for(var e=this,r=arguments.length,t=Array(r>1?r-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:"").replace(/{(.*?)}/g,function(r,n){return Array.isArray(t[n])&&(t=e.flatten(t)),t[n]})},mergeRules:function(e,r){var n=deepmerge(r,e);return t(n).map(function(e){return n[e]})}},u=s(l,{required:function(e){return this.isNodeList(e)?[].concat(_toConsumableArray(e)).some(function(e){return e.checked}):!(0===e.length||""===e.trim()||null===e)},range:function(e,r){return parseInt(e)>=r[0]&&parseInt(e)<=r[1]},digits:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},lettersOnly:function(e){return/^[a-z]+$/i.test(e)},maxlength:function(e,r){return this.isNodeList(e)?this.getCheckedValues(e).length<=r:e.length<=r},minlength:function(e,r){return this.isNodeList(e)?this.getCheckedValues(e).length>=r:e.length>=r},equalTo:function(e,r,t){if(t[r]){return e===t[r].value}throw new Error('equalTo(): Could not find a form element with the name "'+r+'"')},email:function(e){return/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}}),c=s(u,{isItemInErrorCollection:function(e,r){var t=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return this.form.errorCollection.filter(function(n){return t?n.id===r.id&&e===n.rule:n.id===r.id}).length>0},isErrorCollectionEmpty:function(){return 0===this.form.errorCollection.length},addToErrorCollection:function(e,r){this.isItemInErrorCollection(e,r)||this.form.errorCollection.push({id:r.id,rule:e,message:r.error[e]})},removeFromErrorCollection:function(e,r){this.isItemInErrorCollection(e,r)&&(this.form.errorCollection=this.form.errorCollection.filter(function(t){return r.id!==t.id&&e!==t.rule}))}}),m=s(c,{init:function(){this.options.validateOnChange&&this.options.formElement.addEventListener("change",this.eventHandlers.onChange,!1),this.options.formElement&&this.options.formElement.addEventListener("submit",this.eventHandlers.onSubmit,!1)},destroy:function(){this.options.validateOnChange&&this.options.formElement.removeEventListener("change",this.eventHandlers.onChange,!1),this.options.formElement&&this.options.formElement.removeEventListener("submit",this.eventHandlers.onSubmit,!1)},onSubmitHandler:function(e){var r=this;e.preventDefault(),this.validateRequiredFields(function(t){r.isFunction(r.options.onSubmitHandler)?r.options.onSubmitHandler(e,t,r.options.formElement):r.options.debug||r.options.formElement.submit(),r.options.resetFormOnSubmit&&r.options.formElement.reset()})},onChangeHandler:function(e){e.preventDefault(),this.validateField(e.target),this.isFunction(this.options.onChangeHandler)&&this.options.onChangeHandler(e,e.target,this.options.formElement)},validateField:function(e){var r=this,n=this.form.validationList.filter(function(t){var n=r.isNodeList(e)?r.first(e).name:e.name;return t.fieldName===n});n=this.first(n),t(n.rules).some(function(e){var t=r[e].bind(r),i=r.isNodeList(n.element)?n.element:n.element.value,o=n.rules[e],a=n.rules[e]&&t(i,o,r.options.formElement);return a?r.removeFromErrorCollection(e,n):r.addToErrorCollection(e,n),r.isItemInErrorCollection(e,n)?r.showError(n.id,n.error[e]):r.isItemInErrorCollection(e,n,!1)||r.hideError(n.id),!a})},buildErrorPlaceholders:function(){var e=this;this.form.validationList.forEach(function(r){var t=a.createElement("div"),n=r.element;if(t.className="error-message",t.id="error-mgn-"+r.id,e.isNodeList(n)){n[n.length-1].parentNode.appendChild(t)}else r.element.parentNode.appendChild(t)})},updateList:function(e){var n=this;return e.map(function(e,i){r(e,{id:i+"-"+n.options.formName,element:n.options.formElement[e.fieldName]});var a=o.call(e,"rules"),s=o.call(e,"required");a||(e.rules={}),s&&r(e.rules,{required:e.required});var l=t(e.rules);return e.error={},l.forEach(function(r){var t=o.call(e.error,r),i=e.rules[r],a=n.isBoolean(i);t||(e.error[r]=a?n.errorMessages[r]:n.formatStringTemplate(n.errorMessages[r],i)),o.call(e,"message")&&e.message[r]&&(e.error[r]=a?e.message[r]:n.formatStringTemplate(e.message[r],i))}),delete e.message,delete e.required,e})},showError:function(e,r){var t=a.querySelector("#error-mgn-"+e);this.html(t,r),this.addClass(t,"error-message_show")},hideError:function(e){var r=a.querySelector("#error-mgn-"+e);this.removeClass(r,"error-message_show")},getAllValues:function(){var e=this;return this.form.validationList.reduce(function(r,t){return r[t.fieldName]=e.isNodeList(t.element)?e.getCheckedValues(t.element):t.element.value,r},{})},getRequiredFields:function(){return this.form.validationList.filter(function(e){return o.call(e.rules,"required")}).map(function(e){return e.element})},validateRequiredFields:function(e){var r=this;this.getRequiredFields().forEach(function(e){r.validateField(e)}),this.isErrorCollectionEmpty()&&this.isFunction(e)&&e(this.getAllValues())}}),d=s(m,{validate:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!this.isObject(e))throw new Error("validate(): The argument passed to this method must be an object.");var r=this.getValidationRulesFromDOM(this.options.formElement),t=this.mergeRules(e,r);this.form.validationList=this.updateList(t),this.buildErrorPlaceholders(),this.init()},addMethod:function(e,r){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(o.call(this,e))throw new Error('addMethod(): "'+e+'" method name is already use.');if(!this.isFunction(r))throw new Error("addMethod(): Second argument should be a function.");if(!this.isString(t))throw new Error("addMethod(): Third argument should be a string.");this[e]=r,this.errorMessages[e]=t}})}();