webshims-rails 1.12.2 → 1.12.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) 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 +2 -40
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +10 -18
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +5 -2
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +2 -2
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +2 -2
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +3 -2
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +3 -2
  10. data/vendor/assets/javascripts/webshims/shims/combos/14.js +26 -19
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +29 -19
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +31 -21
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2 -2
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +2 -2
  15. data/vendor/assets/javascripts/webshims/shims/combos/19.js +3 -2
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +5 -2
  17. data/vendor/assets/javascripts/webshims/shims/combos/20.js +3 -2
  18. data/vendor/assets/javascripts/webshims/shims/combos/23.js +2 -2
  19. data/vendor/assets/javascripts/webshims/shims/combos/24.js +1 -1
  20. data/vendor/assets/javascripts/webshims/shims/combos/25.js +3 -2
  21. data/vendor/assets/javascripts/webshims/shims/combos/28.js +26 -19
  22. data/vendor/assets/javascripts/webshims/shims/combos/3.js +29 -19
  23. data/vendor/assets/javascripts/webshims/shims/combos/30.js +29 -19
  24. data/vendor/assets/javascripts/webshims/shims/combos/31.js +3 -0
  25. data/vendor/assets/javascripts/webshims/shims/combos/4.js +26 -19
  26. data/vendor/assets/javascripts/webshims/shims/combos/5.js +2 -2
  27. data/vendor/assets/javascripts/webshims/shims/combos/6.js +2 -2
  28. data/vendor/assets/javascripts/webshims/shims/combos/7.js +31 -21
  29. data/vendor/assets/javascripts/webshims/shims/combos/8.js +31 -21
  30. data/vendor/assets/javascripts/webshims/shims/combos/9.js +2 -2
  31. data/vendor/assets/javascripts/webshims/shims/form-core.js +3 -0
  32. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +3 -3
  33. data/vendor/assets/javascripts/webshims/shims/form-message.js +26 -19
  34. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +1 -1
  35. data/vendor/assets/javascripts/webshims/shims/form-validation.js +13 -12
  36. data/vendor/assets/javascripts/webshims/shims/form-validators.js +61 -58
  37. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +2 -2
  38. data/vendor/assets/javascripts/webshims/shims/range-ui.js +2 -2
  39. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +45 -25
  40. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-forms-ext.scss +20 -4
  41. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +29 -26
  42. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +3 -0
  43. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +6 -3
  44. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  45. metadata +2 -2
@@ -831,7 +831,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
831
831
  _create: function(){
832
832
  var i;
833
833
 
834
- this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min ws-range-progress" /><span class="ws-range-rail ws-range-track"><span class="ws-range-thumb"><span data-value="" data-valuetext="" /></span></span>');
834
+ this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min ws-range-progress" /><span class="ws-range-rail ws-range-track"><span class="ws-range-thumb"><span><span data-value="" data-valuetext="" /></span></span></span>');
835
835
  this.trail = $('.ws-range-track', this.element);
836
836
  this.range = $('.ws-range-progress', this.element);
837
837
  this.thumb = $('.ws-range-thumb', this.trail);
@@ -913,7 +913,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
913
913
  'aria-valuenow': this.options.value,
914
914
  'aria-valuetext': textValue
915
915
  });
916
- $('span', this.thumb).attr({
916
+ $('span[data-value]', this.thumb).attr({
917
917
  'data-value': this.options.value,
918
918
  'data-valuetext': textValue
919
919
  });
@@ -831,7 +831,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
831
831
  _create: function(){
832
832
  var i;
833
833
 
834
- this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min ws-range-progress" /><span class="ws-range-rail ws-range-track"><span class="ws-range-thumb"><span data-value="" data-valuetext="" /></span></span>');
834
+ this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min ws-range-progress" /><span class="ws-range-rail ws-range-track"><span class="ws-range-thumb"><span><span data-value="" data-valuetext="" /></span></span></span>');
835
835
  this.trail = $('.ws-range-track', this.element);
836
836
  this.range = $('.ws-range-progress', this.element);
837
837
  this.thumb = $('.ws-range-thumb', this.trail);
@@ -913,7 +913,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
913
913
  'aria-valuenow': this.options.value,
914
914
  'aria-valuetext': textValue
915
915
  });
916
- $('span', this.thumb).attr({
916
+ $('span[data-value]', this.thumb).attr({
917
917
  'data-value': this.options.value,
918
918
  'data-valuetext': textValue
919
919
  });
@@ -1828,6 +1828,9 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1828
1828
  if(typeof message == 'object'){
1829
1829
  message = message.defaultMessage;
1830
1830
  }
1831
+ if(webshims.replaceValidationplaceholder){
1832
+ message = webshims.replaceValidationplaceholder(elem, message);
1833
+ }
1831
1834
  return message || '';
1832
1835
  };
1833
1836
 
@@ -1968,27 +1971,17 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1968
1971
  }
1969
1972
  return message || '';
1970
1973
  };
