[ Index ]

PHP Cross Reference of phpwcms V1.5.0 _r431 (28.01.12)

title

Body

[close]

/template/lib/mootools/more-1.4/Forms/ -> Form.Validator.js (source)

   1  if(!window.Form){window.Form={}}var InputValidator=this.InputValidator=new Class({Implements:[Options],options:{errorMsg:"Validation failed.",test:Function.from(true)},initialize:function(className,options){this.setOptions(options);this.className=className},test:function(field,props){field=document.id(field);return(field)?this.options.test(field,props||this.getProps(field)):false},getError:function(field,props){field=document.id(field);var err=this.options.errorMsg;if(typeOf(err)=="function"){err=err(field,props||this.getProps(field))}return err},getProps:function(field){field=document.id(field);return(field)?field.get("validatorProps"):{}}});Element.Properties.validators={get:function(){return(this.get("data-validators")||this.className).clean().split(" ")}};Element.Properties.validatorProps={set:function(props){return this.eliminate("$moo:validatorProps").store("$moo:validatorProps",props)},get:function(props){if(props){this.set(props)}if(this.retrieve("$moo:validatorProps")){return this.retrieve("$moo:validatorProps")}if(this.getProperty("data-validator-properties")||this.getProperty("validatorProps")){try{this.store("$moo:validatorProps",JSON.decode(this.getProperty("validatorProps")||this.getProperty("data-validator-properties")))}catch(e){return{}}}else{var vals=this.get("validators").filter(function(cls){return cls.test(":")});if(!vals.length){this.store("$moo:validatorProps",{})}else{props={};vals.each(function(cls){var split=cls.split(":");if(split[1]){try{props[split[0]]=JSON.decode(split[1])}catch(e){}}});this.store("$moo:validatorProps",props)}}return this.retrieve("$moo:validatorProps")}};Form.Validator=new Class({Implements:[Options,Events],options:{fieldSelectors:"input, select, textarea",ignoreHidden:true,ignoreDisabled:true,useTitles:false,evaluateOnSubmit:true,evaluateFieldsOnBlur:true,evaluateFieldsOnChange:true,serial:true,stopOnFailure:true,warningPrefix:function(){return Form.Validator.getMsg("warningPrefix")||"Warning: "},errorPrefix:function(){return Form.Validator.getMsg("errorPrefix")||"Error: "}},initialize:function(form,options){this.setOptions(options);this.element=document.id(form);this.warningPrefix=Function.from(this.options.warningPrefix)();this.errorPrefix=Function.from(this.options.errorPrefix)();this._bound={onSubmit:this.onSubmit.bind(this),blurOrChange:function(event,field){this.validationMonitor(field,true)}.bind(this)};this.enable()},toElement:function(){return this.element},getFields:function(){return(this.fields=this.element.getElements(this.options.fieldSelectors))},enable:function(){this.element.store("validator",this);if(this.options.evaluateOnSubmit){this.element.addEvent("submit",this._bound.onSubmit)}if(this.options.evaluateFieldsOnBlur){this.element.addEvent("blur:relay(input,select,textarea)",this._bound.blurOrChange)}if(this.options.evaluateFieldsOnChange){this.element.addEvent("change:relay(input,select,textarea)",this._bound.blurOrChange)}},disable:function(){this.element.eliminate("validator");this.element.removeEvents({submit:this._bound.onSubmit,"blur:relay(input,select,textarea)":this._bound.blurOrChange,"change:relay(input,select,textarea)":this._bound.blurOrChange})},validationMonitor:function(){clearTimeout(this.timer);this.timer=this.validateField.delay(50,this,arguments)},onSubmit:function(event){if(this.validate(event)){this.reset()}},reset:function(){this.getFields().each(this.resetField,this);return this},validate:function(event){var result=this.getFields().map(function(field){return this.validateField(field,true)},this).every(function(v){return v});this.fireEvent("formValidate",[result,this.element,event]);if(this.options.stopOnFailure&&!result&&event){event.preventDefault()}return result},validateField:function(field,force){if(this.paused){return true}field=document.id(field);var passed=!field.hasClass("validation-failed");var failed,warned;if(this.options.serial&&!force){failed=this.element.getElement(".validation-failed");warned=this.element.getElement(".warning")}if(field&&(!failed||force||field.hasClass("validation-failed")||(failed&&!this.options.serial))){var validationTypes=field.get("validators");var validators=validationTypes.some(function(cn){return this.getValidator(cn)},this);var validatorsFailed=[];validationTypes.each(function(className){if(className&&!this.test(className,field)){validatorsFailed.include(className)}},this);passed=validatorsFailed.length===0;if(validators&&!this.hasValidator(field,"warnOnly")){if(passed){field.addClass("validation-passed").removeClass("validation-failed");this.fireEvent("elementPass",[field])}else{field.addClass("validation-failed").removeClass("validation-passed");this.fireEvent("elementFail",[field,validatorsFailed])}}if(!warned){var warnings=validationTypes.some(function(cn){if(cn.test("^warn")){return this.getValidator(cn.replace(/^warn-/,""))}else{return null}},this);field.removeClass("warning");var warnResult=validationTypes.map(function(cn){if(cn.test("^warn")){return this.test(cn.replace(/^warn-/,""),field,true)}else{return null}},this)}}return passed},test:function(className,field,warn){field=document.id(field);if((this.options.ignoreHidden&&!field.isVisible())||(this.options.ignoreDisabled&&field.get("disabled"))){return true}var validator=this.getValidator(className);if(warn!=null){warn=false}if(this.hasValidator(field,"warnOnly")){warn=true}var isValid=this.hasValidator(field,"ignoreValidation")||(validator?validator.test(field):true);if(validator&&field.isVisible()){this.fireEvent("elementValidate",[isValid,field,className,warn])}if(warn){return true}return isValid},hasValidator:function(field,value){return field.get("validators").contains(value)},resetField:function(field){field=document.id(field);if(field){field.get("validators").each(function(className){if(className.test("^warn-")){className=className.replace(/^warn-/,"")}field.removeClass("validation-failed");field.removeClass("warning");field.removeClass("validation-passed")},this)}return this},stop:function(){this.paused=true;return this},start:function(){this.paused=false;return this},ignoreField:function(field,warn){field=document.id(field);if(field){this.enforceField(field);if(warn){field.addClass("warnOnly")}else{field.addClass("ignoreValidation")}}return this},enforceField:function(field){field=document.id(field);if(field){field.removeClass("warnOnly").removeClass("ignoreValidation")}return this}});Form.Validator.getMsg=function(key){return Locale.get("FormValidator."+key)};Form.Validator.adders={validators:{},add:function(className,options){this.validators[className]=new InputValidator(className,options);if(!this.initialize){this.implement({validators:this.validators})}},addAllThese:function(validators){Array.from(validators).each(function(validator){this.add(validator[0],validator[1])},this)},getValidator:function(className){return this.validators[className.split(":")[0]]}};Object.append(Form.Validator,Form.Validator.adders);Form.Validator.implement(Form.Validator.adders);Form.Validator.add("IsEmpty",{errorMsg:false,test:function(element){if(element.type=="select-one"||element.type=="select"){return !(element.selectedIndex>=0&&element.options[element.selectedIndex].value!="")}else{return((element.get("value")==null)||(element.get("value").length==0))}}});Form.Validator.addAllThese([["required",{errorMsg:function(){return Form.Validator.getMsg("required")},test:function(element){return !Form.Validator.getValidator("IsEmpty").test(element)}}],["length",{errorMsg:function(element,props){if(typeOf(props.length)!="null"){return Form.Validator.getMsg("length").substitute({length:props.length,elLength:element.get("value").length})}else{return""}},test:function(element,props){if(typeOf(props.length)!="null"){return(element.get("value").length==props.length||element.get("value").length==0)}else{return true}}}],["minLength",{errorMsg:function(element,props){if(typeOf(props.minLength)!="null"){return Form.Validator.getMsg("minLength").substitute({minLength:props.minLength,length:element.get("value").length})}else{return""}},test:function(element,props){if(typeOf(props.minLength)!="null"){return(element.get("value").length>=(props.minLength||0))}else{return true}}}],["maxLength",{errorMsg:function(element,props){if(typeOf(props.maxLength)!="null"){return Form.Validator.getMsg("maxLength").substitute({maxLength:props.maxLength,length:element.get("value").length})}else{return""}},test:function(element,props){return element.get("value").length<=(props.maxLength||10000)}}],["validate-integer",{errorMsg:Form.Validator.getMsg.pass("integer"),test:function(element){return Form.Validator.getValidator("IsEmpty").test(element)||(/^(-?[1-9]\d*|0)$/).test(element.get("value"))}}],["validate-numeric",{errorMsg:Form.Validator.getMsg.pass("numeric"),test:function(element){return Form.Validator.getValidator("IsEmpty").test(element)||(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get("value"))}}],["validate-digits",{errorMsg:Form.Validator.getMsg.pass("digits"),test:function(element){return Form.Validator.getValidator("IsEmpty").test(element)||(/^[\d() .:\-\+#]+$/.test(element.get("value")))}}],["validate-alpha",{errorMsg:Form.Validator.getMsg.pass("alpha"),test:function(element){return Form.Validator.getValidator("IsEmpty").test(element)||(/^[a-zA-Z]+$/).test(element.get("value"))}}],["validate-alphanum",{errorMsg:Form.Validator.getMsg.pass("alphanum"),test:function(element){return Form.Validator.getValidator("IsEmpty").test(element)||!(/\W/).test(element.get("value"))}}],["validate-date",{errorMsg:function(element,props){if(Date.parse){var format=props.dateFormat||"%x";return Form.Validator.getMsg("dateSuchAs").substitute({date:new Date().format(format)})}else{return Form.Validator.getMsg("dateInFormatMDY")}},test:function(element,props){if(Form.Validator.getValidator("IsEmpty").test(element)){return true}var dateLocale=Locale.getCurrent().sets.Date,dateNouns=new RegExp([dateLocale.days,dateLocale.days_abbr,dateLocale.months,dateLocale.months_abbr,dateLocale.AM,dateLocale.PM].flatten().join("|"),"i"),value=element.get("value"),wordsInValue=value.match(/[a-z]+/gi);if(wordsInValue&&!wordsInValue.every(dateNouns.exec,dateNouns)){return false}var date=Date.parse(value),format=props.dateFormat||"%x",formatted=date.format(format);if(formatted!="invalid date"){element.set("value",formatted)}return date.isValid()}}],["validate-email",{errorMsg:Form.Validator.getMsg.pass("email"),test:function(element){return Form.Validator.getValidator("IsEmpty").test(element)||(/^(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]\.?){0,63}[a-z0-9!#$%&'*+\/=?^_`{|}~-]@(?:(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)*[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\])$/i).test(element.get("value"))}}],["validate-url",{errorMsg:Form.Validator.getMsg.pass("url"),test:function(element){return Form.Validator.getValidator("IsEmpty").test(element)||(/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(element.get("value"))}}],["validate-currency-dollar",{errorMsg:Form.Validator.getMsg.pass("currencyDollar"),test:function(element){return Form.Validator.getValidator("IsEmpty").test(element)||(/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get("value"))}}],["validate-one-required",{errorMsg:Form.Validator.getMsg.pass("oneRequired"),test:function(element,props){var p=document.id(props["validate-one-required"])||element.getParent(props["validate-one-required"]);return p.getElements("input").some(function(el){if(["checkbox","radio"].contains(el.get("type"))){return el.get("checked")}return el.get("value")})}}]]);Element.Properties.validator={set:function(options){this.get("validator").setOptions(options)},get:function(){var validator=this.retrieve("validator");if(!validator){validator=new Form.Validator(this);this.store("validator",validator)}return validator}};Element.implement({validate:function(options){if(options){this.set("validator",options)}return this.get("validator").validate()}});var FormValidator=Form.Validator;


Generated: Sun Jan 29 16:31:14 2012 Cross-referenced by PHPXref 0.7.1