webshims-rails 1.11.3.1 → 1.11.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/webshims-rails/version.rb +2 -2
- data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +114 -104
- data/vendor/assets/javascripts/webshims/extras/mousepress.js +5 -5
- data/vendor/assets/javascripts/webshims/polyfiller.js +156 -207
- data/vendor/assets/javascripts/webshims/shims/$ajax.js +862 -0
- data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js +20 -0
- data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flashcanvas.js +20 -0
- data/vendor/assets/javascripts/webshims/shims/color-picker.js +12 -12
- data/vendor/assets/javascripts/webshims/shims/combos/1.js +62 -32
- data/vendor/assets/javascripts/webshims/shims/combos/10.js +192 -509
- data/vendor/assets/javascripts/webshims/shims/combos/11.js +96 -415
- data/vendor/assets/javascripts/webshims/shims/combos/12.js +36 -26
- data/vendor/assets/javascripts/webshims/shims/combos/13.js +36 -26
- data/vendor/assets/javascripts/webshims/shims/combos/14.js +1007 -359
- data/vendor/assets/javascripts/webshims/shims/combos/15.js +310 -235
- data/vendor/assets/javascripts/webshims/shims/combos/16.js +313 -237
- data/vendor/assets/javascripts/webshims/shims/combos/17.js +96 -415
- data/vendor/assets/javascripts/webshims/shims/combos/18.js +1003 -678
- data/vendor/assets/javascripts/webshims/shims/combos/19.js +1085 -387
- data/vendor/assets/javascripts/webshims/shims/combos/2.js +161 -127
- data/vendor/assets/javascripts/webshims/shims/combos/20.js +1086 -388
- data/vendor/assets/javascripts/webshims/shims/combos/21.js +168 -96
- data/vendor/assets/javascripts/webshims/shims/combos/22.js +36 -27
- data/vendor/assets/javascripts/webshims/shims/combos/23.js +2 -1
- data/vendor/assets/javascripts/webshims/shims/combos/24.js +411 -172
- data/vendor/assets/javascripts/webshims/shims/combos/25.js +1085 -387
- data/vendor/assets/javascripts/webshims/shims/combos/26.js +96 -94
- data/vendor/assets/javascripts/webshims/shims/combos/3.js +163 -140
- data/vendor/assets/javascripts/webshims/shims/combos/30.js +166 -141
- data/vendor/assets/javascripts/webshims/shims/combos/31.js +159 -126
- data/vendor/assets/javascripts/webshims/shims/combos/4.js +103 -109
- data/vendor/assets/javascripts/webshims/shims/combos/5.js +98 -417
- data/vendor/assets/javascripts/webshims/shims/combos/6.js +101 -418
- data/vendor/assets/javascripts/webshims/shims/combos/7.js +168 -142
- data/vendor/assets/javascripts/webshims/shims/combos/8.js +165 -141
- data/vendor/assets/javascripts/webshims/shims/combos/9.js +195 -510
- data/vendor/assets/javascripts/webshims/shims/details.js +2 -2
- data/vendor/assets/javascripts/webshims/shims/dom-extend.js +96 -94
- data/vendor/assets/javascripts/webshims/shims/es5.js +908 -264
- data/vendor/assets/javascripts/webshims/shims/excanvas.js +16 -1
- data/vendor/assets/javascripts/webshims/shims/form-combat.js +147 -0
- data/vendor/assets/javascripts/webshims/shims/form-core.js +60 -31
- data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +114 -33
- data/vendor/assets/javascripts/webshims/shims/form-datalist.js +3 -1
- data/vendor/assets/javascripts/webshims/shims/form-message.js +7 -15
- data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +2 -2
- data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +88 -410
- data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +143 -93
- data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +268 -79
- data/vendor/assets/javascripts/webshims/shims/form-validation.js +116 -81
- data/vendor/assets/javascripts/webshims/shims/form-validators.js +23 -10
- data/vendor/assets/javascripts/webshims/shims/forms-picker.js +605 -9
- data/vendor/assets/javascripts/webshims/shims/geolocation.js +51 -39
- data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.js +78 -33
- data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.js +24 -6
- data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +110 -49
- data/vendor/assets/javascripts/webshims/shims/json-storage.js +3 -1
- data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +2 -1
- data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +81 -30
- data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +131 -54
- data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +497 -0
- data/vendor/assets/javascripts/webshims/shims/range-ui.js +8 -5
- data/vendor/assets/javascripts/webshims/shims/sizzle.js +2026 -0
- data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +401 -521
- data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +1 -1
- data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +94 -82
- data/vendor/assets/javascripts/webshims/shims/styles/shim.css +250 -321
- data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
- data/vendor/assets/javascripts/webshims/shims/track-ui.js +1 -1
- data/vendor/assets/javascripts/webshims/shims/track.js +34 -25
- metadata +7 -3
@@ -4,7 +4,6 @@ webshims.inputTypes = webshims.inputTypes || {};
|
|
4
4
|
//some helper-functions
|
5
5
|
var cfg = webshims.cfg.forms;
|
6
6
|
var bugs = webshims.bugs;
|
7
|
-
var isSubmit;
|
8
7
|
|
9
8
|
var isNumber = function(string){
|
10
9
|
return (typeof string == 'number' || (string && string == string * 1));
|
@@ -79,6 +78,7 @@ var validityPrototype = {
|
|
79
78
|
rangeOverflow: false,
|
80
79
|
stepMismatch: false,
|
81
80
|
tooLong: false,
|
81
|
+
tooShort: false,
|
82
82
|
patternMismatch: false,
|
83
83
|
valueMissing: false,
|
84
84
|
|
@@ -115,6 +115,9 @@ var getGroupElements = function(elem){
|
|
115
115
|
}
|
116
116
|
return ret;
|
117
117
|
};
|
118
|
+
var patternTypes = {url: 1, email: 1, text: 1, search: 1, tel: 1, password: 1};
|
119
|
+
var lengthTypes = $.extend({textarea: 1}, patternTypes);
|
120
|
+
|
118
121
|
var validityRules = {
|
119
122
|
valueMissing: function(input, val, cache){
|
120
123
|
if(!input.prop('required')){return false;}
|
@@ -131,11 +134,12 @@ var validityRules = {
|
|
131
134
|
}
|
132
135
|
return ret;
|
133
136
|
},
|
134
|
-
tooLong: function(){
|
135
|
-
return false;
|
136
|
-
},
|
137
137
|
patternMismatch: function(input, val, cache) {
|
138
138
|
if(val === '' || cache.nodeName == 'select'){return false;}
|
139
|
+
if(!('type' in cache)){
|
140
|
+
cache.type = getType(input[0]);
|
141
|
+
}
|
142
|
+
if(!patternTypes[cache.type]){return false;}
|
139
143
|
var pattern = input.attr('pattern');
|
140
144
|
if(!pattern){return false;}
|
141
145
|
try {
|
@@ -150,6 +154,20 @@ var validityRules = {
|
|
150
154
|
}
|
151
155
|
;
|
152
156
|
|
157
|
+
$.each({tooShort: ['minLength', -1], tooLong: ['maxLength', 1]}, function(name, props){
|
158
|
+
validityRules[name] = function(input, val, cache){
|
159
|
+
//defaultValue is not the same as dirty flag, but very similiar
|
160
|
+
if(cache.nodeName == 'select' || input.prop('defaultValue') == val){return false;}
|
161
|
+
if(!('type' in cache)){
|
162
|
+
cache.type = getType(input[0]);
|
163
|
+
}
|
164
|
+
if(!lengthTypes[cache.type]){return false;}
|
165
|
+
var prop = input.prop(props[0]);
|
166
|
+
|
167
|
+
return ( prop > 0 && prop * props[1] < val.length * props[1] );
|
168
|
+
};
|
169
|
+
});
|
170
|
+
|
153
171
|
$.each({typeMismatch: 'mismatch', badInput: 'bad'}, function(name, fn){
|
154
172
|
validityRules[name] = function (input, val, cache){
|
155
173
|
if(val === '' || cache.nodeName == 'select'){return false;}
|
@@ -200,15 +218,12 @@ $.event.special.invalid = {
|
|
200
218
|
|
201
219
|
if( e.type != 'submit' || e.testedValidity || !e.originalEvent || !$.nodeName(e.target, 'form') || $.prop(e.target, 'noValidate') ){return;}
|
202
220
|
|
203
|
-
isSubmit = true;
|
204
221
|
e.testedValidity = true;
|
205
|
-
var notValid = !($(e.target).
|
222
|
+
var notValid = !($(e.target).callProp('reportValidity'));
|
206
223
|
if(notValid){
|
207
224
|
e.stopImmediatePropagation();
|
208
|
-
isSubmit = false;
|
209
225
|
return false;
|
210
226
|
}
|
211
|
-
isSubmit = false;
|
212
227
|
}
|
213
228
|
};
|
214
229
|
|
@@ -275,6 +290,9 @@ webshims.defineNodeNamesProperties(['button', 'fieldset', 'output'], {
|
|
275
290
|
checkValidity: {
|
276
291
|
value: function(){return true;}
|
277
292
|
},
|
293
|
+
reportValidity: {
|
294
|
+
value: function(){return true;}
|
295
|
+
},
|
278
296
|
willValidate: {
|
279
297
|
value: false
|
280
298
|
},
|
@@ -289,7 +307,7 @@ webshims.defineNodeNamesProperties(['button', 'fieldset', 'output'], {
|
|
289
307
|
}
|
290
308
|
}, 'prop');
|
291
309
|
|
292
|
-
var baseCheckValidity = function(elem){
|
310
|
+
var baseCheckValidity = function(elem, type){
|
293
311
|
var e,
|
294
312
|
v = $.prop(elem, 'validity')
|
295
313
|
;
|
@@ -301,7 +319,7 @@ var baseCheckValidity = function(elem){
|
|
301
319
|
if( !v.valid ){
|
302
320
|
e = $.Event('invalid');
|
303
321
|
var jElm = $(elem).trigger(e);
|
304
|
-
if(
|
322
|
+
if(type == 'reportValidity' && !baseCheckValidity.unhandledInvalids && !e.isDefaultPrevented()){
|
305
323
|
webshims.validityAlert.showFor(jElm);
|
306
324
|
baseCheckValidity.unhandledInvalids = true;
|
307
325
|
}
|
@@ -310,95 +328,111 @@ var baseCheckValidity = function(elem){
|
|
310
328
|
return v.valid;
|
311
329
|
};
|
312
330
|
var rsubmittable = /^(?:select|textarea|input)/i;
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
331
|
+
|
332
|
+
['checkValidity', 'reportValidity'].forEach(function(name){
|
333
|
+
webshims.defineNodeNameProperty('form', name, {
|
334
|
+
prop: {
|
335
|
+
value: function(){
|
336
|
+
|
337
|
+
var ret = true,
|
338
|
+
elems = $($.prop(this, 'elements')).filter(function(){
|
339
|
+
if(!rsubmittable.test(this.nodeName)){return false;}
|
340
|
+
var shadowData = webshims.data(this, 'shadowData');
|
341
|
+
return !shadowData || !shadowData.nativeElement || shadowData.nativeElement === this;
|
342
|
+
})
|
343
|
+
;
|
344
|
+
|
345
|
+
baseCheckValidity.unhandledInvalids = false;
|
346
|
+
for(var i = 0, len = elems.length; i < len; i++){
|
347
|
+
if( !baseCheckValidity(elems[i], name) ){
|
348
|
+
ret = false;
|
349
|
+
}
|
329
350
|
}
|
351
|
+
return ret;
|
330
352
|
}
|
331
|
-
return ret;
|
332
353
|
}
|
333
|
-
}
|
354
|
+
});
|
334
355
|
});
|
335
356
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
}
|
348
|
-
},
|
349
|
-
willValidate: {
|
350
|
-
writeable: false,
|
351
|
-
get: (function(){
|
352
|
-
var types = {
|
353
|
-
button: 1,
|
354
|
-
reset: 1,
|
355
|
-
hidden: 1,
|
356
|
-
image: 1
|
357
|
+
|
358
|
+
|
359
|
+
|
360
|
+
['input', 'textarea', 'select'].forEach(function(nodeName){
|
361
|
+
var inputValidationAPI = {
|
362
|
+
setCustomValidity: {
|
363
|
+
value: function(error){
|
364
|
+
$.removeData(this, 'cachedValidity');
|
365
|
+
webshims.data(this, 'customvalidationMessage', ''+error);
|
366
|
+
if(bugs.bustedValidity && inputValidationAPI.setCustomValidity.prop._supvalue){
|
367
|
+
inputValidationAPI.setCustomValidity.prop._supvalue.apply(this, arguments);
|
357
368
|
}
|
358
|
-
;
|
359
|
-
return function(){
|
360
|
-
var elem = $(this).getNativeElement()[0];
|
361
|
-
//elem.name && <- we don't use to make it easier for developers
|
362
|
-
return !!(!elem.disabled && !elem.readOnly && !types[elem.type] );
|
363
|
-
};
|
364
|
-
})()
|
365
|
-
},
|
366
|
-
validity: {
|
367
|
-
writeable: false,
|
368
|
-
get: function(){
|
369
|
-
var jElm = $(this).getNativeElement();
|
370
|
-
var elem = jElm[0];
|
371
|
-
var validityState = $.data(elem, 'cachedValidity');
|
372
|
-
if(validityState){
|
373
|
-
return validityState;
|
374
369
|
}
|
375
|
-
|
376
|
-
|
377
|
-
|
370
|
+
},
|
371
|
+
willValidate: {
|
372
|
+
writeable: false,
|
373
|
+
get: (function(){
|
374
|
+
var types = {
|
375
|
+
button: 1,
|
376
|
+
reset: 1,
|
377
|
+
hidden: 1,
|
378
|
+
image: 1
|
379
|
+
}
|
380
|
+
;
|
381
|
+
return function(){
|
382
|
+
var elem = $(this).getNativeElement()[0];
|
383
|
+
return !!(!elem.readOnly && !types[elem.type] && !$(elem).is(':disabled') );
|
384
|
+
};
|
385
|
+
})()
|
386
|
+
},
|
387
|
+
validity: {
|
388
|
+
writeable: false,
|
389
|
+
get: function(){
|
390
|
+
var jElm = $(this).getNativeElement();
|
391
|
+
var elem = jElm[0];
|
392
|
+
var validityState = $.data(elem, 'cachedValidity');
|
393
|
+
if(validityState){
|
394
|
+
return validityState;
|
395
|
+
}
|
396
|
+
validityState = $.extend({}, validityPrototype);
|
397
|
+
|
398
|
+
if( !$.prop(elem, 'willValidate') || elem.type == 'submit' ){
|
399
|
+
return validityState;
|
400
|
+
}
|
401
|
+
var val = jElm.val(),
|
402
|
+
cache = {nodeName: elem.nodeName.toLowerCase()}
|
403
|
+
;
|
404
|
+
|
405
|
+
validityState.customError = !!(webshims.data(elem, 'customvalidationMessage'));
|
406
|
+
if( validityState.customError ){
|
407
|
+
validityState.valid = false;
|
408
|
+
}
|
409
|
+
|
410
|
+
$.each(validityRules, function(rule, fn){
|
411
|
+
if (fn(jElm, val, cache)) {
|
412
|
+
validityState[rule] = true;
|
413
|
+
validityState.valid = false;
|
414
|
+
}
|
415
|
+
});
|
416
|
+
$(this).getShadowFocusElement().attr('aria-invalid', validityState.valid ? 'false' : 'true');
|
417
|
+
jElm = null;
|
418
|
+
elem = null;
|
378
419
|
return validityState;
|
379
420
|
}
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
421
|
+
}
|
422
|
+
};
|
423
|
+
|
424
|
+
['checkValidity', 'reportValidity'].forEach(function(name){
|
425
|
+
inputValidationAPI[name] = {
|
426
|
+
value: function(){
|
427
|
+
baseCheckValidity.unhandledInvalids = false;
|
428
|
+
return baseCheckValidity($(this).getNativeElement()[0], name);
|
387
429
|
}
|
388
|
-
|
389
|
-
$.each(validityRules, function(rule, fn){
|
390
|
-
if (fn(jElm, val, cache)) {
|
391
|
-
validityState[rule] = true;
|
392
|
-
validityState.valid = false;
|
393
|
-
}
|
394
|
-
});
|
395
|
-
$(this).getShadowFocusElement().attr('aria-invalid', validityState.valid ? 'false' : 'true');
|
396
|
-
jElm = null;
|
397
|
-
elem = null;
|
398
|
-
return validityState;
|
399
430
|
}
|
400
|
-
}
|
401
|
-
|
431
|
+
});
|
432
|
+
|
433
|
+
webshims.defineNodeNameProperties(nodeName, inputValidationAPI, 'prop');
|
434
|
+
});
|
435
|
+
|
402
436
|
|
403
437
|
webshims.defineNodeNamesBooleanProperty(['input', 'textarea', 'select'], 'required', {
|
404
438
|
set: function(value){
|
@@ -408,7 +442,7 @@ webshims.defineNodeNamesBooleanProperty(['input', 'textarea', 'select'], 'requir
|
|
408
442
|
});
|
409
443
|
webshims.defineNodeNamesBooleanProperty(['input'], 'multiple');
|
410
444
|
|
411
|
-
if(
|
445
|
+
if(bugs.bustedValidity){
|
412
446
|
|
413
447
|
webshims.defineNodeNameProperty('form', 'novalidate', {
|
414
448
|
attr: {
|
@@ -451,6 +485,22 @@ webshims.defineNodeNameProperty('form', 'noValidate', {
|
|
451
485
|
}
|
452
486
|
});
|
453
487
|
|
488
|
+
webshims.defineNodeNamesProperty(['input', 'textarea'], 'minLength', {
|
489
|
+
prop: {
|
490
|
+
set: function(val){
|
491
|
+
val *= 1;
|
492
|
+
if(val < 0){
|
493
|
+
throw('INDEX_SIZE_ERR');
|
494
|
+
}
|
495
|
+
this.setAttribute('minlength', val || 0);
|
496
|
+
},
|
497
|
+
get: function(){
|
498
|
+
var val = this.getAttribute('minlength');
|
499
|
+
return val == null ? -1 : (val * 1) || 0;
|
500
|
+
}
|
501
|
+
}
|
502
|
+
})
|
503
|
+
|
454
504
|
if(Modernizr.inputtypes.date && /webkit/i.test(navigator.userAgent)){
|
455
505
|
(function(){
|
456
506
|
|
@@ -505,7 +555,7 @@ if(Modernizr.inputtypes.date && /webkit/i.test(navigator.userAgent)){
|
|
505
555
|
focusedin = false;
|
506
556
|
}
|
507
557
|
if(input){
|
508
|
-
input.
|
558
|
+
input.off('focusout blur', unbind).off('input change updateInput', trigger);
|
509
559
|
trigger();
|
510
560
|
}
|
511
561
|
input = null;
|
@@ -548,7 +598,7 @@ webshims.addReady(function(context, contextElem){
|
|
548
598
|
var focusElem;
|
549
599
|
$('form', context)
|
550
600
|
.add(contextElem.filter('form'))
|
551
|
-
.
|
601
|
+
.on('invalid', $.noop)
|
552
602
|
;
|
553
603
|
|
554
604
|
try {
|
@@ -724,7 +774,7 @@ switch(desc.proptype) {
|
|
724
774
|
formSubmitterDescriptors[attrName].attr = {
|
725
775
|
set: function(value){
|
726
776
|
formSubmitterDescriptors[attrName].attr._supset.call(this, value);
|
727
|
-
$(this).
|
777
|
+
$(this).off(eventName).on(eventName, changeSubmitter);
|
728
778
|
},
|
729
779
|
get: function(){
|
730
780
|
return formSubmitterDescriptors[attrName].attr._supget.call(this);
|
@@ -733,7 +783,7 @@ switch(desc.proptype) {
|
|
733
783
|
formSubmitterDescriptors[attrName].initAttr = true;
|
734
784
|
formSubmitterDescriptors[attrName].removeAttr = {
|
735
785
|
value: function(){
|
736
|
-
$(this).
|
786
|
+
$(this).off(eventName);
|
737
787
|
formSubmitterDescriptors[attrName].removeAttr._supvalue.call(this);
|
738
788
|
}
|
739
789
|
};
|
@@ -746,6 +796,9 @@ webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors
|
|
746
796
|
webshims.register('form-shim-extend2', function($, webshims, window, document, undefined, options){
|
747
797
|
"use strict";
|
748
798
|
var emptyJ = $([]);
|
799
|
+
var isNumber = function(string){
|
800
|
+
return (typeof string == 'number' || (string && string == string * 1));
|
801
|
+
};
|
749
802
|
var getGroupElements = function(elem){
|
750
803
|
elem = $(elem);
|
751
804
|
var name;
|
@@ -828,7 +881,7 @@ if( !('maxLength' in document.createElement('textarea')) ){
|
|
828
881
|
};
|
829
882
|
var remove = function(){
|
830
883
|
clearTimeout(timer);
|
831
|
-
lastElement.
|
884
|
+
lastElement.off('.maxlengthconstraint');
|
832
885
|
};
|
833
886
|
return function(element, maxLength){
|
834
887
|
remove();
|
@@ -908,7 +961,7 @@ if( !('maxLength' in document.createElement('textarea')) ){
|
|
908
961
|
});
|
909
962
|
}
|
910
963
|
|
911
|
-
if(!$.support.getSetAttribute && $('<form novalidate></form>').attr('novalidate') == null){
|
964
|
+
if(('getSetAttribute' in $.support) && !$.support.getSetAttribute && $('<form novalidate></form>').attr('novalidate') == null){
|
912
965
|
webshims.defineNodeNameProperty('form', 'novalidate', {
|
913
966
|
attr: {
|
914
967
|
set: function(val){
|
@@ -923,40 +976,124 @@ if(!$.support.getSetAttribute && $('<form novalidate></form>').attr('novalidate'
|
|
923
976
|
}
|
924
977
|
|
925
978
|
|
926
|
-
if(Modernizr.formattribute
|
979
|
+
if(!Modernizr.formattribute || !Modernizr.fieldsetdisabled || !Modernizr.fieldsetelements){
|
927
980
|
(function(){
|
928
|
-
|
929
|
-
|
930
|
-
$.
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
981
|
+
if(!Modernizr.fieldsetdisabled){
|
982
|
+
var isFieldsetGroup = /^(?:fieldset)$/i;
|
983
|
+
$.extend($.expr[":"], {
|
984
|
+
"enabled": function( elem ) {
|
985
|
+
return elem.disabled === false || (isFieldsetGroup.test(elem.nodeName) && elem.getAttribute('disabled') == null && !$(elem).is('fieldset[disabled] *')) ;
|
986
|
+
},
|
987
|
+
|
988
|
+
"disabled": function( elem ) {
|
989
|
+
return elem.disabled === true || (isFieldsetGroup.test(elem.nodeName) && (elem.getAttribute('disabled') != null || $(elem).is('fieldset[disabled] *')));
|
990
|
+
}
|
991
|
+
});
|
992
|
+
|
993
|
+
|
994
|
+
var groupControl = {
|
995
|
+
getElements: function(group){
|
996
|
+
$('input, textarea, select, button', group).each(groupControl.disable);
|
997
|
+
},
|
998
|
+
disable: function(){
|
999
|
+
if(!this.disabled){
|
1000
|
+
webshims.data(this, 'groupedisabled', true);
|
1001
|
+
this.disabled = true;
|
936
1002
|
}
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
return ret.length == 1 ? ret[0] : ret;
|
943
|
-
}
|
1003
|
+
},
|
1004
|
+
enable: function(){
|
1005
|
+
if(this.disabled && webshims.data(this, 'groupedisabled')){
|
1006
|
+
webshims.data(this, 'groupedisabled', false);
|
1007
|
+
this.disabled = false;
|
944
1008
|
}
|
945
1009
|
}
|
946
|
-
return prop.apply(this, arguments);
|
947
1010
|
};
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
1011
|
+
|
1012
|
+
$(window).on('unload', function(){
|
1013
|
+
$('input, textarea, select, button').each(groupControl.enable);
|
1014
|
+
});
|
1015
|
+
|
1016
|
+
webshims.defineNodeNamesBooleanProperty(['fieldset'], 'disabled', {
|
1017
|
+
set: function(value){
|
1018
|
+
|
1019
|
+
if(value){
|
1020
|
+
$('input, textarea, select, button', this).each(groupControl.disable);
|
1021
|
+
} else if(!$(this).is('fieldset[disabled] *')){
|
1022
|
+
var nested = $('fieldset[disabled]', this);
|
1023
|
+
var elements = $('input, textarea, select, button', this);
|
1024
|
+
if(nested.length){
|
1025
|
+
elements = elements.filter(':not(fieldset[disabled] *');
|
1026
|
+
}
|
1027
|
+
elements.each(groupControl.enable);
|
1028
|
+
}
|
1029
|
+
},
|
1030
|
+
initAttr: true
|
1031
|
+
});
|
1032
|
+
|
1033
|
+
['input', 'textarea', 'select', 'button'].forEach(function(nodeName){
|
1034
|
+
var desc = webshims.defineNodeNameProperty(nodeName, 'disabled', {
|
1035
|
+
prop: {
|
1036
|
+
set: function(value){
|
1037
|
+
if(value){
|
1038
|
+
webshims.data(this, 'groupedisabled', false);
|
1039
|
+
desc.prop._supset.call(this, value);
|
1040
|
+
} else if($(this).is('fieldset[disabled] *')){
|
1041
|
+
webshims.data(this, 'groupedisabled', true);
|
1042
|
+
desc.prop._supset.call(this, true);
|
1043
|
+
} else {
|
1044
|
+
webshims.data(this, 'groupedisabled', false);
|
1045
|
+
desc.prop._supset.call(this, value);
|
1046
|
+
}
|
1047
|
+
},
|
1048
|
+
get: function(){
|
1049
|
+
var ret = desc.prop._supget.call(this);
|
1050
|
+
return ret ? !webshims.data(this, 'groupedisabled') : ret;
|
1051
|
+
}
|
1052
|
+
},
|
1053
|
+
removeAttr: {
|
1054
|
+
value: function(){
|
1055
|
+
desc.set.call(this, false);
|
1056
|
+
}
|
1057
|
+
}
|
1058
|
+
});
|
1059
|
+
});
|
1060
|
+
|
1061
|
+
webshims.addReady(function(context){
|
1062
|
+
$(context).filter('fieldset[disabled], fieldset[disabled] *').each(groupControl.disable);
|
1063
|
+
});
|
1064
|
+
}
|
957
1065
|
|
958
1066
|
|
959
1067
|
if(!Modernizr.formattribute){
|
1068
|
+
(function(prop, undefined){
|
1069
|
+
$.prop = function(elem, name, value){
|
1070
|
+
var ret;
|
1071
|
+
if(elem && elem.nodeType == 1 && value === undefined && $.nodeName(elem, 'form') && elem.id){
|
1072
|
+
ret = document.getElementsByName(name);
|
1073
|
+
if(!ret || !ret.length){
|
1074
|
+
ret = document.getElementById(name);
|
1075
|
+
}
|
1076
|
+
if(ret){
|
1077
|
+
ret = $(ret).filter(function(){
|
1078
|
+
return $.prop(this, 'form') == elem;
|
1079
|
+
}).get();
|
1080
|
+
if(ret.length){
|
1081
|
+
return ret.length == 1 ? ret[0] : ret;
|
1082
|
+
}
|
1083
|
+
}
|
1084
|
+
}
|
1085
|
+
return prop.apply(this, arguments);
|
1086
|
+
};
|
1087
|
+
})($.prop, undefined);
|
1088
|
+
|
1089
|
+
var removeAddedElements = function(form){
|
1090
|
+
var elements = $.data(form, 'webshimsAddedElements');
|
1091
|
+
if(elements){
|
1092
|
+
elements.remove();
|
1093
|
+
$.removeData(form, 'webshimsAddedElements');
|
1094
|
+
}
|
1095
|
+
};
|
1096
|
+
|
960
1097
|
webshims.defineNodeNamesProperty(['input', 'textarea', 'select', 'button', 'fieldset'], 'form', {
|
961
1098
|
prop: {
|
962
1099
|
get: function(){
|
@@ -1053,9 +1190,37 @@ if(Modernizr.formattribute === false || !Modernizr.fieldsetdisabled){
|
|
1053
1190
|
}
|
1054
1191
|
});
|
1055
1192
|
});
|
1193
|
+
|
1194
|
+
if(!$.fn.finish && parseFloat($.fn.jquery, 10) < 1.9){
|
1195
|
+
var rCRLF = /\r?\n/g,
|
1196
|
+
rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
|
1197
|
+
rselectTextarea = /^(?:select|textarea)/i;
|
1198
|
+
$.fn.serializeArray = function() {
|
1199
|
+
return this.map(function(){
|
1200
|
+
var elements = $.prop(this, 'elements');
|
1201
|
+
return elements ? $.makeArray( elements ) : this;
|
1202
|
+
})
|
1203
|
+
.filter(function(){
|
1204
|
+
return this.name && !$(this).is(':disabled') &&
|
1205
|
+
( this.checked || rselectTextarea.test( this.nodeName ) ||
|
1206
|
+
rinput.test( this.type ) );
|
1207
|
+
})
|
1208
|
+
.map(function( i, elem ){
|
1209
|
+
var val = $( this ).val();
|
1210
|
+
|
1211
|
+
return val == null ?
|
1212
|
+
null :
|
1213
|
+
$.isArray( val ) ?
|
1214
|
+
$.map( val, function( val, i ){
|
1215
|
+
return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
|
1216
|
+
}) :
|
1217
|
+
{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
|
1218
|
+
}).get();
|
1219
|
+
};
|
1220
|
+
}
|
1056
1221
|
}
|
1057
1222
|
|
1058
|
-
if(!Modernizr.
|
1223
|
+
if(!Modernizr.fieldsetelements){
|
1059
1224
|
webshims.defineNodeNamesProperty(['fieldset'], 'elements', {
|
1060
1225
|
prop: {
|
1061
1226
|
get: function(){
|
@@ -1067,34 +1232,6 @@ if(Modernizr.formattribute === false || !Modernizr.fieldsetdisabled){
|
|
1067
1232
|
});
|
1068
1233
|
}
|
1069
1234
|
|
1070
|
-
if(!$.fn.finish && parseFloat($.fn.jquery, 10) < 1.9){
|
1071
|
-
var rCRLF = /\r?\n/g,
|
1072
|
-
rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
|
1073
|
-
rselectTextarea = /^(?:select|textarea)/i;
|
1074
|
-
$.fn.serializeArray = function() {
|
1075
|
-
return this.map(function(){
|
1076
|
-
var elements = $.prop(this, 'elements');
|
1077
|
-
return elements ? $.makeArray( elements ) : this;
|
1078
|
-
})
|
1079
|
-
.filter(function(){
|
1080
|
-
return this.name && !this.disabled &&
|
1081
|
-
( this.checked || rselectTextarea.test( this.nodeName ) ||
|
1082
|
-
rinput.test( this.type ) );
|
1083
|
-
})
|
1084
|
-
.map(function( i, elem ){
|
1085
|
-
var val = $( this ).val();
|
1086
|
-
|
1087
|
-
return val == null ?
|
1088
|
-
null :
|
1089
|
-
$.isArray( val ) ?
|
1090
|
-
$.map( val, function( val, i ){
|
1091
|
-
return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
|
1092
|
-
}) :
|
1093
|
-
{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
|
1094
|
-
}).get();
|
1095
|
-
};
|
1096
|
-
}
|
1097
|
-
|
1098
1235
|
})();
|
1099
1236
|
}
|
1100
1237
|
|
@@ -1321,6 +1458,118 @@ try {
|
|
1321
1458
|
})();
|
1322
1459
|
}
|
1323
1460
|
|
1461
|
+
if(!('setSelectionRange' in document.createElement('input'))){
|
1462
|
+
(function(){
|
1463
|
+
var getSelection = function(elem, getStart){
|
1464
|
+
var range, value, normalizedValue, textInputRange, len, endRange;
|
1465
|
+
var start = 0;
|
1466
|
+
var end = 0;
|
1467
|
+
if (document.selection && (range = document.selection.createRange()) && range.parentElement() == elem) {
|
1468
|
+
value = $.prop(elem, 'value');
|
1469
|
+
len = value.length;
|
1470
|
+
normalizedValue = value.replace(/\r\n/g, "\n");
|
1471
|
+
|
1472
|
+
textInputRange = elem.createTextRange();
|
1473
|
+
textInputRange.moveToBookmark(range.getBookmark());
|
1474
|
+
|
1475
|
+
|
1476
|
+
endRange = elem.createTextRange();
|
1477
|
+
endRange.collapse(false);
|
1478
|
+
|
1479
|
+
if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
|
1480
|
+
start = end = len;
|
1481
|
+
} else {
|
1482
|
+
if(getStart){
|
1483
|
+
start = -textInputRange.moveStart("character", -len);
|
1484
|
+
start += normalizedValue.slice(0, start).split("\n").length - 1;
|
1485
|
+
} else {
|
1486
|
+
if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
|
1487
|
+
end = len;
|
1488
|
+
} else {
|
1489
|
+
end = -textInputRange.moveEnd("character", -len);
|
1490
|
+
end += normalizedValue.slice(0, end).split("\n").length - 1;
|
1491
|
+
}
|
1492
|
+
}
|
1493
|
+
|
1494
|
+
}
|
1495
|
+
}
|
1496
|
+
return {
|
1497
|
+
start: start,
|
1498
|
+
end: end
|
1499
|
+
};
|
1500
|
+
};
|
1501
|
+
|
1502
|
+
['input', 'textarea'].forEach(function(name){
|
1503
|
+
var isTextarea = name == 'textarea';
|
1504
|
+
//email?
|
1505
|
+
var allowedTypes = {text: 1, search: 1, url: 1, tel: 1, password: 1, email: 1};
|
1506
|
+
var error = 'InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable. selection not allowed on this type';
|
1507
|
+
webshims.defineNodeNameProperties(name, {
|
1508
|
+
selectionStart: {
|
1509
|
+
get: function(){
|
1510
|
+
if(isTextarea || allowedTypes[$.prop(this, 'type')]){
|
1511
|
+
return getSelection(this, true).start;
|
1512
|
+
}
|
1513
|
+
webshims.error(error);
|
1514
|
+
},
|
1515
|
+
set: function(v){
|
1516
|
+
if(this.createTextRange && (isTextarea || allowedTypes[$.prop(this, 'type')])){
|
1517
|
+
var range = this.createTextRange();
|
1518
|
+
range.collapse(true);
|
1519
|
+
range.moveStart('character', v);
|
1520
|
+
range.moveEnd('character', $.prop(this, 'selectionEnd'));
|
1521
|
+
if($(this).is(':focus')){
|
1522
|
+
range.select();
|
1523
|
+
}
|
1524
|
+
} else {
|
1525
|
+
webshims.error(error);
|
1526
|
+
}
|
1527
|
+
}
|
1528
|
+
},
|
1529
|
+
selectionEnd: {
|
1530
|
+
get: function(){
|
1531
|
+
if(isTextarea || allowedTypes[$.prop(this, 'type')]){
|
1532
|
+
return getSelection(this).end;
|
1533
|
+
}
|
1534
|
+
webshims.error(error);
|
1535
|
+
},
|
1536
|
+
set: function(v){
|
1537
|
+
if(this.createTextRange && (isTextarea || allowedTypes[$.prop(this, 'type')])){
|
1538
|
+
var range = this.createTextRange();
|
1539
|
+
var start;
|
1540
|
+
range.collapse(true);
|
1541
|
+
start = getSelection(this, true).start;
|
1542
|
+
range.moveStart('character', start);
|
1543
|
+
range.moveEnd('character', v - start);
|
1544
|
+
if($(this).is(':focus')){
|
1545
|
+
range.select();
|
1546
|
+
}
|
1547
|
+
} else {
|
1548
|
+
webshims.error(error);
|
1549
|
+
}
|
1550
|
+
}
|
1551
|
+
},
|
1552
|
+
setSelectionRange: {
|
1553
|
+
value: function(start, end, dir){
|
1554
|
+
if(this.createTextRange && (isTextarea || allowedTypes[$.prop(this, 'type')])){
|
1555
|
+
var range = this.createTextRange();
|
1556
|
+
range.collapse(true);
|
1557
|
+
range.moveStart('character', start);
|
1558
|
+
range.moveEnd('character', end - start);
|
1559
|
+
if($(this).is(':focus')){
|
1560
|
+
range.select();
|
1561
|
+
}
|
1562
|
+
} else {
|
1563
|
+
webshims.error(error);
|
1564
|
+
}
|
1565
|
+
}
|
1566
|
+
}
|
1567
|
+
}, 'prop');
|
1568
|
+
});
|
1569
|
+
|
1570
|
+
})();
|
1571
|
+
}
|
1572
|
+
|
1324
1573
|
(function(){
|
1325
1574
|
if(options.noPlaceholderPolyfill){return;}
|
1326
1575
|
var bustedPlaceholder;
|
@@ -1357,24 +1606,14 @@ try {
|
|
1357
1606
|
var isOver = (webshims.cfg.forms.placeholderType == 'over');
|
1358
1607
|
var isResponsive = (webshims.cfg.forms.responsivePlaceholder);
|
1359
1608
|
var polyfillElements = ['textarea'];
|
1360
|
-
var debug = webshims.debug !== false;
|
1361
1609
|
if(!Modernizr.input.placeholder || bustedPlaceholder){
|
1362
1610
|
polyfillElements.push('input');
|
1363
1611
|
}
|
1364
1612
|
|
1365
1613
|
var setSelection = function(elem){
|
1366
1614
|
try {
|
1367
|
-
|
1368
|
-
|
1369
|
-
return true;
|
1370
|
-
} else if(elem.createTextRange){
|
1371
|
-
var range = elem.createTextRange();
|
1372
|
-
range.collapse(true);
|
1373
|
-
range.moveEnd('character', 0);
|
1374
|
-
range.moveStart('character', 0);
|
1375
|
-
range.select();
|
1376
|
-
return true;
|
1377
|
-
}
|
1615
|
+
$(elem).setSelectionRange(0,0);
|
1616
|
+
return true;
|
1378
1617
|
} catch(er){}
|
1379
1618
|
};
|
1380
1619
|
|
@@ -1396,7 +1635,7 @@ try {
|
|
1396
1635
|
elem.value = $.prop(elem, 'value');
|
1397
1636
|
data.box.removeClass('placeholder-visible');
|
1398
1637
|
clearTimeout(selectTimer);
|
1399
|
-
$(elem).
|
1638
|
+
$(elem).off('.placeholderremove');
|
1400
1639
|
},
|
1401
1640
|
'mousedown.placeholderremove drag.placeholderremove select.placeholderremove': function(e){
|
1402
1641
|
setSelection(elem);
|
@@ -1407,7 +1646,7 @@ try {
|
|
1407
1646
|
},
|
1408
1647
|
'blur.placeholderremove': function(){
|
1409
1648
|
clearTimeout(selectTimer);
|
1410
|
-
$(elem).
|
1649
|
+
$(elem).off('.placeholderremove');
|
1411
1650
|
}
|
1412
1651
|
})
|
1413
1652
|
;
|
@@ -1422,10 +1661,10 @@ try {
|
|
1422
1661
|
'keydown.placeholderremove keypress.placeholderremove paste.placeholderremove input.placeholderremove': function(e){
|
1423
1662
|
if(e && (e.keyCode == 17 || e.keyCode == 16)){return;}
|
1424
1663
|
data.box.removeClass('placeholder-visible');
|
1425
|
-
$(elem).
|
1664
|
+
$(elem).off('.placeholderremove');
|
1426
1665
|
},
|
1427
1666
|
'blur.placeholderremove': function(){
|
1428
|
-
$(elem).
|
1667
|
+
$(elem).off('.placeholderremove');
|
1429
1668
|
}
|
1430
1669
|
})
|
1431
1670
|
;
|
@@ -1453,7 +1692,7 @@ try {
|
|
1453
1692
|
placeholderTxt = $.attr(elem, 'placeholder') || '';
|
1454
1693
|
}
|
1455
1694
|
|
1456
|
-
$(elem).
|
1695
|
+
$(elem).off('.placeholderremove');
|
1457
1696
|
|
1458
1697
|
if(value === false){
|
1459
1698
|
value = $.prop(elem, 'value');
|
@@ -1526,10 +1765,10 @@ try {
|
|
1526
1765
|
if(isResponsive || $(elem).is('.responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
|
1527
1766
|
data.box = data.text;
|
1528
1767
|
} else {
|
1529
|
-
data.box = $(elem)
|
1530
|
-
.
|
1531
|
-
.parent()
|
1768
|
+
data.box = $('<span class="placeholder-box placeholder-box-'+ (elem.nodeName || '').toLowerCase() +' placeholder-box-'+$.css(elem, 'float')+'" />')
|
1769
|
+
.insertAfter(elem)
|
1532
1770
|
;
|
1771
|
+
data.box.append(elem);
|
1533
1772
|
}
|
1534
1773
|
data.text
|
1535
1774
|
.insertAfter(elem)
|
@@ -1784,7 +2023,7 @@ try {
|
|
1784
2023
|
extraTimer = setTimeout(trigger, 9);
|
1785
2024
|
},
|
1786
2025
|
unbind = function(){
|
1787
|
-
input.
|
2026
|
+
input.off('focusout', unbind).off('keyup keypress keydown paste cut', extraTest).off('input change updateInput triggerinput', trigger);
|
1788
2027
|
clearInterval(timer);
|
1789
2028
|
setTimeout(function(){
|
1790
2029
|
trigger();
|
@@ -1816,4 +2055,4 @@ try {
|
|
1816
2055
|
})();
|
1817
2056
|
|
1818
2057
|
|
1819
|
-
});
|
2058
|
+
});
|