vendor/assets/javascripts/webshims/shims/form-validators.js in webshims-rails-1.12.5 vs vendor/assets/javascripts/webshims/shims/form-validators.js in webshims-rails-1.12.7
- old
+ new
@@ -1,17 +1,18 @@
webshims.register('form-validators', function($, webshims, window, document, undefined, options){
"use strict";
-
+var iValClasses = '.'+ options.iVal.errorClass +', .'+options.iVal.successClass;
(function(){
if(webshims.refreshCustomValidityRules){
webshims.error("form-validators already included. please remove custom-validity.js");
}
-
+
var customValidityRules = {};
var formReady = false;
var blockCustom;
var initTest;
+ var elemSels = 'input, select, textarea, fieldset[data-dependent-validation]';
var onEventTest = function(e){
webshims.refreshCustomValidityRules(e.target);
};
var noValidate = function(){
return !noValidate.types[this.type];
@@ -23,25 +24,32 @@
reset: 1,
submit: 1
};
webshims.customErrorMessages = {};
- webshims.addCustomValidityRule = function(name, test, defaultMessage){
- customValidityRules[name] = test;
- if(!webshims.customErrorMessages[name]){
- webshims.customErrorMessages[name] = [];
- webshims.customErrorMessages[name][''] = defaultMessage || name;
- }
- if(formReady){
- $('input, select, textarea, fieldset[data-dependent-validation]')
+ webshims.addCustomValidityRule = (function(){
+ var timer;
+ var reTest = function(){
+ $(document.querySelectorAll(elemSels))
.filter(noValidate)
.each(function(){
testValidityRules(this);
})
;
- }
- };
+ };
+ return function(name, test, defaultMessage){
+ customValidityRules[name] = test;
+ if(!webshims.customErrorMessages[name]){
+ webshims.customErrorMessages[name] = [];
+ webshims.customErrorMessages[name][''] = defaultMessage || name;
+ }
+ if(formReady){
+ clearTimeout(timer);
+ timer = setTimeout(reTest);
+ }
+ };
+ })();
webshims.refreshCustomValidityRules = function(elem){
if(!initTest){return;}
var val, setMessage;
var data = $(elem).data();
var message = '';
@@ -98,11 +106,11 @@
$('body').on('click', function(e){
if(e.target.type == 'submit'){
var activeElement = document.activeElement;
if(activeElement != e.target && $.data(activeElement, 'webshimsswitchvalidityclass')){
- $(activeElement).trigger('refreshvalidityui');
+ $(activeElement).trigger('updatevalidation.webshims');
}
}
});
}
@@ -114,26 +122,25 @@
$.data(elem, 'customMismatchedRule', '');
}
return null;
}
};
-
-
+
setTimeout(function(){
webshims.addReady(function(context, selfElement){
initTest = true;
- $('input, select, textarea, fieldset[data-dependent-validation]', context).add(selfElement.filter('input, select, textarea, fieldset[data-dependent-validation]'))
+ $(context.querySelectorAll(elemSels)).add(selfElement.filter(elemSels))
.filter(noValidate)
.each(function(){
testValidityRules(this);
})
;
formReady = true;
});
$(document).on('refreshCustomValidityRules', onEventTest);
- }, 9);
+ }, 29);
});
})();
@@ -161,11 +168,11 @@
addCustomValidityRule('tooShort', function(elem, val, data){
if(!val || !data.minlength){return;}
if($.nodeName(elem, 'input')){
- webshims.warn('depreacated data-minlength usage: Use pattern=".{'+ data.minlength +'3,}" instead.');
+ webshims.warn('depreacated data-minlength usage: Use pattern=".{'+ data.minlength +',}" instead.');
}
return data.minlength > val.length;
}, 'Entered value is too short.');
addCustomValidityRule('grouprequired', function(elem, val, data){
@@ -236,11 +243,11 @@
if(data.toggle){
val = !val;
}
$.prop( elem, data.prop, val);
if(e){
- $(elem).getShadowElement().filter('.user-error, .user-success').trigger('refreshvalidityui');
+ $(elem).getShadowElement().filter(iValClasses).trigger('updatevalidation.webshims');
}
};
if(!data._init || !data.masterElement){
@@ -277,12 +284,12 @@
} else {
$(data.masterElement).on('change', function(){
webshims.refreshCustomValidityRules(elem);
$(elem)
.getShadowElement()
- .filter('.user-error, .user-success')
- .trigger('refreshvalidityui')
+ .filter(iValClasses)
+ .trigger('updatevalidation.webshims')
;
});
}
}
@@ -305,10 +312,11 @@
if(window.JSON){
addCustomValidityRule('ajaxvalidate', function(elem, val, data){
if(!val || !data.ajaxvalidate){return;}
var opts;
if(!data.remoteValidate){
+ webshims.loader.loadList(['jajax']);
if(typeof data.ajaxvalidate == 'string'){
data.ajaxvalidate = {url: data.ajaxvalidate, depends: $([])};
} else {
data.ajaxvalidate.depends = data.ajaxvalidate.depends ?
$(typeof data.ajaxvalidate.depends == 'string' && data.ajaxvalidate.depends.split(' ') || data.ajaxvalidate.depends).map(getId) :
@@ -332,19 +340,19 @@
this.restartAjax = remoteData;
} else {
this.restartAjax = false;
this.ajaxLoading = true;
$.ajax(
- $.extend({}, opts, {
+ $.extend({dataType: 'json'}, opts, {
url: opts.url,
- dataType: 'json',
depData: remoteData,
data: formCFG.fullRemoteForm || opts.fullForm ?
$(elem).jProp('form').serializeArray() :
remoteData,
success: this.getResponse,
- complete: this._complete
+ complete: this._complete,
+ timeout: 3000
})
);
}
},
_complete: function(){
@@ -353,19 +361,24 @@
this.update(remoteValidate.restartAjax);
}
remoteValidate.restartAjax = false;
},
getResponse: function(data){
+ if(options.transformAjaxValidate){
+ data = options.transformAjaxValidate(data);
+ }
if(!data){
data = {message: '', valid: true};
} else if(typeof data == 'string'){
- data = JSON.parse(data);
+ try {
+ data = JSON.parse(data);
+ } catch (er){}
}
remoteValidate.message = ('message' in data) ? data.message : !data.valid;
remoteValidate.lastMessage = remoteValidate.message;
remoteValidate.blockUpdate = true;
- $(elem).triggerHandler('refreshvalidityui');
+ $(elem).triggerHandler('updatevalidation.webshims');
remoteValidate.message = 'async';
remoteValidate.blockUpdate = false;
},
getData: function(){
var data;