webshims-rails 1.10.3 → 1.10.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +96 -73
  4. data/vendor/assets/javascripts/webshims/shims/color-picker.js +2415 -0
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +248 -745
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +771 -1206
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +679 -1201
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +46 -65
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +45 -64
  10. data/vendor/assets/javascripts/webshims/shims/combos/14.js +94 -7
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +557 -1189
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +598 -1249
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +697 -1208
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +697 -1208
  15. data/vendor/assets/javascripts/webshims/shims/combos/19.js +145 -78
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +472 -1280
  17. data/vendor/assets/javascripts/webshims/shims/combos/20.js +144 -77
  18. data/vendor/assets/javascripts/webshims/shims/combos/21.js +14 -15
  19. data/vendor/assets/javascripts/webshims/shims/combos/22.js +2 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/23.js +45 -64
  21. data/vendor/assets/javascripts/webshims/shims/combos/24.js +848 -0
  22. data/vendor/assets/javascripts/webshims/shims/combos/25.js +4373 -0
  23. data/vendor/assets/javascripts/webshims/shims/combos/26.js +1516 -0
  24. data/vendor/assets/javascripts/webshims/shims/combos/27.js +884 -0
  25. data/vendor/assets/javascripts/webshims/shims/combos/28.js +2067 -0
  26. data/vendor/assets/javascripts/webshims/shims/combos/29.js +1156 -0
  27. data/vendor/assets/javascripts/webshims/shims/combos/3.js +313 -700
  28. data/vendor/assets/javascripts/webshims/shims/combos/30.js +1868 -0
  29. data/vendor/assets/javascripts/webshims/shims/combos/31.js +1663 -0
  30. data/vendor/assets/javascripts/webshims/shims/combos/4.js +111 -20
  31. data/vendor/assets/javascripts/webshims/shims/combos/5.js +747 -1321
  32. data/vendor/assets/javascripts/webshims/shims/combos/6.js +837 -1809
  33. data/vendor/assets/javascripts/webshims/shims/combos/7.js +435 -1239
  34. data/vendor/assets/javascripts/webshims/shims/combos/8.js +360 -766
  35. data/vendor/assets/javascripts/webshims/shims/combos/9.js +843 -1676
  36. data/vendor/assets/javascripts/webshims/shims/details.js +1 -1
  37. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +90 -3
  38. data/vendor/assets/javascripts/webshims/shims/filereader.js +386 -0
  39. data/vendor/assets/javascripts/webshims/shims/form-core.js +201 -680
  40. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +418 -0
  41. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +69 -467
  42. data/vendor/assets/javascripts/webshims/shims/form-message.js +21 -17
  43. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +19 -82
  44. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +17 -6
  45. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +570 -1185
  46. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +181 -28
  47. data/vendor/assets/javascripts/webshims/shims/form-validation.js +599 -0
  48. data/vendor/assets/javascripts/webshims/{extras/custom-validity.js → shims/form-validators.js} +33 -38
  49. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +865 -0
  50. data/vendor/assets/javascripts/webshims/shims/geolocation.js +2 -2
  51. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.txt +37 -34
  52. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.txt +88 -48
  53. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +74 -0
  54. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +121 -0
  55. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +47 -0
  56. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  57. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  59. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  60. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Thumbs.db +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  62. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  63. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  66. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +257 -0
  68. data/vendor/assets/javascripts/webshims/shims/json-storage.js +4 -4
  69. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +44 -63
  70. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +10 -11
  71. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +2 -1
  72. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +5 -3
  73. data/vendor/assets/javascripts/webshims/shims/range-ui.js +110 -17
  74. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/styles/range-track.png +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +104 -21
  77. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +90 -16
  78. data/vendor/assets/javascripts/webshims/shims/styles/vertical-range.png +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/swfmini.js +1 -1
  81. data/vendor/assets/javascripts/webshims/shims/track-ui.js +35 -3
  82. data/vendor/assets/javascripts/webshims/shims/track.js +1 -1
  83. metadata +33 -3
