Current section

Files

Jump to
nitrogen_core priv www livevalidation.min.js
Raw

priv/www/livevalidation.min.js

var LiveValidation=function(b,a){this.initialize(b,a)};LiveValidation.VERSION="1.4 standalone-nitrogen";LiveValidation.TEXTAREA=1;LiveValidation.TEXT=2;LiveValidation.PASSWORD=3;LiveValidation.CHECKBOX=4;LiveValidation.SELECT=5;LiveValidation.FILE=6;LiveValidation.RADIOGROUP=7;LiveValidation.OPTIONS={validMessage:"",insertAfterWhatNode:null,onlyOnBlur:false,wait:0,onlyOnSubmit:false,onValid:function(){},onInvalid:function(){this.insertMessage(this.createMessageSpan());this.addFieldClass()}};LiveValidation.massValidate=function(c){var d=true;for(var b=0,a=c.length;b<a;++b){var e=c[b].validate();if(d){d=e}}return d};LiveValidation.prototype={validClass:"LV_valid",invalidClass:"LV_invalid",messageClass:"LV_validation_message",validFieldClass:"LV_valid_field",invalidFieldClass:"LV_invalid_field",initialize:function(d,c){var a=this;if(!d){throw new Error("LiveValidation::initialize - No element reference or element id has been provided!")}this.element=d.nodeName?d:document.getElementById(d);if(!this.element){throw new Error("LiveValidation::initialize - No element with reference or id of '"+d+"' exists!")}this.validations=[];this.elementType=this.getElementType();this.form=this.element.form;var b=c||{};this.validMessage=b.validMessage||b.validMessage!==false&&LiveValidation.OPTIONS.validMessage;var e=b.insertAfterWhatNode||LiveValidation.OPTIONS.insertAfterWhatNode||this.element;this.insertAfterWhatNode=e.nodeType?e:document.getElementById(e);this.onlyOnBlur=b.onlyOnBlur||LiveValidation.OPTIONS.onlyOnBlur;this.wait=b.wait||LiveValidation.OPTIONS.wait;this.onlyOnSubmit=b.onlyOnSubmit||LiveValidation.OPTIONS.onlyOnSubmit;this.beforeValidation=b.beforeValidation||LiveValidation.OPTIONS.beforeValidation||function(){};this.beforeValid=b.beforeValid||LiveValidation.OPTIONS.beforeValid||function(){};this.onValid=b.onValid||LiveValidation.OPTIONS.onValid;this.afterValid=b.afterValid||LiveValidation.OPTIONS.afterValid||function(){};this.beforeInvalid=b.beforeInvalid||LiveValidation.OPTIONS.beforeInvalid||function(){};this.onInvalid=b.onInvalid||LiveValidation.OPTIONS.onInvalid;this.afterInvalid=b.afterInvalid||LiveValidation.OPTIONS.afterInvalid||function(){};this.afterValidation=b.afterValidation||LiveValidation.OPTIONS.afterValidation||function(){};if(this.form){this.formObj=LiveValidationForm.getInstance(this.form);this.formObj.addField(this)}if(this.elementType==LiveValidation.RADIOGROUP){var f=this;$(this.element).children("input[type=radio]").on("focus",function(){f.removeMessageAndFieldClass()})}this.oldOnFocus=this.element.onfocus||function(){};this.oldOnBlur=this.element.onblur||function(){};this.oldOnClick=this.element.onclick||function(){};this.oldOnChange=this.element.onchange||function(){};this.oldOnKeyup=this.element.onkeyup||function(){};this.element.onfocus=function(g){a.doOnFocus(g);return a.oldOnFocus.call(this,g)};if(!this.onlyOnSubmit){switch(this.elementType){case LiveValidation.CHECKBOX:this.element.onclick=function(g){a.validate();return a.oldOnClick.call(this,g)};case LiveValidation.SELECT:case LiveValidation.FILE:this.element.onchange=function(g){a.validate();return a.oldOnChange.call(this,g)};break;default:if(!this.onlyOnBlur){this.element.onkeyup=function(g){a.deferValidation();return a.oldOnKeyup.call(this,g)}}this.element.onblur=function(g){a.doOnBlur(g);return a.oldOnBlur.call(this,g)}}}},destroy:function(){if(this.formObj){this.formObj.removeField(this);this.formObj.destroy()}this.element.onfocus=this.oldOnFocus;if(!this.onlyOnSubmit){switch(this.elementType){case LiveValidation.CHECKBOX:this.element.onclick=this.oldOnClick;case LiveValidation.SELECT:case LiveValidation.FILE:this.element.onchange=this.oldOnChange;break;default:if(!this.onlyOnBlur){this.element.onkeyup=this.oldOnKeyup}this.element.onblur=this.oldOnBlur}}this.validations=[];this.removeMessageAndFieldClass()},add:function(a,b){this.validations.push({type:a,params:b||{}});return this},remove:function(b,e){var f=[];for(var d=0,a=this.validations.length;d<a;d++){var c=this.validations[d];if(c.type!=b&&c.params!=e){f.push(c)}}this.validations=f;return this},deferValidation:function(b){if(this.wait>=300){this.removeMessageAndFieldClass()}var a=this;if(this.timeout){clearTimeout(a.timeout)}this.timeout=setTimeout(function(){a.validate()},a.wait)},doOnBlur:function(a){this.focused=false;this.validate()},doOnFocus:function(a){this.focused=true;this.removeMessageAndFieldClass()},getElementType:function(){var b=this.element.nodeName.toUpperCase();console.log(b);if($(this.element).hasClass("radiogroup")){var a="RADIOGROUP"}else{console.log(this);var a=this.element.type.toUpperCase()}switch(true){case (b=="TEXTAREA"):return LiveValidation.TEXTAREA;case (b=="INPUT"&&a=="TEXT"):return LiveValidation.TEXT;case (b=="INPUT"&&(a=="EMAIL"||a=="URL"||a=="TEL"||a=="NUMBER"||a=="RANGE"||a=="HIDDEN")):return LiveValidation.TEXT;case (b=="INPUT"&&a=="PASSWORD"):return LiveValidation.PASSWORD;case (b=="INPUT"&&a=="CHECKBOX"):return LiveValidation.CHECKBOX;case (b=="INPUT"&&a=="FILE"):return LiveValidation.FILE;case (b=="DIV"&&a=="RADIOGROUP"):return LiveValidation.RADIOGROUP;case (b=="SELECT"):return LiveValidation.SELECT;case (b=="INPUT"):throw new Error("LiveValidation::getElementType - Cannot use LiveValidation on an "+a.toLowerCase()+" input!");default:throw new Error("LiveValidation::getElementType - Element must be an input, select, or textarea - "+b.toLowerCase()+" was given!")}},doValidations:function(d){var d=d||function(e){return e};this.validationFailed=false;var c=this;var a=function(e,g,h){if(e.length==0){c.validationFailed=g;c.message=c.validMessage;return h(g)}else{var f=e.shift();return c.validateElement(f.type,f.params,function(j){var i=g;if(!j){i=false;return h(i)}else{return a(e,i,h)}})}};var b=this.validations.slice(0);return a(b,true,d)},validateElement:function(a,c,f){var f=f||function(g){return g};switch(a){case Validate.Presence:case Validate.Confirmation:case Validate.Acceptance:this.displayMessageWhenEmpty=true;break;case Validate.Custom:if(c.displayMessageWhenEmpty){this.displayMessageWhenEmpty=true}break}var d="";if(this.elementType==LiveValidation.SELECT){if(this.element.selectedIndex>=0){d=this.element.options[this.element.selectedIndex].value}}else{if(this.elementType==LiveValidation.RADIOGROUP){d=$(this.element).children("input[type=radio]:checked").val()}else{d=this.element.value}}if(a==Validate.Acceptance){if(this.elementType!=LiveValidation.CHECKBOX){throw new Error("LiveValidation::validateElement - Element to validate acceptance must be a checkbox!")}d=this.element.checked}var e=true;try{a(d,c)}catch(b){if(b instanceof Validate.Error){if(d!==""||(d===""&&this.displayMessageWhenEmpty)){this.validationFailed=true;this.message=b.message.split("\n")[0];e=false}}else{throw b}}finally{return f(e)}},validate:function(b){var b=b||function(c){return c};if(!this.element.disabled){this.beforeValidation();var a=this;return this.doValidations(function(c){if(c){a.beforeValid();a.onValid();a.afterValid();a.afterValidation();return b(true)}else{a.beforeInvalid();a.onInvalid();a.afterInvalid();a.afterValidation();return b(false)}})}else{return b(true)}},enable:function(){this.element.disabled=false;return this},disable:function(){this.element.disabled=true;this.removeMessageAndFieldClass();return this},createMessageSpan:function(){var a=document.createElement("span");var b=document.createTextNode(this.message);a.appendChild(b);return a},insertMessage:function(c){this.removeMessage();if(!this.validationFailed&&!this.validMessage){return}if((this.displayMessageWhenEmpty&&(this.elementType==LiveValidation.CHECKBOX||this.element.value==""))||this.element.value!=""){var b=this.validationFailed?this.invalidClass:this.validClass;c.className+=" "+this.messageClass+" "+b;var a=this.insertAfterWhatNode.parentNode;if(this.insertAfterWhatNode.nextSibling){a.insertBefore(c,this.insertAfterWhatNode.nextSibling)}else{a.appendChild(c)}}},addFieldClass:function(){this.removeFieldClass();if(!this.validationFailed){if(this.displayMessageWhenEmpty||this.element.value!=""){if(this.element.className.indexOf(this.validFieldClass)==-1){this.element.className+=" "+this.validFieldClass}}}else{if(this.element.className.indexOf(this.invalidFieldClass)==-1){this.element.className+=" "+this.invalidFieldClass}}},removeMessage:function(){var a;var b=this.insertAfterWhatNode;while(b.nextSibling){if(b.nextSibling.nodeType===1){a=b.nextSibling;break}b=b.nextSibling}if(a&&a.className.indexOf(this.messageClass)!=-1){this.insertAfterWhatNode.parentNode.removeChild(a)}},removeFieldClass:function(){var a=this.element.className;if(a.indexOf(this.invalidFieldClass)!=-1){this.element.className=a.split(this.invalidFieldClass).join("")}if(a.indexOf(this.validFieldClass)!=-1){this.element.className=a.split(this.validFieldClass).join(" ")}},removeMessageAndFieldClass:function(){this.removeMessage();this.removeFieldClass()}};var LiveValidationForm=function(a){this.initialize(a)};LiveValidationForm.instances={};LiveValidationForm.getInstance=function(a){if(!a){throw new Error("LiveValidationForm::getInstance - No element reference or element id has been provided!")}var c=a.nodeName?a:document.getElementById(a);var b=Math.random()*Math.random();if(!c.id){c.id="formId_"+b.toString().replace(/\./,"")+new Date().valueOf()}if(!LiveValidationForm.instances[c.id]){LiveValidationForm.instances[c.id]=new LiveValidationForm(c)}return LiveValidationForm.instances[c.id]};LiveValidationForm.prototype={beforeValidation:function(){},onValid:function(){},onInvalid:function(){},afterValidation:function(){},initialize:function(b){this.name=b.id;this.element=b;this.fields=[];this.oldOnSubmit=this.element.onsubmit||function(){};var a=this;this.element.onsubmit=function(d){var c=false;a.beforeValidation(),a.valid=LiveValidation.massValidate(a.fields);a.valid?a.onValid():a.onInvalid();a.afterValidation();if(a.valid){c=a.oldOnSubmit.call(this,d||window.event)!==false}if(!c){return c}}},addField:function(a){this.fields.push(a)},removeField:function(c){var d=[];for(var b=0,a=this.fields.length;b<a;b++){if(this.fields[b]!==c){d.push(this.fields[b])}}this.fields=d},destroy:function(a){if(this.fields.length!=0&&!a){return false}this.element.onsubmit=this.oldOnSubmit;LiveValidationForm.instances[this.name]=null;return true}};var Validate={Presence:function(b,c){var c=c||{};var a=c.failureMessage||"Can't be empty!";if(b===""||b===null||b===undefined){Validate.fail(a)}return true},Numericality:function(j,e){var a=j;var j=Number(j);var e=e||{};var f=((e.minimum)||(e.minimum==0))?e.minimum:null;var c=((e.maximum)||(e.maximum==0))?e.maximum:null;var d=((e.is)||(e.is==0))?e.is:null;var g=e.notANumberMessage||"Must be a number!";var h=e.notAnIntegerMessage||"Must be an integer!";var i=e.wrongNumberMessage||"Must be "+d+"!";var b=e.tooLowMessage||"Must not be less than "+f+"!";var k=e.tooHighMessage||"Must not be more than "+c+"!";if(!isFinite(j)){Validate.fail(g)}if(e.onlyInteger&&(/\.0+$|\.$/.test(String(a))||j!=parseInt(j))){Validate.fail(h)}switch(true){case (d!==null):if(j!=Number(d)){Validate.fail(i)}break;case (f!==null&&c!==null):Validate.Numericality(j,{tooLowMessage:b,minimum:f});Validate.Numericality(j,{tooHighMessage:k,maximum:c});break;case (f!==null):if(j<Number(f)){Validate.fail(b)}break;case (c!==null):if(j>Number(c)){Validate.fail(k)}break}return true},Format:function(c,e){var c=String(c);var e=e||{};var a=e.failureMessage||"Not valid!";var b=e.pattern||/./;var d=e.negate||false;if(!d&&!b.test(c)){Validate.fail(a)}if(d&&b.test(c)){Validate.fail(a)}return true},Email:function(b,c){var c=c||{};var a=c.failureMessage||"Must be a valid email address!";Validate.Format(b,{failureMessage:a,pattern:/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i});return true},Length:function(f,g){var f=String(f);var g=g||{};var e=((g.minimum)||(g.minimum==0))?g.minimum:null;var h=((g.maximum)||(g.maximum==0))?g.maximum:null;var c=((g.is)||(g.is==0))?g.is:null;var a=g.wrongLengthMessage||"Must be "+c+" characters long!";var b=g.tooShortMessage||"Must not be less than "+e+" characters long!";var d=g.tooLongMessage||"Must not be more than "+h+" characters long!";switch(true){case (c!==null):if(f.length!=Number(c)){Validate.fail(a)}break;case (e!==null&&h!==null):Validate.Length(f,{tooShortMessage:b,minimum:e});Validate.Length(f,{tooLongMessage:d,maximum:h});break;case (e!==null):if(f.length<Number(e)){Validate.fail(b)}break;case (h!==null):if(f.length>Number(h)){Validate.fail(d)}break;default:throw new Error("Validate::Length - Length(s) to validate against must be provided!")}return true},Inclusion:function(h,f){var f=f||{};var m=f.failureMessage||"Must be included in the list!";var g=(f.caseSensitive===false)?false:true;if(f.allowNull&&h==null){return true}if(!f.allowNull&&h==null){Validate.fail(m)}var d=f.within||[];if(!g){var a=[];for(var c=0,b=d.length;c<b;++c){var k=d[c];if(typeof k=="string"){k=k.toLowerCase()}a.push(k)}d=a;if(typeof h=="string"){h=h.toLowerCase()}}var l=false;for(var e=0,b=d.length;e<b;++e){if(d[e]==h){l=true}if(f.partialMatch){if(h.indexOf(d[e])!=-1){l=true}}}if((!f.negate&&!l)||(f.negate&&l)){Validate.fail(m)}return true},Exclusion:function(a,b){var b=b||{};b.failureMessage=b.failureMessage||"Must not be included in the list!";b.negate=true;Validate.Inclusion(a,b);return true},Confirmation:function(c,d){if(!d.match){throw new Error("Validate::Confirmation - Error validating confirmation: Id of element to match must be provided!")}var d=d||{};var b=d.failureMessage||"Does not match!";var a=d.match.nodeName?d.match:document.getElementById(d.match);if(!a){throw new Error("Validate::Confirmation - There is no reference with name of, or element with id of '"+d.match+"'!")}if(c!=a.value){Validate.fail(b)}return true},Acceptance:function(b,c){var c=c||{};var a=c.failureMessage||"Must be accepted!";if(!b){Validate.fail(a)}return true},Custom:function(d,e){var e=e||{};var b=e.against||function(){return true};var a=e.args||{};var c=e.failureMessage||"Not valid!";if(b.length==3){b(d,a,function(f){if(!f){Validate.fail(c)}})}else{if(!b(d,a)){Validate.fail(c)}else{return true}}return false},now:function(a,d,c){if(!a){throw new Error("Validate::now - Validation function must be provided!")}var e=true;try{a(d,c||{})}catch(b){if(b instanceof Validate.Error){e=false}else{throw b}}finally{return e}},fail:function(a){throw new Validate.Error(a)},Error:function(a){this.message=a;this.name="ValidationError"}};