webshims-rails 1.11.1 → 1.11.2

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 (55) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +41 -20
  4. data/vendor/assets/javascripts/webshims/shims/combos/10.js +212 -42
  5. data/vendor/assets/javascripts/webshims/shims/combos/11.js +196 -37
  6. data/vendor/assets/javascripts/webshims/shims/combos/12.js +82 -36
  7. data/vendor/assets/javascripts/webshims/shims/combos/13.js +82 -36
  8. data/vendor/assets/javascripts/webshims/shims/combos/14.js +17 -6
  9. data/vendor/assets/javascripts/webshims/shims/combos/15.js +234 -1247
  10. data/vendor/assets/javascripts/webshims/shims/combos/16.js +234 -1247
  11. data/vendor/assets/javascripts/webshims/shims/combos/17.js +202 -45
  12. data/vendor/assets/javascripts/webshims/shims/combos/18.js +202 -45
  13. data/vendor/assets/javascripts/webshims/shims/combos/19.js +16 -5
  14. data/vendor/assets/javascripts/webshims/shims/combos/2.js +51 -11
  15. data/vendor/assets/javascripts/webshims/shims/combos/20.js +16 -5
  16. data/vendor/assets/javascripts/webshims/shims/combos/21.js +82 -36
  17. data/vendor/assets/javascripts/webshims/shims/combos/22.js +82 -36
  18. data/vendor/assets/javascripts/webshims/shims/combos/24.js +1689 -997
  19. data/vendor/assets/javascripts/webshims/shims/combos/25.js +16 -5
  20. data/vendor/assets/javascripts/webshims/shims/combos/26.js +16 -5
  21. data/vendor/assets/javascripts/webshims/shims/combos/3.js +16 -5
  22. data/vendor/assets/javascripts/webshims/shims/combos/30.js +51 -11
  23. data/vendor/assets/javascripts/webshims/shims/combos/31.js +51 -11
  24. data/vendor/assets/javascripts/webshims/shims/combos/4.js +16 -5
  25. data/vendor/assets/javascripts/webshims/shims/combos/5.js +202 -45
  26. data/vendor/assets/javascripts/webshims/shims/combos/6.js +237 -51
  27. data/vendor/assets/javascripts/webshims/shims/combos/7.js +51 -11
  28. data/vendor/assets/javascripts/webshims/shims/combos/8.js +16 -5
  29. data/vendor/assets/javascripts/webshims/shims/combos/9.js +247 -48
  30. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +17 -5
  31. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +21 -3
  32. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +35 -6
  33. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +6 -8
  34. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +134 -24
  35. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +152 -1205
  36. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +1076 -0
  37. data/vendor/assets/javascripts/webshims/shims/form-validation.js +47 -20
  38. data/vendor/assets/javascripts/webshims/shims/form-validators.js +2 -2
  39. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +1 -1
  40. data/vendor/assets/javascripts/webshims/shims/i18n/{formcfg-de.txt → formcfg-de.js} +3 -0
  41. data/vendor/assets/javascripts/webshims/shims/i18n/{formcfg-en.txt → formcfg-en.js} +5 -1
  42. data/vendor/assets/javascripts/webshims/shims/json-storage.js +1 -1
  43. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +1 -1
  44. data/vendor/assets/javascripts/webshims/shims/range-ui.js +62 -13
  45. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +610 -0
  46. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +10 -0
  47. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +743 -0
  48. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +1 -755
  49. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +0 -606
  50. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  51. data/vendor/assets/javascripts/webshims/shims/track-ui.js +36 -23
  52. data/vendor/assets/javascripts/webshims/shims/track.js +82 -36
  53. metadata +8 -6
  54. data/vendor/assets/javascripts/webshims/shims/combos/28.js +0 -2196
  55. data/vendor/assets/javascripts/webshims/shims/combos/29.js +0 -1167
@@ -1001,7 +1001,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1001
1001
  cache = {type: type};
1002
1002
  if(!factor){
1003
1003
  factor = 1;
1004
- webshims.info("you should always use a factor for stepUp/stepDown");
1004
+ webshims.warn("you should always use a factor for stepUp/stepDown");
1005
1005
  }
