webshims-rails 1.14.3 → 1.14.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +4 -0
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +141 -139
  5. data/vendor/assets/javascripts/webshims/shims/color-picker.js +1 -3
  6. data/vendor/assets/javascripts/webshims/shims/combos/1.js +22 -33
  7. data/vendor/assets/javascripts/webshims/shims/combos/10.js +76 -73
  8. data/vendor/assets/javascripts/webshims/shims/combos/11.js +73 -61
  9. data/vendor/assets/javascripts/webshims/shims/combos/12.js +37 -41
  10. data/vendor/assets/javascripts/webshims/shims/combos/13.js +36 -40
  11. data/vendor/assets/javascripts/webshims/shims/combos/14.js +7 -7
  12. data/vendor/assets/javascripts/webshims/shims/combos/15.js +23 -32
  13. data/vendor/assets/javascripts/webshims/shims/combos/16.js +36 -57
  14. data/vendor/assets/javascripts/webshims/shims/combos/17.js +73 -61
  15. data/vendor/assets/javascripts/webshims/shims/combos/18.js +611 -4604
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +27 -47
  17. data/vendor/assets/javascripts/webshims/shims/combos/21.js +61 -31
  18. data/vendor/assets/javascripts/webshims/shims/combos/22.js +24 -16
  19. data/vendor/assets/javascripts/webshims/shims/combos/23.js +13 -25
  20. data/vendor/assets/javascripts/webshims/shims/combos/25.js +40 -27
  21. data/vendor/assets/javascripts/webshims/shims/combos/27.js +167 -166
  22. data/vendor/assets/javascripts/webshims/shims/combos/28.js +11 -12
  23. data/vendor/assets/javascripts/webshims/shims/combos/29.js +5 -5
  24. data/vendor/assets/javascripts/webshims/shims/combos/3.js +14 -22
  25. data/vendor/assets/javascripts/webshims/shims/combos/30.js +16 -24
  26. data/vendor/assets/javascripts/webshims/shims/combos/31.js +14 -22
  27. data/vendor/assets/javascripts/webshims/shims/combos/33.js +2 -2
  28. data/vendor/assets/javascripts/webshims/shims/combos/34.js +27 -28
  29. data/vendor/assets/javascripts/webshims/shims/combos/4.js +5 -14
  30. data/vendor/assets/javascripts/webshims/shims/combos/5.js +78 -66
  31. data/vendor/assets/javascripts/webshims/shims/combos/6.js +80 -68
  32. data/vendor/assets/javascripts/webshims/shims/combos/7.js +29 -49
  33. data/vendor/assets/javascripts/webshims/shims/combos/8.js +27 -47
  34. data/vendor/assets/javascripts/webshims/shims/combos/9.js +78 -75
  35. data/vendor/assets/javascripts/webshims/shims/combos/97.js +42 -29
  36. data/vendor/assets/javascripts/webshims/shims/combos/98.js +116 -40
  37. data/vendor/assets/javascripts/webshims/shims/combos/99.js +112 -38
  38. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +3 -12
  39. data/vendor/assets/javascripts/webshims/shims/es5.js +4 -4
  40. data/vendor/assets/javascripts/webshims/shims/es6.js +1887 -0
  41. data/vendor/assets/javascripts/webshims/shims/form-core.js +9 -8
  42. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +2 -2
  43. data/vendor/assets/javascripts/webshims/shims/form-inputmode.js +52 -0
  44. data/vendor/assets/javascripts/webshims/shims/form-message.js +2 -2
  45. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +4 -5
  46. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +73 -61
  47. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +7 -8
  48. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +164 -163
  49. data/vendor/assets/javascripts/webshims/shims/form-validation.js +121 -144
  50. data/vendor/assets/javascripts/webshims/shims/jme/_icons.scss +3 -0
  51. data/vendor/assets/javascripts/webshims/shims/jme/alternate-media.js +184 -0
  52. data/vendor/assets/javascripts/webshims/shims/jme/{b.js → base.js} +38 -27
  53. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +129 -39
  54. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +145 -44
  55. data/vendor/assets/javascripts/webshims/shims/jme/jme.eot +0 -0
  56. data/vendor/assets/javascripts/webshims/shims/jme/jme.svg +0 -0
  57. data/vendor/assets/javascripts/webshims/shims/jme/jme.ttf +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/jme/jme.woff +0 -0
  59. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +448 -90
  60. data/vendor/assets/javascripts/webshims/shims/jme/{c.js → mediacontrols.js} +74 -11
  61. data/vendor/assets/javascripts/webshims/shims/jme/{p.js → playlist.js} +4 -2
  62. data/vendor/assets/javascripts/webshims/shims/matchMedia.js +122 -0
  63. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +12 -24
  64. data/vendor/assets/javascripts/webshims/shims/mediaelement-debug.js +1 -1
  65. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +37 -15
  66. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +3 -3
  67. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +4 -5
  68. data/vendor/assets/javascripts/webshims/shims/picture.js +13 -54
  69. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +13 -20
  70. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +24 -18
  71. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +32 -10
  72. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +43 -47
  73. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +30 -18
  74. data/vendor/assets/javascripts/webshims/shims/styles/transparent.png +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/styles/widget.eot +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/styles/widget.svg +0 -0
  77. data/vendor/assets/javascripts/webshims/shims/styles/widget.ttf +0 -0
  78. data/vendor/assets/javascripts/webshims/shims/styles/widget.woff +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/swfmini.js +1 -1
  81. data/vendor/assets/javascripts/webshims/shims/track-ui.js +4 -5
  82. data/vendor/assets/javascripts/webshims/shims/track.js +24 -16
  83. metadata +9 -8
  84. data/vendor/assets/javascripts/webshims/shims/combos/19.js +0 -4745
  85. data/vendor/assets/javascripts/webshims/shims/combos/20.js +0 -4522
  86. data/vendor/assets/javascripts/webshims/shims/combos/32.js +0 -2443
  87. data/vendor/assets/javascripts/webshims/shims/combos/comboinfo.json +0 -1
