webshims-rails 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/lib/webshims-rails/version.rb +2 -2
  2. data/vendor/assets/javascripts/webshims/extras/custom-validity.js +253 -253
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +534 -534
  4. data/vendor/assets/javascripts/webshims/extras/mousepress.js +60 -60
  5. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +1 -1
  6. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +1 -1
  7. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +1 -1
  8. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +1 -1
  9. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +1 -1
  10. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +1 -1
  11. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +1 -1
  12. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +1 -1
  13. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +1 -1
  14. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +1 -1
  15. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +1 -1
  16. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +1 -1
  17. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +1 -1
  18. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +1 -1
  19. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +1 -1
  20. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +1 -1
  21. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +1 -1
  22. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +1 -1
  23. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +1 -1
  24. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +1 -1
  25. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +1 -1
  26. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +1 -1
  27. data/vendor/assets/javascripts/webshims/minified/shims/form-message.js +1 -1
  28. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-de.txt +33 -33
  29. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-en.txt +34 -34
  30. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +1 -1
  31. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-jaris.js +1 -1
  32. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +1 -1
  33. data/vendor/assets/javascripts/webshims/minified/shims/swf/JarisFLVPlayer.swf +0 -0
  34. data/vendor/assets/javascripts/webshims/polyfiller.js +1188 -1188
  35. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/README +82 -82
  36. data/vendor/assets/javascripts/webshims/shims/combos/1.js +1752 -1752
  37. data/vendor/assets/javascripts/webshims/shims/combos/10.js +3310 -3311
  38. data/vendor/assets/javascripts/webshims/shims/combos/11.js +1631 -1631
  39. data/vendor/assets/javascripts/webshims/shims/combos/12.js +1695 -1696
  40. data/vendor/assets/javascripts/webshims/shims/combos/13.js +1098 -1098
  41. data/vendor/assets/javascripts/webshims/shims/combos/14.js +477 -477
  42. data/vendor/assets/javascripts/webshims/shims/combos/15.js +317 -317
  43. data/vendor/assets/javascripts/webshims/shims/combos/16.js +2177 -2154
  44. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2354 -2319
  45. data/vendor/assets/javascripts/webshims/shims/combos/18.js +1322 -1322
  46. data/vendor/assets/javascripts/webshims/shims/combos/19.js +2262 -2238
  47. data/vendor/assets/javascripts/webshims/shims/combos/2.js +2376 -2340
  48. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1557 -1558
  49. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1745 -1733
  50. data/vendor/assets/javascripts/webshims/shims/combos/22.js +2360 -2361
  51. data/vendor/assets/javascripts/webshims/shims/combos/23.js +2342 -2331
  52. data/vendor/assets/javascripts/webshims/shims/combos/24.js +2859 -2836
  53. data/vendor/assets/javascripts/webshims/shims/combos/25.js +1547 -1548
  54. data/vendor/assets/javascripts/webshims/shims/combos/26.js +2178 -2155
  55. data/vendor/assets/javascripts/webshims/shims/combos/27.js +3311 -3312
  56. data/vendor/assets/javascripts/webshims/shims/combos/3.js +3058 -3022
  57. data/vendor/assets/javascripts/webshims/shims/combos/4.js +807 -771
  58. data/vendor/assets/javascripts/webshims/shims/combos/5.js +1063 -1027
  59. data/vendor/assets/javascripts/webshims/shims/combos/59.js +1745 -1709
  60. data/vendor/assets/javascripts/webshims/shims/combos/6.js +384 -384
  61. data/vendor/assets/javascripts/webshims/shims/combos/7.js +640 -640
  62. data/vendor/assets/javascripts/webshims/shims/combos/8.js +1546 -1547
  63. data/vendor/assets/javascripts/webshims/shims/combos/9.js +2507 -2508
  64. data/vendor/assets/javascripts/webshims/shims/details.js +148 -148
  65. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +949 -949
  66. data/vendor/assets/javascripts/webshims/shims/es5.js +802 -802
  67. data/vendor/assets/javascripts/webshims/shims/excanvas.js +924 -924
  68. data/vendor/assets/javascripts/webshims/shims/form-core.js +630 -606
  69. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +681 -681
  70. data/vendor/assets/javascripts/webshims/shims/form-message.js +176 -164
  71. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +255 -255
  72. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +383 -383
  73. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +1568 -1568
  74. data/vendor/assets/javascripts/webshims/shims/geolocation.js +168 -168
  75. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ar.js +32 -32
  76. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ch-ZN.js +32 -32
  77. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-de.txt +33 -33
  78. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-el.js +32 -32
  79. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-en.txt +34 -34
  80. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-es.js +31 -31
  81. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-fr.js +32 -32
  82. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-he.js +32 -32
  83. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-hi.js +32 -32
  84. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-hu.js +32 -32
  85. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-it.js +32 -32
  86. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ja.js +32 -32
  87. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-nl.js +32 -32
  88. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-pt-PT.js +32 -32
  89. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-ru.js +31 -31
  90. data/vendor/assets/javascripts/webshims/shims/i18n/errormessages-sv.js +32 -32
  91. data/vendor/assets/javascripts/webshims/shims/json-storage.js +308 -308
  92. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +596 -597
  93. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +891 -891
  94. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +98 -98
  95. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +960 -960
  96. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +543 -543
  97. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +697 -697
  98. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  99. metadata +2 -4
  100. data/vendor/assets/javascripts/webshims/minified/shims/range-ui.js +0 -1
  101. data/vendor/assets/javascripts/webshims/shims/range-ui.js +0 -66
