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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +114 -104
  4. data/vendor/assets/javascripts/webshims/extras/mousepress.js +5 -5
  5. data/vendor/assets/javascripts/webshims/polyfiller.js +156 -207
  6. data/vendor/assets/javascripts/webshims/shims/$ajax.js +862 -0
  7. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js +20 -0
  8. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flashcanvas.js +20 -0
  9. data/vendor/assets/javascripts/webshims/shims/color-picker.js +12 -12
  10. data/vendor/assets/javascripts/webshims/shims/combos/1.js +62 -32
  11. data/vendor/assets/javascripts/webshims/shims/combos/10.js +192 -509
  12. data/vendor/assets/javascripts/webshims/shims/combos/11.js +96 -415
  13. data/vendor/assets/javascripts/webshims/shims/combos/12.js +36 -26
  14. data/vendor/assets/javascripts/webshims/shims/combos/13.js +36 -26
  15. data/vendor/assets/javascripts/webshims/shims/combos/14.js +1007 -359
  16. data/vendor/assets/javascripts/webshims/shims/combos/15.js +310 -235
  17. data/vendor/assets/javascripts/webshims/shims/combos/16.js +313 -237
  18. data/vendor/assets/javascripts/webshims/shims/combos/17.js +96 -415
  19. data/vendor/assets/javascripts/webshims/shims/combos/18.js +1003 -678
  20. data/vendor/assets/javascripts/webshims/shims/combos/19.js +1085 -387
  21. data/vendor/assets/javascripts/webshims/shims/combos/2.js +161 -127
  22. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1086 -388
  23. data/vendor/assets/javascripts/webshims/shims/combos/21.js +168 -96
  24. data/vendor/assets/javascripts/webshims/shims/combos/22.js +36 -27
  25. data/vendor/assets/javascripts/webshims/shims/combos/23.js +2 -1
  26. data/vendor/assets/javascripts/webshims/shims/combos/24.js +411 -172
  27. data/vendor/assets/javascripts/webshims/shims/combos/25.js +1085 -387
  28. data/vendor/assets/javascripts/webshims/shims/combos/26.js +96 -94
  29. data/vendor/assets/javascripts/webshims/shims/combos/3.js +163 -140
  30. data/vendor/assets/javascripts/webshims/shims/combos/30.js +166 -141
  31. data/vendor/assets/javascripts/webshims/shims/combos/31.js +159 -126
  32. data/vendor/assets/javascripts/webshims/shims/combos/4.js +103 -109
  33. data/vendor/assets/javascripts/webshims/shims/combos/5.js +98 -417
  34. data/vendor/assets/javascripts/webshims/shims/combos/6.js +101 -418
  35. data/vendor/assets/javascripts/webshims/shims/combos/7.js +168 -142
  36. data/vendor/assets/javascripts/webshims/shims/combos/8.js +165 -141
  37. data/vendor/assets/javascripts/webshims/shims/combos/9.js +195 -510
  38. data/vendor/assets/javascripts/webshims/shims/details.js +2 -2
  39. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +96 -94
  40. data/vendor/assets/javascripts/webshims/shims/es5.js +908 -264
  41. data/vendor/assets/javascripts/webshims/shims/excanvas.js +16 -1
  42. data/vendor/assets/javascripts/webshims/shims/form-combat.js +147 -0
  43. data/vendor/assets/javascripts/webshims/shims/form-core.js +60 -31
  44. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +114 -33
  45. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +3 -1
  46. data/vendor/assets/javascripts/webshims/shims/form-message.js +7 -15
  47. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +2 -2
  48. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +88 -410
  49. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +143 -93
  50. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +268 -79
  51. data/vendor/assets/javascripts/webshims/shims/form-validation.js +116 -81
  52. data/vendor/assets/javascripts/webshims/shims/form-validators.js +23 -10
  53. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +605 -9
  54. data/vendor/assets/javascripts/webshims/shims/geolocation.js +51 -39
  55. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.js +78 -33
  56. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.js +24 -6
  57. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +110 -49
  58. data/vendor/assets/javascripts/webshims/shims/json-storage.js +3 -1
  59. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +2 -1
  60. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +81 -30
  61. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +131 -54
  62. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +497 -0
  63. data/vendor/assets/javascripts/webshims/shims/range-ui.js +8 -5
  64. data/vendor/assets/javascripts/webshims/shims/sizzle.js +2026 -0
  65. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +401 -521
  66. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +1 -1
  67. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +94 -82
  68. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +250 -321
  69. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  70. data/vendor/assets/javascripts/webshims/shims/track-ui.js +1 -1
  71. data/vendor/assets/javascripts/webshims/shims/track.js +34 -25
  72. metadata +7 -3