1974
+ var lReg = /</g;
1975
+ var gReg = />/g;
1971
1976
  var valueVals = {
1972
1977
  value: 1,
1973
1978
  min: 1,
1974
1979
  max: 1
1975
1980
  };
1976
-
1977
- webshims.createValidationMessage = function(elem, name){
1978
- var widget;
1979
- var type = $.prop(elem, 'type');
1980
- var message = getMessageFromObj(currentValidationMessage[name], elem);
1981
- if(!message && name == 'badInput'){
1982
- message = getMessageFromObj(currentValidationMessage.typeMismatch, elem);
1983
- }
1984
- if(!message && name == 'typeMismatch'){
1985
- message = getMessageFromObj(currentValidationMessage.badInput, elem);
1986
- }
1987
- if(!message){
1988
- message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
1989
- webshims.info('could not find errormessage for: '+ name +' / '+ type +'. in language: '+webshims.activeLang());
1990
- }
1991
- if(message){
1981
+
1982
+ webshims.replaceValidationplaceholder = function(elem, message, name){
1983
+ var type, widget;
1984
+ if(message && message.indexOf('{%') != -1){
1992
1985
  ['value', 'min', 'max', 'title', 'maxlength', 'minlength', 'label'].forEach(function(attr){
1993
1986
  if(message.indexOf('{%'+attr) === -1){return;}
1994
1987
  var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.prop(elem, attr)) || '';
@@ -1997,19 +1990,36 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1997
1990
  }
1998
1991
  if(valueVals[attr]){
1999
1992
  if(!widget){
2000
- widget = $(elem).getShadowElement().data('wsWidget'+type);
1993
+ widget = $(elem).getShadowElement().data('wsWidget'+ (type = $.prop(elem, 'type')));
2001
1994
  }
2002
1995
  if(widget && widget.formatValue){
2003
1996
  val = widget.formatValue(val, false);
2004
1997
  }
2005
1998
  }
2006
- message = message.replace('{%'+ attr +'}', val);
1999
+ message = message.replace('{%'+ attr +'}', val.replace(lReg, '&lt;').replace(gReg, '&gt;'));
2007
2000
  if('value' == attr){
2008
2001
  message = message.replace('{%valueLen}', val.length);
2009
2002
  }
2010
-
2003
+
2011
2004
  });
2012
2005
  }
2006
+ return message;
2007
+ };
2008
+
2009
+ webshims.createValidationMessage = function(elem, name){
2010
+
2011
+ var message = getMessageFromObj(currentValidationMessage[name], elem);
2012
+ if(!message && name == 'badInput'){
2013
+ message = getMessageFromObj(currentValidationMessage.typeMismatch, elem);
2014
+ }
2015
+ if(!message && name == 'typeMismatch'){
2016
+ message = getMessageFromObj(currentValidationMessage.badInput, elem);
2017
+ }
2018
+ if(!message){
2019
+ message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
2020
+ webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
2021
+ }
2022
+ message = webshims.replaceValidationplaceholder(elem, message, name);
2013
2023
 
2014
2024
  return message || '';
2015
2025
  };
@@ -2469,7 +2479,7 @@ webshims.register('form-core', function($, webshims, window, document, undefined
2469
2479
  hasFullTrackSupport = Modernizr.track && !bugs.track;
2470
2480
 
2471
2481
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
2472
- hasSwf = swfmini.hasFlashPlayerVersion('9.0.115');
2482
+ hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
2473
2483
  $('html').addClass(hasSwf ? 'swf' : 'no-swf');
2474
2484
  var mediaelement = webshims.mediaelement;
2475
2485
 
@@ -3062,4 +3072,4 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
3062
3072
  }
3063
3073
  webshims.ready('track', loadTrackUi);
3064
3074
  });
