webshims-rails 1.12.7 → 1.13.0

Sign up to get free protection for your applications and to get access to all the features.
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
  };