/
provalidate.min.js
1 lines (1 loc) · 6.45 KB
/
provalidate.min.js
1
var ProValidate=(function(){var c=Class.create();c.Version="1.0.0";c.Debug=false;c.instances=$H();c.instance=function(f,e){var d=c.instances.get($(f).identify());if(d&&e){d.setOptions(e)}else{if(!d){d=new c(f,e);c.instances.set($(f).identify(),d)}}return d};c.lang={defaultMessages:{required:"Required",phone:"Invalid phone number",email:"Invalid email",alpha:"Letters only",alpha_numeric:"Numbers and letters only",numeric:"Invalid number",date:"Invalid date",digit:"Numbers only",price:"Invalid price",matches:"Must confirm"}};c.options={storeName:"provalidate",handler:"ProValidate.Handler"};c.prototype={initialize:function(f,d){this.options={};Object.extend(this.options,c.options);Object.extend(this.options,d||{});this.form=$(f).observe("submit",function(g){g.stop();this.handler.clearErrors();this.validate()}.bind(this));this.elements=this.form.getElements();var e=b(this.options.handler);this.handler=new e(this.form.identify(),this.options)},validate:function(f,d){var f=f||$(f),d=(d!==false);if(!f){var e=this.elements.map(function(g){return this._validateElement(g,d)}.bind(this));if(e.indexOf(false)===-1){this.form.fire("form:valid")}}else{return this._validateElement(f,d)}},_validateElement:function(i,g){var k=i.retrieve(this.options.storeName);if(!k){return true}var h=[],f=false,d;for(d in k){try{f=!c.rules[d](i,k[d].parameters||false,this.form)}catch(j){if(c.Debug){throw j}}if(f){h.push(d)}}if(h.length>0){if(g){this.handler.clearErrors(i);this.handler.onFailed(i,h)}return false}else{if(g){this.handler.onValid(i)}return true}},setOptions:function(d){Object.extend(this.options,d||{})},rules:function(d,e){var d=c.findRealElement(this.form,d);if(d.nodeName.toUpperCase()==="FORM"){this.addRules(e)}else{this.addElementRules(d,e)}return d},removeRules:function(f,g){var d,f=c.findRealElement(this.form,f);d=f.retrieve(this.options.storeName);if(!g){d={}}else{if(Object.isArray(g)){for(var e=0;e<g.length;e++){delete d[g[e]]}}else{if(Object.isString(g)){delete d[g]}}}f.store(this.options.storeName,d);return f},addRules:function(e){for(var d in e){this.addElementRules(d,e[d])}return this.form},addElementRules:function(d,f){var d=c.findRealElement(this.form,d);var e=f;if(Object.isString(e)){var f={};f[e]={}}d.mergeStore(this.options.storeName,f);return d}};c.findRealElement=function(e,d){return $(d)||$(e).select('[name^="'+d+'"]').first()};c.Handler=Class.create();c.Handler.options={defaultInvalidMessage:"Invalid",errorMessageClassName:"errorMessage",invalidElementClassName:"invalid"};c.Handler.prototype={initialize:function(e,d){this.options={};Object.extend(this.options,c.Handler.options);Object.extend(this.options,d||{});this.form=$(e)},onFailed:function(f,d){var f=$(f),h=f.retrieve(this.options.storeName),g=d[0],e=h[g].message;this.triggerError(f,e||c.lang.defaultMessages[g]||this.options.defaultInvalidMessage)},triggerError:function(f,e){var f=c.findRealElement(this.form,f),d=Element("span").addClassName(f.identify()).addClassName(this.options.errorMessageClassName).update(e);f.addClassName(this.options.invalidElementClassName).insert({after:d})},onValid:function(d){$(d).removeClassName(this.options.invalidElementClassName);$$("."+d.identify()).invoke("remove")},clearErrors:function(d){var d=$(d);if(d){d.removeClassName(this.options.invalidElementClassName);$$("span."+d.identify()).invoke("remove")}else{this.form.select("."+this.options.errorMessageClassName).invoke("remove");this.form.select("."+this.options.invalidElementClassName).invoke("removeClassName",this.options.invalidElementClassName)}}};c.rules={datePattern:"\\d{1,2}\\/\\d{1,2}\\/\\d{4}",required:function(f){var d=f.readAttribute("type"),h="_required_"+d;try{return c.rules[h](f)}catch(g){if(c.Debug){throw g}}},_required_text:function(d){return !$F(d).empty()},_required_password:function(d){return c.rules._required_text(d)},_required_checkbox:function(e,f,d){var e=$(e);return $(d).select('[name="'+e.readAttribute("name")+'"]:checked').length>0},_required_radio:function(e,f,d){var e=$(e);radios=$(d).select('[name="'+e.readAttribute("name")+'"]');return radios.find(function(g){return(g.getValue()!==null)})},length:function(h,j){var e=false,i=$F(h),g=i.length;if(i.empty()){return true}if(Object.isArray(j)&&j.length===2){var f=param[0]*1;var d=param[1]*1;if(g>=f&&g<=d){e=true}}else{e=(g===(j*1))}return e},matches:function(f,i,e){var h=$F(f),g=false,d=$(e).select('[name="'+i+'"]').first()||$(i);if(d){g=(h===$F(d))}return h.empty()?true:g},alpha:function(d){var e=$F(d);return e.empty()?true:/^[a-zA-Z]*$/.test(e)},alpha_numeric:function(d){var e=$F(d);return e.empty()?true:/^[a-zA-Z0-9]*$/.test(e)},digit:function(d){return/^\d*$/.test($F(d))},numeric:function(d,f){var e=$F(d),h=f||".",g=new RegExp("^-?[0-9]*\\"+h+"?[0-9]*$");return e.empty()?true:g.test(e)},email:function(d){var e=$F(d);return e.empty()?true:/^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/.test($F(d))},phone:function(f,h){var g=$F(f),d=g.gsub(/\D/,""),e=h||[7,10,11];return g.empty()?true:e.indexOf(d.length)!==-1},date:function(d,f){var e=$F(d),g=new RegExp(f||c.rules.datePattern);return e.empty()?true:g.test(e)},price:function(d){var e=$F(d);return e.empty()?true:/^\$?(\d{1,3}\,?\d{3}|\d{1})*(\.?\d{2})?$/.test(e)}};var a={validate:function(e){var e=$(e),d=e.up("form");c.instance(d).validate(e);return e},valid:function(e){var e=$(e),d=e.up("form");return c.instance(d).validate(e,false)},rules:function(e,f){var e=$(e),d=e.up("form");c.instance(d).rules(e,f);return e},rule:function(d,e){return $(d).rules(e)},removeRules:function(e,f){var e=$(e),d=e.up("form");c.instance(d).removeRules(e,f);return e},removeRule:function(d,e){return $(d).removeRules(e)},error:function(f,e){var f=$(f),d=f.up("form");c.instance(d).handler.triggerError(f,e);return f},clearError:function(e){var e=$(e),d=e.up("form");c.instance(d).handler.clearErrors(e);return e}};Element.addMethods("INPUT",a);Element.addMethods("SELECT",a);Element.addMethods("TEXTAREA",a);Element.addMethods("FORM",{validate:function(e,d){c.instance(e,d).validate();return e},rules:function(e,f,d){c.instance(e,d).rules(e,f);return e},errors:function(e,f){for(var d in f){c.instance(e).handler.triggerError(d,f[d])}return e},clearErrors:function(d){c.instance(d).handler.clearErrors();return d}});Element.addMethods({mergeStore:function(f,d,g){var e=f.retrieve(d);if(Object.isUndefined(e)){return f.store(d,g)}Object.extend(e,g);return f.store(d,e)}});var b=function(g){if(typeof(g)=="string"){g=g.split(".")}var f=window;for(var d=0,e;f&&(e=g[d]);d++){f=(e in f?f[e]:undefined)}return f};return c})();