@@ -8,7 +8,7 @@ var swfmini = function() {
8
8
 
9
9
  var UNDEF = "undefined",
10
10
  OBJECT = "object",
11
- webshims = jQuery.webshims,
11
+ webshims = jQuery.webshims || window.webshims,
12
12
  SHOCKWAVE_FLASH = "Shockwave Flash",
13
13
  SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
14
14
  FLASH_MIME_TYPE = "application/x-shockwave-flash",
@@ -501,7 +501,7 @@ var swfmini = function() {
501
501
  var hasNative = Modernizr.audio && Modernizr.video;
502
502
  var supportsLoop = false;
503
503
  var bugs = webshims.bugs;
504
-
504
+ var swfType = 'mediaelement-jaris';
505
505
  var loadSwf = function(){
506
506
  webshims.ready(swfType, function(){
507
507
  if(!webshims.mediaelement.createSWF){
@@ -511,7 +511,7 @@ var swfmini = function() {
511
511
  });
512
512
  };
513
513
  var options = webshims.cfg.mediaelement;
514
- var swfType = 'mediaelement-jaris';
514
+ var hasFullTrackSupport;
515
515
  var hasSwf;
516
516
  if(!options){
517
517
  webshims.error("mediaelement wasn't implemented but loaded");
@@ -524,14 +524,11 @@ var swfmini = function() {
524
524
 
525
525
  webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
526
526
 
527
- if(!Modernizr.videoBuffered){
527
+ if(!Modernizr.videoBuffered ){
528
528
  webshims.addPolyfill('mediaelement-native-fix', {
529
- f: 'mediaelement',
530
- test: Modernizr.videoBuffered,
531
529
  d: ['dom-support']
532
530
  });
533
-
534
- webshims.reTest('mediaelement-native-fix');
531
+ webshims.loader.loadList(['mediaelement-native-fix']);
535
532
  }
536
533
  }
537
534
 
@@ -542,9 +539,9 @@ var swfmini = function() {
542
539
  };
543
540
  var switchOptions = function(e){
544
541
  var media;
545
- var parent = e.target.parentNode;
542
+ var parent;
546
543
  if(!options.preferFlash &&
547
- ($(e.target).is('audio, video') || (parent && $('source:last', parent)[0] == e.target)) &&
544
+ ($(e.target).is('audio, video') || ((parent = e.target.parentNode) && $('source:last', parent)[0] == e.target)) &&
548
545
  (media = $(e.target).closest('audio, video')) && !noSwitch[media.prop('error')]
549
546
  ){
550
547
  $(function(){
@@ -558,7 +555,7 @@ var swfmini = function() {
558
555
  $('audio, video').each(function(){
559
556
  webshims.mediaelement.selectSource(this);
560
557
  });
561
- webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error'));
558
+ webshims.error("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error'));
562
559
  }
563
560
  }, 9);
564
561
  });
@@ -593,43 +590,9 @@ var swfmini = function() {
593
590
  bugs.track = true;
594
591
  }
595
592
  }
596
-
597
- var trackOptions = webshims.cfg.track;
598
- var trackListener = function(e){
599
- $(e.target).filter('track').each(changeApi);
600
- };
601
- var changeApi = function(){
602
- if(bugs.track || (!trackOptions.override && $.prop(this, 'readyState') == 3)){
603
- trackOptions.override = true;
604
- webshims.reTest('track');
605
- document.removeEventListener('error', trackListener, true);
606
- if(this && $.nodeName(this, 'track')){
607
- webshims.error("track support was overwritten. Please check your vtt including your vtt mime-type");
608
- } else {
609
- webshims.info("track support was overwritten. due to bad browser support");
610
- }
611
- return false;
612
- }
613
- };
614
- var detectTrackError = function(){
615
- document.addEventListener('error', trackListener, true);
616
-
617
- if(bugs.track){
618
- changeApi();
619
- } else {
620
- $('track').each(changeApi);
621
- }
622
- };
623
- if(!trackOptions.override){
624
- if(webshims.isReady('track')){
625
- detectTrackError();
626
- } else {
627
- $(detectTrackError);
628
- }
629
- }
630
593
  })();
631
-
632
594
  }
595
+ hasFullTrackSupport = Modernizr.track && !bugs.track;
633
596
 
634
597
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined){
635
598
  hasSwf = swfmini.hasFlashPlayerVersion('9.0.115');
@@ -714,7 +677,8 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
714
677
  var loadTrackUi = function(){
715
678
  if(loadTrackUi.loaded){return;}
716
679
  loadTrackUi.loaded = true;
717
- $(function(){
680
+ webshims.ready('WINDOWLOAD', function(){
681
+ loadThird();
718
682
  webshims.loader.loadList(['track-ui']);
719
683
  });
720
684
  };
@@ -887,27 +851,40 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
887
851
  }
888
852
  return ret;
889
853
  };
890
-
854
+ var emptyType = (/^\s*application\/octet\-stream\s*$/i);
855
+ var getRemoveEmptyType = function(){
856
+ var ret = emptyType.test($.attr(this, 'type') || '');
857
+ if(ret){
858
+ $(this).removeAttr('type');
859
+ }
860
+ return ret;
861
+ };
891
862
  mediaelement.setError = function(elem, message){
892
- if(!message){
893
- message = "can't play sources";
863
+ if($('source', elem).filter(getRemoveEmptyType).length){
864
+ webshims.error('"application/octet-stream" is a useless mimetype for audio/video. Please change this attribute.');
865
+ try {
866
+ $(elem).mediaLoad();
867
+ } catch(er){}
868
+ } else {
869
+ if(!message){
870
+ message = "can't play sources";
871
+ }
872
+ $(elem).pause().data('mediaerror', message);
873
+ webshims.error('mediaelementError: '+ message);
874
+ setTimeout(function(){
875
+ if($(elem).data('mediaerror')){
876
+ $(elem).trigger('mediaerror');
877
+ }
878
+ }, 1);
894
879
  }
895
880
 
896
- $(elem).pause().data('mediaerror', message);
897
- webshims.error('mediaelementError: '+ message);
898
- setTimeout(function(){
899
- if($(elem).data('mediaerror')){
900
- $(elem).trigger('mediaerror');
901
- }
902
- }, 1);
881
+
903
882
  };
904
883
 
905
884
  var handleThird = (function(){
906
885
  var requested;
907
886
  return function( mediaElem, ret, data ){
908
- if(!requested){
909
- loadTrackUi();
910
- }
887
+
911
888
  webshims.ready(hasSwf ? swfType : 'mediaelement-yt', function(){
912
889
  if(mediaelement.createSWF){
913
890
  mediaelement.createSWF( mediaElem, ret, data );
@@ -1052,6 +1029,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1052
1029
  var buffered = getBufferedString();
1053
1030
  if(buffered != lastBuffered){
1054
1031
  lastBuffered = buffered;
1032
+ webshims.info('needed to trigger progress manually');
1055
1033
  $(elem).triggerHandler('progress');
1056
1034
  }
1057
1035
  };
@@ -1103,11 +1081,14 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1103
1081
  $('video, audio', context)
1104
1082
  .add(insertedElement.filter('video, audio'))
1105
1083
  .each(function(){
1106
- if(!mediaelement.canNativePlaySrces(this) || (!loadTrackUi.loaded && $('track', this).length)){
1084
+ if(!mediaelement.canNativePlaySrces(this)){
1107
1085
  loadThird();
1108
1086
  handleMedia = true;
1109
1087
  return false;
1110
1088
  }
1089
+ if((!hasFullTrackSupport || webshims.modules.track.options.override) && !loadTrackUi.loaded && $('track', this).length){
1090
+ loadTrackUi();
1091
+ }
1111
1092
  })
1112
1093
  ;
1113
1094
  }
@@ -1115,7 +1096,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1115
1096
  }
1116
1097
  };
1117
1098
 
1118
- if(Modernizr.track && !bugs.track){
1099
+ if(hasFullTrackSupport){
1119
1100
  webshims.defineProperty(TextTrack.prototype, 'shimActiveCues', {
1120
1101
  get: function(){
1121
1102
  return this._shimActiveCues || this.activeCues;
@@ -1130,6 +1111,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1130
1111
  } else {
1131
1112
  webshims.ready(swfType, initMediaElements);
1132
1113
  }
1133
- webshims.ready('WINDOWLOAD mediaelement', loadTrackUi);
1114
+ webshims.ready('track', loadTrackUi);
1134
1115
  });
1135
- })(jQuery, Modernizr, jQuery.webshims);
1116
+ })(jQuery, Modernizr, webshims);
@@ -0,0 +1,848 @@
1
+ webshims.register('form-validation', function($, webshims, window, document, undefined, options){
2
+ var isWebkit = 'webkitURL' in window;
3
+ var chromeBugs = isWebkit && Modernizr.formvalidation && !webshims.bugs.bustedValidity;
4
+ var webkitVersion = chromeBugs && parseFloat((navigator.userAgent.match(/Safari\/([\d\.]+)/) || ['', '999999'])[1], 10);
5
+ var invalidClass = 'user-error';
6
+ var validClass = 'user-success';
7
+ var checkTypes = {checkbox: 1, radio: 1};
8
+
9
+ var emptyJ = $([]);
10
+ var isValid = function(elem){
11
+ return ($.prop(elem, 'validity') || {valid: 1}).valid;
12
+ };
13
+
14
+ var nonFormFilter = function(){
15
+ return !$.prop(this, 'form');
16
+ };
17
+ var getGroupElements = function(elem){
18
+ elem = $(elem);
19
+ var name;
20
+ var form;
21
+ var ret = emptyJ;
22
+ if(elem[0].type == 'radio'){
23
+ form = elem.prop('form');
24
+ name = elem[0].name;
25
+ if(!name){
26
+ ret = elem;
27
+ } else if(form){
28
+ ret = $(form).jProp(name);
29
+ } else {
30
+ ret = $(document.getElementsByName(name)).filter(nonFormFilter);
31
+ }
32
+ ret = ret.filter('[type="radio"]');
33
+ }
34
+ return ret;
35
+ };
36
+
37
+
38
+ var returnValidityCause = function(validity, elem){
39
+ var ret;
40
+ $.each(validity, function(name, value){
41
+ if(value){
42
+ ret = name + $.prop(elem, 'validationMessage');
43
+ return false;
44
+ }
45
+ });
46
+ return ret;
47
+ };
48
+
49
+ var isInGroup = function(name){
50
+ var ret;
51
+ try {
52
+ ret = document.activeElement.name === name;
53
+ } catch(e){}
54
+ return ret;
55
+ };
56
+ //actually we could always use the change event, but chrome messed it up and does not respect the commit action definition of the html spec
57
+ //see: http://code.google.com/p/chromium/issues/detail?id=155747
58
+ var changeTypes = {
59
+ radio: 1,
60
+ checkbox: 1,
61
+ 'select-one': 1,
62
+ 'select-multiple': 1,
63
+ file: 1,
64
+ date: 1,
65
+ month: 1,
66
+ week: 1,
67
+ text: 1
68
+ };
69
+ //see: http://code.google.com/p/chromium/issues/detail?id=179708 and bug above
70
+ var noFocusWidgets = {
71
+ time: 1,
72
+ date: 1,
73
+ month: 1,
74
+ datetime: 1,
75
+ week: 1,
76
+ 'datetime-local': 1
77
+ };
78
+ var switchValidityClass = function(e){
79
+ var elem, timer, shadowElem, shadowType;
80
+ if(!e.target){return;}
81
+ elem = $(e.target).getNativeElement()[0];
82
+ shadowElem = $(elem).getShadowElement();
83
+ if(elem.type == 'submit' || !$.prop(elem, 'willValidate') || (e.type == 'change' && !changeTypes[(shadowType = shadowElem.prop('type'))])){return;}
84
+ timer = $.data(elem, 'webshimsswitchvalidityclass');
85
+ var switchClass = function(){
86
+ if(!shadowType){
87
+ shadowType = shadowElem.prop('type');
88
+ }
89
+ if(
90
+ (chromeBugs && (e.type == 'change' || webkitVersion < 537.36) && noFocusWidgets[shadowType] && $(e.target).is(':focus')) ||
91
+ (e.type == 'focusout' && elem.type == 'radio' && isInGroup(elem.name))
92
+ ){
93
+ return;
94
+ }
95
+ var validity = $.prop(elem, 'validity');
96
+
97
+ var addClass, removeClass, trigger, generaltrigger, validityCause;
98
+
99
+ if(webshims.refreshCustomValidityRules){
100
+ webshims.refreshCustomValidityRules(elem);
101
+ }
102
+
103
+ if(validity.valid){
104
+ if(!shadowElem.hasClass(validClass)){
105
+ addClass = validClass;
106
+ removeClass = invalidClass;
107
+ generaltrigger = 'changedvaliditystate';
108
+ trigger = 'changedvalid';
109
+ if(checkTypes[elem.type] && elem.checked){
110
+ getGroupElements(elem).not(elem).removeClass(removeClass).addClass(addClass).removeAttr('aria-invalid');
111
+ }
112
+ shadowElem.removeAttr('aria-invalid');
113
+ $.removeData(elem, 'webshimsinvalidcause');
114
+ }
115
+ } else {
116
+ validityCause = returnValidityCause(validity, elem);
117
+ if($.data(elem, 'webshimsinvalidcause') != validityCause){
118
+ $.data(elem, 'webshimsinvalidcause', validityCause);
119
+ generaltrigger = 'changedvaliditystate';
120
+ }
121
+ if(!shadowElem.hasClass(invalidClass)){
122
+ addClass = invalidClass;
123
+ removeClass = validClass;
124
+ if (checkTypes[elem.type] && !elem.checked) {
125
+ getGroupElements(elem).not(elem).removeClass(removeClass).addClass(addClass).attr('aria-invalid', 'true');
126
+ }
127
+ shadowElem.attr('aria-invalid', 'true');
128
+ trigger = 'changedinvalid';
129
+ }
130
+ }
131
+
132
+ if(addClass){
133
+ shadowElem.addClass(addClass).removeClass(removeClass);
134
+ //jQuery 1.6.1 IE9 bug (doubble trigger bug)
135
+ setTimeout(function(){
136
+ $(elem).trigger(trigger);
137
+ }, 0);
138
+ }
139
+ if(generaltrigger){
140
+ setTimeout(function(){
141
+ $(elem).trigger(generaltrigger);
142
+ }, 0);
143
+ }
144
+
145
+ $.removeData(elem, 'webshimsswitchvalidityclass');
146
+ };
147
+
148
+ if(timer){
149
+ clearTimeout(timer);
150
+ }
151
+ if(e.type == 'refreshvalidityui'){
152
+ switchClass();
153
+ } else {
154
+ $.data(elem, 'webshimsswitchvalidityclass', setTimeout(switchClass, 9));
155
+ }
156
+ };
157
+
158
+ $(document.body)
159
+ .on(options.validityUIEvents || 'focusout change refreshvalidityui invalid', switchValidityClass)
160
+ .on('reset resetvalui', function(e){
161
+ var elems = $(e.target);
162
+ if(e.type == 'reset'){
163
+ elems = elems.filter('form').jProp('elements');
164
+ }
165
+ elems
166
+ .filter('.user-error, .user-success')
167
+ .removeAttr('aria-invalid')
168
+ .removeClass('user-error')
169
+ .removeClass('user-success')
170
+ .getNativeElement()
171
+ .each(function(){
172
+ $.removeData(this, 'webshimsinvalidcause');
173
+ })
174
+ .trigger('resetvalidityui')
175
+ ;
176
+ })
177
+ ;
178
+
179
+ var setRoot = function(){
180
+ webshims.scrollRoot = (isWebkit || document.compatMode == 'BackCompat') ?
181
+ $(document.body) :
182
+ $(document.documentElement)
183
+ ;
184
+ };
185
+ var minWidth = (Modernizr.boxSizing || Modernizr['display-table'] || $.support.getSetAttribute) ?
186
+ 'minWidth' :
187
+ 'width'
188
+ ;
189
+ var hasTransition = ('transitionDelay' in document.documentElement.style);
190
+ setRoot();
191
+ webshims.ready('DOM', setRoot);
192
+
193
+ webshims.getRelOffset = function(posElem, relElem){
194
+ posElem = $(posElem);
195
+ var offset = $(relElem).offset();
196
+ var bodyOffset;
197
+ $.swap($(posElem)[0], {visibility: 'hidden', display: 'inline-block', left: 0, top: 0}, function(){
198
+ bodyOffset = posElem.offset();
199
+ });
200
+ offset.top -= bodyOffset.top;
201
+ offset.left -= bodyOffset.left;
202
+ return offset;
203
+ };
204
+
205
+ $.extend(webshims.wsPopover, {
206
+
207
+
208
+ isInElement: function(container, contained){
209
+ return container == contained || $.contains(container, contained);
210
+ },
211
+ show: function(element){
212
+ var e = $.Event('wspopoverbeforeshow');
213
+ this.element.trigger(e);
214
+ if(e.isDefaultPrevented() || this.isVisible){return;}
215
+ this.isVisible = true;
216
+ element = $(element || this.options.prepareFor).getNativeElement() ;
217
+
218
+ var that = this;
219
+ var visual = $(element).getShadowElement();
220
+
221
+ this.clear();
222
+ this.element.removeClass('ws-po-visible').css('display', 'none');
223
+
224
+ this.prepareFor(element, visual);
225
+
226
+ this.position(visual);
227
+ that.timers.show = setTimeout(function(){
228
+ that.element.css('display', '');
229
+ that.timers.show = setTimeout(function(){
230
+ that.element.addClass('ws-po-visible').trigger('wspopovershow');
231
+ }, 9);
232
+ }, 9);
233
+ this.element.on('remove', function(e){
234
+ if(!e.originalEvent){
235
+ that.destroy();
236
+ }
237
+ });
238
+ $(document).on('focusin'+this.eventns+' mousedown'+this.eventns, function(e){
239
+ 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)){
240
+ that.hide();
241
+ }
242
+ });
243
+ $(window).on('resize'+this.eventns + ' pospopover'+this.eventns, function(){
244
+ clearTimeout(that.timers.repos);
245
+ that.timers.repos = setTimeout(function(){
246
+ that.position(visual);
247
+ }, 900);
248
+ });
249
+ },
250
+ prepareFor: function(element, visual){
251
+ var onBlur;
252
+ var opts = $.extend({}, this.options, $(element.prop('form') || []).data('wspopover') || {}, element.data('wspopover'));
253
+ var that = this;
254
+ var css = {};
255
+ this.lastElement = $(element).getShadowFocusElement();
256
+ if(!this.prepared || !this.options.prepareFor){
257
+ if(opts.appendTo == 'element'){
258
+ this.element.insertAfter(element);
259
+ } else {
260
+ this.element.appendTo(opts.appendTo);
261
+ }
262
+ }
263
+
264
+ this.element.attr({
265
+ 'data-class': element.prop('className'),
266
+ 'data-id': element.prop('id')
267
+ });
268
+
269
+ css[minWidth] = opts.constrainWidth ? visual.outerWidth() : '';
270
+
271
+ this.element.css(css);
272
+
273
+ if(opts.hideOnBlur){
274
+ onBlur = function(e){
275
+ if(that.stopBlur){
276
+ e.stopImmediatePropagation();
277
+ } else {
278
+ that.hide();
279
+ }
280
+ };
281
+
282
+ that.timers.bindBlur = setTimeout(function(){
283
+ that.lastElement.off(that.eventns).on('focusout'+that.eventns + ' blur'+that.eventns, onBlur);
284
+ that.lastElement.getNativeElement().off(that.eventns);
285
+ }, 10);
286
+
287
+
288
+ }
289
+
290
+ if(!this.prepared && $.fn.bgIframe){
291
+ this.element.bgIframe();
292
+ }
293
+ this.prepared = true;
294
+ },
295
+ clear: function(){
296
+ $(window).off(this.eventns);
297
+ $(document).off(this.eventns);
298
+ this.element.off('transitionend'+this.eventns);
299
+ this.stopBlur = false;
300
+ $.each(this.timers, function(timerName, val){
301
+ clearTimeout(val);
302
+ });
303
+ },
304
+ hide: function(){
305
+ var e = $.Event('wspopoverbeforehide');
306
+ this.element.trigger(e);
307
+ if(e.isDefaultPrevented() || !this.isVisible){return;}
308
+ this.isVisible = false;
309
+ var that = this;
310
+ var forceHide = function(e){
311
+ if(!(e && e.type == 'transitionend' && (e = e.originalEvent) && e.target == that.element[0] && that.element.css('visibility') == 'hidden')){
312
+ that.element.off('transitionend'+that.eventns).css('display', 'none').attr({'data-id': '', 'data-class': '', 'hidden': 'hidden'});
313
+ clearTimeout(that.timers.forcehide);
314
+ $(window).off('resize'+that.eventns);
315
+ }
316
+ };
317
+ this.clear();
318
+ this.element.removeClass('ws-po-visible').trigger('wspopoverhide');
319
+ $(window).on('resize'+this.eventns, forceHide);
320
+ if(hasTransition){
321
+ this.element.off('transitionend'+this.eventns).on('transitionend'+this.eventns, forceHide);
322
+ }
323
+
324
+ that.timers.forcehide = setTimeout(forceHide, hasTransition ? 600 : 40);
325
+ },
326
+ position: function(element){
327
+ var offset = webshims.getRelOffset(this.element.css({marginTop: 0, marginLeft: 0, marginRight: 0, marginBottom: 0}).removeAttr('hidden'), element);
328
+ offset.top += element.outerHeight();
329
+ this.element.css({marginTop: '', marginLeft: '', marginRight: '', marginBottom: ''}).css(offset);
330
+ }
331
+ });
332
+
333
+
334
+
335
+ /* some extra validation UI */
336
+ webshims.validityAlert = (function(){
337
+
338
+ var focusTimer = false;
339
+
340
+ var api = webshims.objectCreate(webshims.wsPopover, {}, options.messagePopover);
341
+ var boundHide = api.hide.bind(api);
342
+
343
+ api.element.addClass('validity-alert').attr({role: 'alert'});
344
+ $.extend(api, {
345
+ hideDelay: 5000,
346
+ showFor: function(elem, message, noFocusElem, noBubble){
347
+
348
+ elem = $(elem).getNativeElement();
349
+ this.clear();
350
+ this.hide();
351
+ if(!noBubble){
352
+ this.getMessage(elem, message);
353
+
354
+ this.show(elem);
355
+ if(this.hideDelay){
356
+ this.timers.delayedHide = setTimeout(boundHide, this.hideDelay);
357
+ }
358
+
359
+ }
360
+
361
+ if(!noFocusElem){
362
+ this.setFocus(elem);
363
+ }
364
+ },
365
+ setFocus: function(element){
366
+ var focusElem = $(element).getShadowFocusElement();
367
+ var scrollTop = webshims.scrollRoot.scrollTop();
368
+ var elemTop = focusElem.offset().top - 30;
369
+ var focus = function(){
370
+ try {
371
+ focusElem[0].focus();
372
+ } catch(e){}
373
+ $(window).triggerHandler('pospopover'+this.eventns);
374
+ };
375
+
376
+ if(scrollTop > elemTop){
377
+ webshims.scrollRoot.animate(
378
+ {scrollTop: elemTop - 5},
379
+ {
380
+ queue: false,
381
+ duration: Math.max( Math.min( 600, (scrollTop - elemTop) * 1.5 ), 80 ),
382
+ complete: focus
383
+ }
384
+ );
385
+
386
+ } else {
387
+ focus();
388
+ }
389
+
390
+ },
391
+ getMessage: function(elem, message){
392
+ if (!message) {
393
+ message = elem.getErrorMessage();
394
+ }
395
+ if (message) {
396
+ api.contentElement.text(message);
397
+ } else {
398
+ this.hide();
399
+ }
400
+ }
401
+ });
402
+
403
+
404
+ return api;
405
+ })();
406
+
407
+ var fx = {
408
+ slide: {
409
+ show: 'slideDown',
410
+ hide: 'slideUp'
411
+ },
412
+ fade: {
413
+ show: 'fadeIn',
414
+ hide: 'fadeOut'
415
+ }
416
+ };
417
+ if(!fx[options.iVal.fx]){
418
+ options.iVal.fx = 'slide';
419
+ }
420
+ webshims.errorbox = {
421
+ create: function(elem, fieldWrapper){
422
+ if(!fieldWrapper){
423
+ fieldWrapper = this.getFieldWrapper(elem);
424
+ }
425
+ var errorBox = $('div.ws-errorbox', fieldWrapper);
426
+
427
+ if(!errorBox.length){
428
+ errorBox = $('<div class="ws-errorbox" hidden="hidden">');
429
+ fieldWrapper.append(errorBox);
430
+ }
431
+
432
+ fieldWrapper.data('errorbox', errorBox);
433
+ return errorBox;
434
+ },
435
+ getFieldWrapper: function(elem){
436
+ var fieldWrapper;
437
+ if(options.iVal.fieldWrapper){
438
+ fieldWrapper = (typeof options.iVal.fieldWrapper == "function") ? options.iVal.fieldWrapper.apply(this, arguments) : $(elem).parent().closest(options.iVal.fieldWrapper);
439
+ if(!fieldWrapper.length){
440
+ fieldWrapper = false;
441
+ webshims.error("could not find fieldwrapper: "+ options.iVal.fieldWrapper);
442
+ }
443
+ }
444
+ if(!fieldWrapper){
445
+ fieldWrapper = $(elem).parent().closest(':not(span, label, em, strong, b, mark, p)');
446
+ }
447
+ return fieldWrapper;
448
+ },
449
+ get: function(elem, fieldWrapper){
450
+ if(!fieldWrapper){
451
+ fieldWrapper = this.getFieldWrapper(elem);
452
+ }
453
+ var errorBox = fieldWrapper.data('errorbox');
454
+ if(!errorBox){
455
+ errorBox = this.create(elem, fieldWrapper);
456
+ } else if(typeof errorBox == 'string'){
457
+ errorBox = $('#'+errorBox);
458
+ $.data(elem, 'errorbox', errorBox);
459
+ }
460
+ return errorBox;
461
+ },
462
+ addSuccess: function(elem, fieldWrapper){
463
+ var type = $.prop(elem, 'type');
464
+ var check = function(){
465
+ var hasVal = checkTypes[type] ? $.prop(elem, 'checked') : $(elem).val();
466
+ fieldWrapper[hasVal ? 'addClass' : 'removeClass']('ws-success');
467
+ };
468
+ var evt = changeTypes[type] ? 'change' : 'blur';
469
+
470
+ $(elem).off('.recheckvalid').on(evt+'.recheckinvalid', check);
471
+ check();
472
+ },
473
+ hideError: function(elem, reset){
474
+ var fieldWrapper = this.getFieldWrapper(elem);
475
+ var errorBox = fieldWrapper.data('errorbox');
476
+
477
+ if(errorBox && errorBox.jquery){
478
+ fieldWrapper.removeClass('ws-invalid');
479
+ errorBox.message = '';
480
+ $(elem).filter('input').off('.recheckinvalid');
481
+ errorBox.slideUp(function(){
482
+ $(this).attr({hidden: 'hidden'});
483
+ });
484
+ }
485
+ if(!reset){
486
+ this.addSuccess(elem, fieldWrapper);
487
+ }
488
+ return fieldWrapper;
489
+ },
490
+ recheckInvalidInput: function(input){
491
+ if(options.iVal.recheckDelay && options.iVal.recheckDelay > 90){
492
+ var timer;
493
+ var throttle = function(){
494
+ switchValidityClass({type: 'input', target: input});
495
+ };
496
+ $(input).filter('input:not([type="checkbox"], [type="radio"])').off('.recheckinvalid').on('input.recheckinvalid', function(){
497
+ clearTimeout(timer);
498
+ timer = setTimeout(throttle, options.iVal.recheckDelay);
499
+ });
500
+ }
501
+ },
502
+ showError: function(elem, message){
503
+ var fieldWrapper = this.getFieldWrapper(elem);
504
+ var box = this.get(elem, fieldWrapper);
505
+
506
+ if(box.message != message){
507
+ box.stop(true, true).html('<p>'+ message +'</p>');
508
+ box.message = message;
509
+ fieldWrapper.addClass('ws-invalid').removeClass('ws-success');
510
+ if(box.is('[hidden]')){
511
+ this.recheckInvalidInput(elem);
512
+ box
513
+ .css({display: 'none'})
514
+ .removeAttr('hidden')
515
+ [fx[options.iVal.fx].show]()
516
+ ;
517
+ }
518
+ }
519
+ fieldWrapper.removeClass('ws-success');
520
+ $(elem).off('.recheckvalid');
521
+
522
+ return fieldWrapper;
523
+ },
524
+ reset: function(elem){
525
+ this.hideError(elem, true).removeClass('ws-success');
526
+ },
527
+ toggle: function(elem){
528
+ var message = $(elem).getErrorMessage();
529
+ if(message){
530
+ this.showError(elem, message);
531
+ } else {
532
+ this.hideError(elem, message);
533
+ }
534
+ }
535
+ };
536
+
537
+ $(document.body)
538
+ .on({
539
+ 'changedvaliditystate': function(e){
540
+ if(options.iVal.sel){
541
+ var form = $(e.target).jProp('form');
542
+ if(form.is(options.iVal.sel)){
543
+ webshims.errorbox.toggle(e.target);
544
+ }
545
+ }
546
+ },
547
+ resetvalidityui: function(e){
548
+ if (options.iVal.sel) {
549
+ var form = $(e.target).jProp('form');
550
+ if (form.is(options.iVal.sel)) {
551
+ webshims.errorbox.reset(e.target);
552
+ }
553
+ }
554
+ },
555
+ firstinvalid: function(e){
556
+ if(options.iVal.sel && options.iVal.handleBubble){
557
+ var form = $(e.target).jProp('form');
558
+ if(form.is(options.iVal.sel)){
559
+ e.preventDefault();
560
+ if(options.iVal.handleBubble != 'none'){
561
+ webshims.validityAlert.showFor( e.target, false, false, options.iVal.handleBubble == 'hide' );
562
+ }
563
+ }
564
+ }
565
+ },
566
+ submit: function(e){
567
+ if(options.iVal.sel && $(e.target).is(options.iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){
568
+ return false;
569
+ }
570
+ }
571
+ })
572
+ ;
573
+
574
+ webshims.modules["form-core"].getGroupElements = getGroupElements;
575
+
576
+ //see: https://bugs.webkit.org/show_bug.cgi?id=113377
577
+ if (chromeBugs && webkitVersion < 540) {
578
+ (function(){
579
+ var elems = /^(?:textarea|input)$/i;
580
+ var form = false;
581
+
582
+ document.addEventListener('contextmenu', function(e){
583
+ if (elems.test(e.target.nodeName || '') && (form = e.target.form)) {
584
+ setTimeout(function(){
585
+ form = false;
586
+ }, 1);
587
+ }
588
+ }, false);
589
+
590
+ $(window).on('invalid', function(e){
591
+ if (e.originalEvent && form && form == e.target.form) {
592
+ e.wrongWebkitInvalid = true;
593
+ e.stopImmediatePropagation();
594
+ }
595
+ });
596
+
597
+ })();
598
+ }
599
+ });
600
+
601
+ webshims.register('form-validators', function($, webshims, window, document, undefined, options){
602
+ "use strict";
603
+
604
+ (function(){
605
+ if(webshims.refreshCustomValidityRules){
606
+ webshims.error("form-validators already included. please remove custom-validity.js");
607
+ }
608
+
609
+ var customValidityRules = {};
610
+ var formReady = false;
611
+ var blockCustom;
612
+ var initTest;
613
+ var onEventTest = function(e){
614
+ webshims.refreshCustomValidityRules(e.target);
615
+ };
616
+
617
+
618
+ webshims.customErrorMessages = {};
619
+ webshims.addCustomValidityRule = function(name, test, defaultMessage){
620
+ customValidityRules[name] = test;
621
+ if(!webshims.customErrorMessages[name]){
622
+ webshims.customErrorMessages[name] = [];
623
+ webshims.customErrorMessages[name][''] = defaultMessage || name;
624
+ }
625
+ if($.isReady && formReady){
626
+ $('input, select, textarea').each(function(){
627
+ testValidityRules(this);
628
+ });
629
+ }
630
+ };
631
+ webshims.refreshCustomValidityRules = function(elem){
632
+ if(!elem.form || (!initTest && !$.prop(elem, 'willValidate')) ){return;}
633
+ blockCustom = true;
634
+ var customMismatchedRule = $.data(elem, 'customMismatchedRule');
635
+ var validity = $.prop(elem, 'validity') || {};
636
+ var message = '';
637
+ if(customMismatchedRule || !validity.customError){
638
+ var val = $(elem).val();
639
+ $.each(customValidityRules, function(name, test){
640
+ message = test(elem, val) || '';
641
+ customMismatchedRule = name;
642
+ if(message){
643
+
644
+ if(typeof message != 'string'){
645
+ message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || webshims.customErrorMessages[name][webshims.activeLang()] || webshims.customErrorMessages[name][''];
646
+ }
647
+
648
+ if(typeof message == 'object'){
649
+ message = message[name] || message.customError || message.defaultMessage;
650
+ }
651
+ return false;
652
+ }
653
+ });
654
+
655
+ if(message){
656
+ $.data(elem, 'customMismatchedRule', customMismatchedRule);
657
+ }
658
+ $(elem).setCustomValidity(message);
659
+ }
660
+ blockCustom = false;
661
+ };
662
+ var testValidityRules = webshims.refreshCustomValidityRules;
663
+
664
+ webshims.ready('forms form-validation', function(){
665
+
666
+
667
+ var oldCustomValidity = $.fn.setCustomValidity;
668
+
669
+
670
+ $.fn.setCustomValidity = function(message){
671
+ if(!blockCustom){
672
+ this.data('customMismatchedRule', '');
673
+ }
674
+ return oldCustomValidity.apply(this, arguments);
675
+ };
676
+
677
+ setTimeout(function(){
678
+ webshims.addReady(function(context, selfElement){
679
+ initTest = true;
680
+ $('input, select, textarea', context).add(selfElement.filter('input, select, textarea')).each(function(){
681
+ testValidityRules(this);
682
+ });
683
+ initTest = false;
684
+ formReady = true;
685
+ });
686
+ $(document).on('refreshCustomValidityRules change', onEventTest);
687
+ }, 9);
688
+
689
+ });
690
+
691
+ })();
692
+
693
+ /*
694
+ * adds support for HTML5 constraint validation
695
+ * - partial pattern: <input data-partial-pattern="RegExp" />
696
+ * - creditcard-validation: <input class="creditcard-input" />
697
+ * - several dependent-validation patterns (examples):
698
+ * - <input type="email" id="mail" /> <input data-dependent-validation='mail' />
699
+ * - <input type="date" id="start" data-dependent-validation='{"from": "end", "prop": "max"}' /> <input type="date" id="end" data-dependent-validation='{"from": "start", "prop": "min"}' />
700
+ * - <input type="checkbox" id="check" /> <input data-dependent-validation='checkbox' />
701
+ */
702
+ (function(){
703
+
704
+ var addCustomValidityRule = $.webshims.addCustomValidityRule;
705
+ addCustomValidityRule('partialPattern', function(elem, val){
706
+ if(!val || !elem.getAttribute('data-partial-pattern')){return;}
707
+ var pattern = $(elem).data('partial-pattern');
708
+ if(!pattern){return;}
709
+ return !(new RegExp('(' + pattern + ')', 'i').test(val));
710
+ }, 'This format is not allowed here.');
711
+
712
+ addCustomValidityRule('tooShort', function(elem, val){
713
+ if(!val || !elem.getAttribute('data-minlength')){return;}
714
+ return $(elem).data('minlength') > val.length;
715
+ }, 'Entered value is too short.');
716
+
717
+ var groupTimer = {};
718
+ addCustomValidityRule('group-required', function(elem, val){
719
+ var name = elem.name;
720
+ if(!name || elem.type !== 'checkbox' || !$(elem).hasClass('group-required')){return;}
721
+ var checkboxes = $( (elem.form && elem.form[name]) || document.getElementsByName(name));
722
+ var isValid = checkboxes.filter(':checked:enabled');
723
+ if(groupTimer[name]){
724
+ clearTimeout(groupTimer[name]);
725
+ }
726
+ groupTimer[name] = setTimeout(function(){
727
+ checkboxes
728
+ .addClass('group-required')
729
+ .unbind('click.groupRequired')
730
+ .bind('click.groupRequired', function(){
731
+ checkboxes.filter('.group-required').each(function(){
732
+ $.webshims.refreshCustomValidityRules(this);
733
+ });
734
+ })
735
+ ;
736
+ }, 9);
737
+
738
+ return !(isValid[0]);
739
+ }, 'Please check one of these checkboxes.');
740
+
741
+ // based on https://sites.google.com/site/abapexamples/javascript/luhn-validation
742
+ addCustomValidityRule('creditcard', function(elem, value){
743
+ if(!value || !$(elem).hasClass('creditcard-input')){return;}
744
+ value = value.replace(/\-/g, "");
745
+ //if it's not numeric return true >- for invalid
746
+ if(value != value * 1){return true;}
747
+ var len = value.length;
748
+ var sum = 0;
749
+ var mul = 1;
750
+ var ca;
751
+
752
+ while (len--) {
753
+ ca = parseInt(value.charAt(len),10) * mul;
754
+ sum += ca - (ca>9)*9;// sum += ca - (-(ca>9))|9
755
+ // 1 <--> 2 toggle.
756
+ mul ^= 3; // (mul = 3 - mul);
757
+ }
758
+ return !((sum%10 === 0) && (sum > 0));
759
+ }, 'Please enter a valid credit card number');
760
+
761
+ var dependentDefaults = {
762
+ //"from": "IDREF || UniqueNAMEREF", //required property: element
763
+ "prop": "value", //default: value||disabled (last if "from-prop" is checked)
764
+ "from-prop": "value", //default: value||checked (last if element checkbox or radio)
765
+ "toggle": false
766
+ };
767
+
768
+ var getGroupElements = function(elem) {
769
+ return $(elem.form[elem.name]).filter('[type="radio"]');
770
+ };
771
+ $.webshims.ready('form-validation', function(){
772
+ if($.webshims.modules){
773
+ getGroupElements = $.webshims.modules["form-core"].getGroupElements || getGroupElements;
774
+ }
775
+ });
776
+
777
+ addCustomValidityRule('dependent', function(elem, val){
778
+
779
+ if( !elem.getAttribute('data-dependent-validation') ){return;}
780
+
781
+ var data = $(elem).data('dependentValidation');
782
+ var specialVal;
783
+ if(!data){return;}
784
+ var depFn = function(e){
785
+ var val = $.prop(data.masterElement, data["from-prop"]);
786
+ if(specialVal){
787
+ val = $.inArray(val, specialVal) !== -1;
788
+ }
789
+ if(data.toggle){
790
+ val = !val;
791
+ }
792
+ $.prop( elem, data.prop, val);
793
+ if(e){
794
+ $(elem).getShadowElement().filter('.user-error, .user-success').trigger('refreshvalidityui');
795
+ }
796
+ };
797
+
798
+ if(!data._init || !data.masterElement){
799
+
800
+ if(typeof data == 'string'){
801
+ data = {"from": data};
802
+ }
803
+
804
+
805
+ data.masterElement = document.getElementById(data["from"]) || (document.getElementsByName(data["from"] || [])[0]);
806
+
807
+ if (!data.masterElement || !data.masterElement.form) {return;}
808
+
809
+ if(/radio|checkbox/i.test(data.masterElement.type)){
810
+ if(!data["from-prop"]){
811
+ data["from-prop"] = 'checked';
812
+ }
813
+ if(!data.prop && data["from-prop"] == 'checked'){
814
+ data.prop = 'disabled';
815
+ }
816
+ } else if(!data["from-prop"]){
817
+ data["from-prop"] = 'value';
818
+ }
819
+
820
+ if(data["from-prop"].indexOf('value:') === 0){
821
+ specialVal = data["from-prop"].replace('value:', '').split('||');
822
+ data["from-prop"] = 'value';
823
+
824
+ }
825
+
826
+ data = $.data(elem, 'dependentValidation', $.extend({_init: true}, dependentDefaults, data));
827
+
828
+ if(data.prop !== "value" || specialVal){
829
+ $(data.masterElement.type === 'radio' && getGroupElements(data.masterElement) || data.masterElement).bind('change', depFn);
830
+ } else {
831
+ $(data.masterElement).bind('change', function(){
832
+ $.webshims.refreshCustomValidityRules(elem);
833
+ $(elem).getShadowElement().filter('.user-error, .user-success').trigger('refreshvalidityui');
834
+ });
835
+ }
836
+ }
837
+
838
+ if(data.prop == "value" && !specialVal){
839
+ return ($.prop(data.masterElement, 'value') != val);
840
+ } else {
841
+ depFn();
842
+ return '';
843
+ }
844
+
845
+ }, 'The value of this field does not repeat the value of the other field');
846
+ })();
847
+
848
+ });