@@ -158,7 +158,7 @@ var swfmini = function() {
158
158
  webshims.$.noop
159
159
  ;
160
160
 
161
- if(!Modernizr.video){
161
+ if(!webshims.support.mediaelement){
162
162
  loadEmbed();
163
163
  } else {
164
164
  webshims.ready('WINDOWLOAD', loadEmbed);
@@ -241,13 +241,10 @@ webshims.isReady('swfmini', true);
241
241
  e._isPolyfilled = true;
242
242
  }
243
243
  };
244
-
245
- if(Modernizr.formvalidation && !webshims.bugs.bustedValidity){
246
- //create delegatable events
247
- webshims.capturingEvents(['invalid'], true);
248
- }
244
+
249
245
 
250
246
  var modules = webshims.modules;
247
+ var support = webshims.support;
251
248
  var isValid = function(elem){
252
249
  return ($.prop(elem, 'validity') || {valid: 1}).valid;
253
250
  };
@@ -301,7 +298,7 @@ webshims.isReady('swfmini', true);
301
298
  return !!($.prop(elem, 'willValidate') && $.prop(elem, 'required'));
302
299
  },
303
300
  "user-error": function(elem){
304
- return ($.prop(elem, 'willValidate') && $(elem).hasClass('user-error'));
301
+ return ($.prop(elem, 'willValidate') && $(elem).getShadowElement().hasClass((options.iVal.errorClass || 'user-error')));
305
302
  },
306
303
  "optional-element": function(elem){
307
304
  return !!($.prop(elem, 'willValidate') && $.prop(elem, 'required') === false);
@@ -313,7 +310,7 @@ webshims.isReady('swfmini', true);
313
310
  });
314
311
 
315
312
  // sizzle/jQuery has a bug with :disabled/:enabled selectors
