webshims-rails 1.13.0 → 1.14.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) 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 +0 -0
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +45 -26
  5. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/canvas2png.js +0 -0
  6. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js +0 -0
  7. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.swf +0 -0
  8. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/proxy.php +0 -0
  9. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/save.php +0 -0
  10. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/canvas2png.js +0 -0
  11. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  12. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  13. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flashcanvas.js +0 -0
  14. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/proxy.php +0 -0
  15. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/save.php +0 -0
  16. data/vendor/assets/javascripts/webshims/shims/color-picker.js +0 -0
  17. data/vendor/assets/javascripts/webshims/shims/combos/1.js +33 -2
  18. data/vendor/assets/javascripts/webshims/shims/combos/10.js +82 -29
  19. data/vendor/assets/javascripts/webshims/shims/combos/11.js +50 -27
  20. data/vendor/assets/javascripts/webshims/shims/combos/12.js +0 -0
  21. data/vendor/assets/javascripts/webshims/shims/combos/13.js +0 -0
  22. data/vendor/assets/javascripts/webshims/shims/combos/14.js +1 -1
  23. data/vendor/assets/javascripts/webshims/shims/combos/15.js +115 -43
  24. data/vendor/assets/javascripts/webshims/shims/combos/16.js +115 -43
  25. data/vendor/assets/javascripts/webshims/shims/combos/17.js +50 -27
  26. data/vendor/assets/javascripts/webshims/shims/combos/18.js +50 -27
  27. data/vendor/assets/javascripts/webshims/shims/combos/19.js +33 -3
  28. data/vendor/assets/javascripts/webshims/shims/combos/2.js +65 -4
  29. data/vendor/assets/javascripts/webshims/shims/combos/20.js +33 -3
  30. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1 -1
  31. data/vendor/assets/javascripts/webshims/shims/combos/22.js +0 -0
  32. data/vendor/assets/javascripts/webshims/shims/combos/23.js +0 -0
  33. data/vendor/assets/javascripts/webshims/shims/combos/25.js +492 -2580
  34. data/vendor/assets/javascripts/webshims/shims/combos/26.js +8314 -1432
  35. data/vendor/assets/javascripts/webshims/shims/combos/27.js +1642 -556
  36. data/vendor/assets/javascripts/webshims/shims/combos/28.js +50 -39
  37. data/vendor/assets/javascripts/webshims/shims/combos/29.js +0 -0
  38. data/vendor/assets/javascripts/webshims/shims/combos/3.js +66 -5
  39. data/vendor/assets/javascripts/webshims/shims/combos/30.js +66 -5
  40. data/vendor/assets/javascripts/webshims/shims/combos/31.js +65 -4
  41. data/vendor/assets/javascripts/webshims/shims/combos/32.js +0 -0
  42. data/vendor/assets/javascripts/webshims/shims/combos/33.js +0 -0
  43. data/vendor/assets/javascripts/webshims/shims/combos/34.js +32 -2
  44. data/vendor/assets/javascripts/webshims/shims/combos/4.js +33 -3
  45. data/vendor/assets/javascripts/webshims/shims/combos/5.js +50 -27
  46. data/vendor/assets/javascripts/webshims/shims/combos/6.js +50 -27
  47. data/vendor/assets/javascripts/webshims/shims/combos/7.js +66 -5
  48. data/vendor/assets/javascripts/webshims/shims/combos/8.js +66 -5
  49. data/vendor/assets/javascripts/webshims/shims/combos/9.js +82 -29
  50. data/vendor/assets/javascripts/webshims/shims/combos/97.js +0 -0
  51. data/vendor/assets/javascripts/webshims/shims/combos/98.js +1 -2
  52. data/vendor/assets/javascripts/webshims/shims/combos/99.js +1 -2
  53. data/vendor/assets/javascripts/webshims/shims/combos/comboinfo.json +1 -0
  54. data/vendor/assets/javascripts/webshims/shims/details.js +0 -0
  55. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +32 -2
  56. data/vendor/assets/javascripts/webshims/shims/es5.js +0 -0
  57. data/vendor/assets/javascripts/webshims/shims/excanvas.js +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/filereader.js +441 -362
  59. data/vendor/assets/javascripts/webshims/shims/form-combat.js +19 -7
  60. data/vendor/assets/javascripts/webshims/shims/form-core.js +33 -2
  61. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +0 -0
  62. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +0 -0
  63. data/vendor/assets/javascripts/webshims/shims/form-fixrangechange.js +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/form-message.js +1 -1
  65. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +0 -0
  66. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +50 -27
  68. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +49 -38
  69. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +45 -14
  70. data/vendor/assets/javascripts/webshims/shims/form-validation.js +105 -7
  71. data/vendor/assets/javascripts/webshims/shims/form-validators.js +212 -134
  72. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +15 -12
  73. data/vendor/assets/javascripts/webshims/shims/geolocation.js +0 -0
  74. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ar.js +0 -0
  75. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ch-CN.js +0 -0
  76. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-cs.js +0 -0
  77. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.js +0 -0
  78. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-el.js +0 -0
  79. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.js +0 -0
  80. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-es.js +0 -0
  81. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fr.js +0 -0
  82. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-he.js +0 -0
  83. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hi.js +0 -0
  84. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hu.js +0 -0
  85. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-it.js +0 -0
  86. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ja.js +0 -0
  87. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +0 -0
  88. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +0 -0
  89. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js +0 -0
  90. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-BR.js +0 -0
  91. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-PT.js +0 -0
  92. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt.js +0 -0
  93. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ru.js +0 -0
  94. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-sv.js +0 -0
  95. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-CN.js +0 -0
  96. data/vendor/assets/javascripts/webshims/shims/jajax.js +0 -0
  97. data/vendor/assets/javascripts/webshims/shims/jme/b.js +0 -0
  98. data/vendor/assets/javascripts/webshims/shims/jme/c.js +1 -2
  99. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +0 -0
  100. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +0 -0
  101. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +3 -3
  102. data/vendor/assets/javascripts/webshims/shims/jme/p.js +0 -0
  103. data/vendor/assets/javascripts/webshims/shims/jpicker/ChangeLog.txt +0 -0
  104. data/vendor/assets/javascripts/webshims/shims/jpicker/ReadMe.txt +0 -0
  105. data/vendor/assets/javascripts/webshims/shims/jpicker/images/AlphaBar.png +0 -0
  106. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Bars.png +0 -0
  107. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Maps.png +0 -0
  108. data/vendor/assets/javascripts/webshims/shims/jpicker/images/NoColor.png +0 -0
  109. data/vendor/assets/javascripts/webshims/shims/jpicker/images/bar-opacity.png +0 -0
  110. data/vendor/assets/javascripts/webshims/shims/jpicker/images/map-opacity.png +0 -0
  111. data/vendor/assets/javascripts/webshims/shims/jpicker/images/mappoint.gif +0 -0
  112. data/vendor/assets/javascripts/webshims/shims/jpicker/images/picker.gif +0 -0
  113. data/vendor/assets/javascripts/webshims/shims/jpicker/images/preview-opacity.png +0 -0
  114. data/vendor/assets/javascripts/webshims/shims/jpicker/images/rangearrows.gif +0 -0
  115. data/vendor/assets/javascripts/webshims/shims/jpicker/jpicker.css +0 -0
  116. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +0 -0
  117. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +1 -1
  118. data/vendor/assets/javascripts/webshims/shims/mediaelement-native-fix.js +0 -0
  119. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +1 -1
  120. data/vendor/assets/javascripts/webshims/shims/moxie/flash/Moxie.cdn.swf +0 -0
  121. data/vendor/assets/javascripts/webshims/shims/moxie/js/moxie.js +7994 -0
  122. data/vendor/assets/javascripts/webshims/shims/moxie/silverlight/Moxie.cdn.xap +0 -0
  123. data/vendor/assets/javascripts/webshims/shims/picture.js +50 -43
  124. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +0 -0
  125. data/vendor/assets/javascripts/webshims/shims/promise.js +0 -0
  126. data/vendor/assets/javascripts/webshims/shims/range-ui.js +0 -0
  127. data/vendor/assets/javascripts/webshims/shims/sizzle.js +0 -0
  128. data/vendor/assets/javascripts/webshims/shims/styles/color-picker.png +0 -0
  129. data/vendor/assets/javascripts/webshims/shims/styles/config.rb +0 -0
  130. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +7 -2
  131. data/vendor/assets/javascripts/webshims/shims/styles/forms-picker.css +0 -0
  132. data/vendor/assets/javascripts/webshims/shims/styles/progress.gif +0 -0
  133. data/vendor/assets/javascripts/webshims/shims/styles/progress.png +0 -0
  134. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-forms-ext.scss +219 -0
  135. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-shim.scss +115 -0
  136. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +31 -0
  137. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +583 -0
  138. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-picker.scss +488 -0
  139. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim-ext.scss +2 -0
  140. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +736 -0
  141. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +105 -21
  142. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +91 -19
  143. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  144. data/vendor/assets/javascripts/webshims/shims/swf/filereader.swf +0 -0
  145. data/vendor/assets/javascripts/webshims/shims/swfmini-embed.js +0 -0
  146. data/vendor/assets/javascripts/webshims/shims/swfmini.js +0 -0
  147. data/vendor/assets/javascripts/webshims/shims/track-ui.js +1 -1
  148. data/vendor/assets/javascripts/webshims/shims/track.js +0 -0
  149. metadata +13 -2
