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
@@ -16,9 +16,9 @@
16
16
  var i;
17
17
 
18
18
 
19
- 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>');
20
- this.trail = $('.ws-range-rail', this.element);
21
- this.range = $('.ws-range-min', this.element);
19
+ 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>');
20
+ this.trail = $('.ws-range-track', this.element);
21
+ this.range = $('.ws-range-progress ', this.element);
22
22
  this.thumb = $('.ws-range-thumb', this.trail);
23
23
 
24
24
  this.updateMetrics();
@@ -28,6 +28,7 @@
28
28
  for(i = 0; i < createOpts.length; i++){
29
29
  this[createOpts[i]](this.options[createOpts[i]]);
30
30
  }
31
+
31
32
  this.value = this._value;
32
33
  this.value(this.options.value);
33
34
  this.initDataList();
@@ -266,7 +267,7 @@
266
267
  }
267
268
  },
268
269
  addBindings: function(){
269
- var leftOffset, widgetUnits, hasFocus;
270
+ var leftOffset, widgetUnits, hasFocus, isActive;
270
271
  var that = this;
271
272
  var o = this.options;
272
273
 
@@ -296,8 +297,28 @@
296
297
  }
297
298
  };
298
299
  })();
299
-
300
+ var normalizeTouch = (function(){
301
+ var types = {
302
+ touchstart: 1,
303
+ touchend: 1,
304
+ touchmove: 1
305
+ };
306
+ var normalize = ['pageX', 'pageY'];
307
+ return function(e){
308
+ if(types[e.type] && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches.length){
309
+ for(var i = 0; i < normalize.length; i++){
310
+ e[normalize[i]] = e.originalEvent.touches[0][normalize[i]];
311
+ }
312
+
313
+ }
314
+ return e;
315
+ };
316
+ })();
300
317
  var setValueFromPos = function(e, animate){
318
+ if(e.type == 'touchmove'){
319
+ e.preventDefault();
320
+ normalizeTouch(e);
321
+ }
301
322
 
302
323
  var val = that.getStepedValueFromPos((e[that.dirs.mouse] - leftOffset) * widgetUnits);
303
324
  if(val != o.value){
@@ -314,18 +335,25 @@
314
335
  eventTimer.call('change', o.value);
315
336
  }
316
337
  that.addRemoveClass('ws-active');
317
- $(document).off('mousemove', setValueFromPos).off('mouseup', remove);
338
+ $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
318
339
  $(window).off('blur', removeWin);
340
+ isActive = false;
319
341
  };
320
342
  var removeWin = function(e){
321
343
  if(e.target == window){remove();}
322
344
  };
323
345
  var add = function(e){
324
346
  var outerWidth;
347
+
348
+ if(isActive || (e.type == 'touchstart' && (!e.originalEvent || !e.originalEvent.touches || e.originalEvent.touches.length != 1))){
349
+ return;
350
+ }
325
351
  e.preventDefault();
326
- $(document).off('mousemove', setValueFromPos).off('mouseup', remove);
352
+
353
+ $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
327
354
  $(window).off('blur', removeWin);
328
355
  if(!o.readonly && !o.disabled){
356
+ normalizeTouch(e);
329
357
  that.element.focus();
330
358
  that.addRemoveClass('ws-active', true);
331
359
  leftOffset = that.element.focus().offset();
@@ -335,20 +363,27 @@
335
363
  leftOffset = leftOffset[that.dirs.pos];
336
364
  widgetUnits = 100 / widgetUnits;
337
365
  setValueFromPos(e, o.animate);
366
+ isActive = true;
338
367
  $(document)
339
- .on({
340
- mouseup: remove,
341
- mousemove: setValueFromPos
342
- })
368
+ .on(e.type == 'touchstart' ?
369
+ {
370
+ touchend: remove,
371
+ touchmove: setValueFromPos
372
+ } :
373
+ {
374
+ mouseup: remove,
375
+ mousemove: setValueFromPos
376
+ }
377
+ )
343
378
  ;
344
379
  $(window).on('blur', removeWin);
345
380
  e.stopPropagation();
346
381
  }
347
382
  };