316
- if(Modernizr.fieldsetdisabled && !$('<fieldset disabled=""><input /><input /></fieldset>').find(':disabled').filter(':disabled').is(':disabled')){
313
+ if(support.fieldsetdisabled && !$('<fieldset disabled=""><input /><input /></fieldset>').find(':disabled').filter(':disabled').is(':disabled')){
317
314
  matches = $.find.matches;
318
315
  matchesOverride = {':disabled': 1, ':enabled': 1};
319
316
  $.find.matches = function(expr, elements){
@@ -367,6 +364,10 @@ webshims.isReady('swfmini', true);
367
364
  addModule('form-validators', $.extend({}, formExtras));
368
365
 
369
366
 
367
+ if(support.formvalidation && !webshims.bugs.bustedValidity){
368
+ //create delegatable events
369
+ webshims.capturingEvents(['invalid'], true);
370
+ }
370
371
 
371
372
  if($.expr.filters){
372
373
  extendSels();
@@ -512,7 +513,7 @@ webshims.isReady('swfmini', true);
512
513
 
513
514
  webshims.ready('WINDOWLOAD', lazyLoad);
514
515
 
515
- if(modules['form-number-date-ui'].loaded && !options.customMessages && (modules['form-number-date-api'].test() || (Modernizr.inputtypes.range && Modernizr.inputtypes.color))){
516
+ if(modules['form-number-date-ui'].loaded && !options.customMessages && (modules['form-number-date-api'].test() || (support.inputtypes.range && support.inputtypes.color))){
516
517
  webshims.isReady('form-number-date-ui', true);
517
518
  }
518
519
 
@@ -536,9 +537,10 @@ webshims.isReady('swfmini', true);
536
537
  }
537
538
  });
538
539
  });
539
- ;(function(Modernizr, webshims){
540
+ ;(function(webshims){
540
541
  "use strict";
541
- var hasNative = Modernizr.audio && Modernizr.video;
542
+ var support = webshims.support;
543
+ var hasNative = support.mediaelement;
542
544
  var supportsLoop = false;
543
545
  var bugs = webshims.bugs;
544
546
  var swfType = 'mediaelement-jaris';
@@ -561,14 +563,14 @@ webshims.isReady('swfmini', true);
561
563
 
562
564
  if(hasNative){
563
565
  var videoElem = document.createElement('video');
564
- Modernizr.videoBuffered = ('buffered' in videoElem);
565
- Modernizr.mediaDefaultMuted = ('defaultMuted' in videoElem);
566
+ support.videoBuffered = ('buffered' in videoElem);
567
+ support.mediaDefaultMuted = ('defaultMuted' in videoElem);
566
568
  supportsLoop = ('loop' in videoElem);
567
- Modernizr.mediaLoop = supportsLoop;
569
+ support.mediaLoop = supportsLoop;
568
570
 
569
571
  webshims.capturingEvents(['play', 'playing', 'waiting', 'paused', 'ended', 'durationchange', 'loadedmetadata', 'canplay', 'volumechange']);
570
572
 
571
- if( !Modernizr.videoBuffered || !supportsLoop || (!Modernizr.mediaDefaultMuted && isIE && 'ActiveXObject' in window) ){
573
+ if( !support.videoBuffered || !supportsLoop || (!support.mediaDefaultMuted && isIE && 'ActiveXObject' in window) ){
572
574
  webshims.addPolyfill('mediaelement-native-fix', {
573
575
  d: ['dom-support']
574
576
  });
@@ -576,7 +578,7 @@ webshims.isReady('swfmini', true);
576
578
  }
577
579
  }
578
580
 
579
- if(Modernizr.track && !bugs.track){
581
+ if(support.track && !bugs.track){
580
582
  (function(){
581
583
  if(!bugs.track){
582
584
 
@@ -908,19 +910,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
908
910
  }
909
911
  }
910
912
  };
911
- var allowedPreload = {'metadata': 1, 'auto': 1, '': 1};
912
- var fixPreload = function(elem){
913
- var preload, img;
914
- if(elem.getAttribute('preload') == 'none'){
915
- if(allowedPreload[(preload = $.attr(elem, 'data-preload'))]){
916
- $.attr(elem, 'preload', preload);
917
- } else if(hasNative && (preload = elem.getAttribute('poster'))){
918
- img = document.createElement('img');
919
- img.src = preload;
920
- }
921
- }
922
- };
923
- var stopParent = /^(?:embed|object|datalist)$/i;
913
+ var stopParent = /^(?:embed|object|datalist|picture)$/i;
924
914
  var selectSource = function(elem, data){
925
915
  var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
926
916
  var _srces = mediaelement.srces(elem);
@@ -935,7 +925,6 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
935
925
  if(mediaelement.sortMedia){
936
926
  _srces.sort(mediaelement.sortMedia);
937
927
  }
938
- fixPreload(elem);
939
928
  stepSources(elem, data, _srces);
940
929
 
941
930
  };
@@ -959,7 +948,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
959
948
 
960
949
  if(webshims.implement(this, 'mediaelement')){
961
950
  selectSource(this);
962
- if(!Modernizr.mediaDefaultMuted && $.attr(this, 'muted') != null){
951
+ if(!support.mediaDefaultMuted && $.attr(this, 'muted') != null){
963
952
  $.prop(this, 'muted', true);
964
953
  }
965
954
 
@@ -984,7 +973,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
984
973
  if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
985
974
  supLoad.prop._supvalue.apply(this, arguments);
986
975
  }
987
- if(!loadTrackUi.loaded && $('track', this).length){
976
+ if(!loadTrackUi.loaded && this.querySelector('track')){
988
977
  loadTrackUi();
989
978
  }
990
979
  $(this).triggerHandler('wsmediareload');
@@ -1083,4 +1072,4 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1083
1072
  webshims.ready('track', loadTrackUi);
1084
1073
  });
1085
1074
 
1086
- })(Modernizr, webshims);
1075
+ })(webshims);
@@ -62,7 +62,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
62
62
  var supportHrefNormalized = !('hrefNormalized' in $.support) || $.support.hrefNormalized;
63
63
  var supportGetSetAttribute = !('getSetAttribute' in $.support) || $.support.getSetAttribute;
64
64
  var has = Object.prototype.hasOwnProperty;
65
- webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
65
+ webshims.assumeARIA = true;
66
66
 
67
67
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
68
68
  webshims.error("IE browser modes are busted in IE10+. Please test your HTML/CSS/JS with a real IE version or at least IETester or similiar tools");
@@ -81,15 +81,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
81
81
  }
82
82
  window.jQuery = webshims.$;
83
83
  }
84
- if(webshims.M != Modernizr){
85
- webshims.error("Modernizr was included more than once. Make sure to include it only once! Webshims and other scripts might not work properly.");
86
- for(var i in Modernizr){
87
- if(!(i in webshims.M)){
88
- webshims.M[i] = Modernizr[i];
89
- }
90
- }
91
- Modernizr = webshims.M;
92
- }
93
84
  };
