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
@@ -198,7 +198,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
198
198
  cache = {type: type};
199
199
  if(!factor){
200
200
  factor = 1;
201
- webshims.info("you should always use a factor for stepUp/stepDown");
201
+ webshims.warn("you should always use a factor for stepUp/stepDown");
202
202
  }
203
203
  factor *= stepFactor;
204
204
 
@@ -234,13 +234,11 @@ webshims.register('form-number-date-api', function($, webshims, window, document
234
234
  webshims.info("max/min overflow can't apply stepUp/stepDown");
235
235
  throw('invalid state error');
236
236
  }
237
- if(dateVal){
238
- $.prop(this, 'valueAsDate', dateVal);
239
- } else {
240
- $.prop(this, 'valueAsNumber', val);
241
- }
242
- } else if(stepDescriptor.prop && stepDescriptor.prop.value){
243
- return stepDescriptor.prop.value.apply(this, arguments);
237
+
238
+ $.prop(this, 'valueAsNumber', val);
239
+
240
+ } else if(stepDescriptor.prop && stepDescriptor.prop._supvalue){
241
+ return stepDescriptor.prop._supvalue.apply(this, arguments);
244
242
  } else {
245
243
  webshims.info("no step method for type: "+ type);
246
244
  throw('invalid state error');
@@ -607,9 +605,9 @@ webshims.register('form-number-date-api', function($, webshims, window, document
607
605
  var i;
608
606
 
609
607
 
610
- 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>');
611
- this.trail = $('.ws-range-rail', this.element);
612
- this.range = $('.ws-range-min', this.element);
608
+ 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>');
609
+ this.trail = $('.ws-range-track', this.element);
610
+ this.range = $('.ws-range-progress ', this.element);
613
611
  this.thumb = $('.ws-range-thumb', this.trail);
614
612
 
615
613
  this.updateMetrics();
@@ -619,6 +617,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
619
617
  for(i = 0; i < createOpts.length; i++){
620
618
  this[createOpts[i]](this.options[createOpts[i]]);
621
619
  }
620
+
622
621
  this.value = this._value;
623
622
  this.value(this.options.value);
624
623
  this.initDataList();
@@ -857,7 +856,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
857
856
  }
858
857
  },
859
858
  addBindings: function(){
860
- var leftOffset, widgetUnits, hasFocus;
859
+ var leftOffset, widgetUnits, hasFocus, isActive;
861
860
  var that = this;
862
861
  var o = this.options;
863
862
 
@@ -887,8 +886,28 @@ webshims.register('form-number-date-api', function($, webshims, window, document
887
886
  }
888
887
  };
889
888
  })();
