webshims-rails 1.12.7 → 1.13.0

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +12 -1
  4. data/vendor/assets/javascripts/webshims/shims/combos/1.js +4 -1
  5. data/vendor/assets/javascripts/webshims/shims/combos/10.js +7 -4
  6. data/vendor/assets/javascripts/webshims/shims/combos/11.js +7 -4
  7. data/vendor/assets/javascripts/webshims/shims/combos/14.js +23 -10
  8. data/vendor/assets/javascripts/webshims/shims/combos/15.js +7 -2
  9. data/vendor/assets/javascripts/webshims/shims/combos/16.js +7 -2
  10. data/vendor/assets/javascripts/webshims/shims/combos/17.js +28 -13
  11. data/vendor/assets/javascripts/webshims/shims/combos/18.js +28 -13
  12. data/vendor/assets/javascripts/webshims/shims/combos/19.js +5 -4
  13. data/vendor/assets/javascripts/webshims/shims/combos/2.js +4 -1
  14. data/vendor/assets/javascripts/webshims/shims/combos/20.js +5 -4
  15. data/vendor/assets/javascripts/webshims/shims/combos/21.js +5 -4
  16. data/vendor/assets/javascripts/webshims/shims/combos/25.js +5 -4
  17. data/vendor/assets/javascripts/webshims/shims/combos/28.js +24 -10
  18. data/vendor/assets/javascripts/webshims/shims/combos/29.js +20 -9
  19. data/vendor/assets/javascripts/webshims/shims/combos/3.js +7 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/30.js +7 -2
  21. data/vendor/assets/javascripts/webshims/shims/combos/31.js +4 -1
  22. data/vendor/assets/javascripts/webshims/shims/combos/32.js +21 -9
  23. data/vendor/assets/javascripts/webshims/shims/combos/33.js +21 -9
  24. data/vendor/assets/javascripts/webshims/shims/combos/4.js +3 -1
  25. data/vendor/assets/javascripts/webshims/shims/combos/5.js +28 -13
  26. data/vendor/assets/javascripts/webshims/shims/combos/6.js +28 -13
  27. data/vendor/assets/javascripts/webshims/shims/combos/7.js +7 -2
  28. data/vendor/assets/javascripts/webshims/shims/combos/8.js +7 -2
  29. data/vendor/assets/javascripts/webshims/shims/combos/9.js +7 -4
  30. data/vendor/assets/javascripts/webshims/shims/form-core.js +4 -1
  31. data/vendor/assets/javascripts/webshims/shims/form-message.js +3 -1
  32. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +20 -9
  33. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +7 -4
  34. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +7 -1
  35. data/vendor/assets/javascripts/webshims/shims/form-validation.js +4 -4
  36. data/vendor/assets/javascripts/webshims/shims/form-validators.js +6 -3
  37. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +16 -13
  38. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +5 -4
  39. data/vendor/assets/javascripts/webshims/shims/picture.js +570 -0
  40. data/vendor/assets/javascripts/webshims/shims/promise.js +684 -0
  41. data/vendor/assets/javascripts/webshims/shims/styles/color-picker.png +0 -0
  42. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +90 -38
  43. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +1039 -0
  44. data/vendor/assets/javascripts/webshims/shims/styles/widget.eot +0 -0
  45. data/vendor/assets/javascripts/webshims/shims/styles/widget.svg +12 -0
  46. data/vendor/assets/javascripts/webshims/shims/styles/widget.ttf +0 -0
  47. data/vendor/assets/javascripts/webshims/shims/styles/widget.woff +0 -0
  48. metadata +10 -10
  49. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  50. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-forms-ext.scss +0 -219
  51. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-shim.scss +0 -115
  52. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +0 -31
  53. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +0 -479
  54. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +0 -488
  55. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim-ext.scss +0 -2
  56. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +0 -633
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ad43e859b90080e11888f412d38800638727995
4
- data.tar.gz: 22d1f086cef5bcf2d630c6f303ed43a9c6654cd4
3
+ metadata.gz: 5374e0cd9a6fd8e0eaaa7b878c41f82d3e322295
4
+ data.tar.gz: c0251d2da6c787975c0dc9bb2d0a491bd1a72531
5
5
  SHA512:
