diff --git a/src/demo/index3.html b/src/demo/index3.html index 9f47064..dd7bd32 100644 --- a/src/demo/index3.html +++ b/src/demo/index3.html @@ -110,12 +110,14 @@ form: 'clientAdd', forceFilter: true, onChange: true, + errorClass: '__error_cap', message: { - required: 'This field is required !', - min: 'This field is less then the limit [INDEX]', - max: 'This field is exceeds the limit of [INDEX]', - password: 'Password doesn\'t match !', - email: 'Invalid Email found !' + required: 'This field is required.', + min: 'This field length is too low.', + max: 'This field length is exceeds the limit.', + password: 'Password does not match.', + email: 'Email is not valid.', + file: 'This file is not allowed.' } }); diff --git a/src/js/formValidator.js b/src/js/formValidator.js index e99e17d..96eb75c 100644 --- a/src/js/formValidator.js +++ b/src/js/formValidator.js @@ -17,7 +17,7 @@ * Released under the MIT license * https://github.com/global-source/javascript_form_validator/blob/master/LICENSE * - * Date: 2017-05-01 + * Date: 2017-07-21 */ /* @@ -59,6 +59,8 @@ var jsValidator = { this.onlyFilter = option.onlyFilter; // To Enable/Disable global validator. this.onChange = option.onChange; + // Update default response "class". + if ('undefined' === typeof option.errorClass) option.errorClass = 'js-error-cop'; // Update "jsSettings" to global object. this.jsSettings = jsSettings.init(option); // Update "jsForm" to global object. @@ -139,6 +141,7 @@ var jsValidator = { } if (false == this.initialLoad) validationResponse.init(errorList, this.option); this.initialLoad = false; + helper.scrollToError(); return status; }, /* @@ -221,7 +224,7 @@ var jsFilter = { checkStatus: function (elem) { var status; status = true; - if (false === this.forceFilter) { + if (false === jsValidator.forceFilter) { status = false; if (true === elem.required) { status = true; @@ -296,8 +299,8 @@ var jsFilter = { var min = event.target.min; var max = event.target.max; // Default values for Min and Max. - if (!min) min = 0; - if (!max) max = 54; + if (!min) min = 1; + if (!max) max = 31; // Forming pattern for Restriction. var regex = new RegExp('^[0-9]+$'); // Validation with Code. @@ -309,7 +312,7 @@ var jsFilter = { event.preventDefault(); } - var num = +this.value, max = 31, min = 1; //converts value to a Number + var num = +this.value; //converts value to a Number if (!this.value.length) return false; //allows empty field this.value = isNaN(num) ? min : num > max ? max : num < min ? min : num; @@ -535,9 +538,9 @@ var jsRuleSets = { 'id': activeElem.name + '_new1_1_1xv_resp' }); firstErrorHit = activeElem.name + '_new1_1_1xv_resp'; - helper.scrollToItem('#' + firstErrorHit); - } // To Check the Value is less than min or not. + } + // To Check the Value is less than minimum or not. if (activeElem.min) { if (jsRuleSets.isSet(activeElem)) { if (!jsRuleSets.min(activeElem)) { @@ -547,12 +550,12 @@ var jsRuleSets = { 'id': activeElem.name + '_new1_1_1xv_resp' }); firstErrorHit = activeElem.name + '_new1_1_1xv_resp'; - helper.scrollToItem('#' + firstErrorHit); validElem = false; } } - } // To Check the Value is grater than max or not. + } + // To Check the Value is grater than max or not. if (activeElem.max) { if (jsRuleSets.isSet(activeElem)) { if (!jsRuleSets.max(activeElem)) { @@ -562,12 +565,12 @@ var jsRuleSets = { 'id': activeElem.name + '_new1_1_1xv_resp' }); firstErrorHit = activeElem.name + '_new1_1_1xv_resp'; - helper.scrollToItem('#' + firstErrorHit); validElem = false; } } - } // To Check the Entered E-mail is Valid or Not. + } + // To Check the Entered E-mail is Valid or Not. if (activeElem.type == 'email') { if (jsRuleSets.isSet(activeElem)) { if (!jsRuleSets.email(activeElem)) { @@ -577,13 +580,13 @@ var jsRuleSets = { 'id': activeElem.name + '_new1_1_1xv_resp' }); firstErrorHit = activeElem.name + '_new1_1_1xv_resp'; - helper.scrollToItem('#' + firstErrorHit); validElem = false; } } - } // To Compare the Password is Same or Not with Re-Password. - // TODO: Implement Simplified Comparison. + } + // To Compare the Password is Same or Not with Re-Password. + // TODO: Implement Simplified Comparison. if (activeElem.type == 'password') { if (jsRuleSets.isSet(activeElem)) { if (!jsRuleSets.compare(activeElem)) { @@ -593,7 +596,6 @@ var jsRuleSets = { 'id': activeElem.name + '_new1_1_1xv_resp' }); firstErrorHit = activeElem.name + '_new1_1_1xv_resp'; - helper.scrollToItem('#' + firstErrorHit); validElem = false; } } @@ -812,12 +814,27 @@ var helper = { // Finally return "false" for general keys. return false; }, + /* + * To Scroll Up / Down to notify the item that have validation message. + */ + scrollToError: function () { + var active_class = validationResponse.getClass(); + if (0 === document.getElementsByClassName(active_class).length) return false; + document.getElementsByClassName(active_class)[0].setAttribute('id', '__header_error_target_temp'); + var id = '#' + document.getElementsByClassName(active_class)[0].id; + window.location.href = id; + document.getElementsByClassName(active_class)[0].removeAttribute('id'); + // Remove the navigated value. + this.removeHash(id); + }, /* * To Scroll Up / Down to notify the item that have validation message. */ scrollToItem: function (item) { // Form hash value. - var hash = '#' + item; + var hash = item; + // If "#" is missing, then add back to the ID. + if (-1 === hash.indexOf('#')) hash = '#' + hash; // Navigate with the hash value. window.location.href = hash; // Remove the navigated value. @@ -832,7 +849,7 @@ var helper = { // Replacing the URL with specific hash value. path = path.replace(hash, ''); // Update to url history. - window.history.pushState('', 'Title', path) + window.history.pushState('', 'Title', path); } }; /** @@ -877,16 +894,20 @@ var pattern = { * To Manage all kind of error response. */ var validationResponse = { + active_class: false, /* * Initiating the Response handler. */ init: function (errorList, option) { this.errorMessage = option.message; + // Updating the class. + this.active_class = option.errorClass; // var errorElements = option.errorElem; // jsLogger.out('Errors', errorList); this.input(errorList.input); this.select(errorList.select); this.textArea(errorList.textArea); + }, /* * To handle the "input" element. @@ -900,6 +921,9 @@ var validationResponse = { select: function (elem) { this.process(elem); }, + getClass: function () { + return this.active_class; + }, /* * To handle the "textArea" element. */ @@ -911,6 +935,7 @@ var validationResponse = { */ process: function (elem) { var elementDefaultResponse = ''; + var active_class = this.getClass(); for (var i in elem) { // jsLogger.out('Element', document.getElementById(elem[i].id)); if (elem[i].el && true === elem[i].el.required) { @@ -926,6 +951,7 @@ var validationResponse = { // jsLogger.out('Element Found', false); spanTag = document.createElement('span'); spanTag.setAttribute('id', activeElem.id); + spanTag.setAttribute('class', active_class); spanTag.innerHTML = elementDefaultResponse; } else { // Re-use Existing response Message SPAN. @@ -974,16 +1000,17 @@ var validationResponse = { * then it will be replaces. */ default: function (errorType) { + var active_class = this.getClass(); var errorMessages = { - required: 'This field is required', - min: 'This field length is too low.', - max: 'This field length is exceeds the limit', - password: 'Password does not match.', - email: 'Email is not valid', - file: 'This file is not allowed' + required: 'This field is required.', + min: 'This field length is too low.', + max: 'This field length is exceeds the limit.', + password: 'Password does not match.', + email: 'Email is not valid.', + file: 'This file is not allowed.' }; if (typeof errorType !== 'string') return false; if (typeof errorMessages[errorType] === 'undefined') return false; return errorMessages[errorType]; } -}; +}; \ No newline at end of file diff --git a/src/js/formValidator.min.js b/src/js/formValidator.min.js index 20e5f01..105edcd 100644 --- a/src/js/formValidator.min.js +++ b/src/js/formValidator.min.js @@ -1 +1,23 @@ -var firstErrorHit=!1,jsValidator={formData:!1,onlyFilter:!1,jsForm:!1,jsSettings:!1,jsFormError:!1,formErrorList:{},forceFilter:!1,initialLoad:!0,option:!1,onChange:!1,init:function(a){return jsLogger.table(a),this.option=a,this.onlyFilter=a.onlyFilter,this.onChange=a.onChange,this.jsSettings=jsSettings.init(a),this.jsForm=jsForm.init(a),this.jsFormError=jsFormError.init(),this.forceFilter=a.forceFilter,this.check(),this.submitListener(this.jsForm.formCore,this),this},submitListener:function(a,b){!1!==this.onlyFilter&&void 0!==this.onlyFilter||document.querySelector("#"+a).addEventListener("submit",function(a){!1===b.check()&&a.preventDefault()})},update:function(){var a=this.option;this.onlyFilter=a.onlyFilter,this.jsSettings=jsSettings.init(a),this.jsForm=jsForm.init(a),this.jsFormError=jsFormError.init()},check:function(){var a=!1,b=this.jsForm,c=this.formErrorList,d=[];return c.input=this.elemLoop("input",b.input),c.textArea=this.elemLoop("textArea",b.textArea),c.select=this.elemLoop("select",b.select),jsLogger.out("Error List",this.formErrorList),d.push({errorElem:c}),0===c.input.length&&0===c.textArea.length&&0===c.select.length&&(alert("Form Valid !"),a=!0),0==this.initialLoad&&validationResponse.init(c,this.option),this.initialLoad=!1,a},elemLoop:function(a,b){var c=[];if(null===b||void 0===b)return!1;for(var d in b)if(b[d]){var e=b[d];this.applyFilters(e),1==this.onChange&&this.applyGlobalListener(e),jsLogger.out("Only Filter",this.onlyFilter),!1!==this.onlyFilter&&void 0!==this.onlyFilter||(c=jsRuleSets.checkValidation(e,c))}return c},applyFilters:function(a){"number"==a.type&&jsFilter.number(a),"email"==a.type&&jsFilter.email(a),a.getAttribute("data-allow")&&jsFilter.string(a),a.getAttribute("pattern")&&jsFilter.pattern(a)},applyGlobalListener:function(a){a.addEventListener("change",this.quickValidation,!1)},quickValidation:function(a){jsLogger.out("Quick",a);var b=[],c=a.target;b=jsRuleSets.checkValidation(c,b),jsLogger.out("Quick Out",b),validationResponse.process(b)},validate:function(){return this.check()}},jsFilter={number:function(a){var b=!0;!1===this.forceFilter&&(b=!1,!0===a.required&&(b=!0)),!0===b&&a.addEventListener("keypress",this.isNumberKey,!1)},string:function(a){var b=a.getAttribute("data-allow"),c=this,d=!0;switch(!1===this.forceFilter&&(d=!1,!0===a.required&&(d=!0)),b){case"onlyAlpha":!0===d&&a.addEventListener("keypress",c.isAlpha,!1);break;case"string":!0===d&&a.addEventListener("keypress",c.isAlphaNumeric,!1);break;default:!0===d&&a.addEventListener("keypress",c.isPatternValid,!1)}},pattern:function(a){var b=this,c=!0;!1===this.forceFilter&&(c=!1,!0===a.required&&(c=!0)),!0===c&&a.addEventListener("keypress",b.isPatternValid,!1)},email:function(a){var b=!0;!1===this.forceFilter&&(b=!1,!0===a.required&&(b=!0)),!0===b&&a.addEventListener("keypress",jsRuleSets.email,!1)},limit:function(a){var b=!0;!1===this.forceFilter&&(b=!1,!0===a.required&&(b=!0)),!0===b&&a.addEventListener("keypress",this.isInLimit,!1)},isInLimit:function(a){var b=a.target.value;if(!0===helper.isWindowAction(a))return!0;var c=a.target.min,d=a.target.max;c||(c=0),d||(d=54);var e=new RegExp("^[0-9]+$"),f=String.fromCharCode(a.charCode?a.charCode:a.which);jsLogger.out("Limit",e.test(f)+" | min |"+c+" | max | "+d),jsLogger.out("Regex",e.test(f)),(!1===e.test(f)||parseInt(b)>d||parseInt(b)31&&(b<48||b>57))||(a.preventDefault(),!1)}},jsSettings={errorColor:!1,errorTemplate:!1,init:function(a){return this.errorColor=a.errorColor,this.errorTemplate=a.errorTemplate,this},log:function(){jsLogger.out(this.errorColor),jsLogger.out(this.followedElement),jsLogger.out(this.errorTemplate)}},jsForm={form:!1,formCore:!1,input:!1,select:!1,textArea:!1,label:!1,forceFilter:!1,init:function(a){return jsLogger.out("Form",a.form),this.options=a,this.forceFilter=a.forceFilter,this.registerForm(a.form),this.parseForm(this.form),this.required(),this},registerForm:function(a){if(void 0===a&&jsLogger.out("Form Identification","Form Identification is Missing !"),null===a)return!1;this.form=document.getElementById(a),null===this.form&&jsLogger.out("Status 503","Failed to Proceed !"),this.formCore=a},parseForm:function(a){if(null===a)return!1;this.input=a.getElementsByTagName("input"),this.select=a.getElementsByTagName("select"),this.textArea=a.getElementsByTagName("textarea"),this.label=a.getElementsByTagName("label")},required:function(){var a=this.forceFilter;this.input=jsField.required(this.input,a),this.select=jsField.required(this.select,a),this.textArea=jsField.required(this.textArea,a)},log:function(){jsLogger.out("Form",this.form),jsLogger.out("input",this.input),jsLogger.out("select",this.select),jsLogger.out("textarea",this.textArea),jsLogger.out("labels",this.label)}},jsField={required:function(a,b){for(var c=[],d=0;dd&&0!=c.length&&(b=!1),b},email:function(a){if(!1===a.required)return!0;var b=!1,c=a.value;return c=c.toString(),/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(c)&&(b=!0),c||(b=!1),b},phone:function(a,b){if(!1===a.required)return!0;var c=!0;return""===a.value&&(c=!1),c},compare:function(a){var b=!1;!1===a.required&&(b=!0);var c=a.getAttribute("data-check");if(void 0!==c&&null!=c||(b=!1),null===c&&(c=a.getAttribute("data-parent")),null===c)b=!1;else{c=c.toString();var d=document.getElementById(c);a.value===d.value&&(b=!0)}return jsLogger.out("Compare Status",b),b}},jsFormError={errorHit:!1,errorCss:!1,successCss:!1,init:function(){this.errorHit=!1,this.errorCss="border-color: red;border-radius: 5px;color: red;",this.successCss="border-color: green;border-radius: 5px;color: green;"},log:function(){jsLogger.out("Form Error Hit",this.errorHit)},style:function(a){this.errorCss=a.error,this.successCss=a.success}},jsLogger={out:function(a,b){console.log("======"+a+"======"),console.log(b),console.log("------------------------")},bulk:function(a){console.log(a)},table:function(a){console.table(a)}},helper={isWindowAction:function(a){var b=a||window.event,c=b.shiftKey||b.which;return 9===c||0===c||8===c||32===c||13===c||8===c||c>=35&&c<=40||(c=String.fromCharCode(c),0===c.length)},scrollToItem:function(a){var b=a.nodeName;if(!b)return!1;if(null==b)return!1;a=document.getElementsByName(b);var c=(a.offsetTop-window.scrollY)/20;window._lastDiff||(window._lastDiff=0),Math.abs(c)>2?(window.scrollTo(0,window.scrollY+c),clearTimeout(window._TO),c!==window._lastDiff&&(window._lastDiff=c,window._TO=setTimeout(this.scrollToItem,100,a))):window.scrollTo(0,a.offsetTop)}},pattern={getDefault:function(a,b){void 0===b&&(b="");var c=a.target.getAttribute("data-allowSpecial"),d=a.target.pattern;console.log(d.length);return c||null!==c||(c=""),c=c.toString(),""!==d&&d.length>0&&null!==d?d:"^["+b+c+"]+$"},validate:function(a,b){var c=this.getDefault(a,b),d=new RegExp(c),e=String.fromCharCode(a.charCode?a.charCode:a.which);return d.test(e)}},validationResponse={init:function(a,b){this.errorMessage=b.message,this.input(a.input),this.select(a.select),this.textArea(a.textArea)},input:function(a){this.process(a)},select:function(a){this.process(a)},textArea:function(a){this.process(a)},process:function(a){var b="";for(var c in a)if(a[c].el&&!0===a[c].el.required){var d=a[c],e=a[c].type;b=this.template(d,e);var f=document.getElementById(d.id);void 0===f||"undefined"===f||null===f?(f=document.createElement("span"),f.setAttribute("id",d.id),f.innerHTML=b):f.innerHTML=b,d.el.parentNode.insertBefore(f,d.el.nextSibling)}},template:function(a,b){jsLogger.out("error Type 0",b);var c="",d="",e=a.el.getAttribute("data-message");return void 0!==e&&""!==e&&null!==e||(void 0!==this.errorMessage&&void 0!==this.errorMessage[b]?(b=this.errorMessage[b],a.el.getAttribute("data-message"),b&&(jsLogger.out("errorType",b),d=b,"min"!=a.type&&"max"!=a.type||("min"==a.type&&(c=a.el.min),"max"==a.type&&(c=a.el.max),d=d.replace("[INDEX]",c)))):d=this.default(b),e=d),e},default:function(a){var b={required:"This field is required",min:"This field length is too low.",max:"This field length is exceeds the limit",password:"Password does not match.",email:"Email is not valid"};return"string"==typeof a&&(void 0!==b[a]&&b[a])}}; \ No newline at end of file +/*! + * JavaScript Validator Library v1.0 + * To perform effective validation and filter with form elements. + * + * Author : Shankar Thiyagaraajan + * Email : shankarthiyagaraajan@gmail.com + * Github : https://github.com/shankarThiyagaraajan + * + * Source + * https://github.com/global-source/javascript_form_validator + * + * Site + * https://global-source.github.io/javascript_form_validator/ + * + * Copyright 2017 + * + * Released under the MIT license + * https://github.com/global-source/javascript_form_validator/blob/master/LICENSE + * + * Date: 2017-07-21 + */ + +var firstErrorHit=!1,jsValidator={formData:!1,onlyFilter:!1,jsForm:!1,jsSettings:!1,jsFormError:!1,formErrorList:{},forceFilter:!1,initialLoad:!0,option:!1,onChange:!1,init:function(e){return jsLogger.table(e),this.option=e,this.onlyFilter=e.onlyFilter,this.onChange=e.onChange,"undefined"==typeof e.errorClass&&(e.errorClass="js-error-cop"),this.jsSettings=jsSettings.init(e),this.jsForm=jsForm.init(e),this.jsFormError=jsFormError.init(),this.forceFilter=e.forceFilter,this.check(),this.submitListener(this.jsForm.formCore,this),this},submitListener:function(e,t){(!1===this.onlyFilter||"undefined"==typeof this.onlyFilter)&&document.querySelector("#"+e).addEventListener("submit",function(e){!1===t.check()&&e.preventDefault()})},update:function(){var e=this.option;this.onlyFilter=e.onlyFilter,this.jsSettings=jsSettings.init(e),this.jsForm=jsForm.init(e),this.jsFormError=jsFormError.init()},check:function(){var e=!1,t=this.jsForm,r=this.formErrorList,i=[];return r.input=this.elemLoop("input",t.input),r.textArea=this.elemLoop("textArea",t.textArea),r.select=this.elemLoop("select",t.select),jsLogger.out("Error List",this.formErrorList),i.push({errorElem:r}),0===r.input.length&&0===r.textArea.length&&0===r.select.length&&(e=!0),0==this.initialLoad&&validationResponse.init(r,this.option),this.initialLoad=!1,helper.scrollToError(),e},elemLoop:function(e,t){var r=[];if(null===t||"undefined"==typeof t)return!1;t=t.reverse();for(var i in t)if(t[i]){var n=t[i];this.applyFilters(n),1==this.onChange&&this.applyGlobalListener(n),(!1===this.onlyFilter||"undefined"==typeof this.onlyFilter)&&(r=jsRuleSets.checkValidation(n,r))}return r},applyFilters:function(e){"number"==e.type&&jsFilter.number(e),"email"==e.type&&jsFilter.email(e),"file"==e.type&&jsFilter.file(e),e.getAttribute("data-allow")&&jsFilter.string(e),e.getAttribute("pattern")&&jsFilter.pattern(e)},applyGlobalListener:function(e){e.addEventListener("change",this.quickValidation,!1)},quickValidation:function(e){var t=[],r=e.target;t=jsRuleSets.checkValidation(r,t),validationResponse.process(t)},validate:function(){return this.check()}},jsFilter={checkStatus:function(e){var t;return t=!0,!1===jsValidator.forceFilter&&(t=!1,!0===e.required&&(t=!0)),t},number:function(e){var t=this.checkStatus(e);!0===t&&e.addEventListener("keypress",this.isNumberKey,!1)},string:function(e){var t=e.getAttribute("data-allow"),r=this,i=this.checkStatus(e);switch(t){case"onlyAlpha":!0===i&&e.addEventListener("keypress",r.isAlpha,!1);break;case"string":!0===i&&e.addEventListener("keypress",r.isAlphaNumeric,!1);break;default:!0===i&&e.addEventListener("keypress",r.isPatternValid,!1)}},pattern:function(e){var t=this,r=this.checkStatus(e);!0===r&&e.addEventListener("keypress",t.isPatternValid,!1)},email:function(e){var t=this.checkStatus(e);!0===t&&e.addEventListener("keypress",jsRuleSets.email,!1)},file:function(e){var t=this.checkStatus(e);!0===t&&e.addEventListener("change",jsRuleSets.file,!1)},limit:function(e){var t=this.checkStatus(e);!0===t&&e.addEventListener("input",this.isInLimit,!1)},isInLimit:function(e){var t=e.target.value;if(!0===helper.isWindowAction(e))return!0;var r=e.target.min,i=e.target.max;r||(r=1),i||(i=31);var n=new RegExp("^[0-9]+$"),s=String.fromCharCode(e.charCode?e.charCode:e.which);(!1===n.test(s)||parseInt(t)>i||parseInt(t)i?i:r>o?r:o,void(e.target.value=e.target.value.substring(0,e.target.value.length-1))):!1},isAlpha:function(e){if(!0===helper.isWindowAction(e))return!0;var t=pattern.validate(e,"a-zA-Z");!1===t&&e.preventDefault()},isAlphaNumeric:function(e){if(!0===helper.isWindowAction(e))return!0;var t=pattern.validate(e,"a-zA-Z0-9");!1===t&&e.preventDefault()},isValidPassword:function(e){var t=e.which?e.which:e.keyCode;if(32===t)return e.preventDefault(),!1;if(!0===helper.isWindowAction(e))return!0;var r=pattern.validate(e,"a-zA-Z0-9");!1===r&&e.preventDefault()},isPatternValid:function(e){if(!0===helper.isWindowAction(e))return!0;var t=pattern.validate(e,"a-zA-Z0-4");!1===t&&e.preventDefault()},isNumberKey:function(e){if(!0===helper.isWindowAction(e))return!0;var t=e.which?e.which:e.keyCode;return 46===t||t>31&&(48>t||t>57)?(e.preventDefault(),!1):!0}},jsSettings={errorColor:!1,errorTemplate:!1,init:function(e){return this.errorColor=e.errorColor,this.errorTemplate=e.errorTemplate,this},log:function(){jsLogger.out(this.errorColor),jsLogger.out(this.errorTemplate)}},jsForm={form:!1,formCore:!1,input:!1,select:!1,textArea:!1,label:!1,forceFilter:!1,init:function(e){return jsLogger.out("Form",e.form),this.options=e,this.forceFilter=e.forceFilter,this.registerForm(e.form),this.parseForm(this.form),this.required(),this},registerForm:function(e){return"undefined"==typeof e&&jsLogger.out("Form Identification","Form Identification is Missing !"),null===e?!1:(this.form=document.getElementById(e),null===this.form&&jsLogger.out("Status 503","Failed to Proceed !"),void(this.formCore=e))},parseForm:function(e){return null===e?!1:(this.input=e.getElementsByTagName("input"),this.select=e.getElementsByTagName("select"),this.textArea=e.getElementsByTagName("textarea"),void(this.label=e.getElementsByTagName("label")))},required:function(){var e=this.forceFilter;this.input=jsField.required(this.input,e),this.select=jsField.required(this.select,e),this.textArea=jsField.required(this.textArea,e)},log:function(){jsLogger.out("Form",this.form),jsLogger.out("input",this.input),jsLogger.out("select",this.select),jsLogger.out("textarea",this.textArea),jsLogger.out("labels",this.label)}},jsField={required:function(e,t){for(var r=[],i=0;ii&&0!=r.length&&(t=!1),t},email:function(e){if(!1===e.required)return!0;var t=!1,r=e.value;return"undefined"==typeof r?!1:(r=r.toString(),/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(r)&&(t=!0),r||(t=!1),t)},file:function(e){var t,r,i=e.target.getAttribute("data-extensions"),n=e.target;if(""===i)return!0;t=-1===i.indexOf(",")?[i]:i.split(",");var s=n.value;return s=s.toLowerCase(),r=new RegExp("("+t.join("|").replace(/\./g,"\\.")+")$").test(s),!1===r?(alert('Allowed file types are "'+i+'" !'),e.target.value="",!1):!0},phone:function(e,t){if(!1===e.required)return!0;var r=!0;return""===e.value&&(r=!1),r},compare:function(e){var t=!1;!1===e.required&&(t=!0);var r=e.getAttribute("data-check");if(("undefined"==typeof r||null==r)&&(t=!1),null===r&&(r=e.getAttribute("data-parent")),null===r)t=!1;else{r=r.toString();var i=document.getElementById(r);e.value===i.value&&(t=!0)}return t}},jsFormError={errorHit:!1,errorCss:!1,successCss:!1,init:function(){this.errorHit=!1,this.errorCss="border-color: red;border-radius: 5px;color: red;",this.successCss="border-color: green;border-radius: 5px;color: green;"},log:function(){},style:function(e){this.errorCss=e.error,this.successCss=e.success}},jsLogger={out:function(e,t){console.log("======"+e+"======"),console.log(t),console.log("------------------------")},bulk:function(e){console.log(e)},table:function(e){console.table(e)}},helper={isWindowAction:function(e){var t=e||window.event,r=t.shiftKey||t.which;return 9===r||0===r||8===r||32===r||13===r||8===r||r>=35&&40>=r?!0:(r=String.fromCharCode(r),0===r.length?!0:!1)},scrollToError:function(){var e=validationResponse.getClass();if(0===document.getElementsByClassName(e).length)return!1;document.getElementsByClassName(e)[0].setAttribute("id","__header_error_target_temp");var t="#"+document.getElementsByClassName(e)[0].id;window.location.href=t,document.getElementsByClassName(e)[0].removeAttribute("id"),this.removeHash(t)},scrollToItem:function(e){var t=e;-1===t.indexOf("#")&&(t="#"+t),window.location.href=t,this.removeHash(t)},removeHash:function(e){var t=window.location.href;t=t.replace(e,""),window.history.pushState("","Title",t)}},pattern={getDefault:function(e,t){"undefined"==typeof t&&(t="");var r=e.target.getAttribute("data-allowSpecial"),i=e.target.pattern;console.log(i.length);var n;return r||null!==r||(r=""),r=r.toString(),n=""!==i&&i.length>0&&null!==i?i:"^["+t+r+"]+$"},validate:function(e,t){var r=this.getDefault(e,t),i=new RegExp(r),n=String.fromCharCode(e.charCode?e.charCode:e.which);return i.test(n)}},validationResponse={active_class:!1,init:function(e,t){this.errorMessage=t.message,this.active_class=t.errorClass,this.input(e.input),this.select(e.select),this.textArea(e.textArea)},input:function(e){this.process(e)},select:function(e){this.process(e)},getClass:function(){return this.active_class},textArea:function(e){this.process(e)},process:function(e){var t="",r=this.getClass();for(var i in e)if(e[i].el&&!0===e[i].el.required){var n=e[i],s=e[i].type;t=this.template(n,s);var o=document.getElementById(n.id);"undefined"==typeof o||"undefined"===o||null===o?(o=document.createElement("span"),o.setAttribute("id",n.id),o.setAttribute("class",r),o.innerHTML=t):o.innerHTML=t,n.el.parentNode.insertBefore(o,n.el.nextSibling)}},template:function(e,t){var r="",i="",n=e.el.getAttribute("data-message");return("undefined"==typeof n||""===n||null===n)&&("undefined"!=typeof this.errorMessage&&"undefined"!=typeof this.errorMessage[t]?(t=this.errorMessage[t],e.el.getAttribute("data-message"),t&&(i=t,("min"==e.type||"max"==e.type)&&("min"==e.type&&(r=e.el.min),"max"==e.type&&(r=e.el.max),i=i.replace("[INDEX]",r)))):i=this["default"](t),n=i),n},"default":function(e){var t=this.getClass(),r={required:'This field is required.',min:'This field length is too low.',max:'This field length is exceeds the limit.',password:'Password does not match.',email:'Email is not valid.',file:'This file is not allowed.'};return"string"!=typeof e?!1:"undefined"==typeof r[e]?!1:r[e]}}; \ No newline at end of file