1006
1006
  factor *= stepFactor;
1007
1007
 
@@ -1037,13 +1037,11 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1037
1037
  webshims.info("max/min overflow can't apply stepUp/stepDown");
1038
1038
  throw('invalid state error');
1039
1039
  }
1040
- if(dateVal){
1041
- $.prop(this, 'valueAsDate', dateVal);
1042
- } else {
1043
- $.prop(this, 'valueAsNumber', val);
1044
- }
1045
- } else if(stepDescriptor.prop && stepDescriptor.prop.value){
1046
- return stepDescriptor.prop.value.apply(this, arguments);
1040
+
1041
+ $.prop(this, 'valueAsNumber', val);
1042
+
1043
+ } else if(stepDescriptor.prop && stepDescriptor.prop._supvalue){
1044
+ return stepDescriptor.prop._supvalue.apply(this, arguments);
1047
1045
  } else {
1048
1046
  webshims.info("no step method for type: "+ type);
1049
1047
  throw('invalid state error');
@@ -1410,9 +1408,9 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1410
1408
  var i;
1411
1409
 
1412
1410
 
1413
- this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min" /><span class="ws-range-rail"><span class="ws-range-thumb" /></span>');
1414
- this.trail = $('.ws-range-rail', this.element);
1415
- this.range = $('.ws-range-min', this.element);
1411
+ 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>');
1412
+ this.trail = $('.ws-range-track', this.element);
1413
+ this.range = $('.ws-range-progress ', this.element);
1416
1414
  this.thumb = $('.ws-range-thumb', this.trail);
1417
1415
 
1418
1416
  this.updateMetrics();
@@ -1422,6 +1420,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1422
1420
  for(i = 0; i < createOpts.length; i++){
1423
1421
  this[createOpts[i]](this.options[createOpts[i]]);
1424
1422
  }
1423
+
1425
1424
  this.value = this._value;
1426
1425
  this.value(this.options.value);
1427
1426
  this.initDataList();
@@ -1660,7 +1659,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1660
1659
  }
1661
1660
  },
1662
1661
  addBindings: function(){
1663
- var leftOffset, widgetUnits, hasFocus;
1662
+ var leftOffset, widgetUnits, hasFocus, isActive;
1664
1663
  var that = this;
1665
1664
  var o = this.options;
1666
1665
 
@@ -1690,8 +1689,28 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1690
1689
  }
1691
1690
  };
1692
1691
  })();
1693
-
1692
+ var normalizeTouch = (function(){
1693
+ var types = {
1694
+ touchstart: 1,
1695
+ touchend: 1,
1696
+ touchmove: 1
1697
+ };
1698
+ var normalize = ['pageX', 'pageY'];
1699
+ return function(e){
1700
+ if(types[e.type] && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches.length){
1701
+ for(var i = 0; i < normalize.length; i++){
1702
+ e[normalize[i]] = e.originalEvent.touches[0][normalize[i]];
1703
+ }
1704
+
1705
+ }
1706
+ return e;
1707
+ };
1708
+ })();
1694
1709
  var setValueFromPos = function(e, animate){
1710
+ if(e.type == 'touchmove'){
1711
+ e.preventDefault();
1712
+ normalizeTouch(e);
1713
+ }
1695
1714
 
1696
1715
  var val = that.getStepedValueFromPos((e[that.dirs.mouse] - leftOffset) * widgetUnits);
1697
1716
  if(val != o.value){
@@ -1708,18 +1727,25 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1708
1727
  eventTimer.call('change', o.value);
1709
1728
  }
1710
1729
  that.addRemoveClass('ws-active');
1711
- $(document).off('mousemove', setValueFromPos).off('mouseup', remove);
1730
+ $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
1712
1731
  $(window).off('blur', removeWin);
1732
+ isActive = false;
1713
1733
  };
1714
1734
  var removeWin = function(e){
1715
1735
  if(e.target == window){remove();}
1716
1736
  };