3065
- })(Modernizr, webshims);
3075
+ })(Modernizr, webshims);
@@ -1828,6 +1828,9 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1828
1828
  if(typeof message == 'object'){
1829
1829
  message = message.defaultMessage;
1830
1830
  }
1831
+ if(webshims.replaceValidationplaceholder){
1832
+ message = webshims.replaceValidationplaceholder(elem, message);
1833
+ }
1831
1834
  return message || '';
1832
1835
  };
1833
1836
 
@@ -1968,27 +1971,17 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1968
1971
  }
1969
1972
  return message || '';
1970
1973
  };
1974
+ var lReg = /</g;
1975
+ var gReg = />/g;
1971
1976
  var valueVals = {
1972
1977
  value: 1,
1973
1978
  min: 1,
1974
1979
  max: 1
1975
1980
  };
1976
-
1977
- webshims.createValidationMessage = function(elem, name){
1978
- var widget;
1979
- var type = $.prop(elem, 'type');
1980
- var message = getMessageFromObj(currentValidationMessage[name], elem);
1981
- if(!message && name == 'badInput'){
1982
- message = getMessageFromObj(currentValidationMessage.typeMismatch, elem);
1983
- }
1984
- if(!message && name == 'typeMismatch'){
1985
- message = getMessageFromObj(currentValidationMessage.badInput, elem);
1986
- }
1987
- if(!message){
1988
- message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
1989
- webshims.info('could not find errormessage for: '+ name +' / '+ type +'. in language: '+webshims.activeLang());
1990
- }
1991
- if(message){
1981
+
1982
+ webshims.replaceValidationplaceholder = function(elem, message, name){
1983
+ var type, widget;
1984
+ if(message && message.indexOf('{%') != -1){
1992
1985
  ['value', 'min', 'max', 'title', 'maxlength', 'minlength', 'label'].forEach(function(attr){
1993
1986
  if(message.indexOf('{%'+attr) === -1){return;}
1994
1987
  var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.prop(elem, attr)) || '';
@@ -1997,19 +1990,36 @@ webshims.register('form-core', function($, webshims, window, document, undefined
1997
1990
  }
1998
1991
  if(valueVals[attr]){
1999
1992
  if(!widget){
2000
- widget = $(elem).getShadowElement().data('wsWidget'+type);
1993
+ widget = $(elem).getShadowElement().data('wsWidget'+ (type = $.prop(elem, 'type')));
2001
1994
  }
2002
1995
  if(widget && widget.formatValue){
2003
1996
  val = widget.formatValue(val, false);
2004
1997
  }
2005
1998
  }
2006
- message = message.replace('{%'+ attr +'}', val);
1999
+ message = message.replace('{%'+ attr +'}', val.replace(lReg, '&lt;').replace(gReg, '&gt;'));
2007
2000
  if('value' == attr){
2008
2001
  message = message.replace('{%valueLen}', val.length);
2009
2002
  }
2010
-
2003
+
2011
2004
  });
2012
2005
  }
2006
+ return message;
2007
+ };
2008
+
2009
+ webshims.createValidationMessage = function(elem, name){
2010
+
2011
+ var message = getMessageFromObj(currentValidationMessage[name], elem);
2012
+ if(!message && name == 'badInput'){
2013
+ message = getMessageFromObj(currentValidationMessage.typeMismatch, elem);
2014
+ }
2015
+ if(!message && name == 'typeMismatch'){
2016
+ message = getMessageFromObj(currentValidationMessage.badInput, elem);
2017
+ }
2018
+ if(!message){
2019
+ message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
2020
+ webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
2021
+ }
2022
+ message = webshims.replaceValidationplaceholder(elem, message, name);
2013
2023
 
2014
2024
  return message || '';
2015
2025
  };
@@ -2172,7 +2182,7 @@ webshims.register('form-core', function($, webshims, window, document, undefined
2172
2182
  hasFullTrackSupport = Modernizr.track && !bugs.track;
2173
2183
 
2174
2184
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined, options){
2175
- hasSwf = swfmini.hasFlashPlayerVersion('9.0.115');
2185
+ hasSwf = swfmini.hasFlashPlayerVersion('10.0.3');
2176
2186
  $('html').addClass(hasSwf ? 'swf' : 'no-swf');
2177
2187
  var mediaelement = webshims.mediaelement;
2178
2188
 
@@ -2765,4 +2775,4 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2765
2775
  }
2766
2776
  webshims.ready('track', loadTrackUi);
2767
2777
  });
2768
- })(Modernizr, webshims);
2778
+ })(Modernizr, webshims);
@@ -1160,7 +1160,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1160
1160
  _create: function(){
1161
1161
  var i;
1162
1162
 
1163
- this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min ws-range-progress" /><span class="ws-range-rail ws-range-track"><span class="ws-range-thumb"><span data-value="" data-valuetext="" /></span></span>');
1163
+ this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min ws-range-progress" /><span class="ws-range-rail ws-range-track"><span class="ws-range-thumb"><span><span data-value="" data-valuetext="" /></span></span></span>');
1164
1164
  this.trail = $('.ws-range-track', this.element);
1165
1165
  this.range = $('.ws-range-progress', this.element);
1166
1166
  this.thumb = $('.ws-range-thumb', this.trail);
@@ -1242,7 +1242,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1242
1242
  'aria-valuenow': this.options.value,
1243
1243
  'aria-valuetext': textValue
1244
1244
  });