@@ -402,8 +402,8 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
402
402
  });
403
403
  return this;
404
404
  };
405
-
406
- var dataID = '_webshimsLib'+ (Math.round(Math.random() * 1000));
405
+ var idCount = 0;
406
+ var dataID = '_webshims'+ (Math.round(Math.random() * 1000));
407
407
  var elementData = function(elem, key, val){
408
408
  elem = elem.jquery ? elem[0] : elem;
409
409
  if(!elem){return val || {};}
@@ -434,6 +434,35 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
434
434
  return this.pushStack(elems);
435
435
  };
436
436
  });
437
+
438
+ function clone(elem, dataAndEvents, uniqueIds){
439
+ var cloned = $.clone( elem, dataAndEvents, false );
440
+ $(cloned.querySelectorAll('.'+webshims.shadowClass)).detach();
441
+ if(uniqueIds){
442
+ idCount++;
443
+ $(cloned.querySelectorAll('[id]')).prop('id', function(i, id){
444
+ return id +idCount;
445
+ });
446
+ } else {
447
+ $(cloned.querySelectorAll('audio[id^="ID-"], video[id^="ID-"], label[id^="ID-"]')).removeAttr('id');
448
+ }
449
+ return cloned;
450
+ }
451
+
452
+ $.fn.clonePolyfill = function(dataAndEvents, uniqueIds){
453
+ dataAndEvents = dataAndEvents || false;
454
+ return this
455
+ .map(function() {
456
+ var cloned = clone( this, dataAndEvents, uniqueIds );
457
+ setTimeout(function(){
458
+ if($.contains(document.body, cloned)){
459
+ $(cloned).updatePolyfill();
460
+ }
461
+ });
462
+ return cloned;
463
+ })
464
+ ;
465
+ };
437
466
 
