vendor: 34,043 bytes, lines 1-431
1/*! 2 * jQuery Validation Plugin v1.15.0 3 * 4 * http://jqueryvalidation.org/ 5 * 6 * Copyright (c) 2016 Jörn Zaefferer 7 * Released under the MIT license 8 */ 9(function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory);}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"));}else{factory(jQuery);}}(function($){$.extend($.fn,{validate:function(options){if(!this.length){if(options&&options.debug&&window.console){console.warn("Nothing selected, can't validate, returning nothing.");} 10return;} 11var validator=$.data(this[0],"validator");if(validator){return validator;} 12this.attr("novalidate","novalidate");validator=new $.validator(options,this[0]);$.data(this[0],"validator",validator);if(validator.settings.onsubmit){this.on("click.validate",":submit",function(event){if(validator.settings.submitHandler){validator.submitButton=event.target;} 13if($(this).hasClass("cancel")){validator.cancelSubmit=true;} 14if($(this).attr("formnovalidate")!==undefined){validator.cancelSubmit=true;}});this.on("submit.validate",function(event){if(validator.settings.debug){event.preventDefault();} 15function handle(){var hidden,result;if(validator.settings.submitHandler){if(validator.submitButton){hidden=$("<input type='hidden'/>").attr("name",validator.submitButton.name).val($(validator.submitButton).val()).appendTo(validator.currentForm);} 16result=validator.settings.submitHandler.call(validator,validator.currentForm,event);if(validator.submitButton){hidden.remove();} 17if(result!==undefined){return result;} 18return false;} 19return true;} 20if(validator.cancelSubmit){validator.cancelSubmit=false;return handle();} 21if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;return false;} 22return handle();}else{validator.focusInvalid();return false;}});} 23return validator;},valid:function(){var valid,validator,errorList;if($(this[0]).is("form")){valid=this.validate().form();}else{errorList=[];valid=true;validator=$(this[0].form).validate();this.each(function(){valid=validator.element(this)&&valid;if(!valid){errorList=errorList.concat(validator.errorList);}});validator.errorList=errorList;} 24return valid;},rules:function(command,argument){if(!this.length){return;} 25var element=this[0],settings,staticRules,existingRules,data,param,filtered;if(command){settings=$.data(element.form,"validator").settings;staticRules=settings.rules;existingRules=$.validator.staticRules(element);switch(command){case"add":$.extend(existingRules,$.validator.normalizeRule(argument));delete existingRules.messages;staticRules[element.name]=existingRules;if(argument.messages){settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);} 26break;case"remove":if(!argument){delete staticRules[element.name];return existingRules;} 27filtered={};$.each(argument.split(/\s/),function(index,method){filtered[method]=existingRules[method];delete existingRules[method];if(method==="required"){$(element).removeAttr("aria-required");}});return filtered;}} 28data=$.validator.normalizeRules($.extend({},$.validator.classRules(element),$.validator.attributeRules(element),$.validator.dataRules(element),$.validator.staticRules(element)),element);if(data.required){param=data.required;delete data.required;data=$.extend({required:param},data);$(element).attr("aria-required","true");} 29if(data.remote){param=data.remote;delete data.remote;data=$.extend(data,{remote:param});} 30return data;}});$.extend($.expr[":"],{blank:function(a){return!$.trim(""+$(a).val());},filled:function(a){var val=$(a).val();return val!==null&&!!$.trim(""+val);},unchecked:function(a){return!$(a).prop("checked");}});$.validator=function(options,form){this.settings=$.extend(true,{},$.validator.defaults,options);this.currentForm=form;this.init();};$.validator.format=function(source,params){if(arguments.length===1){return function(){var args=$.makeArray(arguments);args.unshift(source);return $.validator.format.apply(this,args);};} 31if(params===undefined){return source;} 32if(arguments.length>2&¶ms.constructor!==Array){params=$.makeArray(arguments).slice(1);} 33if(params.constructor!==Array){params=[params];} 34$.each(params,function(i,n){source=source.replace(new RegExp("\\{"+i+"\\}","g"),function(){return n;});});return source;};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:false,focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:":hidden",ignoreTitle:false,onfocusin:function(element){this.lastActive=element;if(this.settings.focusCleanup){if(this.settings.unhighlight){this.settings.unhighlight.call(this,element,this.settings.errorClass,this.settings.validClass);} 35this.hideThese(this.errorsFor(element));}},onfocusout:function(element){if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element))){this.element(element);}},onkeyup:function(element,event){var excludedKeys=[16,17,18,20,35,36,37,38,39,40,45,144,225];if(event.which===9&&this.elementValue(element)===""||$.inArray(event.keyCode,excludedKeys)!==-1){return;}else if(element.name in this.submitted||element.name in this.invalid){this.element(element);}},onclick:function(element){if(element.name in this.submitted){this.element(element);}else if(element.parentNode.name in this.submitted){this.element(element.parentNode);}},highlight:function(element,errorClass,validClass){if(element.type==="radio"){this.findByName(element.name).addClass(errorClass).removeClass(validClass);}else{$(element).addClass(errorClass).removeClass(validClass);}},unhighlight:function(element,errorClass,validClass){if(element.type==="radio"){this.findByName(element.name).removeClass(errorClass).addClass(validClass);}else{$(element).removeClass(errorClass).addClass(validClass);}}},setDefaults:function(settings){$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:$.validator.format("Please enter no more than {0} characters."),minlength:$.validator.format("Please enter at least {0} characters."),rangelength:$.validator.format("Please enter a value between {0} and {1} characters long."),range:$.validator.format("Please enter a value between {0} and {1}."),max:$.validator.format("Please enter a value less than or equal to {0}."),min:$.validator.format("Please enter a value greater than or equal to {0}."),step:$.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:false,prototype:{init:function(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={}),rules;$.each(this.settings.groups,function(key,value){if(typeof value==="string"){value=value.split(/\s/);} 36$.each(value,function(index,name){groups[name]=key;});});rules=this.settings.rules;$.each(rules,function(key,value){rules[key]=$.validator.normalizeRule(value);});function delegate(event){var validator=$.data(this.form,"validator"),eventType="on"+event.type.replace(/^validate/,""),settings=validator.settings;if(settings[eventType]&&!$(this).is(settings.ignore)){settings[eventType].call(validator,this,event);}} 37$(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], "+"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], "+"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], "+"[type='radio'], [type='checkbox'], [contenteditable]",delegate).on("click.validate","select, option, [type='radio'], [type='checkbox']",delegate);if(this.settings.invalidHandler){$(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler);} 38$(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true");},form:function(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid()){$(this.currentForm).triggerHandler("invalid-form",[this]);} 39this.showErrors();return this.valid();},checkForm:function(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++){this.check(elements[i]);} 40return this.valid();},element:function(element){var cleanElement=this.clean(element),checkElement=this.validationTargetFor(cleanElement),v=this,result=true,rs,group;if(checkElement===undefined){delete this.invalid[cleanElement.name];}else{this.prepareElement(checkElement);this.currentElements=$(checkElement);group=this.groups[checkElement.name];if(group){$.each(this.groups,function(name,testgroup){if(testgroup===group&&name!==checkElement.name){cleanElement=v.validationTargetFor(v.clean(v.findByName(name)));if(cleanElement&&cleanElement.name in v.invalid){v.currentElements.push(cleanElement);result=result&&v.check(cleanElement);}}});} 41rs=this.check(checkElement)!==false;result=result&&rs;if(rs){this.invalid[checkElement.name]=false;}else{this.invalid[checkElement.name]=true;} 42if(!this.numberOfInvalids()){this.toHide=this.toHide.add(this.containers);} 43this.showErrors();$(element).attr("aria-invalid",!rs);} 44return result;},showErrors:function(errors){if(errors){var validator=this;$.extend(this.errorMap,errors);this.errorList=$.map(this.errorMap,function(message,name){return{message:message,element:validator.findByName(name)[0]};});this.successList=$.grep(this.successList,function(element){return!(element.name in errors);});} 45if(this.settings.showErrors){this.settings.showErrors.call(this,this.errorMap,this.errorList);}else{this.defaultShowErrors();}},resetForm:function(){if($.fn.resetForm){$(this.currentForm).resetForm();} 46this.invalid={};this.submitted={};this.prepareForm();this.hideErrors();var elements=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(elements);},resetElements:function(elements){var i;if(this.settings.unhighlight){for(i=0;elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,"");this.findByName(elements[i].name).removeClass(this.settings.validClass);}}else{elements.removeClass(this.settings.errorClass).removeClass(this.settings.validClass);}},numberOfInvalids:function(){return this.objectLength(this.invalid);},objectLength:function(obj){var count=0,i;for(i in obj){if(obj[i]){count++;}} 47return count;},hideErrors:function(){this.hideThese(this.toHide);},hideThese:function(errors){errors.not(this.containers).text("");this.addWrapper(errors).hide();},valid:function(){return this.size()===0;},size:function(){return this.errorList.length;},focusInvalid:function(){if(this.settings.focusInvalid){try{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin");}catch(e){}}},findLastActive:function(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n){return n.element.name===lastActive.name;}).length===1&&lastActive;},elements:function(){var validator=this,rulesCache={};return $(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var name=this.name||$(this).attr("name");if(!name&&validator.settings.debug&&window.console){console.error("%o has no name assigned",this);} 48if(this.hasAttribute("contenteditable")){this.form=$(this).closest("form")[0];} 49if(name in rulesCache||!validator.objectLength($(this).rules())){return false;} 50rulesCache[name]=true;return true;});},clean:function(selector){return $(selector)[0];},errors:function(){var errorClass=this.settings.errorClass.split(" ").join(".");return $(this.settings.errorElement+"."+errorClass,this.errorContext);},resetInternals:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);},reset:function(){this.resetInternals();this.currentElements=$([]);},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element){this.reset();this.toHide=this.errorsFor(element);},elementValue:function(element){var $element=$(element),type=element.type,val,idx;if(type==="radio"||type==="checkbox"){return this.findByName(element.name).filter(":checked").val();}else if(type==="number"&&typeof element.validity!=="undefined"){return element.validity.badInput?"NaN":$element.val();} 51if(element.hasAttribute("contenteditable")){val=$element.text();}else{val=$element.val();} 52if(type==="file"){if(val.substr(0,12)==="C:\\fakepath\\"){return val.substr(12);} 53idx=val.lastIndexOf("/");if(idx>=0){return val.substr(idx+1);} 54idx=val.lastIndexOf("\\");if(idx>=0){return val.substr(idx+1);} 55return val;} 56if(typeof val==="string"){return val.replace(/\r/g,"");} 57return val;},check:function(element){element=this.validationTargetFor(this.clean(element));var rules=$(element).rules(),rulesCount=$.map(rules,function(n,i){return i;}).length,dependencyMismatch=false,val=this.elementValue(element),result,method,rule;if(typeof rules.normalizer==="function"){val=rules.normalizer.call(element,val);if(typeof val!=="string"){throw new TypeError("The normalizer should return a string value.");} 58delete rules.normalizer;} 59for(method in rules){rule={method:method,parameters:rules[method]};try{result=$.validator.methods[method].call(this,val,element,rule.parameters);if(result==="dependency-mismatch"&&rulesCount===1){dependencyMismatch=true;continue;} 60dependencyMismatch=false;if(result==="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;} 61if(!result){this.formatAndAdd(element,rule);return false;}}catch(e){if(this.settings.debug&&window.console){console.log("Exception occurred when checking element "+element.id+", check the '"+rule.method+"' method.",e);} 62if(e instanceof TypeError){e.message+=". Exception occurred when checking element "+element.id+", check the '"+rule.method+"' method.";} 63throw e;}} 64if(dependencyMismatch){return;} 65if(this.objectLength(rules)){this.successList.push(element);} 66return true;},customDataMessage:function(element,method){return $(element).data("msg"+method.charAt(0).toUpperCase()+ 67method.substring(1).toLowerCase())||$(element).data("msg");},customMessage:function(name,method){var m=this.settings.messages[name];return m&&(m.constructor===String?m:m[method]);},findDefined:function(){for(var i=0;i<arguments.length;i++){if(arguments[i]!==undefined){return arguments[i];}} 68return undefined;},defaultMessage:function(element,rule){var message=this.findDefined(this.customMessage(element.name,rule.method),this.customDataMessage(element,rule.method),!this.settings.ignoreTitle&&element.title||undefined,$.validator.messages[rule.method],"<strong>Warning: No message defined for "+element.name+"</strong>"),theregex=/\$?\{(\d+)\}/g;if(typeof message==="function"){message=message.call(this,rule.parameters,element);}else if(theregex.test(message)){message=$.validator.format(message.replace(theregex,"{$1}"),rule.parameters);} 69return message;},formatAndAdd:function(element,rule){var message=this.defaultMessage(element,rule);this.errorList.push({message:message,element:element,method:rule.method});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle){if(this.settings.wrapper){toToggle=toToggle.add(toToggle.parent(this.settings.wrapper));} 70return toToggle;},defaultShowErrors:function(){var i,elements,error;for(i=0;this.errorList[i];i++){error=this.errorList[i];if(this.settings.highlight){this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);} 71this.showLabel(error.element,error.message);} 72if(this.errorList.length){this.toShow=this.toShow.add(this.containers);} 73if(this.settings.success){for(i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}} 74if(this.settings.unhighlight){for(i=0,elements=this.validElements();elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}} 75this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return $(this.errorList).map(function(){return this.element;});},showLabel:function(element,message){var place,group,errorID,v,error=this.errorsFor(element),elementID=this.idOrName(element),describedBy=$(element).attr("aria-describedby");if(error.length){error.removeClass(this.settings.validClass).addClass(this.settings.errorClass);error.html(message);}else{error=$("<"+this.settings.errorElement+">").attr("id",elementID+"-error").addClass(this.settings.errorClass).html(message||"");place=error;if(this.settings.wrapper){place=error.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();} 76if(this.labelContainer.length){this.labelContainer.append(place);}else if(this.settings.errorPlacement){this.settings.errorPlacement(place,$(element));}else{place.insertAfter(element);} 77if(error.is("label")){error.attr("for",elementID);}else if(error.parents("label[for='"+this.escapeCssMeta(elementID)+"']").length===0){errorID=error.attr("id");if(!describedBy){describedBy=errorID;}else if(!describedBy.match(new RegExp("\\b"+this.escapeCssMeta(errorID)+"\\b"))){describedBy+=" "+errorID;} 78$(element).attr("aria-describedby",describedBy);group=this.groups[element.name];if(group){v=this;$.each(v.groups,function(name,testgroup){if(testgroup===group){$("[name='"+v.escapeCssMeta(name)+"']",v.currentForm).attr("aria-describedby",error.attr("id"));}});}}} 79if(!message&&this.settings.success){error.text("");if(typeof this.settings.success==="string"){error.addClass(this.settings.success);}else{this.settings.success(error,element);}} 80this.toShow=this.toShow.add(error);},errorsFor:function(element){var name=this.escapeCssMeta(this.idOrName(element)),describer=$(element).attr("aria-describedby"),selector="label[for='"+name+"'], label[for='"+name+"'] *";if(describer){selector=selector+", #"+this.escapeCssMeta(describer).replace(/\s+/g,", #");} 81return this.errors().filter(selector);},escapeCssMeta:function(string){return string.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g, "\\$1" ); 82 }, 83 84 idOrName: function( element ) { 85 return this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name ); 86 }, 87 88 validationTargetFor: function( element ) { 89 90 // If radio/checkbox, validate first element in group instead 91 if ( this.checkable( element ) ) { 92 element = this.findByName( element.name ); 93 } 94 95 // Always apply ignore filter 96 return $( element ).not( this.settings.ignore )[ 0 ]; 97 }, 98 99 checkable: function( element ) { 100 return ( /radio|checkbox/i ).test( element.type ); 101 }, 102 103 findByName: function( name ) { 104 return $( this.currentForm ).find( "[name='" + this.escapeCssMeta( name ) + "']" ); 105 }, 106 107 getLength: function( value, element ) { 108 switch ( element.nodeName.toLowerCase() ) { 109 case "select": 110 return $( "option:selected", element ).length; 111 case "input": 112 if ( this.checkable( element ) ) { 113 return this.findByName( element.name ).filter( ":checked" ).length; 114 } 115 } 116 return value.length; 117 }, 118 119 depend: function( param, element ) { 120 return this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true; 121 }, 122 123 dependTypes: { 124 "boolean": function( param ) { 125 return param; 126 }, 127 "string": function( param, element ) { 128 return !!$( param, element.form ).length; 129 }, 130 "function": function( param, element ) { 131 return param( element ); 132 } 133 }, 134 135 optional: function( element ) { 136 var val = this.elementValue( element ); 137 return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch"; 138 }, 139 140 startRequest: function( element ) { 141 if ( !this.pending[ element.name ] ) { 142 this.pendingRequest++; 143 $( element ).addClass( this.settings.pendingClass ); 144 this.pending[ element.name ] = true; 145 } 146 }, 147 148 stopRequest: function( element, valid ) { 149 this.pendingRequest--; 150 151 // Sometimes synchronization fails, make sure pendingRequest is never < 0 152 if ( this.pendingRequest < 0 ) { 153 this.pendingRequest = 0; 154 } 155 delete this.pending[ element.name ]; 156 $( element ).removeClass( this.settings.pendingClass ); 157 if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) { 158 $( this.currentForm ).submit(); 159 this.formSubmitted = false; 160 } else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) { 161 $( this.currentForm ).triggerHandler( "invalid-form", [ this ] ); 162 this.formSubmitted = false; 163 } 164 }, 165 166 previousValue: function( element, method ) { 167 return $.data( element, "previousValue" ) || $.data( element, "previousValue", { 168 old: null, 169 valid: true, 170 message: this.defaultMessage( element, { method: method } ) 171 } ); 172 }, 173 174 // Cleans up all forms and elements, removes validator-specific events 175 destroy: function() { 176 this.resetForm(); 177 178 $( this.currentForm ) 179 .off( ".validate" ) 180 .removeData( "validator" ) 181 .find( ".validate-equalTo-blur" ) 182 .off( ".validate-equalTo" ) 183 .removeClass( "validate-equalTo-blur" ); 184 } 185 186 }, 187 188 classRuleSettings: { 189 required: { required: true }, 190 email: { email: true }, 191 url: { url: true }, 192 date: { date: true }, 193 dateISO: { dateISO: true }, 194 number: { number: true }, 195 digits: { digits: true }, 196 creditcard: { creditcard: true } 197 }, 198 199 addClassRules: function( className, rules ) { 200 if ( className.constructor === String ) { 201 this.classRuleSettings[ className ] = rules; 202 } else { 203 $.extend( this.classRuleSettings, className ); 204 } 205 }, 206 207 classRules: function( element ) { 208 var rules = {}, 209 classes = $( element ).attr( "class" ); 210 211 if ( classes ) { 212 $.each( classes.split( " " ), function() { 213 if ( this in $.validator.classRuleSettings ) { 214 $.extend( rules, $.validator.classRuleSettings[ this ] ); 215 } 216 } ); 217 } 218 return rules; 219 }, 220 221 normalizeAttributeRule: function( rules, type, method, value ) { 222 223 // Convert the value to a number for number inputs, and for text for backwards compability 224 // allows type="date" and others to be compared as strings 225 if ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) { 226 value = Number( value ); 227 228 // Support Opera Mini, which returns NaN for undefined minlength 229 if ( isNaN( value ) ) { 230 value = undefined; 231 } 232 } 233 234 if ( value || value === 0 ) { 235 rules[ method ] = value; 236 } else if ( type === method && type !== "range" ) { 237 238 // Exception: the jquery validate 'range' method 239 // does not test for the html5 'range' type 240 rules[ method ] = true; 241 } 242 }, 243 244 attributeRules: function( element ) { 245 var rules = {}, 246 $element = $( element ), 247 type = element.getAttribute( "type" ), 248 method, value; 249 250 for ( method in $.validator.methods ) { 251 252 // Support for <input required> in both html5 and older browsers 253 if ( method === "required" ) { 254 value = element.getAttribute( method ); 255 256 // Some browsers return an empty string for the required attribute 257 // and non-HTML5 browsers might have required="" markup 258 if ( value === "" ) { 259 value = true; 260 } 261 262 // Force non-HTML5 browsers to return bool 263 value = !!value; 264 } else { 265 value = $element.attr( method ); 266 } 267 268 this.normalizeAttributeRule( rules, type, method, value ); 269 } 270 271 // 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs 272 if ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) { 273 delete rules.maxlength; 274 } 275 276 return rules; 277 }, 278 279 dataRules: function( element ) { 280 var rules = {}, 281 $element = $( element ), 282 type = element.getAttribute( "type" ), 283 method, value; 284 285 for ( method in $.validator.methods ) { 286 value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() ); 287 this.normalizeAttributeRule( rules, type, method, value ); 288 } 289 return rules; 290 }, 291 292 staticRules: function( element ) { 293 var rules = {}, 294 validator = $.data( element.form, "validator" ); 295 296 if ( validator.settings.rules ) { 297 rules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {}; 298 } 299 return rules; 300 }, 301 302 normalizeRules: function( rules, element ) { 303 304 // Handle dependency check 305 $.each( rules, function( prop, val ) { 306 307 // Ignore rule when param is explicitly false, eg. required:false 308 if ( val === false ) { 309 delete rules[ prop ]; 310 return; 311 } 312 if ( val.param || val.depends ) { 313 var keepRule = true; 314 switch ( typeof val.depends ) { 315 case "string": 316 keepRule = !!$( val.depends, element.form ).length; 317 break; 318 case "function": 319 keepRule = val.depends.call( element, element ); 320 break; 321 } 322 if ( keepRule ) { 323 rules[ prop ] = val.param !== undefined ? val.param : true; 324 } else { 325 $.data( element.form, "validator" ).resetElements( $( element ) ); 326 delete rules[ prop ]; 327 } 328 } 329 } ); 330 331 // Evaluate parameters 332 $.each( rules, function( rule, parameter ) { 333 rules[ rule ] = $.isFunction( parameter ) && rule !== "normalizer" ? parameter( element ) : parameter; 334 } ); 335 336 // Clean number parameters 337 $.each( [ "minlength", "maxlength" ], function() { 338 if ( rules[ this ] ) { 339 rules[ this ] = Number( rules[ this ] ); 340 } 341 } ); 342 $.each( [ "rangelength", "range" ], function() { 343 var parts; 344 if ( rules[ this ] ) { 345 if ( $.isArray( rules[ this ] ) ) { 346 rules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ]; 347 } else if ( typeof rules[ this ] === "string" ) { 348 parts = rules[ this ].replace( /[\[\]]/g, "" ).split( /[\s,]+/ ); 349 rules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ]; 350 } 351 } 352 } ); 353 354 if ( $.validator.autoCreateRanges ) { 355 356 // Auto-create ranges 357 if ( rules.min != null && rules.max != null ) { 358 rules.range = [ rules.min, rules.max ]; 359 delete rules.min; 360 delete rules.max; 361 } 362 if ( rules.minlength != null && rules.maxlength != null ) { 363 rules.rangelength = [ rules.minlength, rules.maxlength ]; 364 delete rules.minlength; 365 delete rules.maxlength; 366 } 367 } 368 369 return rules; 370 }, 371 372 // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} 373 normalizeRule: function( data ) { 374 if ( typeof data === "string" ) { 375 var transformed = {}; 376 $.each( data.split( /\s/ ), function() { 377 transformed[ this ] = true; 378 } ); 379 data = transformed; 380 } 381 return data; 382 }, 383 384 // http://jqueryvalidation.org/jQuery.validator.addMethod/ 385 addMethod: function( name, method, message ) { 386 $.validator.methods[ name ] = method; 387 $.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ]; 388 if ( method.length < 3 ) { 389 $.validator.addClassRules( name, $.validator.normalizeRule( name ) ); 390 } 391 }, 392 393 // http://jqueryvalidation.org/jQuery.validator.methods/ 394 methods: { 395 396 // http://jqueryvalidation.org/required-method/ 397 required: function( value, element, param ) { 398 399 // Check if dependency is met 400 if ( !this.depend( param, element ) ) { 401 return "dependency-mismatch"; 402 } 403 if ( element.nodeName.toLowerCase() === "select" ) { 404 405 // Could be an array for select-multiple or a string, both are fine this way 406 var val = $( element ).val(); 407 return val && val.length > 0; 408 } 409 if ( this.checkable( element ) ) { 410 return this.getLength( value, element ) > 0; 411 } 412 return value.length > 0; 413 }, 414 415 // http://jqueryvalidation.org/email-method/ 416 email: function( value, element ) { 417 418 // From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address 419 // Retrieved 2014-01-14 420 // If you have a problem with this implementation, report a bug against the above spec 421 // Or use custom methods to implement your own email validation 422 return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(value);},url:function(value,element){return this.optional(element)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(value);},date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value).toString());},dateISO:function(value,element){return this.optional(element)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value);},number:function(value,element){return this.optional(element)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);},digits:function(value,element){return this.optional(element)||/^\d+$/.test(value);},minlength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||length>=param;},maxlength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||length<=param;},rangelength:function(value,element,param){var length=$.isArray(value)?value.length:this.getLength(value,element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param){return this.optional(element)||value>=param;},max:function(value,element,param){return this.optional(element)||value<=param;},range:function(value,element,param){return this.optional(element)||(value>=param[0]&&value<=param[1]);},step:function(value,element,param){var type=$(element).attr("type"),errorMessage="Step attribute on input type "+type+" is not supported.",supportedTypes=["text","number","range"],re=new RegExp("\\b"+type+"\\b"),notSupported=type&&!re.test(supportedTypes.join());if(notSupported){throw new Error(errorMessage);} 423return this.optional(element)||(value%param===0);},equalTo:function(value,element,param){var target=$(param);if(this.settings.onfocusout&&target.not(".validate-equalTo-blur").length){target.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){$(element).valid();});} 424return value===target.val();},remote:function(value,element,param,method){if(this.optional(element)){return"dependency-mismatch";} 425method=typeof method==="string"&&method||"remote";var previous=this.previousValue(element,method),validator,data,optionDataString;if(!this.settings.messages[element.name]){this.settings.messages[element.name]={};} 426previous.originalMessage=previous.originalMessage||this.settings.messages[element.name][method];this.settings.messages[element.name][method]=previous.message;param=typeof param==="string"&&{url:param}||param;optionDataString=$.param($.extend({data:value},param.data));if(previous.old===optionDataString){return previous.valid;} 427previous.old=optionDataString;validator=this;this.startRequest(element);data={};data[element.name]=value;$.ajax($.extend(true,{mode:"abort",port:"validate"+element.name,dataType:"json",data:data,context:validator.currentForm,success:function(response){var valid=response===true||response==="true",errors,message,submitted;validator.settings.messages[element.name][method]=previous.originalMessage;if(valid){submitted=validator.formSubmitted;validator.resetInternals();validator.toHide=validator.errorsFor(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.invalid[element.name]=false;validator.showErrors();}else{errors={};message=response||validator.defaultMessage(element,{method:method,parameters:value});errors[element.name]=previous.message=message;validator.invalid[element.name]=true;validator.showErrors(errors);} 428previous.valid=valid;validator.stopRequest(element,valid);}},param));return"pending";}}});var pendingRequests={},ajax;if($.ajaxPrefilter){$.ajaxPrefilter(function(settings,_,xhr){var port=settings.port;if(settings.mode==="abort"){if(pendingRequests[port]){pendingRequests[port].abort();} 429pendingRequests[port]=xhr;}});}else{ajax=$.ajax;$.ajax=function(settings){var mode=("mode"in settings?settings:$.ajaxSettings).mode,port=("port"in settings?settings:$.ajaxSettings).port;if(mode==="abort"){if(pendingRequests[port]){pendingRequests[port].abort();} 430pendingRequests[port]=ajax.apply(this,arguments);return pendingRequests[port];} 431return ajax.apply(this,arguments);};}}));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.