6
- metadata.gz: 2bdf777e9a2234b33207d5bb4a5949b18081e90467a4afb608ac7768ac7f215ec34af3bbffc36f37db11fae3f997647f9b24f76ffc1831961bcea6fd841cc0cc
7
- data.tar.gz: e06320cec62feba8997c6ee11ffc4e64b6da0d6fe43a4a00ea0d7cd4937974d3bc7cffb593bd6f8b5f160df98ff640cb24ae7e06c3fdff325347088817174088
6
+ metadata.gz: fc5436fa63df97dfedc85bda1c2dffaab9e6c290d86923ac026dc879c8f724ee093a350df3713e855da9c2885d4f5c2a4a82a16f8a4c57725513d82d399ed3ba
7
+ data.tar.gz: c6527e7e3fe88239f97fca4d4a61beecb642190cae552b733057ae559c24f1a5842632778814df8d2a492908b1c7dad99d9d2a040a7c9995a53e8660f6473940
@@ -1,6 +1,6 @@
1
1
  module Webshims
2
2
  module Rails
3
- VERSION = "1.12.7"
4
- WEBSHIMS_VERSION = "1.12.7"
3
+ VERSION = "1.13.0"
4
+ WEBSHIMS_VERSION = "1.13.0"
5
5
  end
6
6
  end
@@ -116,7 +116,7 @@
116
116
  path = path.split('?')[0].slice(0, path.lastIndexOf("/") + 1) + 'shims/';
117
117
 