438
467
  //add support for $('video').trigger('play') in case extendNative is set to false
439
468
  if(!webshims.cfg.extendNative && !webshims.cfg.noTriggerOverride){
@@ -745,6 +774,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
745
774
  return id;
746
775
  };
747
776
  })(),
777
+ shadowClass: 'wsshadow-'+(Date.now()),
748
778
  implement: function(elem, type){
749
779
  var data = elementData(elem, 'implemented') || elementData(elem, 'implemented', {});
750
780
  if(data[type]){
@@ -1556,6 +1586,8 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1556
1586
  addModule('form-validation', $.extend({d: ['form-message']}, formExtras));
1557
1587
 
1558
1588
  addModule('form-validators', $.extend({}, formExtras));
1589
+
1590
+
1559
1591
 
1560
1592
  if($.expr.filters){
1561
1593
  extendSels();
@@ -1676,13 +1708,22 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1676
1708
  };
1677
1709
 
1678
1710
  $.event.special.valuevalidation = {
1711
+ setup: function(){
1712
+ webshims.error('valuevalidation was renamed to validatevalue!');
1713
+ }
1714
+ };
1715
+
1716
+
1717
+ $.event.special.validatevalue = {
1679
1718
  setup: function(){
1680
1719
  var data = $(this).data() || $.data(this, {});
1681
- if(!('valuevalidation' in data)){
1682
- data.valuevalidation = true;
1720
+ if(!('validatevalue' in data)){
1721
+ data.validatevalue = true;
1683
1722
  }
1684
1723
  }
1685
1724
  };
1725
+
1726
+
1686
1727
 
1687
1728
  $(document).on('focusin.lazyloadvalidation', function(e){
1688
1729
  if('form' in e.target){
@@ -1695,6 +1736,26 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1695
1736
  if(modules['form-number-date-ui'].loaded && !options.customMessages && (modules['form-number-date-api'].test() || (Modernizr.inputtypes.range && Modernizr.inputtypes.color))){
1696
1737
  webshims.isReady('form-number-date-ui', true);
1697
1738
  }
1739
+
1740
+ webshims.ready('DOM', function(){
1741
+ if(document.querySelector('.ws-custom-file')){
1742
+ webshims.reTest(['form-validation']);
1743
+ }
1744
+ });
1745
+
1746
+ $(function(){
1747
+ var fileReaderReady = ('FileReader' in window && 'FormData' in window);
1748
+ if(!fileReaderReady){
1749
+ webshims.addReady(function(context){
1750
+ if(!fileReaderReady && !modules.filereader.loaded && !modules.moxie.loaded){
1751
+ if(context.querySelector('input.ws-filereader')){
1752
+ webshims.reTest(['filereader', 'moxie']);
1753
+ fileReaderReady = true;
1754
+ }
1755
+ }
1756
+ });
1757
+ }
1758
+ });
1698
1759
  });
1699
1760
  ;webshims.register('form-shim-extend', function($, webshims, window, document, undefined, options){
1700
1761
  "use strict";
@@ -1702,17 +1763,21 @@ webshims.inputTypes = webshims.inputTypes || {};
1702
1763
  //some helper-functions
1703
1764
  var cfg = webshims.cfg.forms;
1704
1765
  var bugs = webshims.bugs;
1705
-
1706
- var isNumber = function(string){
1707
- return (typeof string == 'number' || (string && string == string * 1));
1708
- },
1709
- typeModels = webshims.inputTypes,
1766
+ var splitReg = /\s*,\s*/g;
1767
+ var typeModels = webshims.inputTypes,
1710
1768
  checkTypes = {
1711
1769
  radio: 1,
1712
1770
  checkbox: 1
1713
1771
  },
1714
- getType = function(elem){
1715
- return (elem.getAttribute('type') || elem.type || '').toLowerCase();
1772
+ getType = function(){
1773
+ var elem = this;
1774
+ var type = (elem.getAttribute('type') || '').toLowerCase();
1775
+ return (webshims.inputTypes[type]) ? type : elem.type;
1776
+ },
1777
+ cacheType = function(cache, input){
1778
+ if(!('type' in cache)){
1779
+ cache.type = getType.call(input);
1780
+ }
1716
1781
  }
1717
1782
  ;
1718
1783
 
@@ -1792,6 +1857,7 @@ var isPlaceholderOptionSelected = function(select){
1792
1857
  };
1793
1858
 
1794
1859
  var emptyJ = $([]);
1860
+ //TODO: cache + perftest
1795
1861
  var getGroupElements = function(elem){
1796
1862
  elem = $(elem);
1797
1863
  var name, form;
@@ -1816,9 +1882,7 @@ var validityRules = {
1816
1882
  valueMissing: function(input, val, cache){
1817
1883
  if(!input.prop('required')){return false;}
1818
1884
  var ret = false;
1819
- if(!('type' in cache)){
1820
- cache.type = getType(input[0]);
1821
- }
1885
+ cacheType(cache, input[0]);
1822
1886
  if(cache.nodeName == 'select'){
1823
1887
  ret = (!val && (input[0].selectedIndex < 0 || isPlaceholderOptionSelected(input[0]) ));
1824
1888
  } else if(checkTypes[cache.type]){
@@ -1829,21 +1893,32 @@ var validityRules = {
1829
1893
  return ret;
1830
1894
  },
1831
1895
  patternMismatch: function(input, val, cache) {
1832
- if(val === '' || cache.nodeName == 'select'){return false;}
1833
- if(!('type' in cache)){
1834
- cache.type = getType(input[0]);
1835
- }
1836
- if(!patternTypes[cache.type]){return false;}
1896
+ var i;
1897
+ var ret = false;
1898
+ if(val === '' || cache.nodeName == 'select'){return ret;}
1899
+
1900
+ cacheType(cache, input[0]);
1901
+
1902
+ if(!patternTypes[cache.type]){return ret;}
1837
1903
  var pattern = input.attr('pattern');
1838
- if(!pattern){return false;}
1904
+ if(!pattern){return ret;}
1839
1905
  try {
1840
1906
  pattern = new RegExp('^(?:' + pattern + ')$');
1841
1907
  } catch(er){
1842
1908
  webshims.error('invalid pattern value: "'+ pattern +'" | '+ er);
1843
- pattern = false;
1909
+ pattern = ret;
1910
+ }
1911
+ if(!pattern){return ret;}
1912
+
1913
+ val = cache.type == 'email' && input.prop('multiple') ? val.split(splitReg) : [val];
1914
+
1915
+ for(i = 0; i < val.length; i++){
1916
+ if(!pattern.test(val[i])){
1917
+ ret = true;
1918
+ break;
1919
+ }
1844
1920
  }
1845
- if(!pattern){return false;}
1846
- return !(pattern.test(val));
1921
+ return ret;
1847
1922
  }
1848
1923
  }
1849
1924
  ;
@@ -1852,9 +1927,9 @@ $.each({tooShort: ['minLength', -1], tooLong: ['maxLength', 1]}, function(name,
1852
1927
  validityRules[name] = function(input, val, cache){
1853
1928
  //defaultValue is not the same as dirty flag, but very similiar
1854
1929
  if(cache.nodeName == 'select' || input.prop('defaultValue') == val){return false;}
1855
- if(!('type' in cache)){
1856
- cache.type = getType(input[0]);
1857
- }
1930
+
1931
+ cacheType(cache, input[0]);
1932
+
1858
1933
  if(!lengthTypes[cache.type]){return false;}
1859
1934
  var prop = input.prop(props[0]);
1860
1935
 
@@ -1866,9 +1941,8 @@ $.each({typeMismatch: 'mismatch', badInput: 'bad'}, function(name, fn){
1866
1941
  validityRules[name] = function (input, val, cache){
1867
1942
  if(val === '' || cache.nodeName == 'select'){return false;}
1868
1943
  var ret = false;
1869
- if(!('type' in cache)){
1870
- cache.type = getType(input[0]);
1871
- }
1944
+
1945
+ cacheType(cache, input[0]);
1872
1946
 
1873
1947
  if(typeModels[cache.type] && typeModels[cache.type][fn]){
1874
1948
  ret = typeModels[cache.type][fn](val, input);
@@ -1936,6 +2010,7 @@ $.extend($.event.special.submit, {
1936
2010
  return submitSetup.apply(this, arguments);
1937
2011
  }
1938
2012
  });
2013
+
1939
2014
  webshims.ready('form-shim-extend2 WINDOWLOAD', function(){
1940
2015
  $(window).on('invalid', $.noop);
1941
2016
  });
@@ -1945,15 +2020,16 @@ webshims.addInputType('email', {
1945
2020
  mismatch: (function(){
1946
2021
  //taken from http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
1947
2022
  var test = cfg.emailReg || /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
1948
- var splitReg = /\s*,\s*/g;
1949
2023
  return function(val, input){
2024
+ var i;
1950
2025
  var ret = false;
1951
- val = $(input).prop('multiple') ? val.split(splitReg) : [val];
1952
-
1953
- for(var i = 0; i < val.length; i++){
1954
- if(!test.test(val[i])){
1955
- ret = true;
1956
- break;
2026
+ if(val){
2027
+ val = input.prop('multiple') ? val.split(splitReg) : [val];
2028
+ for(i = 0; i < val.length; i++){
2029
+ if(!test.test(val[i])){
2030
+ ret = true;
2031
+ break;
2032
+ }
1957
2033
  }
1958
2034
  }
1959
2035
  return ret;
@@ -1966,18 +2042,14 @@ webshims.addInputType('url', {
1966
2042
  //taken from scott gonzales
1967
2043
  var test = cfg.urlReg || /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
1968
2044
  return function(val){
1969
- return !test.test(val);
2045
+ return val && !test.test(val);
1970
2046
  };
1971
2047
  })()
1972
2048
  });
1973
2049
 
1974
2050
  webshims.defineNodeNameProperty('input', 'type', {
1975
2051
  prop: {
1976
- get: function(){
1977
- var elem = this;
1978
- var type = (elem.getAttribute('type') || '').toLowerCase();
1979
- return (webshims.inputTypes[type]) ? type : elem.type;
1980
- }
2052
+ get: getType
1981
2053
  }
1982
2054
  });
1983
2055
 
@@ -2708,7 +2780,7 @@ webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors
2708
2780
  if(message && message.indexOf('{%') != -1){
2709
2781
  ['value', 'min', 'max', 'maxlength', 'minlength', 'label'].forEach(function(attr){
2710
2782
  if(message.indexOf('{%'+attr) === -1){return;}
2711
- var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.prop(elem, attr)) || '';
2783
+ var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.prop(elem, attr) || $.attr(elem, attr) || '') || '';
2712
2784
  val = ''+val;
2713
2785
 
2714
2786
 
@@ -1286,6 +1286,8 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1286
1286
  ;
1287
1287
  }
1288
1288
  };
1289
+ var numericType = Modernizr.inputtypes.tel && navigator.userAgent.indexOf('Mobile') != -1 && !('inputMode' in document.createElement('input') && !('inputmode' in document.createElement('input'))) ?
1290
+ 'tel' : 'text';
1289
1291
  var splitInputs = {
1290
1292
  date: {
1291
1293
  _create: function(opts){
@@ -1296,18 +1298,18 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1296
1298
  if(opts.yearSelect){
1297
1299
  obj.splits.push($('<select class="yy"></select>')[0]);
1298
1300
  } else {
1299
- obj.splits.push($('<input type="text" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]);
1301
+ obj.splits.push($('<input type="'+ numericType +'" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]);
1300
1302
  }
1301
1303
 
1302
1304
  if(opts.monthSelect){
1303
1305
  obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
1304
1306
  } else {
1305
- obj.splits.push($('<input type="text" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
1307
+ obj.splits.push($('<input type="'+ numericType +'" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
1306
1308
  }
1307
1309
  if(opts.daySelect){
1308
1310
  obj.splits.push($(daySelect)[0]);
1309
1311
  } else {
1310
- obj.splits.push($('<input type="text" class="dd ws-spin" inputmode="numeric" maxlength="2" size="2" />')[0]);
1312
+ obj.splits.push($('<input type="'+ numericType +'" class="dd ws-spin" inputmode="numeric" maxlength="2" size="2" />')[0]);
1311
1313
  }
1312
1314
 
1313
1315
  obj.elements = [obj.splits[0], $('<span class="ws-input-seperator" />')[0], obj.splits[1], $('<span class="ws-input-seperator" />')[0], obj.splits[2]];
@@ -1342,7 +1344,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1342
1344
  if(opts.yearSelect){
1343
1345
  obj.splits.push($('<select class="yy"></select>')[0]);
1344
1346
  } else {
1345
- obj.splits.push($('<input type="text" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]);
1347
+ obj.splits.push($('<input type="'+ numericType +'" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]);
1346
1348
  }
1347
1349
 
1348
1350
  if(opts.monthSelect){
@@ -1350,7 +1352,10 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1350
1352
  } else {
1351
1353
  obj.splits.push($('<input type="text" class="mm ws-spin" />')[0]);
1352
1354
  if(opts.onlyMonthDigits){
1353
- $(obj.splits[1]).attr({inputmode: 'numeric', size: 2, maxlength: 2});
1355
+ $().attr({inputmode: 'numeric', size: 2, maxlength: 2});
1356
+ try {
1357
+ obj.splits[1].setAttribute('type', numericType);
1358
+ } catch(e){}
1354
1359
  }
1355
1360
  }
1356
1361
 
@@ -1373,7 +1378,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1373
1378
  }
1374
1379
  }
1375
1380
  };
1376
-
1381
+
1377
1382
  var nowDate = new Date(new Date().getTime() - (new Date().getTimezoneOffset() * 60 * 1000 ));
1378
1383
  var nowYear = nowDate.getFullYear();
1379
1384
  nowDate = new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(), nowDate.getHours()).getTime();
@@ -2193,7 +2198,11 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2193
2198
  } else if(!isNaN(this.maxAsNumber) && start > this.maxAsNumber){
2194
2199
  start = this.maxAsNumber;
2195
2200
  }
2196
- this.elemHelper.prop('valueAsNumber', start);
2201
+ try {
2202
+ this.elemHelper.prop('valueAsNumber', start);
2203
+ } catch(e){
2204
+ webshims.warn('valueAsNumber set: '+e);
2205
+ }
2197
2206
  this.options.defValue = this.elemHelper.prop('value');
2198
2207
  },
2199
2208
  reorderInputs: function(){
@@ -2217,7 +2226,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2217
2226
  _beforeValue: function(val){
2218
2227
  this.valueAsNumber = this.asNumber(val);
2219
2228
  this.options.value = val;
2220
-
2229
+
2221
2230
  if(isNaN(this.valueAsNumber) || (!isNaN(this.minAsNumber) && this.valueAsNumber < this.minAsNumber) || (!isNaN(this.maxAsNumber) && this.valueAsNumber > this.maxAsNumber)){
2222
2231
  this._setStartInRange();
2223
2232
  } else {
@@ -2333,9 +2342,9 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2333
2342
  touchEnd = function(e){
2334
2343
  var ret, touch;
2335
2344
  e = e.originalEvent || {};
2336
- $(this).off('touchend', touchEnd);
2345
+ $(this).off('touchend touchcancel', touchEnd);
2337
2346
  var changedTouches = e.changedTouches || e.touches;
2338
- if(!touchData || !changedTouches || changedTouches.length != 1){
2347
+ if(e.type == 'touchcancel' || !touchData || !changedTouches || changedTouches.length != 1){
2339
2348
  return;
2340
2349
  }
2341
2350
 
@@ -2366,7 +2375,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2366
2375
  y: touch.pageY,
2367
2376
  now: Date.now()
2368
2377
  };
2369
- elemTarget.on('touchend', touchEnd);
2378
+ elemTarget.on('touchend touchcancel', touchEnd);
2370
2379
  };
2371
2380
 
2372
2381
  this.each(function(){
@@ -2480,7 +2489,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2480
2489
  cancel: function(val, popover, data){
2481
2490
  if(!data.options.inlinePicker){
2482
2491
  popover.stopOpen = true;
2483
- if(assumeVirtualKeyBoard){
2492
+ if(!popover.openedByFocus && assumeVirtualKeyBoard){
2484
2493
  $('button', data.buttonWrapper).trigger('focus');
2485
2494
  } else {
2486
2495
  data.element.getShadowFocusElement().trigger('focus');
@@ -2580,14 +2589,6 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2580
2589
  var popover = webshims.objectCreate(options.inlinePicker ? webshims.inlinePopover : webshims.wsPopover, {}, $.extend(options.popover || {}, {prepareFor: options.inlinePicker ? data.buttonWrapper : data.element}));
2581
2590
  var opener = $('<button type="button" class="ws-popover-opener"><span /></button>').appendTo(data.buttonWrapper);
2582
2591
 
2583
- if(options.widgetPosition){
2584
- webshims.error('options.widgetPosition was removed use options.popover.position instead');
2585
- }
2586
-
2587
- if(options.openOnFocus && popover.options && (popover.options.appendTo == 'auto' || popover.options.appendTo == 'element')){
2588
- webshims.error('openOnFocus and popover.appendTo "auto/element" can prduce a11y problems try to change appendTo to body or similiar or use openOnMouseFocus instead');
2589
- }
2590
-
2591
2592
  var showPickerContent = function(){
2592
2593
  (picker[data.type].showPickerContent || picker.showPickerContent)(data, popover);
2593
2594
  };
@@ -2656,9 +2657,28 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2656
2657
  stopPropagation.apply(this, arguments);
2657
2658
  popover.preventBlur();
2658
2659
  },
2659
- focus: function(){
2660
- popover.preventBlur();
2661
- }
2660
+ keydown: function(e){
2661
+ if(e.keyCode == 40 && e.altKey){
2662
+ open();
2663
+ }
2664
+ },
2665
+ 'focus mousedown': (function(){
2666
+ var allowClose = true;
2667
+ var reset = function(){
2668
+ allowClose = true;
2669
+ };
2670
+ return function(e){
2671
+ if(e.type == 'mousedown'){
2672
+ allowClose = false;
2673
+ setTimeout(reset);
2674
+ }
2675
+ if(e.type == 'focus' && allowClose && options.openOnFocus && popover.openedByFocus && (popover.options.appendTo == 'auto' || popover.options.appendTo == 'element')){
2676
+ popover.hide();
2677
+ } else {
2678
+ popover.preventBlur();
2679
+ }
2680
+ };
2681
+ })()
2662
2682
  })
2663
2683
  ;
2664
2684
 
@@ -2905,6 +2925,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2905
2925
  }
2906
2926
 
2907
2927
  };
2928
+ oriStyleO.webkitAppearance = 'none';
2908
2929
  data.element.onWSOff('updateshadowdom', updateStyles, true);
2909
2930
  };
2910
2931
 
@@ -2912,13 +2933,14 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2912
2933
  var implementType = function(){
2913
2934
 
2914
2935
  var type = $.prop(this, 'type');
2915
-
2916
2936
  var i, opts, data, optsName, labels, cNames, hasInitialFocus;
2917
- if(inputTypes[type] && webshims.implement(this, 'inputwidgets')){
2937
+
2938
+ if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!modernizrInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
2918
2939
  data = {};
2919
2940
  optsName = type;
2920
2941
  hasInitialFocus = $(this).is(':focus');
2921
2942
  labels = $(this).jProp('labels');
2943
+
2922
2944
  opts = $.extend(webshims.getOptions(this, type, [options.widgets, options[type], $($.prop(this, 'form')).data(type)]), {
2923
2945
  orig: this,
2924
2946
  type: type,
@@ -2951,6 +2973,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2951
2973
  opts[optsName] = $.attr(this, copyAttrs[i]) || opts[optsName];
2952
2974
  }
2953
2975
  }
2976
+
2954
2977
  if(opts.formatMonthNames){
2955
2978
  webshims.error('formatMonthNames was renamded to monthNames');
2956
2979
  }
@@ -2974,11 +2997,11 @@ webshims.register('form-number-date-api', function($, webshims, window, document
2974
2997
  cNames = cNames.replace('form-control', '');
2975
2998
  }
2976
2999
 
2977
- data.shim.element.on('change input', stopPropagation).addClass(cNames);
3000
+ data.shim.element.on('change input', stopPropagation).addClass(cNames+' '+webshims.shadowClass);
2978
3001
 
2979
3002
  if(data.shim.buttonWrapper){
2980
3003
 
2981
- data.shim.buttonWrapper.addClass('input-button-size-'+(data.shim.buttonWrapper.children().filter(isVisible).length));
3004
+ data.shim.buttonWrapper.addClass('input-button-size-'+(data.shim.buttonWrapper.children().filter(isVisible).length)+' '+webshims.shadowClass);
2982
3005
 
2983
3006
  if(data.shim.buttonWrapper.filter(isVisible).length){
2984
3007
  data.shim.element.addClass('has-input-buttons');