1717
1737
  var add = function(e){
1718
1738
  var outerWidth;
1739
+
1740
+ if(isActive || (e.type == 'touchstart' && (!e.originalEvent || !e.originalEvent.touches || e.originalEvent.touches.length != 1))){
1741
+ return;
1742
+ }
1719
1743
  e.preventDefault();
1720
- $(document).off('mousemove', setValueFromPos).off('mouseup', remove);
1744
+
1745
+ $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
1721
1746
  $(window).off('blur', removeWin);
1722
1747
  if(!o.readonly && !o.disabled){
1748
+ normalizeTouch(e);
1723
1749
  that.element.focus();
1724
1750
  that.addRemoveClass('ws-active', true);
1725
1751
  leftOffset = that.element.focus().offset();
@@ -1729,20 +1755,27 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1729
1755
  leftOffset = leftOffset[that.dirs.pos];
1730
1756
  widgetUnits = 100 / widgetUnits;
1731
1757
  setValueFromPos(e, o.animate);
1758
+ isActive = true;
1732
1759
  $(document)
1733
- .on({
1734
- mouseup: remove,
1735
- mousemove: setValueFromPos
1736
- })
1760
+ .on(e.type == 'touchstart' ?
1761
+ {
1762
+ touchend: remove,
1763
+ touchmove: setValueFromPos
1764
+ } :
1765
+ {
1766
+ mouseup: remove,
1767
+ mousemove: setValueFromPos
1768
+ }
1769
+ )
1737
1770
  ;
1738
1771
  $(window).on('blur', removeWin);
1739
1772
  e.stopPropagation();
1740
1773
  }
1741
1774
  };
