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
@@ -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){