1245
- $('span', this.thumb).attr({
1245
+ $('span[data-value]', this.thumb).attr({
1246
1246
  'data-value': this.options.value,
1247
1247
  'data-valuetext': textValue
1248
1248
  });
@@ -232,6 +232,9 @@ webshims.register('form-core', function($, webshims, window, document, undefined
232
232
  if(typeof message == 'object'){
233
233
  message = message.defaultMessage;
234
234
  }
235
+ if(webshims.replaceValidationplaceholder){
236
+ message = webshims.replaceValidationplaceholder(elem, message);
237
+ }
235
238
  return message || '';
236
239
  };
237
240
 
@@ -80,7 +80,7 @@ webshims.register('form-datalist-lazy', function($, webshims, window, document,
80
80
  var keyCode = e.keyCode;
81
81
  var activeItem;
82
82
  var items;
83
- var doValue = that.options.noInlineValue ? 'onlyScroll' : true;
83
+ var doValue = !!that.options.inlineValue || 'onlyScroll';
84
84
 
85
85
  if(keyCode == 40 && !that.showList()){
86
86
  that.markItem(that.index + 1, doValue);
@@ -198,7 +198,7 @@ webshims.register('form-datalist-lazy', function($, webshims, window, document,
198
198
  }
199
199
  }
200
200
 
201
- if(this.options.noInlineValue && !this.options.valueCompletion){
201
+ if(!this.options.inlineValue && !this.options.valueCompletion){
202
202
  $.attr(this.input, 'aria-autocomplete', 'list');
203
203
  $.attr(this.input, 'aria-expanded', 'false');
204
204
  }
@@ -376,7 +376,7 @@ webshims.register('form-datalist-lazy', function($, webshims, window, document,
376
376
  this.removeMark(lis.removeClass('hidden-item'));
377
377
  found = true;
378
378
  }
379
-
379
+
380
380
  this.hasViewableData = found;
381
381
  if(!_fromShowList && found){
382
382
  if(this.popover.isVisible && this.popover.element.attr('data-vertical') == 'bottom'){
@@ -118,27 +118,17 @@ webshims.register('form-message', function($, webshims, window, document, undefi
118
118
  }
119
119
  return message || '';
120
120
  };
121
+ var lReg = /</g;
122
+ var gReg = />/g;
121
123
  var valueVals = {
122
124
  value: 1,
123
125
  min: 1,
124
126
  max: 1
125
127
  };
126
-
127
- webshims.createValidationMessage = function(elem, name){
128
- var widget;
129
- var type = $.prop(elem, 'type');
130
- var message = getMessageFromObj(currentValidationMessage[name], elem);
131
- if(!message && name == 'badInput'){
132
- message = getMessageFromObj(currentValidationMessage.typeMismatch, elem);
133
- }
134
- if(!message && name == 'typeMismatch'){
135
- message = getMessageFromObj(currentValidationMessage.badInput, elem);
136
- }
137
- if(!message){
138
- message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
139
- webshims.info('could not find errormessage for: '+ name +' / '+ type +'. in language: '+webshims.activeLang());
140
- }
141
- if(message){
128
+
129
+ webshims.replaceValidationplaceholder = function(elem, message, name){
130
+ var type, widget;
131
+ if(message && message.indexOf('{%') != -1){
142
132
  ['value', 'min', 'max', 'title', 'maxlength', 'minlength', 'label'].forEach(function(attr){
143
133
  if(message.indexOf('{%'+attr) === -1){return;}
144
134
  var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.prop(elem, attr)) || '';
@@ -147,19 +137,36 @@ webshims.register('form-message', function($, webshims, window, document, undefi
147
137
  }
148
138
  if(valueVals[attr]){
149
139
  if(!widget){
150
- widget = $(elem).getShadowElement().data('wsWidget'+type);
140
+ widget = $(elem).getShadowElement().data('wsWidget'+ (type = $.prop(elem, 'type')));
151
141
  }
152
142
  if(widget && widget.formatValue){
153
143
  val = widget.formatValue(val, false);
154
144
  }
155
145
  }
156
- message = message.replace('{%'+ attr +'}', val);
146
+ message = message.replace('{%'+ attr +'}', val.replace(lReg, '&lt;').replace(gReg, '&gt;'));
157
147
  if('value' == attr){
158
148
  message = message.replace('{%valueLen}', val.length);
159
149
  }
160
-
150
+
161
151
  });
162
152
  }
153
+ return message;
154
+ };
155
+
156
+ webshims.createValidationMessage = function(elem, name){
157
+
158
+ var message = getMessageFromObj(currentValidationMessage[name], elem);
159
+ if(!message && name == 'badInput'){
160
+ message = getMessageFromObj(currentValidationMessage.typeMismatch, elem);
161
+ }
162
+ if(!message && name == 'typeMismatch'){
163
+ message = getMessageFromObj(currentValidationMessage.badInput, elem);
164
+ }
165
+ if(!message){
166
+ message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
167
+ webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
168
+ }
169
+ message = webshims.replaceValidationplaceholder(elem, message, name);
163
170
 
164
171
  return message || '';
165
172
  };
@@ -263,7 +263,7 @@ if(!Modernizr.formattribute || !Modernizr.fieldsetdisabled || !Modernizr.fieldse
263
263
  },
264
264
  removeAttr: {
265
265
  value: function(){
266
- desc.set.call(this, false);
266
+ desc.prop.set.call(this, false);
267
267
  }
268
268
  }
269
269
  });
@@ -507,7 +507,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
507
507
  message = elem.getErrorMessage();
508
508
  }
509
509
  if (message) {
510
- api.contentElement.text(message);
510
+ api.contentElement.html(message);
511
511
  } else {
512
512
  this.hide();
513
513
  }
@@ -623,7 +623,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
623
623
  $(elem).data('errormessage', errorMessages);
624
624
  }
625
625
  if(webshims.getOptions){
626
- webshims.getOptions(elem, 'errormessage');
626
+ webshims.getOptions(elem, 'errormessage', false, true);
627
627
  }
628
628
  });
629
629
 
@@ -638,14 +638,16 @@ webshims.register('form-validation', function($, webshims, window, document, und
638
638
  if(!fieldWrapper){
639
639
  fieldWrapper = this.getFieldWrapper(elem);
640
640
  }
641
+ var type;
641
642
  var errorBox = fieldWrapper.data('errorbox');
642
- if(!errorBox){
643
- errorBox = this.create(elem, fieldWrapper);
643
+ if((type = typeof errorBox) != 'object'){
644
+ if(!errorBox){
645
+ errorBox = this.create(elem, fieldWrapper);
646
+ } else if(type == 'string'){
647
+ errorBox = $('#'+errorBox);
648
+ fieldWrapper.data('errorbox', errorBox, fieldWrapper);
649
+ }
644
650
  this._createContentMessage(elem, errorBox, fieldWrapper);
645
- } else if(typeof errorBox == 'string'){
646
- errorBox = $('#'+errorBox);
647
- fieldWrapper.data('errorbox', errorBox, fieldWrapper);
648
- this._createContentMessage(elem, errorBox);
649
651
  }
650
652
  return errorBox;
651
653
  },
@@ -661,16 +663,15 @@ webshims.register('form-validation', function($, webshims, window, document, und
661
663
  check();
662
664
  },
663
665
  hideError: function(elem, reset){
664
- var invalid;
666
+ var invalid, errorBox;
665
667
  var fieldWrapper = this.getFieldWrapper(elem);
666
- //only if an errorbox was already created! don't use this.get here!
667
- var errorBox = fieldWrapper.data('errorbox');
668
668
 
669
- if(errorBox && errorBox.jquery){
669
+ if(fieldWrapper.hasClass(invalidWrapperClass)){
670
670
  $(elem).filter('input').off('.recheckinvalid');
671
671
  if(!reset && (invalid = $('input:invalid, select:invalid, textarea:invalid', fieldWrapper)[0])){
672
672
  $(invalid).trigger('refreshvalidityui');
673
673
  } else {
674
+ errorBox = this.get(elem, fieldWrapper);
674
675
  fieldWrapper.removeClass(invalidWrapperClass);
675
676
  errorBox.message = '';
676
677
  errorBox[fx[iVal.fx].hide](function(){
@@ -42,40 +42,38 @@ webshims.register('form-validators', function($, webshims, window, document, und
42
42
  };
43
43
  webshims.refreshCustomValidityRules = function(elem){
44
44
  if(!initTest){return;}
45
- var val;
46
- var data = $(elem).data() || $.data(elem, {});
47
- var customMismatchedRule = data.customMismatchedRule;
48
- var validity = $.prop(elem, 'validity') || {};
45
+ var val, setMessage;
46
+ var data = $(elem).data();
49
47
  var message = '';
50
- var setMessage = function(message, errorType){
51
- blockCustom = true;
52
-
53
-
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 || '';
48
+ var customMismatchedRule = data && data.customMismatchedRule;
49
+ var validity = data && $.prop(elem, 'validity') || {valid: 1};
50
+
51
+ if(data && (customMismatchedRule || validity.valid)){
52
+ setMessage = function(message, errorType){
53
+ blockCustom = true;
54
+
55
+ if(message){
56
+ data.customMismatchedRule = errorType;
57
+
58
+ if(typeof message != 'string'){
59
+ message = webshims.getContentValidationMessage(elem, false, errorType);
60
+
61
+ if(message && typeof message == 'object'){
62
+ message = message[errorType];
63
+ }
64
+
65
+ if(!message || typeof message != 'string'){
66
+ message = webshims.customErrorMessages[errorType][webshims.activeLang()] || webshims.customErrorMessages[errorType][''] || message.customError || message.defaultMessage || '';
67
+ }
66
68
  }
69
+ } else {
70
+ message = '';
71
+ data.customMismatchedRule = '';
67
72
  }
68
- } else {
69
- message = '';
70
- data.customMismatchedRule = '';
71
- }
72
-
73
-
74
-
75
- $(elem).setCustomValidity(message);
76
- blockCustom = false;
77
- };
78
- if(customMismatchedRule || validity.valid){
73
+
74
+ $(elem).setCustomValidity(message);
75
+ blockCustom = false;
76
+ };
79
77
  val = $(elem).val();
80
78
  $.each(customValidityRules, function(name, test){
81
79
  message = test(elem, val, data, setMessage) || '';
@@ -85,7 +83,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
85
83
  }
86
84
  });
87
85
 
88
- if(data.dependentValidation && !data.dependentValidation._init && !data.dependentValidation.masterElement){
86
+ if(data && data.dependentValidation && !data.dependentValidation._init && !data.dependentValidation.masterElement){
89
87
  customValidityRules.dependent(elem, val, data, $.noop);
90
88
  }
91
89
  if(message != 'async' && (message || !validity.valid)){
@@ -130,7 +128,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
130
128
  /*
131
129
  * adds support for HTML5 constraint validation
132
130
  * - partial pattern: <input data-partial-pattern="RegExp" />
133
- * - creditcard-validation: <input class="creditcard-input" />
131
+ * - creditcard-validation: <input data-creditcard="" />
134
132
  * - several dependent-validation patterns (examples):
135
133
  * - <input type="email" id="mail" /> <input data-dependent-validation='mail' />
136
134
  * - <input type="date" id="start" data-dependent-validation='{"from": "end", "prop": "max"}' /> <input type="date" id="end" data-dependent-validation='{"from": "start", "prop": "min"}' />
@@ -140,7 +138,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
140
138
  var formCFG = webshims.cfg.forms;
141
139
  var addCustomValidityRule = webshims.addCustomValidityRule;
142
140
  var getId = function(name){
143
- return document.getElementById(name);
141
+ return document.getElementById(name) || document.getElementsByName(name);
144
142
  };
145
143
  addCustomValidityRule('partialPattern', function(elem, val, pattern){
146
144
  pattern = pattern.partialPattern;
@@ -157,34 +155,30 @@ webshims.register('form-validators', function($, webshims, window, document, und
157
155
  }
158
156
  return data.minlength > val.length;
159
157
  }, 'Entered value is too short.');
160
-
161
- var groupTimer = {};
162
- addCustomValidityRule('group-required', function(elem, val){
158
+
159
+ addCustomValidityRule('grouprequired', function(elem, val, data){
160
+ var form;
163
161
  var name = elem.name;
164
- if(!name || elem.type !== 'checkbox' || !$(elem).hasClass('group-required')){return;}
165
- var checkboxes = $( (elem.form && elem.form[name]) || document.getElementsByName(name));
166
- var isValid = checkboxes.filter(':checked:enabled');
167
- if(groupTimer[name]){
168
- clearTimeout(groupTimer[name]);
169
- }
170
- groupTimer[name] = setTimeout(function(){
171
- checkboxes
172
- .addClass('group-required')
162
+ if(!name || elem.type !== 'checkbox' || !('grouprequired' in data)){return;}
163
+
164
+ if(!data.grouprequired || !data.grouprequired.checkboxes){
165
+ data.grouprequired.checkboxes = $( ((form = $.prop(elem, 'form')) && form[name]) || document.getElementsByName(name)).filter('[type="checkbox"]');
166
+ data.grouprequired.checkboxes
173
167
  .off('click.groupRequired')
174
168
  .on('click.groupRequired', function(){
175
- checkboxes.filter('.group-required').each(function(){
176
- webshims.refreshCustomValidityRules(this);
177
- });
169
+ webshims.refreshCustomValidityRules(elem);
178
170
  })
179
171
  ;
180
- }, 9);
172
+ data.grouprequired.checkboxes.not(elem).removeData('grouprequired');
173
+ }
174
+
181
175
 
182
- return !(isValid[0]);
176
+ return !(data.grouprequired.checkboxes.filter(':checked:enabled')[0]);
183
177
  }, 'Please check one of these checkboxes.');
184
178
 
185
179
  // based on https://sites.google.com/site/abapexamples/javascript/luhn-validation
186
- addCustomValidityRule('creditcard', function(elem, value){
187
- if(!value || !$(elem).hasClass('creditcard-input')){return;}
180
+ addCustomValidityRule('creditcard', function(elem, value, data){
181
+ if(!value || (!data || !('creditcard' in data))){return;}
188
182
  value = value.replace(/\-/g, "");
189
183
  //if it's not numeric return true >- for invalid
190
184
  if(value != value * 1){return true;}
@@ -267,11 +261,17 @@ webshims.register('form-validators', function($, webshims, window, document, und
267
261
  data = $.data(elem, 'dependentValidation', $.extend({_init: true}, dependentDefaults, data));
268
262
 
269
263
  if(data.prop !== "value" || specialVal){
270
- $(data.masterElement.type === 'radio' && getGroupElements(data.masterElement) || data.masterElement).bind('change', depFn);
264
+ $(data.masterElement.type === 'radio' && getGroupElements(data.masterElement) || data.masterElement).on('change', depFn);
271
265
  } else {
272
- $(data.masterElement).bind('change', function(){
273
- webshims.refreshCustomValidityRules(elem);
274
- $(elem).getShadowElement().filter('.user-error, .user-success').trigger('refreshvalidityui');
266
+ $(data.masterElement).on('change', function(){
267
+ $(elem)
268
+ .getShadowElement()
269
+ .filter('.user-error, .user-success')
270
+ .each(function(){
271
+ webshims.refreshCustomValidityRules(elem);
272
+ })
273
+ .trigger('refreshvalidityui')
274
+ ;
275
275
  });
276
276
  }
277
277
  }
@@ -294,7 +294,10 @@ webshims.register('form-validators', function($, webshims, window, document, und
294
294
  if(typeof data.ajaxvalidate == 'string'){
295
295
  data.ajaxvalidate = {url: data.ajaxvalidate, depends: $([])};
296
296
  } else {
297
- data.ajaxvalidate.depends = data.ajaxvalidate.depends ? $(data.ajaxvalidate.depends).map(getId) : $([]);
297
+ data.ajaxvalidate.depends = data.ajaxvalidate.depends ?
298
+ $(typeof data.ajaxvalidate.depends == 'string' && data.ajaxvalidate.depends.split(' ') || data.ajaxvalidate.depends).map(getId) :
299
+ $([])
300
+ ;
298
301
  }
299
302
 
300
303
  data.ajaxvalidate.depends.on('refreshCustomValidityRules', function(){