94
85
  switch$();
95
86
  setTimeout(switch$, 90);
@@ -418,7 +409,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
418
409
  var UNKNOWN = webshims.getPrototypeOf(document.createElement('foobar'));
419
410
 
420
411
  //see also: https://github.com/lojjic/PIE/issues/40 | https://prototype.lighthouseapp.com/projects/8886/tickets/1107-ie8-fatal-crash-when-prototypejs-is-loaded-with-rounded-cornershtc
421
- var isExtendNativeSave = Modernizr.advancedObjectProperties && Modernizr.objectAccessor;
412
+ var isExtendNativeSave = webshims.support.advancedObjectProperties && webshims.support.objectAccessor;
422
413
  return function(nodeName, prop, desc){
423
414
  var elem , elemProto;
424
415
  if( isExtendNativeSave && (elem = document.createElement(nodeName)) && (elemProto = webshims.getPrototypeOf(elem)) && UNKNOWN !== elemProto && ( !elem[prop] || !has.call(elem, prop) ) ){
@@ -729,7 +720,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
729
720
  });
730
721
  }
731
722
  webshims.ready('WINDOWLOAD', this.test);
732
- $(document).on('updatelayout.webshim pageinit popupafteropen panelbeforeopen tabsactivate collapsibleexpand shown.bs.modal shown.bs.collapse slid.bs.carousel', this.handler);
723
+ $(document).on('updatelayout.webshim pageinit popupafteropen panelbeforeopen tabsactivate collapsibleexpand shown.bs.modal shown.bs.collapse slid.bs.carousel playerdimensionchange', this.handler);
733
724
  $(window).on('resize', this.handler);
734
725
  }
735
726
  }
@@ -1843,7 +1834,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1843
1834
  "use strict";
1844
1835
  var curCfg;
1845
1836
  var formcfg = webshims.formcfg;
1846
- var hasFormValidation = Modernizr.formvalidation && !webshims.bugs.bustedValidity;
1837
+ var hasFormValidation = webshims.support.formvalidation && !webshims.bugs.bustedValidity;
1847
1838
  var monthDigits = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