118
118
  $.extend(webshims, {
119
- version: '1.12.7',
119
+ version: '1.13.0',
120
120
  cfg: {
121
121
  enhanceAuto: window.Audio && (!window.matchMedia || matchMedia('(min-device-width: 721px)').matches),
122
122
  //addCacheBuster: false,
@@ -923,6 +923,17 @@
923
923
  d: ['es5'],
924
924
  c: [16, 7, 2, 15, 30, 3, 8, 4, 9, 10, 25, 19, 20, 26, 31, 34]
925
925
  });
926
+
927
+ document.createElement('picture');
928
+ addPolyfill('picture', {
929
+ test: !!window.HTMLPictureElement
930
+ });
931
+
932
+
933
+ addPolyfill('promise', {
934
+ test: !!(window.Promise && Promise.all)
935
+ });
936
+
926
937
 
927
938
 
928
939
  //<geolocation
@@ -431,6 +431,7 @@ webshims.isReady('swfmini', true);
431
431
 
432
432
 
433
433
  webshims.getContentValidationMessage = function(elem, validity, key){
434
+ var customRule;
434
435
  if(webshims.errorbox && webshims.errorbox.initIvalContentMessage){
435
436
  webshims.errorbox.initIvalContentMessage(elem);
436
437
  }
@@ -445,7 +446,9 @@ webshims.isReady('swfmini', true);
445
446
  }
446
447
  if(typeof message == 'object'){
447
448
  validity = validity || $.prop(elem, 'validity') || {valid: 1};
448
- if(!validity.valid){
449
+ if(validity.customError && (customRule = $.data(elem, 'customMismatchedRule')) && message[customRule] && typeof message[customRule] == 'string'){
450
+ message = message[customRule];
451
+ } else if(!validity.valid){
449
452
  $.each(validity, function(name, prop){
450
453
  if(prop && name != 'valid' && message[name]){
451
454
  message = message[name];
@@ -2769,7 +2769,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2769
2769
  }
2770
2770
  this.elemHelper.prop('valueAsNumber', start);
2771
2771
  this.options.defValue = this.elemHelper.prop('value');
2772
-
2773
2772
  },
2774
2773
  reorderInputs: function(){
2775
2774
  if(splitInputs[this.type]){
@@ -2836,7 +2835,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2836
2835
  selectionEnd = this._getSelectionEnd(val);
2837
2836
  }
2838
2837
  this.element.prop(name, val);
2839
- if(selectionEnd){
2838
+ if(selectionEnd != null){
2840
2839
  this.element.prop('selectionEnd', selectionEnd);
2841
2840
  }
2842
2841
  }
@@ -2851,6 +2850,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2851
2850
  spinBtnProto[name] = function(val){
2852
2851
  this.elemHelper.prop(name, val);
2853
2852
  this[numName] = this.asNumber(val);
2853
+
2854
2854
  if(this.valueAsNumber != null && (isNaN(this.valueAsNumber) || (!isNaN(this[numName]) && (this.valueAsNumber * factor) < (this[numName] * factor)))){
2855
2855
  this._setStartInRange();
2856
2856
  }
@@ -3487,11 +3487,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3487
3487
 
3488
3488
  var type = $.prop(this, 'type');
3489
3489
 
3490
- var i, opts, data, optsName, labels, cNames;
3490
+ var i, opts, data, optsName, labels, cNames, hasInitialFocus;
3491
3491
  if(inputTypes[type] && webshims.implement(this, 'inputwidgets')){
3492
3492
  data = {};
3493
3493
  optsName = type;
3494
-
3494
+ hasInitialFocus = $(this).is(':focus');
3495
3495
  labels = $(this).jProp('labels');
3496
3496
  opts = $.extend(webshims.getOptions(this, type, [options.widgets, options[type], $($.prop(this, 'form')).data(type)]), {
3497
3497
  orig: this,
@@ -3616,6 +3616,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3616
3616
  } else {
3617
3617
  $(this).css('display', 'none');
3618
3618
  }
3619
+ if(hasInitialFocus){
3620
+ $(this).getShadowFocusElement().trigger('focus');
3621
+ }
3619
3622
  }
3620
3623
 
3621
3624
  };
@@ -1578,7 +1578,6 @@
1578
1578
  }
1579
1579
  this.elemHelper.prop('valueAsNumber', start);
1580
1580
  this.options.defValue = this.elemHelper.prop('value');
1581
-
1582
1581
  },
1583
1582
  reorderInputs: function(){
1584
1583
  if(splitInputs[this.type]){
@@ -1645,7 +1644,7 @@
1645
1644
  selectionEnd = this._getSelectionEnd(val);
1646
1645
  }
1647
1646
  this.element.prop(name, val);
1648
- if(selectionEnd){
1647
+ if(selectionEnd != null){
1649
1648
  this.element.prop('selectionEnd', selectionEnd);
1650
1649
  }
1651
1650
  }
@@ -1660,6 +1659,7 @@
1660
1659
  spinBtnProto[name] = function(val){
1661
1660
  this.elemHelper.prop(name, val);
1662
1661
  this[numName] = this.asNumber(val);
1662
+
1663
1663
  if(this.valueAsNumber != null && (isNaN(this.valueAsNumber) || (!isNaN(this[numName]) && (this.valueAsNumber * factor) < (this[numName] * factor)))){
1664
1664
  this._setStartInRange();
1665
1665
  }
@@ -2296,11 +2296,11 @@
2296
2296
 
2297
2297
  var type = $.prop(this, 'type');
2298
2298
 
2299
- var i, opts, data, optsName, labels, cNames;
2299
+ var i, opts, data, optsName, labels, cNames, hasInitialFocus;
2300
2300
  if(inputTypes[type] && webshims.implement(this, 'inputwidgets')){
2301
2301
  data = {};
2302
2302
  optsName = type;
2303
-
2303
+ hasInitialFocus = $(this).is(':focus');
2304
2304
  labels = $(this).jProp('labels');
2305
2305
  opts = $.extend(webshims.getOptions(this, type, [options.widgets, options[type], $($.prop(this, 'form')).data(type)]), {
2306
2306
  orig: this,
@@ -2425,6 +2425,9 @@
2425
2425
  } else {
2426
2426
  $(this).css('display', 'none');
2427
2427
  }
2428
+ if(hasInitialFocus){
2429
+ $(this).getShadowFocusElement().trigger('focus');
2430
+ }
2428
2431
  }
2429
2432
 
2430
2433
  };
@@ -454,7 +454,9 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
454
454
  }
455
455
  if(!message){
456
456
  message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
457
- webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
457
+ if(name != 'customError'){
458
+ webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
459
+ }
458
460
  }
459
461
  message = webshims.replaceValidationplaceholder(elem, message, name);
460
462
 
@@ -719,7 +721,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
719
721
  var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
720
722
  prop: {
721
723
  value: function(factor){
722
- var step, val, dateVal, valModStep, alignValue, cache, base, attrVal;
724
+ var step, val, valModStep, alignValue, cache, base, attrVal;
723
725
  var type = getType(this);
724
726
  if(typeModels[type] && typeModels[type].asNumber){
725
727
  cache = {type: type};
@@ -729,12 +731,9 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
729
731
  }
730
732
  factor *= stepFactor;
731
733
 
732
- val = $.prop(this, 'valueAsNumber');
734
+
733
735
 
734
- if(isNaN(val)){
735
- webshims.info("valueAsNumber is NaN can't apply stepUp/stepDown ");
736
- throw('invalid state error');
737
- }
736
+
738
737
 
739
738
  step = webshims.getStep(this, type);
740
739
 
@@ -745,7 +744,21 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
745
744
 
746
745
  webshims.addMinMaxNumberToCache('min', $(this), cache);
747
746
  webshims.addMinMaxNumberToCache('max', $(this), cache);
748
-
747
+
748
+ val = $.prop(this, 'valueAsNumber');
749
+
750
+ if(factor > 0 && !isNaN(cache.minAsNumber) && (isNaN(val) || cache.minAsNumber > val)){
751
+ $.prop(this, 'valueAsNumber', cache.minAsNumber);
752
+ return;
753
+ } else if(factor < 0 && !isNaN(cache.maxAsNumber) && (isNaN(val) || cache.maxAsNumber < val)){
754
+ $.prop(this, 'valueAsNumber', cache.maxAsNumber);
755
+ return;
756
+ }
757
+
758
+ if(isNaN(val)){
759
+ val = 0;
760
+ }
761
+
749
762
  base = cache.minAsNumber;
750
763
 
751
764
  if(isNaN(base) && (attrVal = $.prop(this, 'defaultValue'))){
@@ -770,7 +783,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
770
783
 
771
784
  if( (!isNaN(cache.maxAsNumber) && val > cache.maxAsNumber) || (!isNaN(cache.minAsNumber) && val < cache.minAsNumber) ){
772
785
  webshims.info("max/min overflow can't apply stepUp/stepDown");
773
- throw('invalid state error');
786
+ return;
774
787
  }
775
788
 
776
789
  $.prop(this, 'valueAsNumber', val);
@@ -1124,4 +1137,4 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
1124
1137
  });
1125
1138
  }
1126
1139
 
1127
- });
1140
+ });
@@ -1399,6 +1399,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1399
1399
 
1400
1400
 
1401
1401
  webshims.getContentValidationMessage = function(elem, validity, key){
1402
+ var customRule;
1402
1403
  if(webshims.errorbox && webshims.errorbox.initIvalContentMessage){
1403
1404
  webshims.errorbox.initIvalContentMessage(elem);
1404
1405
  }
@@ -1413,7 +1414,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1413
1414
  }
1414
1415
  if(typeof message == 'object'){
1415
1416
  validity = validity || $.prop(elem, 'validity') || {valid: 1};
1416
- if(!validity.valid){
1417
+ if(validity.customError && (customRule = $.data(elem, 'customMismatchedRule')) && message[customRule] && typeof message[customRule] == 'string'){
1418
+ message = message[customRule];
1419
+ } else if(!validity.valid){
1417
1420
  $.each(validity, function(name, prop){
1418
1421
  if(prop && name != 'valid' && message[name]){
1419
1422
  message = message[name];
@@ -2509,7 +2512,9 @@ webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors
2509
2512
  }
2510
2513
  if(!message){
2511
2514
  message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
2512
- webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
2515
+ if(name != 'customError'){
2516
+ webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
2517
+ }
2513
2518
  }
2514
2519
  message = webshims.replaceValidationplaceholder(elem, message, name);
2515
2520
 
@@ -1622,6 +1622,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1622
1622
 
1623
1623
 
1624
1624
  webshims.getContentValidationMessage = function(elem, validity, key){
1625
+ var customRule;
1625
1626
  if(webshims.errorbox && webshims.errorbox.initIvalContentMessage){
1626
1627
  webshims.errorbox.initIvalContentMessage(elem);
1627
1628
  }
@@ -1636,7 +1637,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1636
1637
  }
1637
1638
  if(typeof message == 'object'){
1638
1639
  validity = validity || $.prop(elem, 'validity') || {valid: 1};
1639
- if(!validity.valid){
1640
+ if(validity.customError && (customRule = $.data(elem, 'customMismatchedRule')) && message[customRule] && typeof message[customRule] == 'string'){
1641
+ message = message[customRule];
1642
+ } else if(!validity.valid){
1640
1643
  $.each(validity, function(name, prop){
1641
1644
  if(prop && name != 'valid' && message[name]){
1642
1645
  message = message[name];
@@ -2732,7 +2735,9 @@ webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors
2732
2735
  }
2733
2736
  if(!message){
2734
2737
  message = getMessageFromObj(validityMessages[''][name], elem) || $.prop(elem, 'validationMessage');
2735
- webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
2738
+ if(name != 'customError'){
2739
+ webshims.info('could not find errormessage for: '+ name +' / '+ $.prop(elem, 'type') +'. in language: '+webshims.activeLang());
2740
+ }
2736
2741
  }
2737
2742
  message = webshims.replaceValidationplaceholder(elem, message, name);
2738
2743
 
@@ -198,7 +198,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
198
198
  var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
199
199
  prop: {
200
200
  value: function(factor){
201
- var step, val, dateVal, valModStep, alignValue, cache, base, attrVal;
201
+ var step, val, valModStep, alignValue, cache, base, attrVal;
202
202
  var type = getType(this);
203
203
  if(typeModels[type] && typeModels[type].asNumber){
204
204
  cache = {type: type};
@@ -208,12 +208,9 @@ webshims.register('form-number-date-api', function($, webshims, window, document
208
208
  }
209
209
  factor *= stepFactor;
210
210
 
211
- val = $.prop(this, 'valueAsNumber');
211
+
212
212
 
213
- if(isNaN(val)){
214
- webshims.info("valueAsNumber is NaN can't apply stepUp/stepDown ");
215
- throw('invalid state error');
216
- }
213
+
217
214
 
218
215
  step = webshims.getStep(this, type);
219
216
 
@@ -224,7 +221,21 @@ webshims.register('form-number-date-api', function($, webshims, window, document
224
221
 
225
222
  webshims.addMinMaxNumberToCache('min', $(this), cache);
226
223
  webshims.addMinMaxNumberToCache('max', $(this), cache);
227
-
224
+
225
+ val = $.prop(this, 'valueAsNumber');
226
+
227
+ if(factor > 0 && !isNaN(cache.minAsNumber) && (isNaN(val) || cache.minAsNumber > val)){
228
+ $.prop(this, 'valueAsNumber', cache.minAsNumber);
229
+ return;
230
+ } else if(factor < 0 && !isNaN(cache.maxAsNumber) && (isNaN(val) || cache.maxAsNumber < val)){
231
+ $.prop(this, 'valueAsNumber', cache.maxAsNumber);
232
+ return;
233
+ }
234
+
235
+ if(isNaN(val)){
236
+ val = 0;
237
+ }
238
+
228
239
  base = cache.minAsNumber;
229
240
 
230
241
  if(isNaN(base) && (attrVal = $.prop(this, 'defaultValue'))){
@@ -249,7 +260,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
249
260
 
250
261
  if( (!isNaN(cache.maxAsNumber) && val > cache.maxAsNumber) || (!isNaN(cache.minAsNumber) && val < cache.minAsNumber) ){
251
262
  webshims.info("max/min overflow can't apply stepUp/stepDown");
252
- throw('invalid state error');
263
+ return;
253
264
  }
254
265
 
255
266
  $.prop(this, 'valueAsNumber', val);
@@ -603,7 +614,8 @@ webshims.register('form-number-date-api', function($, webshims, window, document
603
614
  });
604
615
  }
605
616
 
606
- });;(function($){
617
+ });
618
+ ;(function($){
607
619
  "use strict";
608
620
 
609
621
  var isNumber = function(string){
@@ -2183,7 +2195,6 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2183
2195
  }
2184
2196
  this.elemHelper.prop('valueAsNumber', start);
2185
2197
  this.options.defValue = this.elemHelper.prop('value');
2186
-
2187
2198
  },
2188
2199
  reorderInputs: function(){
2189
2200
  if(splitInputs[this.type]){
@@ -2250,7 +2261,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2250
2261
  selectionEnd = this._getSelectionEnd(val);
2251
2262
  }
2252
2263
  this.element.prop(name, val);
2253
- if(selectionEnd){
2264
+ if(selectionEnd != null){
2254
2265
  this.element.prop('selectionEnd', selectionEnd);
2255
2266
  }
2256
2267
  }
@@ -2265,6 +2276,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2265
2276
  spinBtnProto[name] = function(val){
2266
2277
  this.elemHelper.prop(name, val);
2267
2278
  this[numName] = this.asNumber(val);
2279
+
2268
2280
  if(this.valueAsNumber != null && (isNaN(this.valueAsNumber) || (!isNaN(this[numName]) && (this.valueAsNumber * factor) < (this[numName] * factor)))){
2269
2281
  this._setStartInRange();
2270
2282
  }
@@ -2901,11 +2913,11 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2901
2913
 
2902
2914
  var type = $.prop(this, 'type');
2903
2915
 
2904
- var i, opts, data, optsName, labels, cNames;
2916
+ var i, opts, data, optsName, labels, cNames, hasInitialFocus;
2905
2917
  if(inputTypes[type] && webshims.implement(this, 'inputwidgets')){
2906
2918
  data = {};
2907
2919
  optsName = type;
2908
-
2920
+ hasInitialFocus = $(this).is(':focus');
2909
2921
  labels = $(this).jProp('labels');
2910
2922
  opts = $.extend(webshims.getOptions(this, type, [options.widgets, options[type], $($.prop(this, 'form')).data(type)]), {
2911
2923
  orig: this,
@@ -3030,6 +3042,9 @@ webshims.register('form-number-date-api', function($, webshims, window, document
3030
3042
  } else {
3031
3043
  $(this).css('display', 'none');
3032
3044
  }
3045
+ if(hasInitialFocus){
3046
+ $(this).getShadowFocusElement().trigger('focus');
3047
+ }
3033
3048
  }
3034
3049
 
3035
3050
  };
@@ -1647,7 +1647,7 @@ webshims.isReady('es5', true);
1647
1647
  var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
1648
1648
  prop: {
1649
1649
  value: function(factor){
1650
- var step, val, dateVal, valModStep, alignValue, cache, base, attrVal;
1650
+ var step, val, valModStep, alignValue, cache, base, attrVal;
1651
1651
  var type = getType(this);
1652
1652
  if(typeModels[type] && typeModels[type].asNumber){
1653
1653
  cache = {type: type};
@@ -1657,12 +1657,9 @@ webshims.isReady('es5', true);
1657
1657
  }
1658
1658
  factor *= stepFactor;
1659
1659
 
1660
- val = $.prop(this, 'valueAsNumber');
1660
+
1661
1661
 
1662
- if(isNaN(val)){
1663
- webshims.info("valueAsNumber is NaN can't apply stepUp/stepDown ");
1664
- throw('invalid state error');
1665
- }
1662
+
1666
1663
 
1667
1664
  step = webshims.getStep(this, type);
1668
1665
 
@@ -1673,7 +1670,21 @@ webshims.isReady('es5', true);
1673
1670
 
1674
1671
  webshims.addMinMaxNumberToCache('min', $(this), cache);
1675
1672
  webshims.addMinMaxNumberToCache('max', $(this), cache);
1676
-
1673
+
1674
+ val = $.prop(this, 'valueAsNumber');
1675
+
1676
+ if(factor > 0 && !isNaN(cache.minAsNumber) && (isNaN(val) || cache.minAsNumber > val)){
1677
+ $.prop(this, 'valueAsNumber', cache.minAsNumber);
1678
+ return;
1679
+ } else if(factor < 0 && !isNaN(cache.maxAsNumber) && (isNaN(val) || cache.maxAsNumber < val)){
1680
+ $.prop(this, 'valueAsNumber', cache.maxAsNumber);
1681
+ return;
1682
+ }
1683
+
1684
+ if(isNaN(val)){
1685
+ val = 0;
1686
+ }
1687
+
1677
1688
  base = cache.minAsNumber;
1678
1689
 
1679
1690
  if(isNaN(base) && (attrVal = $.prop(this, 'defaultValue'))){
@@ -1698,7 +1709,7 @@ webshims.isReady('es5', true);
1698
1709
 
1699
1710
  if( (!isNaN(cache.maxAsNumber) && val > cache.maxAsNumber) || (!isNaN(cache.minAsNumber) && val < cache.minAsNumber) ){
1700
1711
  webshims.info("max/min overflow can't apply stepUp/stepDown");
1701
- throw('invalid state error');
1712
+ return;
1702
1713
  }
1703
1714
 
1704
1715
  $.prop(this, 'valueAsNumber', val);
@@ -2052,7 +2063,8 @@ webshims.isReady('es5', true);
2052
2063
  });
2053
2064
  }
2054
2065
 
2055
- });;(function($){
2066
+ });
2067
+ ;(function($){
2056
2068
  "use strict";
2057
2069
 
2058
2070
  var isNumber = function(string){
@@ -3632,7 +3644,6 @@ webshims.isReady('es5', true);
3632
3644
  }
3633
3645
  this.elemHelper.prop('valueAsNumber', start);
3634
3646
  this.options.defValue = this.elemHelper.prop('value');
3635
-
3636
3647
  },
3637
3648
  reorderInputs: function(){
3638
3649
  if(splitInputs[this.type]){
@@ -3699,7 +3710,7 @@ webshims.isReady('es5', true);
3699
3710
  selectionEnd = this._getSelectionEnd(val);
3700
3711
  }
3701
3712
  this.element.prop(name, val);
3702
- if(selectionEnd){
3713
+ if(selectionEnd != null){
3703
3714
  this.element.prop('selectionEnd', selectionEnd);
3704
3715
  }
3705
3716
  }
@@ -3714,6 +3725,7 @@ webshims.isReady('es5', true);
3714
3725
  spinBtnProto[name] = function(val){
3715
3726
  this.elemHelper.prop(name, val);
3716
3727
  this[numName] = this.asNumber(val);
3728
+
3717
3729
  if(this.valueAsNumber != null && (isNaN(this.valueAsNumber) || (!isNaN(this[numName]) && (this.valueAsNumber * factor) < (this[numName] * factor)))){
3718
3730
  this._setStartInRange();
3719
3731
  }
@@ -4350,11 +4362,11 @@ webshims.isReady('es5', true);
4350
4362
 
4351
4363
  var type = $.prop(this, 'type');
4352
4364
 
4353
- var i, opts, data, optsName, labels, cNames;
4365
+ var i, opts, data, optsName, labels, cNames, hasInitialFocus;
4354
4366
  if(inputTypes[type] && webshims.implement(this, 'inputwidgets')){
4355
4367
  data = {};
4356
4368
  optsName = type;
4357
-
4369
+ hasInitialFocus = $(this).is(':focus');
4358
4370
  labels = $(this).jProp('labels');
4359
4371
  opts = $.extend(webshims.getOptions(this, type, [options.widgets, options[type], $($.prop(this, 'form')).data(type)]), {
4360
4372
  orig: this,
@@ -4479,6 +4491,9 @@ webshims.isReady('es5', true);
4479
4491
  } else {
4480
4492
  $(this).css('display', 'none');
4481
4493
  }
4494
+ if(hasInitialFocus){
4495
+ $(this).getShadowFocusElement().trigger('focus');
4496
+ }
4482
4497
  }
4483
4498
 
4484
4499
  };