webshims-rails 1.11.1 → 1.11.2

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