@@ -1,6 +1,6 @@
1
1
  module Webshims
2
2
  module Rails
3
- VERSION = "0.4.5"
4
- WEBSHIMS_VERSION = "1.9.4"
3
+ VERSION = "0.4.6"
4
+ WEBSHIMS_VERSION = "1.9.5"
5
5
  end
6
6
  end
@@ -1,253 +1,253 @@
1
- (function($, window, document, undefined){
2
- "use strict";
3
- if(!$.webshims){
4
- var langs = navigator.browserLanguage || navigator.language || $('html').attr('lang') || '';
5
- $.webshims = {
6
- addReady: function(fn){$(function(){fn(document, $([]));});},
7
- ready: function(n, fn){fn();},
8
- activeLang: function(){return langs;}
9
- };
10
- }
11
- var webshims = $.webshims;
12
- var customValidityRules = {};
13
- var formReady = false;
14
- var blockCustom;
15
- var initTest;
16
- var onEventTest = function(e){
17
- webshims.refreshCustomValidityRules(e.target);
18
- };
19
-
20
-
21
- webshims.customErrorMessages = {};
22
- webshims.addCustomValidityRule = function(name, test, defaultMessage){
23
- customValidityRules[name] = test;
24
- if(!webshims.customErrorMessages[name]){
25
- webshims.customErrorMessages[name] = [];
26
- webshims.customErrorMessages[name][''] = defaultMessage || name;
27
- }
28
- if($.isReady && formReady){
29
- $('input, select, textarea').each(function(){
30
- testValidityRules(this);
31
- });
32
- }
33
- };
34
- webshims.refreshCustomValidityRules = function(elem){
35
- if(!elem.form || (!initTest && !$.prop(elem, 'willValidate')) ){return;}
36
- blockCustom = true;
37
- var customMismatchedRule = $.data(elem, 'customMismatchedRule');
38
- var validity = $.prop(elem, 'validity') || {};
39
- var message = '';
40
- if(customMismatchedRule || !validity.customError){
41
- var val = $(elem).val();
42
- $.each(customValidityRules, function(name, test){
43
- message = test(elem, val) || '';
44
- customMismatchedRule = name;
45
- if(message){
46
-
47
- if(typeof message != 'string'){
48
- message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || webshims.customErrorMessages[name][webshims.activeLang()] || webshims.customErrorMessages[name][''];
49
- }
50
-
51
- if(typeof message == 'object'){
52
- message = message[name] || message.customError || message.defaultMessage;
53
- }
54
- return false;
55
- }
56
- });
57
-
58
- if(message){
59
- $.data(elem, 'customMismatchedRule', customMismatchedRule);
60
- }
61
- $(elem).setCustomValidity(message);
62
- }
63
- blockCustom = false;
64
- };
65
- var testValidityRules = webshims.refreshCustomValidityRules;
66
-
67
- webshims.ready('forms', function(){
68
- formReady = true;
69
-
70
- var oldCustomValidity = $.fn.setCustomValidity || function(message){
71
- return this.each(function(){
72
- if(this.setCustomValidity){
73
- this.setCustomValidity(message);
74
- }
75
- });
76
- };
77
-
78
-
79
- $.fn.setCustomValidity = function(message){
80
- if(!blockCustom){
81
- this.data('customMismatchedRule', '');
82
- }
83
- return oldCustomValidity.apply(this, arguments);
84
- };
85
-
86
-
87
- $(document).bind('change', onEventTest);
88
-
89
- webshims.addReady(function(context, selfElement){
90
- initTest = true;
91
- $('input, select, textarea', context).add(selfElement.filter('input, select, textarea')).each(function(){
92
- testValidityRules(this);
93
- });
94
- initTest = false;
95
- });
96
- $(document).bind('refreshCustomValidityRules', onEventTest);
97
-
98
- });
99
-
100
- })(jQuery, window, document);
101
-
102
- /*
103
- * adds support for HTML5 constraint validation
104
- * - partial pattern: <input data-partial-pattern="RegExp" />
105
- * - creditcard-validation: <input class="creditcard-input" />
106
- * - several dependent-validation patterns (examples):
107
- * - <input type="email" id="mail" /> <input data-dependent-validation='mail' />
108
- * - <input type="date" id="start" data-dependent-validation='{"from": "end", "prop": "max"}' /> <input type="date" id="end" data-dependent-validation='{"from": "start", "prop": "min"}' />
109
- * - <input type="checkbox" id="check" /> <input data-dependent-validation='checkbox' />
110
- */
111
- (function($, window, document, undefined){
112
- "use strict";
113
- var addCustomValidityRule = $.webshims.addCustomValidityRule;
114
- addCustomValidityRule('partialPattern', function(elem, val){
115
- if(!val || !elem.getAttribute('data-partial-pattern')){return;}
116
- var pattern = $(elem).data('partial-pattern');
117
- if(!pattern){return;}
118
- return !(new RegExp('(' + pattern + ')', 'i').test(val));
119
- }, 'This format is not allowed here.');
120
-
121
- addCustomValidityRule('tooShort', function(elem, val){
122
- if(!val || !elem.getAttribute('data-minlength')){return;}
123
- return $(elem).data('minlength') > val.length;
124
- }, 'Entered value is too short.');
125
-
126
- var groupTimer = {};
127
- addCustomValidityRule('group-required', function(elem, val){
128
- var name = elem.name;
129
- if(!name || elem.type !== 'checkbox' || !$(elem).hasClass('group-required')){return;}
130
- var checkboxes = $( (elem.form && elem.form[name]) || document.getElementsByName(name));
131
- var isValid = checkboxes.filter(':checked');
132
- if(groupTimer[name]){
133
- clearTimeout(groupTimer[name]);
134
- }
135
- groupTimer[name] = setTimeout(function(){
136
- checkboxes
137
- .unbind('click.groupRequired')
138
- .bind('click.groupRequired', function(){
139
- checkboxes.filter('.group-required').each(function(){
140
- $.webshims.refreshCustomValidityRules(this);
141
- });
142
- })
143
- ;
144
- }, 9);
145
-
146
- return !(isValid[0]);
147
- }, 'Please check one of these checkboxes.');
148
-
149
- // based on https://sites.google.com/site/abapexamples/javascript/luhn-validation
150
- addCustomValidityRule('creditcard', function(elem, value){
151
- if(!value || !$(elem).hasClass('creditcard-input')){return;}
152
- value = value.replace(/\-/g, "");
153
- //if it's not numeric return true >- for invalid
154
- if(value != value * 1){return true;}
155
- var len = value.length;
156
- var sum = 0;
157
- var mul = 1;
158
- var ca;
159
-
160
- while (len--) {
161
- ca = parseInt(value.charAt(len),10) * mul;
162
- sum += ca - (ca>9)*9;// sum += ca - (-(ca>9))|9
163
- // 1 <--> 2 toggle.
164
- mul ^= 3; // (mul = 3 - mul);
165
- }
166
- return !((sum%10 === 0) && (sum > 0));
167
- }, 'Please enter a valid credit card number');
168
-
169
- var dependentDefaults = {
170
- //"from": "IDREF || UniqueNAMEREF", //required property: element
171
- "prop": "value", //default: value||disabled (last if "from-prop" is checked)
172
- "from-prop": "value", //default: value||checked (last if element checkbox or radio)
173
- "toggle": false
174
- };
175
-
176
- var getGroupElements = function(elem) {
177
- return $(elem.form[elem.name]).filter('[type="radio"]');
178
- };
179
- $.webshims.ready('form-core', function(){
180
- if($.webshims.modules){
181
- getGroupElements = $.webshims.modules["form-core"].getGroupElements || getGroupElements;
182
- }
183
- });
184
-
185
- addCustomValidityRule('dependent', function(elem, val){
186
-
187
- if( !elem.getAttribute('data-dependent-validation') ){return;}
188
-
189
- var data = $(elem).data('dependentValidation');
190
- var specialVal;
191
- if(!data){return;}
192
- var depFn = function(e){
193
- var val = $.prop(data.masterElement, data["from-prop"]);
194
- if(specialVal){
195
- val = $.inArray(val, specialVal) !== -1;
196
- }
197
- if(data.toggle){
198
- val = !val;
199
- }
200
- $.prop( elem, data.prop, val);
201
- };
202
-
203
- if(!data._init || !data.masterElement){
204
-
205
- if(typeof data == 'string'){
206
- data = {"from": data};
207
- }
208
-
209
-
210
- data.masterElement = document.getElementById(data["from"]) || (document.getElementsByName(data["from"] || [])[0]);
211
-
212
- if (!data.masterElement || !data.masterElement.form) {return;}
213
-
214
- if(/radio|checkbox/i.test(data.masterElement.type)){
215
- if(!data["from-prop"]){
216
- data["from-prop"] = 'checked';
217
- }
218
- if(!data.prop && data["from-prop"] == 'checked'){
219
- data.prop = 'disabled';
220
- }
221
- } else if(!data["from-prop"]){
222
- data["from-prop"] = 'value';
223
- }
224
-
225
- if(data["from-prop"].indexOf('value:') === 0){
226
- specialVal = data["from-prop"].replace('value:', '').split('||');
227
- data["from-prop"] = 'value';
228
-
229
- }
230
-
231
- data = $.data(elem, 'dependentValidation', $.extend({_init: true}, dependentDefaults, data));
232
-
233
- if(data.prop !== "value" || specialVal){
234
- $(data.masterElement.type === 'radio' && getGroupElements(data.masterElement) || data.masterElement).bind('change', depFn);
235
- } else {
236
- $(data.masterElement).bind('change', function(){
237
- $.webshims.refreshCustomValidityRules(elem);
238
- if($(elem).is('.user-error, .user-success')){
239
- $(elem).trigger('refreshvalidityui');
240
- }
241
- });
242
- }
243
- }
244
-
245
- if(data.prop == "value" && !specialVal){
246
- return ($.prop(data.masterElement, 'value') != val);
247
- } else {
248
- depFn();
249
- return '';
250
- }
251
-
252
- }, 'The value of this field does not repeat the value of the other field');
253
- })(jQuery, window, document);
1
+ (function($, window, document, undefined){
2
+ "use strict";
3
+ if(!$.webshims){
4
+ var langs = navigator.browserLanguage || navigator.language || $('html').attr('lang') || '';
5
+ $.webshims = {
6
+ addReady: function(fn){$(function(){fn(document, $([]));});},
7
+ ready: function(n, fn){fn();},
8
+ activeLang: function(){return langs;}
9
+ };
10
+ }
11
+ var webshims = $.webshims;
12
+ var customValidityRules = {};
13
+ var formReady = false;
14
+ var blockCustom;
15
+ var initTest;
16
+ var onEventTest = function(e){
17
+ webshims.refreshCustomValidityRules(e.target);
18
+ };
19
+
20
+
21
+ webshims.customErrorMessages = {};
22
+ webshims.addCustomValidityRule = function(name, test, defaultMessage){
23
+ customValidityRules[name] = test;
24
+ if(!webshims.customErrorMessages[name]){
25
+ webshims.customErrorMessages[name] = [];
26
+ webshims.customErrorMessages[name][''] = defaultMessage || name;
27
+ }
28
+ if($.isReady && formReady){
29
+ $('input, select, textarea').each(function(){
30
+ testValidityRules(this);
31
+ });
32
+ }
33
+ };
34
+ webshims.refreshCustomValidityRules = function(elem){
35
+ if(!elem.form || (!initTest && !$.prop(elem, 'willValidate')) ){return;}
36
+ blockCustom = true;
37
+ var customMismatchedRule = $.data(elem, 'customMismatchedRule');
38
+ var validity = $.prop(elem, 'validity') || {};
39
+ var message = '';
40
+ if(customMismatchedRule || !validity.customError){
41
+ var val = $(elem).val();
42
+ $.each(customValidityRules, function(name, test){
43
+ message = test(elem, val) || '';
44
+ customMismatchedRule = name;
45
+ if(message){
46
+
47
+ if(typeof message != 'string'){
48
+ message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || webshims.customErrorMessages[name][webshims.activeLang()] || webshims.customErrorMessages[name][''];
49
+ }
50
+
51
+ if(typeof message == 'object'){
52
+ message = message[name] || message.customError || message.defaultMessage;
53
+ }
54
+ return false;
55
+ }
56
+ });
57
+
58
+ if(message){
59
+ $.data(elem, 'customMismatchedRule', customMismatchedRule);
60
+ }
61
+ $(elem).setCustomValidity(message);
62
+ }
63
+ blockCustom = false;
64
+ };
65
+ var testValidityRules = webshims.refreshCustomValidityRules;
66
+
67
+ webshims.ready('forms', function(){
68
+ formReady = true;
69
+
70
+ var oldCustomValidity = $.fn.setCustomValidity || function(message){
71
+ return this.each(function(){
72
+ if(this.setCustomValidity){
73
+ this.setCustomValidity(message);
74
+ }
75
+ });
76
+ };
77
+
78
+
79
+ $.fn.setCustomValidity = function(message){
80
+ if(!blockCustom){
81
+ this.data('customMismatchedRule', '');
82
+ }
83
+ return oldCustomValidity.apply(this, arguments);
84
+ };
85
+
86
+
87
+ $(document).bind('change', onEventTest);
88
+
89
+ webshims.addReady(function(context, selfElement){
90
+ initTest = true;
91
+ $('input, select, textarea', context).add(selfElement.filter('input, select, textarea')).each(function(){
92
+ testValidityRules(this);
93
+ });
94
+ initTest = false;
95
+ });
96
+ $(document).bind('refreshCustomValidityRules', onEventTest);
97
+
98
+ });
99
+
100
+ })(jQuery, window, document);
101
+
102
+ /*
103
+ * adds support for HTML5 constraint validation
104
+ * - partial pattern: <input data-partial-pattern="RegExp" />
105
+ * - creditcard-validation: <input class="creditcard-input" />
106
+ * - several dependent-validation patterns (examples):
107
+ * - <input type="email" id="mail" /> <input data-dependent-validation='mail' />
108
+ * - <input type="date" id="start" data-dependent-validation='{"from": "end", "prop": "max"}' /> <input type="date" id="end" data-dependent-validation='{"from": "start", "prop": "min"}' />
109
+ * - <input type="checkbox" id="check" /> <input data-dependent-validation='checkbox' />
110
+ */
111
+ (function($, window, document, undefined){
112
+ "use strict";
113
+ var addCustomValidityRule = $.webshims.addCustomValidityRule;
114
+ addCustomValidityRule('partialPattern', function(elem, val){
115
+ if(!val || !elem.getAttribute('data-partial-pattern')){return;}
116
+ var pattern = $(elem).data('partial-pattern');
117
+ if(!pattern){return;}
118
+ return !(new RegExp('(' + pattern + ')', 'i').test(val));
119
+ }, 'This format is not allowed here.');
120
+
121
+ addCustomValidityRule('tooShort', function(elem, val){
122
+ if(!val || !elem.getAttribute('data-minlength')){return;}
123
+ return $(elem).data('minlength') > val.length;
124
+ }, 'Entered value is too short.');
125
+
126
+ var groupTimer = {};
127
+ addCustomValidityRule('group-required', function(elem, val){
128
+ var name = elem.name;
129
+ if(!name || elem.type !== 'checkbox' || !$(elem).hasClass('group-required')){return;}
130
+ var checkboxes = $( (elem.form && elem.form[name]) || document.getElementsByName(name));
131
+ var isValid = checkboxes.filter(':checked');
132
+ if(groupTimer[name]){
133
+ clearTimeout(groupTimer[name]);
134
+ }
135
+ groupTimer[name] = setTimeout(function(){
136
+ checkboxes
137
+ .unbind('click.groupRequired')
138
+ .bind('click.groupRequired', function(){
139
+ checkboxes.filter('.group-required').each(function(){
140
+ $.webshims.refreshCustomValidityRules(this);
141
+ });
142
+ })
143
+ ;
144
+ }, 9);
145
+
146
+ return !(isValid[0]);
147
+ }, 'Please check one of these checkboxes.');
148
+
149
+ // based on https://sites.google.com/site/abapexamples/javascript/luhn-validation
150
+ addCustomValidityRule('creditcard', function(elem, value){
151
+ if(!value || !$(elem).hasClass('creditcard-input')){return;}
152
+ value = value.replace(/\-/g, "");
153
+ //if it's not numeric return true >- for invalid
154
+ if(value != value * 1){return true;}
155
+ var len = value.length;
156
+ var sum = 0;
157
+ var mul = 1;
158
+ var ca;
159
+
160
+ while (len--) {
161
+ ca = parseInt(value.charAt(len),10) * mul;
162
+ sum += ca - (ca>9)*9;// sum += ca - (-(ca>9))|9
163
+ // 1 <--> 2 toggle.
164
+ mul ^= 3; // (mul = 3 - mul);
165
+ }
166
+ return !((sum%10 === 0) && (sum > 0));
167
+ }, 'Please enter a valid credit card number');
168
+
169
+ var dependentDefaults = {
170
+ //"from": "IDREF || UniqueNAMEREF", //required property: element
171
+ "prop": "value", //default: value||disabled (last if "from-prop" is checked)
172
+ "from-prop": "value", //default: value||checked (last if element checkbox or radio)
173
+ "toggle": false
174
+ };
175
+
176
+ var getGroupElements = function(elem) {
177
+ return $(elem.form[elem.name]).filter('[type="radio"]');
178
+ };
179
+ $.webshims.ready('form-core', function(){
180
+ if($.webshims.modules){
181
+ getGroupElements = $.webshims.modules["form-core"].getGroupElements || getGroupElements;
182
+ }
183
+ });
184
+
185
+ addCustomValidityRule('dependent', function(elem, val){
186
+
187
+ if( !elem.getAttribute('data-dependent-validation') ){return;}
188
+
189
+ var data = $(elem).data('dependentValidation');
190
+ var specialVal;
191
+ if(!data){return;}
192
+ var depFn = function(e){
193
+ var val = $.prop(data.masterElement, data["from-prop"]);
194
+ if(specialVal){
195
+ val = $.inArray(val, specialVal) !== -1;
196
+ }
197
+ if(data.toggle){
198
+ val = !val;
199
+ }
200
+ $.prop( elem, data.prop, val);
201
+ };
202
+
203
+ if(!data._init || !data.masterElement){
204
+
205
+ if(typeof data == 'string'){
206
+ data = {"from": data};
207
+ }
208
+
209
+
210
+ data.masterElement = document.getElementById(data["from"]) || (document.getElementsByName(data["from"] || [])[0]);
211
+
212
+ if (!data.masterElement || !data.masterElement.form) {return;}
213
+
214
+ if(/radio|checkbox/i.test(data.masterElement.type)){
215
+ if(!data["from-prop"]){
216
+ data["from-prop"] = 'checked';
217
+ }
218
+ if(!data.prop && data["from-prop"] == 'checked'){
219
+ data.prop = 'disabled';
220
+ }
221
+ } else if(!data["from-prop"]){
222
+ data["from-prop"] = 'value';
223
+ }
224
+
225
+ if(data["from-prop"].indexOf('value:') === 0){
226
+ specialVal = data["from-prop"].replace('value:', '').split('||');
227
+ data["from-prop"] = 'value';
228
+
229
+ }
230
+
231
+ data = $.data(elem, 'dependentValidation', $.extend({_init: true}, dependentDefaults, data));
232
+
233
+ if(data.prop !== "value" || specialVal){
234
+ $(data.masterElement.type === 'radio' && getGroupElements(data.masterElement) || data.masterElement).bind('change', depFn);
235
+ } else {
236
+ $(data.masterElement).bind('change', function(){
237
+ $.webshims.refreshCustomValidityRules(elem);
238
+ if($(elem).is('.user-error, .user-success')){
239
+ $(elem).trigger('refreshvalidityui');
240
+ }
241
+ });
242
+ }
243
+ }
244
+
245
+ if(data.prop == "value" && !specialVal){
246
+ return ($.prop(data.masterElement, 'value') != val);
247
+ } else {
248
+ depFn();
249
+ return '';
250
+ }
251
+
252
+ }, 'The value of this field does not repeat the value of the other field');
253
+ })(jQuery, window, document);