1742
1775
  var elementEvts = {
1743
- mousedown: add,
1776
+ 'touchstart mousedown': add,
1744
1777
  focus: function(e){
1745
- if(!o.disabled){
1778
+ if(!o.disabled && !hasFocus){
1746
1779
  eventTimer.init('input', o.value);
1747
1780
  eventTimer.init('change', o.value);
1748
1781
  that.addRemoveClass('ws-focus', true);
@@ -1805,6 +1838,20 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1805
1838
  this.thumb.on({
1806
1839
  mousedown: add
1807
1840
  });
1841
+
1842
+ if(this.orig){
1843
+ $(this.orig).jProp('form').on('reset', function(){
1844
+ var val = $.prop(that.orig, 'value');
1845
+ that.value(val);
1846
+ setTimeout(function(){
1847
+ var val2 = $.prop(that.orig, 'value');
1848
+ if(val != val2){
1849
+ that.value(val2);
1850
+ }
1851
+ }, 4);
1852
+ });
1853
+ }
1854
+
1808
1855
  if (window.webshims) {
1809
1856
  webshims.ready('WINDOWLOAD', function(){
1810
1857
  webshims.ready('dom-support', function(){
@@ -1910,8 +1957,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1910
1957
  var str;
1911
1958
  return function(){
1912
1959
  if(!str){
1913
- str = ('<option></option>')+$.map(monthDigits, function(val){
1914
- return '<option>'+val+'</option>';
1960
+ str = ('<option value=""></option>')+$.map(monthDigits, function(val){
1961
+ return '<option value="'+val+'"]>'+val+'</option>';
1915
1962
  }).join('');
1916
1963
  }
1917
1964
  return str;
@@ -1933,7 +1980,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1933
1980
  splits: [$('<input type="text" class="yy" size="4" inputmode="numeric" />')[0]]
1934
1981
  };
1935
1982
  if(opts.monthSelect){
1936
- obj.splits.push($('<select class="mm">'+getMonthOptions()+'</select>')[0]);
1983
+ obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
1937
1984
  } else {
1938
1985
  obj.splits.push($('<input type="text" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
1939
1986
  }
@@ -1968,7 +2015,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1968
2015
  splits: [$('<input type="text" class="yy" inputmode="numeric" size="4" />')[0]]
1969
2016
  };
1970
2017
  if(opts.monthSelect){
1971
- obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions()+'</select>')[0]);
2018
+ obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions(opts)+'</select>')[0]);
1972
2019
  } else {
1973
2020
  obj.splits.push($('<input type="text" class="mm ws-spin" />')[0]);
1974
2021
  if(opts.onlyMonthDigits){
@@ -2060,6 +2107,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2060
2107
  month: {
2061
2108
  currentText: 'Aktueller Monat'
2062
2109
  },
2110
+ time: {
2111
+ currentText: 'Jetzt'
2112
+ },
2063
2113
  date: {
2064
2114
  close: 'schließen',
2065
2115
  clear: 'Löschen',
@@ -2097,6 +2147,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2097
2147
  month: {
2098
2148
  currentText: 'This month'
2099
2149
  },
2150
+ time: {
2151
+ "currentText": "Now"
2152
+ },
2100
2153
  date: {
2101
2154
  "closeText": "Done",
2102
2155
  clear: 'Clear',
@@ -2159,6 +2212,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2159
2212
  if(!langCfg['datetime-localSigns']){
2160
2213
  langCfg['datetime-localSigns'] = langCfg.dateSigns+langCfg.timeSigns;
2161
2214
  }
2215
+ if(!langCfg['datetime-local']){
2216
+ langCfg['datetime-local'] = {};
2217
+ }
2218
+ if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
2219
+ langCfg['datetime-local'].currentText = langCfg.time.currentText;
2220
+ }
2162
2221
  };
2163
2222
  var triggerLocaleChange = function(){
2164
2223
  processLangCFG(curCfg);
@@ -2226,6 +2285,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2226
2285
  } else {
2227
2286
  fVal = 0;
2228
2287
  }
2288
+ if(val[0] === '00'){
2289
+ val[0] = '12';
2290
+ }
2229
2291
  val = $.trim(val.join(':')) + ' '+ curCfg.meridian[fVal];
2230
2292
  }
2231
2293
  return val;
@@ -2310,6 +2372,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2310
2372
  time: function(val){
2311
2373
  var fVal;
2312
2374
  if(val && curCfg.meridian){
2375
+ if(val.substr(0,2) === "12"){
2376
+ val = "00" + val.substr(2);
2377
+ }
2313
2378
  if(val.indexOf(curCfg.meridian[1]) != -1){
2314
2379
  val = val.split(':');
2315
2380
  fVal = (val[0] * 1);
@@ -2395,7 +2460,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2395
2460
  if(hintValue.length == 2){
2396
2461
  hintValue = opts.splitInput ?
2397
2462
  hintValue :
2398
- curCfg.patterns.d.replace('yy', hintValue[0]).replace('mm', hintValue[1]);
2463
+ curCfg.date.showMonthAfterYear ?
2464
+ hintValue[0] +' '+hintValue[1] :
2465
+
2466
+ hintValue[1] +' '+ hintValue[0];
2399
2467
  } else {
2400
2468
  hintValue = opts.splitInput ?
2401
2469
  [val, val] :
@@ -2770,10 +2838,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2770
2838
  }
2771
2839
  try {
2772
2840
  that.elemHelper[name](factor);
2841
+
2773
2842
  ret = that.elemHelper.prop('value');
2843
+
2844
+ } catch (er) {
2845
+ if(!o.value && that.maxAsNumber >= that.minAsNumber){
2846
+ ret = o.defValue;
2847
+ }
2848
+ }
2849
+ if(ret !== false && o.value != ret){
2774
2850
  that.value(ret);
2775
2851
  eventTimer.call('input', ret);
2776
- } catch (er) {}
2852
+ }
2777
2853
  return ret;
2778
2854
  }
2779
2855
  };
@@ -2839,15 +2915,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2839
2915
 
2840
2916
  initChangeEvents();
2841
2917
  },
2842
- value: function(val, force){
2843
- if(!this._init || force || val !== this.options.value){
2844
- this.element.val(this.formatValue(val));
2845
- this.options.value = val;
2846
- this._propertyChange('value');
2847
- this.mirrorValidity();
2848
- }
2849
-
2850
- },
2851
2918
  required: function(val, boolVal){
2852
2919
  this.inputElements.attr({'aria-required': ''+boolVal});
2853
2920
  this.mirrorValidity();
@@ -2864,7 +2931,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2864
2931
  formatValue: function(val, noSplit){
2865
2932
  return formatVal[this.type](val, noSplit === false ? false : this.options);
2866
2933
  },
2867
- createOpts: ['readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'value', 'required'],
2934
+ createOpts: ['readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'defaultValue', 'value', 'required'],
2868
2935
  placeholder: function(val){
2869
2936
  var options = this.options;
2870
2937
  options.placeholder = val;
@@ -2934,6 +3001,16 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2934
3001
  }
2935
3002
  };
2936
3003
 
3004
+ ['defaultValue', 'value'].forEach(function(name){
3005
+ wsWidgetProto[name] = function(val, force){
3006
+ if(!this._init || force || val !== this.options[name]){
3007
+ this.element.prop(name, this.formatValue(val));
3008
+ this.options[name] = val;
3009
+ this._propertyChange(name);
3010
+ this.mirrorValidity();
3011
+ }
3012
+ };
3013
+ });
2937
3014
 
2938
3015
  ['readonly', 'disabled'].forEach(function(name){
2939
3016
  var isDisabled = name == 'disabled';
@@ -2987,7 +3064,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2987
3064
  }
2988
3065
  this._init = true;
2989
3066
  },
2990
- createOpts: ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'value', 'required'],
3067
+ createOpts: ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'defaultValue', 'value', 'required'],
2991
3068
  _addSplitInputs: function(){
2992
3069
  if(!this.inputElements){
2993
3070
  var create = splitInputs[this.type]._create(this.options);
@@ -3057,9 +3134,47 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3057
3134
  this.options.step = val;
3058
3135
  this.elemHelper.prop('step', retDefault(val, defStep.step));
3059
3136
  this.mirrorValidity();
3137
+ },
3138
+ _beforeValue: function(val){
3139
+ this.valueAsNumber = this.asNumber(val);
3140
+ this.options.value = val;
3141
+
3142
+ if(isNaN(this.valueAsNumber) || (!isNaN(this.minAsNumber) && this.valueAsNumber < this.minAsNumber) || (!isNaN(this.maxAsNumber) && this.valueAsNumber > this.maxAsNumber)){
3143
+ this._setStartInRange();
3144
+ } else {
3145
+ this.elemHelper.prop('value', val);
3146
+ this.options.defValue = "";
3147
+ }
3060
3148
  }
3061
3149
  });
3062
3150
 
3151
+ ['defaultValue', 'value'].forEach(function(name){
3152
+ var isValue = name == 'value';
3153
+ spinBtnProto[name] = function(val, force){
3154
+ if(!this._init || force || this.options[name] !== val){
3155
+ if(isValue){
3156
+ this._beforeValue(val);
3157
+ }
3158
+
3159
+ val = formatVal[this.type](val, this.options);
3160
+ if(this.options.splitInput){
3161
+ $.each(this.splits, function(i, elem){
3162
+ var setOption;
3163
+ if(!(name in elem) && !isValue && $.nodeName(elem, 'select')){
3164
+ $('option[value="'+ val[i] +'"]', elem).prop('defaultSelected', true);
3165
+ } else {
3166
+ $.prop(elem, name, val[i]);
3167
+ }
3168
+ });
3169
+ } else {
3170
+ this.element.prop(name, val);
3171
+ }
3172
+ this._propertyChange(name);
3173
+ this.mirrorValidity();
3174
+ }
3175
+ };
3176
+ });
3177
+
3063
3178
  $.each({min: 1, max: -1}, function(name, factor){
3064
3179
  var numName = name +'AsNumber';
3065
3180
  spinBtnProto[name] = function(val){
@@ -3463,10 +3578,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3463
3578
  var inputTypes = {
3464
3579
 
3465
3580
  };
3581
+ var boolAttrs = {disabled: 1, required: 1, readonly: 1};
3466
3582
  var copyProps = [
3467
3583
  'disabled',
3468
3584
  'readonly',
3469
3585
  'value',
3586
+ 'defaultValue',
3470
3587
  'min',
3471
3588
  'max',
3472
3589
  'step',
@@ -3484,14 +3601,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3484
3601
  if(!stopCircular){
3485
3602
  var shadowData = webshims.data(this, 'shadowData');
3486
3603
  if(shadowData && shadowData.data && shadowData.nativeElement === this && shadowData.data[fnName]){
3487
- shadowData.data[fnName](val, boolVal);
3604
+ if(boolAttrs[fnName]){
3605
+ shadowData.data[fnName](val, boolVal);
3606
+ } else {
3607
+ shadowData.data[fnName](val);
3608
+ }
3488
3609
  }
3489
3610
  }
3490
3611
  });
3491
3612
  });
3492
3613
 
3493
3614
  if(options.replaceUI && 'valueAsNumber' in document.createElement('input')){
3494
- var reflectFn = function(val){
3615
+ var reflectFn = function(){
3495
3616
  if(webshims.data(this, 'hasShadow')){
3496
3617
  $.prop(this, 'value', $.prop(this, 'value'));
3497
3618
  }
@@ -3499,6 +3620,20 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3499
3620
 
3500
3621
  webshims.onNodeNamesPropertyModify('input', 'valueAsNumber', reflectFn);
3501
3622
  webshims.onNodeNamesPropertyModify('input', 'valueAsDate', reflectFn);
3623
+ $.each({stepUp: 1, stepDown: -1}, function(name, stepFactor){
3624
+ var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
3625
+ prop: {
3626
+ value: function(){
3627
+ var ret;
3628
+ if(stepDescriptor.prop && stepDescriptor.prop._supvalue){
3629
+ ret = stepDescriptor.prop._supvalue.apply(this, arguments);
3630
+ reflectFn.apply(this, arguments);
3631
+ }
3632
+ return ret;
3633
+ }
3634
+ }
3635
+ });
3636
+ });
3502
3637
  }
3503
3638
 
3504
3639
  var extendType = (function(){
@@ -3518,7 +3653,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3518
3653
  $(data.orig).removeClass('ws-important-hide');
3519
3654
  $.style( data.orig, 'display', '' );
3520
3655
  var hasButtons, marginR, marginL;
3521
- var correctWidth = 0.6;
3656
+ var correctWidth = 0.8;
3522
3657
  if(!init || data.orig.offsetWidth){
3523
3658
  hasButtons = data.buttonWrapper && data.buttonWrapper.filter(isVisible).length;
3524
3659
  marginR = $.css( data.orig, 'marginRight');
@@ -3542,7 +3677,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3542
3677
  ;
3543
3678
  } else {
3544
3679
  data.buttonWrapper.css('marginRight', marginR);
3545
- correctWidth = data.buttonWrapper.outerWidth(true) + 0.6;
3680
+ correctWidth = data.buttonWrapper.outerWidth(true) + correctWidth;
3546
3681
  }
3547
3682
  }
3548
3683
 
@@ -3700,7 +3835,29 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3700
3835
  });
3701
3836
  }
3702
3837
 
3703
- if(!modernizrInputTypes.range || options.replaceUI){
3838
+ var replace = {};
3839
+
3840
+
3841
+ if(options.replaceUI){
3842
+ if( $.isPlainObject(options.replaceUI) ){
3843
+ $.extend(replace, options.replaceUI);
3844
+ } else {
3845
+ $.extend(replace, {
3846
+ 'range': 1,
3847
+ 'number': 1,
3848
+ 'time': 1,
3849
+ 'month': 1,
3850
+ 'date': 1,
3851
+ 'color': 1,
3852
+ 'datetime-local': 1
3853
+ });
3854
+ }
3855
+ }
3856
+ if(modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
3857
+ replace.number = 1;
3858
+ }
3859
+
3860
+ if(!modernizrInputTypes.range || replace.range){
3704
3861
  extendType('range', {
3705
3862
  _create: function(opts, set){
3706
3863
  var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
@@ -3709,9 +3866,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3709
3866
  });
3710
3867
  }
3711
3868
 
3712
- var isStupid = modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)));
3869
+
3713
3870
  ['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
3714
- if(!modernizrInputTypes[name] || options.replaceUI || (name == 'number' && isStupid)){
3871
+ if(!modernizrInputTypes[name] || replace[name]){
3715
3872
  extendType(name, {
3716
3873
  _create: function(opts, set){
3717
3874
  if(opts.monthSelect){