@@ -1,15 +1,23 @@
1
1
  webshims.register('form-validation', function($, webshims, window, document, undefined, options){
2
+ "use strict";
3
+
2
4
  var isWebkit = 'webkitURL' in window;
3
5
  var chromeBugs = isWebkit && Modernizr.formvalidation && !webshims.bugs.bustedValidity;
4
6
  var webkitVersion = chromeBugs && parseFloat((navigator.userAgent.match(/Safari\/([\d\.]+)/) || ['', '999999'])[1], 10);
5
- var invalidClass = options.iVal.errorClass || 'user-error';
6
- var validClass = options.iVal.successClass || 'user-success';
7
7
 
8
- var invalidWrapperClass = options.iVal.errorWrapperClass || 'ws-invalid';
9
- var successWrapperClass = options.iVal.successWrapperClass || 'ws-success';
10
- var errorBoxClass = options.iVal.errorBoxClass || 'ws-errorbox';
8
+ var iVal = options.iVal;
9
+ var invalidClass = iVal.errorClass || 'user-error';
10
+ var validClass = iVal.successClass || 'user-success';
11
+
12
+ var invalidWrapperClass = iVal.errorWrapperClass || 'ws-invalid';
13
+ var successWrapperClass = iVal.successWrapperClass || 'ws-success';
14
+ var errorBoxClass = iVal.errorBoxClass || 'ws-errorbox';
15
+ var errorMessageClass = iVal.errorMessageClass || 'ws-errormessage';
11
16
  var checkTypes = {checkbox: 1, radio: 1};
12
17
 
18
+ var loader = webshims.loader;
19
+ var addModule = loader.addModule;
20
+
13
21
  var emptyJ = $([]);
14
22
  var isValid = function(elem){
15
23
  return ($.prop(elem, 'validity') || {valid: 1}).valid;
@@ -80,7 +88,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
80
88
  'datetime-local': 1
81
89
  };
82
90
  var switchValidityClass = function(e){
83
- if(!options.iVal.sel){return;}
91
+ if(!iVal.sel){return;}
84
92
  var elem, timer, shadowElem, shadowType;
85
93
  if(!e.target){return;}
86
94
  elem = $(e.target).getNativeElement()[0];
@@ -154,14 +162,15 @@ webshims.register('form-validation', function($, webshims, window, document, und
154
162
 
155
163
  $.removeData(elem, 'webshimsswitchvalidityclass');
156
164
  };
157
-
158
- if(timer){
159
- clearTimeout(timer);
160
- }
161
- if(e.type == 'refreshvalidityui'){
162
- switchClass();
163
- } else {
164
- $.data(elem, 'webshimsswitchvalidityclass', setTimeout(switchClass, 9));
165
+ if(shadowElem.triggerHandler('wsallowinstantvalidation', [e]) !== false){
166
+ if(timer){
167
+ clearTimeout(timer);
168
+ }
169
+ if(e.type == 'refreshvalidityui'){
170
+ switchClass();
171
+ } else {
172
+ $.data(elem, 'webshimsswitchvalidityclass', setTimeout(switchClass, 9));
173
+ }
165
174
  }
166
175
  };
167
176
 
@@ -241,8 +250,23 @@ webshims.register('form-validation', function($, webshims, window, document, und
241
250
  $.extend(webshims.wsPopover, {
242
251
 
243
252
 
244
- isInElement: function(container, contained){
245
- return container == contained || $.contains(container, contained);
253
+ isInElement: function(containers, contained){
254
+ if(!$.isArray(containers)){
255
+ containers = [containers];
256
+ }
257
+ var i, len, container;
258
+ var ret = false;
259
+ for(i = 0, len = containers.length; i < len; i++){
260
+ container = containers[i];
261
+ if(container && container.jquery){
262
+ container = container[0];
263
+ }
264
+ if(container && (container == contained || $.contains(container, contained))){
265
+ ret = true;
266
+ break;
267
+ }
268
+ }
269
+ return ret;
246
270
  },
247
271
  show: function(element){
248
272
  if(this.isVisible){return;}
@@ -274,8 +298,8 @@ webshims.register('form-validation', function($, webshims, window, document, und
274
298
  }, 9);
275
299
  }, 9);
276
300
 
277
- $(document).on('focusin'+this.eventns+' mousedown'+this.eventns, function(e){
278
- if(that.options.hideOnBlur && !that.stopBlur && !that.isInElement(that.lastElement[0] || document.body, e.target) && !that.isInElement(element[0] || document.body, e.target) && !that.isInElement(that.element[0], e.target)){
301
+ $(document.body || document).on('focusin'+this.eventns+' mousedown'+this.eventns, function(e){
302
+ if(that.options.hideOnBlur && !that.stopBlur && !that.isInElement([that.lastElement[0], element[0], that.element[0]], e.target)){
279
303
  that.hide();
280
304
  }
281
305
  });
@@ -294,7 +318,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
294
318
  if(!appendElement && !invalidParent.test(parent.nodeName)){
295
319
  appendElement = parent;
296
320
  }
297
- if(appendElement && $.style(parent, 'overflow') == 'hidden' && $.style(parent, 'position') != 'static'){
321
+ if(appendElement && $.css(parent, 'overflow') == 'hidden' && $.css(parent, 'position') != 'static'){
298
322
  appendElement = false;
299
323
  }
300
324
  }
@@ -352,6 +376,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
352
376
  clear: function(){
353
377
  $(window).off(this.eventns);
354
378
  $(document).off(this.eventns);
379
+ $(document.body).off(this.eventns);
355
380
  this.element.off('transitionend'+this.eventns);
356
381
  this.stopBlur = false;
357
382
  this.lastOpts = false;
@@ -434,7 +459,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
434
459
  try {
435
460
  focusElem[0].focus();
436
461
  } catch(e){}
437
- $(window).triggerHandler('pospopover'+this.eventns);
462
+ api.element.triggerHandler('pospopover');
438
463
  };
439
464
 
440
465
  if(scrollTop > elemTop){
@@ -476,11 +501,20 @@ webshims.register('form-validation', function($, webshims, window, document, und
476
501
  fade: {
477
502
  show: 'fadeIn',
478
503
  hide: 'fadeOut'
504
+ },
505
+ no: {
506
+ show: 'show',
507
+ hide: 'hide'
479
508
  }
480
509
  };
481
- if(!fx[options.iVal.fx]){
482
- options.iVal.fx = 'slide';
510
+ if(!iVal.fx || !fx[iVal.fx]){
511
+ iVal.fx = 'slide';
512
+ }
513
+
514
+ if(!$.fn[fx[iVal.fx].show]){
515
+ iVal.fx = 'no';
483
516
  }
517
+
484
518
  webshims.errorbox = {
485
519
  create: function(elem, fieldWrapper){
486
520
  if(!fieldWrapper){
@@ -489,7 +523,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
489
523
  var errorBox = $('div.'+errorBoxClass, fieldWrapper);
490
524
 
491
525
  if(!errorBox.length){
492
- errorBox = $('<div class="'+ errorBoxClass +'" hidden="hidden">');
526
+ errorBox = $('<div class="'+ errorBoxClass +'" hidden="hidden" style="display: none;">');
493
527
  fieldWrapper.append(errorBox);
494
528
  }
495
529
 
@@ -498,20 +532,23 @@ webshims.register('form-validation', function($, webshims, window, document, und
498
532
  },
499
533
  getFieldWrapper: function(elem){
500
534
  var fieldWrapper;
501
- if(options.iVal.fieldWrapper){
502
- fieldWrapper = (typeof options.iVal.fieldWrapper == "function") ? options.iVal.fieldWrapper.apply(this, arguments) : $(elem).parent().closest(options.iVal.fieldWrapper);
535
+ if(iVal.fieldWrapper){
536
+ fieldWrapper = (typeof iVal.fieldWrapper == "function") ? iVal.fieldWrapper.apply(this, arguments) : $(elem).parent().closest(iVal.fieldWrapper);
503
537
  if(!fieldWrapper.length){
504
538
  fieldWrapper = false;
505
- webshims.error("could not find fieldwrapper: "+ options.iVal.fieldWrapper);
539
+ webshims.error("could not find fieldwrapper: "+ iVal.fieldWrapper);
506
540
  }
507
541
  }
508
542
  if(!fieldWrapper){
509
- fieldWrapper = $(elem).parent().closest(':not(span, label, em, strong, b, i, mark, p)');
543
+ fieldWrapper = $(elem).parent().closest(':not(span), :not(label), :not(em), :not(strong), :not(p)');
510
544
  }
511
545
  return fieldWrapper;
512
546
  },
513
547
  _createContentMessage: (function(){
514
548
  var fields = {};
549
+ var deCamelCase = function(c){
550
+ return '-'+(c).toLowerCase();
551
+ };
515
552
  var getErrorName = function(elem){
516
553
  var ret = $(elem).data('errortype');
517
554
  if(!ret){
@@ -524,15 +561,9 @@ webshims.register('form-validation', function($, webshims, window, document, und
524
561
  }
525
562
  return ret || 'defaultMessage';
526
563
  };
527
- $(function(){
528
- $.each($('<input />').prop('validity'), function(name){
529
- if(name != 'valid'){
530
- var cName = name.replace(/[A-Z]/, function(c){
531
- return '-'+(c).toLowerCase();
532
- });
533
- fields[name] = '.'+cName+', .'+name+', .'+(name).toLowerCase()+', [data-errortype="'+ name +'"]';
534
- }
535
- });
564
+ $.each(["customError","badInput","typeMismatch","rangeUnderflow","rangeOverflow","stepMismatch","tooLong","tooShort","patternMismatch","valueMissing","tooShort"], function(i, name){
565
+ var cName = name.replace(/[A-Z]/, deCamelCase);
566
+ fields[name] = '.'+cName+', .'+name+', .'+(name).toLowerCase()+', [data-errortype="'+ name +'"]';
536
567
  });
537
568
  return function(elem, errorBox){
538
569
  var extended = false;
@@ -540,18 +571,27 @@ webshims.register('form-validation', function($, webshims, window, document, und
540
571
  if(typeof errorMessages == 'string'){
541
572
  errorMessages = {defaultMessage: errorMessages};
542
573
  }
543
- $('> *', errorBox).each(function(){
574
+ $(errorBox).children().each(function(){
544
575
  var name = getErrorName(this);
545
576
  if(!errorMessages[name]){
546
577
  extended = true;
547
578
  errorMessages[name] = $(this).html();
548
579
  }
549
580
  });
581
+
550
582
  if(extended){
551
583
  $(elem).data('errormessage', errorMessages);
552
584
  }
585
+ if(webshims.getOptions){
586
+ webshims.getOptions(elem, 'errormessage');
587
+ }
553
588
  };
554
589
  })(),
590
+ initIvalContentMessage: function(elem){
591
+ if($(elem).jProp('form').is(iVal.sel)){
592
+ this.get(elem);
593
+ }
594
+ },
555
595
  get: function(elem, fieldWrapper){
556
596
  if(!fieldWrapper){
557
597
  fieldWrapper = this.getFieldWrapper(elem);
@@ -590,7 +630,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
590
630
  } else {
591
631
  fieldWrapper.removeClass(invalidWrapperClass);
592
632
  errorBox.message = '';
593
- errorBox[fx[options.iVal.fx].hide](function(){
633
+ errorBox[fx[iVal.fx].hide](function(){
594
634
  $(this).attr({hidden: 'hidden'});
595
635
  });
596
636
  }
@@ -602,17 +642,17 @@ webshims.register('form-validation', function($, webshims, window, document, und
602
642
  return fieldWrapper;
603
643
  },
604
644
  recheckInvalidInput: function(input){
605
- if(options.iVal.recheckDelay && options.iVal.recheckDelay > 90){
645
+ if(iVal.recheckDelay && iVal.recheckDelay > 90){
606
646
  var timer;
607
647
  var throttle = function(){
608
648
  switchValidityClass({type: 'input', target: input});
609
649
  };
610
650
  $(input)
611
- .filter('input:not([type="checkbox"], [type="radio"])')
651
+ .filter('input:not([type="checkbox"]):not([type="radio"])')
612
652
  .off('.recheckinvalid')
613
653
  .on('input.recheckinvalid', function(){
614
654
  clearTimeout(timer);
615
- timer = setTimeout(throttle, options.iVal.recheckDelay);
655
+ timer = setTimeout(throttle, iVal.recheckDelay);
616
656
  })
617
657
  .on('focusout.recheckinvalid', function(){
618
658
  clearTimeout(timer);
@@ -626,7 +666,10 @@ webshims.register('form-validation', function($, webshims, window, document, und
626
666
  var message = $(elem).getErrorMessage();
627
667
 
628
668
  if(box.message != message){
629
- box.stop(true, true).html('<p>'+ message +'</p>');
669
+ if(box.stop){
670
+ box.stop(true, true);
671
+ }
672
+ box.html('<p class="'+ errorMessageClass +'"">'+ message +'</p>');
630
673
  box.message = message;
631
674
  fieldWrapper.addClass(invalidWrapperClass).removeClass(successWrapperClass);
632
675
  this.recheckInvalidInput(elem);
@@ -634,7 +677,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
634
677
  box
635
678
  .css({display: 'none'})
636
679
  .removeAttr('hidden')
637
- [fx[options.iVal.fx].show]()
680
+ [fx[iVal.fx].show]()
638
681
  ;
639
682
  }
640
683
  }
@@ -658,34 +701,34 @@ webshims.register('form-validation', function($, webshims, window, document, und
658
701
  $(document.body)
659
702
  .on({
660
703
  'changedvaliditystate': function(e){
661
- if(options.iVal.sel){
704
+ if(iVal.sel){
662
705
  var form = $(e.target).jProp('form');
663
- if(form.is(options.iVal.sel)){
706
+ if(form.is(iVal.sel)){
664
707
  webshims.errorbox.toggle(e.target);
665
708
  }
666
709
  }
667
710
  },
668
711
  resetvalidityui: function(e){
669
- if (options.iVal.sel) {
712
+ if (iVal.sel) {
670
713
  var form = $(e.target).jProp('form');
671
- if (form.is(options.iVal.sel)) {
714
+ if (form.is(iVal.sel)) {
672
715
  webshims.errorbox.reset(e.target);
673
716
  }
674
717
  }
675
718
  },
676
719
  firstinvalid: function(e){
677
- if(options.iVal.sel && options.iVal.handleBubble){
720
+ if(iVal.sel && iVal.handleBubble){
678
721
  var form = $(e.target).jProp('form');
679
- if(form.is(options.iVal.sel)){
722
+ if(form.is(iVal.sel)){
680
723
  e.preventDefault();
681
- if(options.iVal.handleBubble != 'none'){
682
- webshims.validityAlert.showFor( e.target, false, false, options.iVal.handleBubble == 'hide' );
724
+ if(iVal.handleBubble != 'none'){
725
+ webshims.validityAlert.showFor( e.target, false, false, iVal.handleBubble == 'hide' );
683
726
  }
684
727
  }
685
728
  }
686
729
  },
687
730
  submit: function(e){
688
- if(options.iVal.sel && !options.iVal.noSubmitCheck &&$(e.target).is(options.iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){
731
+ if(iVal.sel && iVal.submitCheck &&$(e.target).is(iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){
689
732
  e.stopImmediatePropagation();
690
733
  return false;
691
734
  }
@@ -695,15 +738,18 @@ webshims.register('form-validation', function($, webshims, window, document, und
695
738
 
696
739
  webshims.modules["form-core"].getGroupElements = getGroupElements;
697
740
 
741
+ if(/[\s\:\>\~\+]/.test(iVal.sel || '')){
742
+ webshims.error('please use a simple selector for iVal.sel: for example .validate');
743
+ }
698
744
 
699
745
  if(options.replaceValidationUI){
700
- webshims.ready('DOM forms', function(){
701
- $(document).on('firstinvalid', function(e){
702
- if(!e.isInvalidUIPrevented()){
703
- e.preventDefault();
746
+ $(document).on('firstinvalid', function(e){
747
+ if(!e.isInvalidUIPrevented()){
748
+ e.preventDefault();
749
+ setTimeout(function(){
704
750
  webshims.validityAlert.showFor( e.target );
705
- }
706
- });
751
+ }, 4);
752
+ }
707
753
  });
708
754
  }
709
755
 
@@ -747,29 +793,6 @@ webshims.register('form-validation', function($, webshims, window, document, und
747
793
  });
748
794
  })();
749
795
 
750
- //see: https://bugs.webkit.org/show_bug.cgi?id=113377
751
- if (chromeBugs && webkitVersion < 540) {
752
- (function(){
753
- var elems = /^(?:textarea|input)$/i;
754
- var form = false;
755
-
756
- document.addEventListener('contextmenu', function(e){
757
- if (elems.test(e.target.nodeName || '') && (form = e.target.form)) {
758
- setTimeout(function(){
759
- form = false;
760
- }, 1);
761
- }
762
- }, false);
763
-
764
- $(window).on('invalid', function(e){
765
- if (e.originalEvent && form && form == e.target.form) {
766
- e.wrongWebkitInvalid = true;
767
- e.stopImmediatePropagation();
768
- }
769
- });
770
-
771
- })();
772
- }
773
796
 
774
797
  if(!$.event.special.change && !$.event.special.input && Modernizr.inputtypes && options.fixRangeChange){
775
798
  var rangeChange = {
@@ -907,4 +930,16 @@ webshims.register('form-validation', function($, webshims, window, document, und
907
930
  }
908
931
  });
909
932
  }
933
+
934
+ addModule('form-combat', {
935
+ d: ['dom-support'],
936
+ test: ! (($.mobile && ($.mobile.selectmenu || $.mobile.checkboxradio)) || $.fn.select2 || $.fn.chosen || $.fn.selectpicker || $.fn.selectBoxIt)
937
+ });
938
+
939
+ addModule('position', {
940
+ src: 'plugins/jquery.ui.position.js',
941
+ test:!! ($.position && $.position.getScrollInfo)
942
+ });
943
+
944
+ loader.loadList(['form-combat', 'position']);
910
945
  });
@@ -49,15 +49,29 @@ webshims.register('form-validators', function($, webshims, window, document, und
49
49
  var message = '';
50
50
  var setMessage = function(message, errorType){
51
51
  blockCustom = true;
52
- data.customMismatchedRule = message ? errorType : '';
53
52
 
54
- if(typeof message != 'string'){
55
- message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || webshims.customErrorMessages[errorType][webshims.activeLang()] || webshims.customErrorMessages[errorType][''];
56
- }
57
53
 
58
- if(typeof message == 'object'){
59
- message = message[errorType] || message.customError || message.defaultMessage;
54
+ if(message){
55
+ data.customMismatchedRule = errorType;
56
+
57
+ if(typeof message != 'string'){
58
+ message = webshims.getContentValidationMessage(elem, false, errorType);
59
+
60
+ if(message && typeof message == 'object'){
61
+ message = message[errorType];
62
+ }
63
+
64
+ if(!message || typeof message != 'string'){
65
+ message = webshims.customErrorMessages[errorType][webshims.activeLang()] || webshims.customErrorMessages[errorType][''] || message.customError || message.defaultMessage || '';
66
+ }
67
+ }
68
+ } else {
69
+ message = '';
70
+ data.customMismatchedRule = '';
60
71
  }
72
+
73
+
74
+
61
75
  $(elem).setCustomValidity(message);
62
76
  blockCustom = false;
63
77
  };
@@ -70,7 +84,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
70
84
  return false;
71
85
  }
72
86
  });
73
- if(message != 'async'){
87
+ if(message != 'async' && (message || !validity.valid)){
74
88
  setMessage(message, customMismatchedRule);
75
89
  }
76
90
  }
@@ -148,8 +162,8 @@ webshims.register('form-validators', function($, webshims, window, document, und
148
162
  groupTimer[name] = setTimeout(function(){
149
163
  checkboxes
150
164
  .addClass('group-required')
151
- .unbind('click.groupRequired')
152
- .bind('click.groupRequired', function(){
165
+ .off('click.groupRequired')
166
+ .on('click.groupRequired', function(){
153
167
  checkboxes.filter('.group-required').each(function(){
154
168
  webshims.refreshCustomValidityRules(this);
155
169
  });
@@ -314,7 +328,6 @@ webshims.register('form-validators', function($, webshims, window, document, und
314
328
  remoteValidate.restartAjax = false;
315
329
  },
316
330
  getResponse: function(data){
317
- var old = webshims.refreshCustomValidityRules;
318
331
  if(!data){
319
332
  data = {message: '', valid: true};
320
333
  } else if(typeof data == 'string'){