1848
1839
  var stopPropagation = function(e){
1849
1840
  e.stopImmediatePropagation();
@@ -1896,7 +1887,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1896
1887
  ;
1897
1888
  }
1898
1889
  };
1899
- var numericType = Modernizr.inputtypes.tel && navigator.userAgent.indexOf('Mobile') != -1 && !('inputMode' in document.createElement('input') && !('inputmode' in document.createElement('input'))) ?
1890
+ var numericType = webshims.support.inputtypes.tel && navigator.userAgent.indexOf('Mobile') != -1 && !('inputMode' in document.createElement('input') && !('inputmode' in document.createElement('input'))) ?
1900
1891
  'tel' : 'text';
1901
1892
  var splitInputs = {
1902
1893
  date: {
@@ -2937,74 +2928,86 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
2937
2928
  })();
2938
2929
 
2939
2930
 
2940
- $.fn.wsTouchClick = (function(){
2941
- var supportsTouchaction = ('touchAction' in document.documentElement.style);
2942
- var addTouch = !supportsTouchaction && ('ontouchstart' in window) && document.addEventListener;
2943
- return function(target, handler){
2944
- var touchData, touchEnd, touchStart;
2945
2931
 
2946
- if(addTouch){
2932
+ if(!$.fn.wsTouchClick){
2947
2933
 
2948
- touchEnd = function(e){
2949
- var ret, touch;
2950
- e = e.originalEvent || {};
2951
- $(this).off('touchend touchcancel', touchEnd);
2952
- var changedTouches = e.changedTouches || e.touches;
2953
- if(e.type == 'touchcancel' || !touchData || !changedTouches || changedTouches.length != 1){
2954
- return;
2934
+ $.fn.wsTouchClick = (function(){
2935
+ var supportsTouchaction = ('touchAction' in document.documentElement.style);
2936
+ var addTouch = !supportsTouchaction && ('ontouchstart' in window) && document.addEventListener;
2937
+ return function(target, handler){
2938
+ var touchData, touchEnd, touchStart, stopClick, allowClick;
2939
+ var runHandler = function(){
2940
+ if(!stopClick){
2941
+ return handler.apply(this, arguments);
2955
2942
  }
2943
+ };
2944
+ if(addTouch){
2945
+ allowClick = function(){
2946
+ stopClick = false;
2947
+ };
2948
+ touchEnd = function(e){
2949
+ var ret, touch;
2950
+ e = e.originalEvent || {};
2951
+ $(this).off('touchend touchcancel', touchEnd);
2952
+ var changedTouches = e.changedTouches || e.touches;
2953
+ if(e.type == 'touchcancel' || !touchData || !changedTouches || changedTouches.length != 1){
2954
+ return;
2955
+ }
2956
2956
 
2957
- touch = changedTouches[0];
2958
- if(Math.abs(touchData.x - touch.pageX) > 40 || Math.abs(touchData.y - touch.pageY) > 40 || Date.now() - touchData.now > 300){
2959
- return;
2960
- }
2961
- e.preventDefault();
2962
- ret = handler.apply(this, arguments);
2957
+ touch = changedTouches[0];
2958
+ if(Math.abs(touchData.x - touch.pageX) > 40 || Math.abs(touchData.y - touch.pageY) > 40 || Date.now() - touchData.now > 300){
2959
+ return;
2960
+ }
2963
2961
 
2964
- return ret;
2965
- };
2962
+ e.preventDefault();
2963
+ stopClick = true;
2964
+ setTimeout(allowClick, 400);
2966
2965
 
2967
- touchStart = function(e){
2968
- var touch, elemTarget;
2966
+ ret = handler.apply(this, arguments);
2969
2967
 
2968
+ return ret;
2969
+ };
2970
2970
 
2971
- if((!e || e.touches.length != 1)){
2972
- return;
2973
- }
2974
- touch = e.touches[0];
2975
- elemTarget = target ? $(touch.target).closest(target) : $(this);
2976
- if(!elemTarget.length){
2977
- return;
2978
- }
2979
- touchData = {
2980
- x: touch.pageX,
2981
- y: touch.pageY,
2982
- now: Date.now()
2971
+ touchStart = function(e){
2972
+ var touch, elemTarget;
2973
+ if((!e || e.touches.length != 1)){
2974
+ return;
2975
+ }
2976
+ touch = e.touches[0];
2977
+ elemTarget = target ? $(touch.target).closest(target) : $(this);
2978
+ if(!elemTarget.length){
2979
+ return;
2980
+ }
2981
+ touchData = {
2982
+ x: touch.pageX,
2983
+ y: touch.pageY,
2984
+ now: Date.now()
2985
+ };
2986
+ elemTarget.on('touchend touchcancel', touchEnd);
2983
2987
  };
2984
- elemTarget.on('touchend touchcancel', touchEnd);
2985
- };
2986
2988
 
2987
- this.each(function(){
2988
- this.addEventListener('touchstart', touchStart, true);
2989
- });
2990
- } else if(supportsTouchaction){
2991
- this.css('touch-action', 'manipulation');
2992
- }
2989
+ this.each(function(){
2990
+ this.addEventListener('touchstart', touchStart, true);
2991
+ });
2992
+ } else if(supportsTouchaction){
2993
+ this.css('touch-action', 'manipulation');
2994
+ }
2993
2995
 
2994
- if($.isFunction(target)){
2995
- handler = target;
2996
- target = false;
2997
- this.on('click', handler);
2998
- } else {
2999
- this.on('click', target, handler);
3000
- }
3001
- return this;
3002
- };
3003
- })();
2996
+ if($.isFunction(target)){
2997
+ handler = target;
2998
+ target = false;
2999
+ this.on('click', runHandler);
3000
+ } else {
3001
+ this.on('click', target, runHandler);
3002
+ }
3003
+ return this;
3004
+ };
3005
+ })();
3006
+ }
3004
3007
 
3005
3008
  (function(){
3006
3009
  var picker = {};
3007
- var assumeVirtualKeyBoard = Modernizr.touchevents || Modernizr.touch || (/android|iphone|ipad|ipod|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase()));
3010
+ var assumeVirtualKeyBoard = (window.Modernizr && (Modernizr.touchevents || Modernizr.touch)) || (/android|iphone|ipad|ipod|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase()));
3008
3011
  webshims.inlinePopover = {
3009
3012
  _create: function(){
3010
3013
  this.element = $('<div class="ws-inline-picker"><div class="ws-po-box" /></div>').data('wspopover', this);
@@ -3394,7 +3397,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3394
3397
 
3395
3398
  var stopCircular, isCheckValidity;
3396
3399
 
3397
- var modernizrInputTypes = Modernizr.inputtypes;
3400
+ var supportInputTypes = webshims.support.inputtypes;
3398
3401
  var inputTypes = {
3399
3402
 
3400
3403
  };
@@ -3548,7 +3551,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3548
3551
  var type = $.prop(this, 'type');
3549
3552
  var i, opts, data, optsName, labels, cNames, hasInitialFocus;
3550
3553
 
3551
- if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!modernizrInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
3554
+ if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!supportInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
3552
3555
  data = {};
3553
3556
  optsName = type;
3554
3557
  hasInitialFocus = $(this).is(':focus');
@@ -3719,11 +3722,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3719
3722
  });
3720
3723
  }
3721
3724
  }