890
-
889
+ var normalizeTouch = (function(){
890
+ var types = {
891
+ touchstart: 1,
892
+ touchend: 1,
893
+ touchmove: 1
894
+ };
895
+ var normalize = ['pageX', 'pageY'];
896
+ return function(e){
897
+ if(types[e.type] && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches.length){
898
+ for(var i = 0; i < normalize.length; i++){
899
+ e[normalize[i]] = e.originalEvent.touches[0][normalize[i]];
900
+ }
901
+
902
+ }
903
+ return e;
904
+ };
905
+ })();
891
906
  var setValueFromPos = function(e, animate){
907
+ if(e.type == 'touchmove'){
908
+ e.preventDefault();
909
+ normalizeTouch(e);
910
+ }
892
911
 
893
912
  var val = that.getStepedValueFromPos((e[that.dirs.mouse] - leftOffset) * widgetUnits);
894
913
  if(val != o.value){
@@ -905,18 +924,25 @@ webshims.register('form-number-date-api', function($, webshims, window, document
905
924
  eventTimer.call('change', o.value);
906
925
  }
907
926
  that.addRemoveClass('ws-active');
908
- $(document).off('mousemove', setValueFromPos).off('mouseup', remove);
927
+ $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
909
928
  $(window).off('blur', removeWin);
929
+ isActive = false;
910
930
  };
911
931
  var removeWin = function(e){
912
932
  if(e.target == window){remove();}
913
933
  };
914
934
  var add = function(e){
915
935
  var outerWidth;
936
+
937
+ if(isActive || (e.type == 'touchstart' && (!e.originalEvent || !e.originalEvent.touches || e.originalEvent.touches.length != 1))){
938
+ return;
939
+ }
916
940
  e.preventDefault();
917
- $(document).off('mousemove', setValueFromPos).off('mouseup', remove);
941
+
942
+ $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
918
943
  $(window).off('blur', removeWin);
919
944
  if(!o.readonly && !o.disabled){
945
+ normalizeTouch(e);
920
946
  that.element.focus();
921
947
  that.addRemoveClass('ws-active', true);
922
948
  leftOffset = that.element.focus().offset();
@@ -926,20 +952,27 @@ webshims.register('form-number-date-api', function($, webshims, window, document
926
952
  leftOffset = leftOffset[that.dirs.pos];
927
953
  widgetUnits = 100 / widgetUnits;
928
954
  setValueFromPos(e, o.animate);
955
+ isActive = true;
929
956
  $(document)
930
- .on({
931
- mouseup: remove,
932
- mousemove: setValueFromPos
933
- })
957
+ .on(e.type == 'touchstart' ?
958
+ {
959
+ touchend: remove,
960
+ touchmove: setValueFromPos
961
+ } :
962
+ {
963
+ mouseup: remove,
964
+ mousemove: setValueFromPos
965
+ }
966
+ )
934
967
  ;
935
968
  $(window).on('blur', removeWin);
936
969
  e.stopPropagation();
937
970
  }
938
971
  };
939
972
  var elementEvts = {
940
- mousedown: add,
973
+ 'touchstart mousedown': add,
941
974
  focus: function(e){
942
- if(!o.disabled){
975
+ if(!o.disabled && !hasFocus){
943
976
  eventTimer.init('input', o.value);
944
977
  eventTimer.init('change', o.value);
945
978
  that.addRemoveClass('ws-focus', true);
@@ -1002,6 +1035,20 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1002
1035
  this.thumb.on({
1003
1036
  mousedown: add
1004
1037
  });
1038
+
1039
+ if(this.orig){
1040
+ $(this.orig).jProp('form').on('reset', function(){
1041
+ var val = $.prop(that.orig, 'value');
1042
+ that.value(val);
1043
+ setTimeout(function(){
1044
+ var val2 = $.prop(that.orig, 'value');
1045
+ if(val != val2){
1046
+ that.value(val2);
1047
+ }
1048
+ }, 4);
1049
+ });
1050
+ }
1051
+
1005
1052
  if (window.webshims) {
1006
1053
  webshims.ready('WINDOWLOAD', function(){
1007
1054
  webshims.ready('dom-support', function(){
@@ -1107,8 +1154,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1107
1154
  var str;
1108
1155
  return function(){
1109
1156
  if(!str){
1110
- str = ('<option></option>')+$.map(monthDigits, function(val){
1111
- return '<option>'+val+'</option>';
1157
+ str = ('<option value=""></option>')+$.map(monthDigits, function(val){
1158
+ return '<option value="'+val+'"]>'+val+'</option>';
1112
1159
  }).join('');
1113
1160
  }
1114
1161
  return str;
@@ -1130,7 +1177,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1130
1177
  splits: [$('<input type="text" class="yy" size="4" inputmode="numeric" />')[0]]
1131
1178
  };
1132
1179
  if(opts.monthSelect){
1133
- obj.splits.push($('<select class="mm">'+getMonthOptions()+'</select>')[0]);
1180
+ obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
1134
1181
  } else {
1135
1182
  obj.splits.push($('<input type="text" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
1136
1183
  }
@@ -1165,7 +1212,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1165
1212
  splits: [$('<input type="text" class="yy" inputmode="numeric" size="4" />')[0]]
1166
1213
  };
1167
1214
  if(opts.monthSelect){
1168
- obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions()+'</select>')[0]);
1215
+ obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions(opts)+'</select>')[0]);
1169
1216
  } else {
1170
1217
  obj.splits.push($('<input type="text" class="mm ws-spin" />')[0]);
1171
1218
  if(opts.onlyMonthDigits){
@@ -1257,6 +1304,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1257
1304
  month: {
1258
1305
  currentText: 'Aktueller Monat'
1259
1306
  },
1307
+ time: {
1308
+ currentText: 'Jetzt'
1309
+ },
1260
1310
  date: {
1261
1311
  close: 'schließen',
1262
1312
  clear: 'Löschen',
@@ -1294,6 +1344,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1294
1344
  month: {
1295
1345
  currentText: 'This month'
1296
1346
  },
1347
+ time: {
1348
+ "currentText": "Now"
1349
+ },
1297
1350
  date: {
1298
1351
  "closeText": "Done",
1299
1352
  clear: 'Clear',
@@ -1356,6 +1409,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1356
1409
  if(!langCfg['datetime-localSigns']){
1357
1410
  langCfg['datetime-localSigns'] = langCfg.dateSigns+langCfg.timeSigns;
1358
1411
  }
1412
+ if(!langCfg['datetime-local']){
1413
+ langCfg['datetime-local'] = {};
1414
+ }
1415
+ if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
1416
+ langCfg['datetime-local'].currentText = langCfg.time.currentText;
1417
+ }
1359
1418
  };
1360
1419
  var triggerLocaleChange = function(){
1361
1420
  processLangCFG(curCfg);
@@ -1423,6 +1482,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1423
1482
  } else {
1424
1483
  fVal = 0;
1425
1484
  }
1485
+ if(val[0] === '00'){
1486
+ val[0] = '12';
1487
+ }
1426
1488
  val = $.trim(val.join(':')) + ' '+ curCfg.meridian[fVal];
1427
1489
  }
1428
1490
  return val;
@@ -1507,6 +1569,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1507
1569
  time: function(val){
1508
1570
  var fVal;
1509
1571
  if(val && curCfg.meridian){
1572
+ if(val.substr(0,2) === "12"){
1573
+ val = "00" + val.substr(2);
1574
+ }
1510
1575
  if(val.indexOf(curCfg.meridian[1]) != -1){
1511
1576
  val = val.split(':');
1512
1577
  fVal = (val[0] * 1);
@@ -1592,7 +1657,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1592
1657
  if(hintValue.length == 2){
1593
1658
  hintValue = opts.splitInput ?
1594
1659
  hintValue :
1595
- curCfg.patterns.d.replace('yy', hintValue[0]).replace('mm', hintValue[1]);
1660
+ curCfg.date.showMonthAfterYear ?
1661
+ hintValue[0] +' '+hintValue[1] :
1662
+
1663
+ hintValue[1] +' '+ hintValue[0];
1596
1664
  } else {
1597
1665
  hintValue = opts.splitInput ?
1598
1666
  [val, val] :
@@ -1967,10 +2035,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1967
2035
  }
1968
2036
  try {
1969
2037
  that.elemHelper[name](factor);
2038
+
1970
2039
  ret = that.elemHelper.prop('value');
2040
+
2041
+ } catch (er) {
2042
+ if(!o.value && that.maxAsNumber >= that.minAsNumber){
2043
+ ret = o.defValue;
2044
+ }
2045
+ }
2046
+ if(ret !== false && o.value != ret){
1971
2047
  that.value(ret);
1972
2048
  eventTimer.call('input', ret);
1973
- } catch (er) {}
2049
+ }
1974
2050
  return ret;
1975
2051
  }
1976
2052
  };
@@ -2036,15 +2112,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2036
2112
 
2037
2113
  initChangeEvents();
2038
2114
  },
2039
- value: function(val, force){
2040
- if(!this._init || force || val !== this.options.value){
2041
- this.element.val(this.formatValue(val));
2042
- this.options.value = val;
2043
- this._propertyChange('value');
2044
- this.mirrorValidity();
2045
- }
2046
-
2047
- },
2048
2115
  required: function(val, boolVal){
2049
2116
  this.inputElements.attr({'aria-required': ''+boolVal});
2050
2117
  this.mirrorValidity();
@@ -2061,7 +2128,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2061
2128
  formatValue: function(val, noSplit){
2062
2129
  return formatVal[this.type](val, noSplit === false ? false : this.options);
2063
2130
  },
2064
- createOpts: ['readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'value', 'required'],
2131
+ createOpts: ['readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'defaultValue', 'value', 'required'],
2065
2132
  placeholder: function(val){
2066
2133
  var options = this.options;
2067
2134
  options.placeholder = val;
@@ -2131,6 +2198,16 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2131
2198
  }
2132
2199
  };
2133
2200
 
2201
+ ['defaultValue', 'value'].forEach(function(name){
2202
+ wsWidgetProto[name] = function(val, force){
2203
+ if(!this._init || force || val !== this.options[name]){
2204
+ this.element.prop(name, this.formatValue(val));
2205
+ this.options[name] = val;
2206
+ this._propertyChange(name);
2207
+ this.mirrorValidity();
2208
+ }
2209
+ };
2210
+ });
2134
2211
 
2135
2212
  ['readonly', 'disabled'].forEach(function(name){
2136
2213
  var isDisabled = name == 'disabled';
@@ -2184,7 +2261,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2184
2261
  }
2185
2262
  this._init = true;
2186
2263
  },
2187
- createOpts: ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'value', 'required'],
2264
+ createOpts: ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'defaultValue', 'value', 'required'],
2188
2265
  _addSplitInputs: function(){
2189
2266
  if(!this.inputElements){
2190
2267
  var create = splitInputs[this.type]._create(this.options);
@@ -2254,9 +2331,47 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2254
2331
  this.options.step = val;
2255
2332
  this.elemHelper.prop('step', retDefault(val, defStep.step));
2256
2333
  this.mirrorValidity();
2334
+ },
2335
+ _beforeValue: function(val){
2336
+ this.valueAsNumber = this.asNumber(val);
2337
+ this.options.value = val;
2338
+
2339
+ if(isNaN(this.valueAsNumber) || (!isNaN(this.minAsNumber) && this.valueAsNumber < this.minAsNumber) || (!isNaN(this.maxAsNumber) && this.valueAsNumber > this.maxAsNumber)){
2340
+ this._setStartInRange();
2341
+ } else {
2342
+ this.elemHelper.prop('value', val);
2343
+ this.options.defValue = "";
2344
+ }
2257
2345
  }
2258
2346
  });
2259
2347
 
2348
+ ['defaultValue', 'value'].forEach(function(name){
2349
+ var isValue = name == 'value';
2350
+ spinBtnProto[name] = function(val, force){
2351
+ if(!this._init || force || this.options[name] !== val){
2352
+ if(isValue){
2353
+ this._beforeValue(val);
2354
+ }
2355
+
2356
+ val = formatVal[this.type](val, this.options);
2357
+ if(this.options.splitInput){
2358
+ $.each(this.splits, function(i, elem){
2359
+ var setOption;
2360
+ if(!(name in elem) && !isValue && $.nodeName(elem, 'select')){
2361
+ $('option[value="'+ val[i] +'"]', elem).prop('defaultSelected', true);
2362
+ } else {
2363
+ $.prop(elem, name, val[i]);
2364
+ }
2365
+ });
2366
+ } else {
2367
+ this.element.prop(name, val);
2368
+ }
2369
+ this._propertyChange(name);
2370
+ this.mirrorValidity();
2371
+ }
2372
+ };
2373
+ });
2374
+
2260
2375
  $.each({min: 1, max: -1}, function(name, factor){
2261
2376
  var numName = name +'AsNumber';
2262
2377
  spinBtnProto[name] = function(val){
@@ -2660,10 +2775,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2660
2775
  var inputTypes = {
2661
2776
 
2662
2777
  };
2778
+ var boolAttrs = {disabled: 1, required: 1, readonly: 1};
2663
2779
  var copyProps = [
2664
2780
  'disabled',
2665
2781
  'readonly',
2666
2782
  'value',
2783
+ 'defaultValue',
2667
2784
  'min',
2668
2785
  'max',
2669
2786
  'step',
@@ -2681,14 +2798,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2681
2798
  if(!stopCircular){
2682
2799
  var shadowData = webshims.data(this, 'shadowData');
2683
2800
  if(shadowData && shadowData.data && shadowData.nativeElement === this && shadowData.data[fnName]){
2684
- shadowData.data[fnName](val, boolVal);
2801
+ if(boolAttrs[fnName]){
2802
+ shadowData.data[fnName](val, boolVal);
2803
+ } else {
2804
+ shadowData.data[fnName](val);
2805
+ }
2685
2806
  }
2686
2807
  }
2687
2808
  });
2688
2809
  });
2689
2810
 
2690
2811
  if(options.replaceUI && 'valueAsNumber' in document.createElement('input')){
2691
- var reflectFn = function(val){
2812
+ var reflectFn = function(){
2692
2813
  if(webshims.data(this, 'hasShadow')){
2693
2814
  $.prop(this, 'value', $.prop(this, 'value'));
2694
2815
  }
@@ -2696,6 +2817,20 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2696
2817
 
2697
2818
  webshims.onNodeNamesPropertyModify('input', 'valueAsNumber', reflectFn);
2698
2819
  webshims.onNodeNamesPropertyModify('input', 'valueAsDate', reflectFn);
2820
+ $.each({stepUp: 1, stepDown: -1}, function(name, stepFactor){
2821
+ var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
2822
+ prop: {
2823
+ value: function(){
2824
+ var ret;
2825
+ if(stepDescriptor.prop && stepDescriptor.prop._supvalue){
2826
+ ret = stepDescriptor.prop._supvalue.apply(this, arguments);
2827
+ reflectFn.apply(this, arguments);
2828
+ }
2829
+ return ret;
2830
+ }
2831
+ }
2832
+ });
2833
+ });
2699
2834
  }
2700
2835
 
2701
2836
  var extendType = (function(){
@@ -2715,7 +2850,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2715
2850
  $(data.orig).removeClass('ws-important-hide');
2716
2851
  $.style( data.orig, 'display', '' );
2717
2852
  var hasButtons, marginR, marginL;
2718
- var correctWidth = 0.6;
2853
+ var correctWidth = 0.8;
2719
2854
  if(!init || data.orig.offsetWidth){
2720
2855
  hasButtons = data.buttonWrapper && data.buttonWrapper.filter(isVisible).length;
2721
2856
  marginR = $.css( data.orig, 'marginRight');
@@ -2739,7 +2874,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2739
2874
  ;
2740
2875
  } else {
2741
2876
  data.buttonWrapper.css('marginRight', marginR);
2742
- correctWidth = data.buttonWrapper.outerWidth(true) + 0.6;
2877
+ correctWidth = data.buttonWrapper.outerWidth(true) + correctWidth;
2743
2878
  }
2744
2879
  }
2745
2880
 
@@ -2897,7 +3032,29 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2897
3032
  });
2898
3033
  }
2899
3034
 
2900
- if(!modernizrInputTypes.range || options.replaceUI){
3035
+ var replace = {};
3036
+
3037
+
3038
+ if(options.replaceUI){
3039
+ if( $.isPlainObject(options.replaceUI) ){
3040
+ $.extend(replace, options.replaceUI);
3041
+ } else {
3042
+ $.extend(replace, {
3043
+ 'range': 1,
3044
+ 'number': 1,
3045
+ 'time': 1,
3046
+ 'month': 1,
3047
+ 'date': 1,
3048
+ 'color': 1,
3049
+ 'datetime-local': 1
3050
+ });
3051
+ }
3052
+ }
3053
+ if(modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
3054
+ replace.number = 1;
3055
+ }
3056
+
3057
+ if(!modernizrInputTypes.range || replace.range){
2901
3058
  extendType('range', {
2902
3059
  _create: function(opts, set){
2903
3060
  var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
@@ -2906,9 +3063,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2906
3063
  });
2907
3064
  }
2908
3065
 
2909
- var isStupid = modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)));
3066
+
2910
3067
  ['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
2911
- if(!modernizrInputTypes[name] || options.replaceUI || (name == 'number' && isStupid)){
3068
+ if(!modernizrInputTypes[name] || replace[name]){
2912
3069
  extendType(name, {
2913
3070
  _create: function(opts, set){
2914
3071
  if(opts.monthSelect){