348
383
  var elementEvts = {
349
- mousedown: add,
384
+ 'touchstart mousedown': add,
350
385
  focus: function(e){
351
- if(!o.disabled){
386
+ if(!o.disabled && !hasFocus){
352
387
  eventTimer.init('input', o.value);
353
388
  eventTimer.init('change', o.value);
354
389
  that.addRemoveClass('ws-focus', true);
@@ -411,6 +446,20 @@
411
446
  this.thumb.on({
412
447
  mousedown: add
413
448
  });
449
+
450
+ if(this.orig){
451
+ $(this.orig).jProp('form').on('reset', function(){
452
+ var val = $.prop(that.orig, 'value');
453
+ that.value(val);
454
+ setTimeout(function(){
455
+ var val2 = $.prop(that.orig, 'value');
456
+ if(val != val2){
457
+ that.value(val2);
458
+ }
459
+ }, 4);
460
+ });
461
+ }
462
+
414
463
  if (window.webshims) {
415
464
  webshims.ready('WINDOWLOAD', function(){
416
465
  webshims.ready('dom-support', function(){
@@ -516,8 +565,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
516
565
  var str;
517
566
  return function(){
518
567
  if(!str){
519
- str = ('<option></option>')+$.map(monthDigits, function(val){
520
- return '<option>'+val+'</option>';
568
+ str = ('<option value=""></option>')+$.map(monthDigits, function(val){
569
+ return '<option value="'+val+'"]>'+val+'</option>';
521
570
  }).join('');
522
571
  }
523
572
  return str;
@@ -539,7 +588,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
539
588
  splits: [$('<input type="text" class="yy" size="4" inputmode="numeric" />')[0]]
540
589
  };
541
590
  if(opts.monthSelect){
542
- obj.splits.push($('<select class="mm">'+getMonthOptions()+'</select>')[0]);
591
+ obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
543
592
  } else {
544
593
  obj.splits.push($('<input type="text" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
545
594
  }
@@ -574,7 +623,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
574
623
  splits: [$('<input type="text" class="yy" inputmode="numeric" size="4" />')[0]]
575
624
  };
576
625
  if(opts.monthSelect){
577
- obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions()+'</select>')[0]);
626
+ obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions(opts)+'</select>')[0]);
578
627
  } else {
579
628
  obj.splits.push($('<input type="text" class="mm ws-spin" />')[0]);
580
629
  if(opts.onlyMonthDigits){
@@ -666,6 +715,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
666
715
  month: {
667
716
  currentText: 'Aktueller Monat'
668
717
  },
718
+ time: {
719
+ currentText: 'Jetzt'
720
+ },
669
721
  date: {
670
722
  close: 'schließen',
671
723
  clear: 'Löschen',
@@ -703,6 +755,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
703
755
  month: {
704
756
  currentText: 'This month'
705
757
  },
758
+ time: {
759
+ "currentText": "Now"
760
+ },
706
761
  date: {
707
762
  "closeText": "Done",
708
763
  clear: 'Clear',
@@ -765,6 +820,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
765
820
  if(!langCfg['datetime-localSigns']){
766
821
  langCfg['datetime-localSigns'] = langCfg.dateSigns+langCfg.timeSigns;
767
822
  }
823
+ if(!langCfg['datetime-local']){
824
+ langCfg['datetime-local'] = {};
825
+ }
826
+ if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
827
+ langCfg['datetime-local'].currentText = langCfg.time.currentText;
828
+ }
768
829
  };
769
830
  var triggerLocaleChange = function(){
770
831
  processLangCFG(curCfg);
@@ -832,6 +893,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
832
893
  } else {
833
894
  fVal = 0;
834
895
  }
896
+ if(val[0] === '00'){
897
+ val[0] = '12';
898
+ }
835
899
  val = $.trim(val.join(':')) + ' '+ curCfg.meridian[fVal];
836
900
  }
837
901
  return val;
@@ -916,6 +980,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
916
980
  time: function(val){
917
981
  var fVal;
918
982
  if(val && curCfg.meridian){
983
+ if(val.substr(0,2) === "12"){
984
+ val = "00" + val.substr(2);
985
+ }
919
986
  if(val.indexOf(curCfg.meridian[1]) != -1){
920
987
  val = val.split(':');
921
988
  fVal = (val[0] * 1);
@@ -1001,7 +1068,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1001
1068
  if(hintValue.length == 2){
1002
1069
  hintValue = opts.splitInput ?
1003
1070
  hintValue :
1004
- curCfg.patterns.d.replace('yy', hintValue[0]).replace('mm', hintValue[1]);
1071
+ curCfg.date.showMonthAfterYear ?
1072
+ hintValue[0] +' '+hintValue[1] :
1073
+
1074
+ hintValue[1] +' '+ hintValue[0];
1005
1075
  } else {
1006
1076
  hintValue = opts.splitInput ?
1007
1077
  [val, val] :
@@ -1376,10 +1446,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1376
1446
  }
1377
1447
  try {
1378
1448
  that.elemHelper[name](factor);
1449
+
1379
1450
  ret = that.elemHelper.prop('value');
1451
+
1452
+ } catch (er) {
1453
+ if(!o.value && that.maxAsNumber >= that.minAsNumber){
1454
+ ret = o.defValue;
1455
+ }
1456
+ }
1457
+ if(ret !== false && o.value != ret){
1380
1458
  that.value(ret);
1381
1459
  eventTimer.call('input', ret);
1382
- } catch (er) {}
1460
+ }
1383
1461
  return ret;
1384
1462
  }
1385
1463
  };
@@ -1445,15 +1523,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1445
1523
 
1446
1524
  initChangeEvents();
1447
1525
  },
1448
- value: function(val, force){
1449
- if(!this._init || force || val !== this.options.value){
1450
- this.element.val(this.formatValue(val));
1451
- this.options.value = val;
1452
- this._propertyChange('value');
1453
- this.mirrorValidity();
1454
- }
1455
-
1456
- },
1457
1526
  required: function(val, boolVal){
1458
1527
  this.inputElements.attr({'aria-required': ''+boolVal});
1459
1528
  this.mirrorValidity();
@@ -1470,7 +1539,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1470
1539
  formatValue: function(val, noSplit){
1471
1540
  return formatVal[this.type](val, noSplit === false ? false : this.options);
1472
1541
  },
1473
- createOpts: ['readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'value', 'required'],
1542
+ createOpts: ['readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'defaultValue', 'value', 'required'],
1474
1543
  placeholder: function(val){
1475
1544
  var options = this.options;
1476
1545
  options.placeholder = val;
@@ -1540,6 +1609,16 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1540
1609
  }
1541
1610
  };
1542
1611
 
1612
+ ['defaultValue', 'value'].forEach(function(name){
1613
+ wsWidgetProto[name] = function(val, force){
1614
+ if(!this._init || force || val !== this.options[name]){
1615
+ this.element.prop(name, this.formatValue(val));
1616
+ this.options[name] = val;
1617
+ this._propertyChange(name);
1618
+ this.mirrorValidity();
1619
+ }
1620
+ };
1621
+ });
1543
1622
 
1544
1623
  ['readonly', 'disabled'].forEach(function(name){
1545
1624
  var isDisabled = name == 'disabled';
@@ -1593,7 +1672,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1593
1672
  }
1594
1673
  this._init = true;
1595
1674
  },
1596
- createOpts: ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'value', 'required'],
1675
+ createOpts: ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'defaultValue', 'value', 'required'],
1597
1676
  _addSplitInputs: function(){
1598
1677
  if(!this.inputElements){
1599
1678
  var create = splitInputs[this.type]._create(this.options);
@@ -1663,9 +1742,47 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1663
1742
  this.options.step = val;
1664
1743
  this.elemHelper.prop('step', retDefault(val, defStep.step));
1665
1744
  this.mirrorValidity();
1745
+ },
1746
+ _beforeValue: function(val){
1747
+ this.valueAsNumber = this.asNumber(val);
1748
+ this.options.value = val;
1749
+
1750
+ if(isNaN(this.valueAsNumber) || (!isNaN(this.minAsNumber) && this.valueAsNumber < this.minAsNumber) || (!isNaN(this.maxAsNumber) && this.valueAsNumber > this.maxAsNumber)){
1751
+ this._setStartInRange();
1752
+ } else {
1753
+ this.elemHelper.prop('value', val);
1754
+ this.options.defValue = "";
1755
+ }
1666
1756
  }
1667
1757
  });
1668
1758
 
1759
+ ['defaultValue', 'value'].forEach(function(name){
1760
+ var isValue = name == 'value';
1761
+ spinBtnProto[name] = function(val, force){
1762
+ if(!this._init || force || this.options[name] !== val){
1763
+ if(isValue){
1764
+ this._beforeValue(val);
1765
+ }
1766
+
1767
+ val = formatVal[this.type](val, this.options);
1768
+ if(this.options.splitInput){
1769
+ $.each(this.splits, function(i, elem){
1770
+ var setOption;
1771
+ if(!(name in elem) && !isValue && $.nodeName(elem, 'select')){
1772
+ $('option[value="'+ val[i] +'"]', elem).prop('defaultSelected', true);
1773
+ } else {
1774
+ $.prop(elem, name, val[i]);
1775
+ }
1776
+ });
1777
+ } else {
1778
+ this.element.prop(name, val);
1779
+ }
1780
+ this._propertyChange(name);
1781
+ this.mirrorValidity();
1782
+ }
1783
+ };
1784
+ });
1785
+
1669
1786
  $.each({min: 1, max: -1}, function(name, factor){
1670
1787
  var numName = name +'AsNumber';
1671
1788
  spinBtnProto[name] = function(val){
@@ -2069,10 +2186,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2069
2186
  var inputTypes = {
2070
2187
 
2071
2188
  };
2189
+ var boolAttrs = {disabled: 1, required: 1, readonly: 1};
2072
2190
  var copyProps = [
2073
2191
  'disabled',
2074
2192
  'readonly',
2075
2193
  'value',
2194
+ 'defaultValue',
2076
2195
  'min',
2077
2196
  'max',
2078
2197
  'step',
@@ -2090,14 +2209,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2090
2209
  if(!stopCircular){
2091
2210
  var shadowData = webshims.data(this, 'shadowData');
2092
2211
  if(shadowData && shadowData.data && shadowData.nativeElement === this && shadowData.data[fnName]){
2093
- shadowData.data[fnName](val, boolVal);
2212
+ if(boolAttrs[fnName]){
2213
+ shadowData.data[fnName](val, boolVal);
2214
+ } else {
2215
+ shadowData.data[fnName](val);
2216
+ }
2094
2217
  }
2095
2218
  }
2096
2219
  });
2097
2220
  });
2098
2221
 
2099
2222
  if(options.replaceUI && 'valueAsNumber' in document.createElement('input')){
2100
- var reflectFn = function(val){
2223
+ var reflectFn = function(){
2101
2224
  if(webshims.data(this, 'hasShadow')){
2102
2225
  $.prop(this, 'value', $.prop(this, 'value'));
2103
2226
  }
@@ -2105,6 +2228,20 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2105
2228
 
2106
2229
  webshims.onNodeNamesPropertyModify('input', 'valueAsNumber', reflectFn);
2107
2230
  webshims.onNodeNamesPropertyModify('input', 'valueAsDate', reflectFn);
2231
+ $.each({stepUp: 1, stepDown: -1}, function(name, stepFactor){
2232
+ var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
2233
+ prop: {
2234
+ value: function(){
2235
+ var ret;
2236
+ if(stepDescriptor.prop && stepDescriptor.prop._supvalue){
2237
+ ret = stepDescriptor.prop._supvalue.apply(this, arguments);
2238
+ reflectFn.apply(this, arguments);
2239
+ }
2240
+ return ret;
2241
+ }
2242
+ }
2243
+ });
2244
+ });
2108
2245
  }
2109
2246
 
2110
2247
  var extendType = (function(){
@@ -2124,7 +2261,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2124
2261
  $(data.orig).removeClass('ws-important-hide');
2125
2262
  $.style( data.orig, 'display', '' );
2126
2263
  var hasButtons, marginR, marginL;
2127
- var correctWidth = 0.6;
2264
+ var correctWidth = 0.8;
2128
2265
  if(!init || data.orig.offsetWidth){
2129
2266
  hasButtons = data.buttonWrapper && data.buttonWrapper.filter(isVisible).length;
2130
2267
  marginR = $.css( data.orig, 'marginRight');
@@ -2148,7 +2285,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2148
2285
  ;
2149
2286
  } else {
2150
2287
  data.buttonWrapper.css('marginRight', marginR);
2151
- correctWidth = data.buttonWrapper.outerWidth(true) + 0.6;
2288
+ correctWidth = data.buttonWrapper.outerWidth(true) + correctWidth;
2152
2289
  }
2153
2290
  }
2154
2291
 
@@ -2306,7 +2443,29 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2306
2443
  });
2307
2444
  }
2308
2445
 
2309
- if(!modernizrInputTypes.range || options.replaceUI){
2446
+ var replace = {};
2447
+
2448
+
2449
+ if(options.replaceUI){
2450
+ if( $.isPlainObject(options.replaceUI) ){
2451
+ $.extend(replace, options.replaceUI);
2452
+ } else {
2453
+ $.extend(replace, {
2454
+ 'range': 1,
2455
+ 'number': 1,
2456
+ 'time': 1,
2457
+ 'month': 1,
2458
+ 'date': 1,
2459
+ 'color': 1,
2460
+ 'datetime-local': 1
2461
+ });
2462
+ }
2463
+ }
2464
+ if(modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
2465
+ replace.number = 1;
2466
+ }
2467
+
2468
+ if(!modernizrInputTypes.range || replace.range){
2310
2469
  extendType('range', {
2311
2470
  _create: function(opts, set){
2312
2471
  var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
@@ -2315,9 +2474,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2315
2474
  });
2316
2475
  }
2317
2476
 
2318
- var isStupid = modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)));
2477
+
2319
2478
  ['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
2320
- if(!modernizrInputTypes[name] || options.replaceUI || (name == 'number' && isStupid)){
2479
+ if(!modernizrInputTypes[name] || replace[name]){
2321
2480
  extendType(name, {
2322
2481
  _create: function(opts, set){
2323
2482
  if(opts.monthSelect){