3722
- if(modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
3725
+ if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
3723
3726
  replace.number = 1;
3724
3727
  }
3725
3728
 
3726
- if(!modernizrInputTypes.range || replace.range){
3729
+ if(!supportInputTypes.range || replace.range){
3727
3730
  extendType('range', {
3728
3731
  _create: function(opts, set){
3729
3732
  var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
@@ -3734,7 +3737,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
3734
3737
 
3735
3738
 
3736
3739
  ['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
3737
- if(!modernizrInputTypes[name] || replace[name]){
3740
+ if(!supportInputTypes[name] || replace[name]){
3738
3741
  extendType(name, {
3739
3742
  _create: function(opts, set){
3740
3743
  if(opts.monthSelect || opts.daySelect || opts.yearSelect){
@@ -622,7 +622,7 @@
622
622
  "use strict";
623
623
  var curCfg;
624
624
  var formcfg = webshims.formcfg;
625
- var hasFormValidation = Modernizr.formvalidation && !webshims.bugs.bustedValidity;
625
+ var hasFormValidation = webshims.support.formvalidation && !webshims.bugs.bustedValidity;
626
626
  var monthDigits = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
627
627
  var stopPropagation = function(e){
628
628
  e.stopImmediatePropagation();
@@ -675,7 +675,7 @@
675
675
  ;
676
676
  }
677
677
  };
678
- var numericType = Modernizr.inputtypes.tel && navigator.userAgent.indexOf('Mobile') != -1 && !('inputMode' in document.createElement('input') && !('inputmode' in document.createElement('input'))) ?
678
+ var numericType = webshims.support.inputtypes.tel && navigator.userAgent.indexOf('Mobile') != -1 && !('inputMode' in document.createElement('input') && !('inputmode' in document.createElement('input'))) ?
679
679
  'tel' : 'text';
680
680
  var splitInputs = {
681
681
  date: {
@@ -1716,74 +1716,86 @@
1716
1716
  })();
1717
1717
 
1718
1718
 
1719
- $.fn.wsTouchClick = (function(){
1720
- var supportsTouchaction = ('touchAction' in document.documentElement.style);
1721
- var addTouch = !supportsTouchaction && ('ontouchstart' in window) && document.addEventListener;
1722
- return function(target, handler){
1723
- var touchData, touchEnd, touchStart;
1724
1719
 
1725
- if(addTouch){
1720
+ if(!$.fn.wsTouchClick){
1726
1721
 
1727
- touchEnd = function(e){
1728
- var ret, touch;
1729
- e = e.originalEvent || {};
1730
- $(this).off('touchend touchcancel', touchEnd);
1731
- var changedTouches = e.changedTouches || e.touches;
1732
- if(e.type == 'touchcancel' || !touchData || !changedTouches || changedTouches.length != 1){
1733
- return;
1722
+ $.fn.wsTouchClick = (function(){
1723
+ var supportsTouchaction = ('touchAction' in document.documentElement.style);
1724
+ var addTouch = !supportsTouchaction && ('ontouchstart' in window) && document.addEventListener;
1725
+ return function(target, handler){
1726
+ var touchData, touchEnd, touchStart, stopClick, allowClick;
1727
+ var runHandler = function(){
1728
+ if(!stopClick){
1729
+ return handler.apply(this, arguments);
1734
1730
  }
1731
+ };
1732
+ if(addTouch){
1733
+ allowClick = function(){
1734
+ stopClick = false;
1735
+ };
1736
+ touchEnd = function(e){
1737
+ var ret, touch;
1738
+ e = e.originalEvent || {};
1739
+ $(this).off('touchend touchcancel', touchEnd);
1740
+ var changedTouches = e.changedTouches || e.touches;
1741
+ if(e.type == 'touchcancel' || !touchData || !changedTouches || changedTouches.length != 1){
1742
+ return;
1743
+ }
1735
1744
 
1736
- touch = changedTouches[0];
1737
- if(Math.abs(touchData.x - touch.pageX) > 40 || Math.abs(touchData.y - touch.pageY) > 40 || Date.now() - touchData.now > 300){
1738
- return;
1739
- }
1740
- e.preventDefault();
1741
- ret = handler.apply(this, arguments);
1745
+ touch = changedTouches[0];
1746
+ if(Math.abs(touchData.x - touch.pageX) > 40 || Math.abs(touchData.y - touch.pageY) > 40 || Date.now() - touchData.now > 300){
1747
+ return;
1748
+ }
1742
1749
 
1743
- return ret;
1744
- };
1750
+ e.preventDefault();
1751
+ stopClick = true;
1752
+ setTimeout(allowClick, 400);
1745
1753
 
1746
- touchStart = function(e){
1747
- var touch, elemTarget;
1754
+ ret = handler.apply(this, arguments);
1748
1755
 
1756
+ return ret;
1757
+ };
1749
1758
 
1750
- if((!e || e.touches.length != 1)){
1751
- return;
1752
- }
1753
- touch = e.touches[0];
1754
- elemTarget = target ? $(touch.target).closest(target) : $(this);
1755
- if(!elemTarget.length){
1756
- return;
1757
- }
1758
- touchData = {
1759
- x: touch.pageX,
1760
- y: touch.pageY,
1761
- now: Date.now()
1759
+ touchStart = function(e){
1760
+ var touch, elemTarget;
1761
+ if((!e || e.touches.length != 1)){
1762
+ return;
1763
+ }
1764
+ touch = e.touches[0];
1765
+ elemTarget = target ? $(touch.target).closest(target) : $(this);
1766
+ if(!elemTarget.length){
1767
+ return;
1768
+ }
1769
+ touchData = {
1770
+ x: touch.pageX,
1771
+ y: touch.pageY,
1772
+ now: Date.now()
1773
+ };
1774
+ elemTarget.on('touchend touchcancel', touchEnd);
1762
1775
  };
1763
- elemTarget.on('touchend touchcancel', touchEnd);
1764
- };
1765
1776
 
1766
- this.each(function(){
1767
- this.addEventListener('touchstart', touchStart, true);
1768
- });
1769
- } else if(supportsTouchaction){
1770
- this.css('touch-action', 'manipulation');
1771
- }
1777
+ this.each(function(){
1778
+ this.addEventListener('touchstart', touchStart, true);
1779
+ });
1780
+ } else if(supportsTouchaction){
1781
+ this.css('touch-action', 'manipulation');
1782
+ }
1772
1783
 
1773
- if($.isFunction(target)){
1774
- handler = target;
1775
- target = false;
1776
- this.on('click', handler);
1777
- } else {
1778
- this.on('click', target, handler);
1779
- }
1780
- return this;
1781
- };
1782
- })();
1784
+ if($.isFunction(target)){
1785
+ handler = target;
1786
+ target = false;
1787
+ this.on('click', runHandler);
1788
+ } else {
1789
+ this.on('click', target, runHandler);
1790
+ }
1791
+ return this;
1792
+ };
1793
+ })();
1794
+ }
1783
1795
 
1784
1796
  (function(){
1785
1797
  var picker = {};
1786
- var assumeVirtualKeyBoard = Modernizr.touchevents || Modernizr.touch || (/android|iphone|ipad|ipod|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase()));
1798
+ var assumeVirtualKeyBoard = (window.Modernizr && (Modernizr.touchevents || Modernizr.touch)) || (/android|iphone|ipad|ipod|blackberry|iemobile/i.test(navigator.userAgent.toLowerCase()));
1787
1799
  webshims.inlinePopover = {
1788
1800
  _create: function(){
1789
1801
  this.element = $('<div class="ws-inline-picker"><div class="ws-po-box" /></div>').data('wspopover', this);
@@ -2173,7 +2185,7 @@
2173
2185
 
2174
2186
  var stopCircular, isCheckValidity;
2175
2187
 
2176
- var modernizrInputTypes = Modernizr.inputtypes;
2188
+ var supportInputTypes = webshims.support.inputtypes;
2177
2189
  var inputTypes = {
2178
2190
 
2179
2191
  };
@@ -2327,7 +2339,7 @@
2327
2339
  var type = $.prop(this, 'type');
2328
2340
  var i, opts, data, optsName, labels, cNames, hasInitialFocus;
2329
2341
 
2330
- if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!modernizrInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
2342
+ if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!supportInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
2331
2343
  data = {};
2332
2344
  optsName = type;
2333
2345
  hasInitialFocus = $(this).is(':focus');
@@ -2498,11 +2510,11 @@
2498
2510
  });
2499
2511
  }
2500
2512
  }
2501
- if(modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
2513
+ if(supportInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
2502
2514
  replace.number = 1;
2503
2515
  }
2504
2516
 
2505
- if(!modernizrInputTypes.range || replace.range){
2517
+ if(!supportInputTypes.range || replace.range){
2506
2518
  extendType('range', {
2507
2519
  _create: function(opts, set){
2508
2520
  var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
@@ -2513,7 +2525,7 @@
2513
2525
 
2514
2526
 
2515
2527
  ['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
2516
- if(!modernizrInputTypes[name] || replace[name]){
2528
+ if(!supportInputTypes[name] || replace[name]){
2517
2529
  extendType(name, {
2518
2530
  _create: function(opts, set){
2519
2531
  if(opts.monthSelect || opts.daySelect || opts.yearSelect){