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
@@ -75,20 +75,27 @@ webshims.register('form-combat', function($,webshims){
75
75
  shadow: 'label',
76
76
  shadowFocus: 'element'
77
77
  });
78
-
79
- addReplacement('selectmenu', 'mobileSelectmenu', {
78
+
79
+ var uiSelect = {
80
80
  shadow: 'button',
81
- shadowFocus: function(data, elem){
81
+ shadowFocus: function(data){
82
82
  return data.options.nativeMenu ? data.element : data.button;
83
83
  },
84
84
  _create: function(elem, shadow, shadowFocus, widgetData){
85
- if(('listbox' in widgetData)){
85
+ var menuName;
86
+ if(('menu' in widgetData)){
87
+ menuName = 'menuName';
88
+ } else if(('listbox' in widgetData)){
89
+ menuName = 'listbox';
90
+ }
91
+ if(menuName){
92
+
86
93
  var onValidate = function(e){
87
- if (!webshims.wsPopover.isInElement([elem, shadow, shadowFocus, $(widgetData.listbox).parent()], e.target)) {
94
+ if (!webshims.wsPopover.isInElement([elem, shadow, shadowFocus, $(widgetData[menuName]).parent()], e.target)) {
88
95
  $(elem).trigger('updatevalidation.webshims');
89
96
  }
90
97
  };
91
-
98
+
92
99
  $(shadow).on('wsallowinstantvalidation', function(e, data){
93
100
  if(data.type == 'focusout' && data.target != elem && widgetData.isOpen){
94
101
  setTimeout(function(){
@@ -99,7 +106,12 @@ webshims.register('form-combat', function($,webshims){
99
106
  });
100
107
  }
101
108
  }
102
- });
109
+ };
110
+
111
+ addReplacement('selectmenu', 'mobileSelectmenu', uiSelect);
112
+
113
+ addReplacement('selectmenu', 'uiSelectmenu', uiSelect);
114
+
103
115
 
104
116
  function find(context){
105
117
  $('select:not(.ui-select-nativeonly), input[type="radio"], input[type="checkbox"]', context).each(find.detectReplacement);
@@ -142,6 +142,8 @@ webshims.register('form-core', function($, webshims, window, document, undefined
142
142
  addModule('form-validation', $.extend({d: ['form-message']}, formExtras));
143
143
 
144
144
  addModule('form-validators', $.extend({}, formExtras));
145
+
146
+
145
147
 
146
148
  if($.expr.filters){
147
149
  extendSels();
@@ -262,13 +264,22 @@ webshims.register('form-core', function($, webshims, window, document, undefined
262
264
  };
263
265
 
264
266
  $.event.special.valuevalidation = {
267
+ setup: function(){
268
+ webshims.error('valuevalidation was renamed to validatevalue!');
269
+ }
270
+ };
271
+
272
+
273
+ $.event.special.validatevalue = {
265
274
  setup: function(){
266
275
  var data = $(this).data() || $.data(this, {});
267
- if(!('valuevalidation' in data)){
268
- data.valuevalidation = true;
276
+ if(!('validatevalue' in data)){
277
+ data.validatevalue = true;
269
278
  }
270
279
  }
271
280
  };
281
+
282
+
272
283
 
273
284
  $(document).on('focusin.lazyloadvalidation', function(e){
274
285
  if('form' in e.target){
@@ -281,4 +292,24 @@ webshims.register('form-core', function($, webshims, window, document, undefined
281
292
  if(modules['form-number-date-ui'].loaded && !options.customMessages && (modules['form-number-date-api'].test() || (Modernizr.inputtypes.range && Modernizr.inputtypes.color))){
282
293
  webshims.isReady('form-number-date-ui', true);
283
294
  }
295
+
296
+ webshims.ready('DOM', function(){
297
+ if(document.querySelector('.ws-custom-file')){
298
+ webshims.reTest(['form-validation']);
299
+ }
300
+ });
301
+
302
+ $(function(){
303
+ var fileReaderReady = ('FileReader' in window && 'FormData' in window);
304
+ if(!fileReaderReady){
305
+ webshims.addReady(function(context){
306
+ if(!fileReaderReady && !modules.filereader.loaded && !modules.moxie.loaded){
307
+ if(context.querySelector('input.ws-filereader')){
308
+ webshims.reTest(['filereader', 'moxie']);
309
+ fileReaderReady = true;
310
+ }
311
+ }
312
+ });
313
+ }
314
+ });
284
315
  });
@@ -216,7 +216,7 @@ webshims.register('form-message', function($, webshims, window, document, undefi
216
216
  if(message && message.indexOf('{%') != -1){
217
217
  ['value', 'min', 'max', 'maxlength', 'minlength', 'label'].forEach(function(attr){
218
218
  if(message.indexOf('{%'+attr) === -1){return;}
219
- var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.prop(elem, attr)) || '';
219
+ var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.prop(elem, attr) || $.attr(elem, attr) || '') || '';
220
220
  val = ''+val;
221
221
 
222
222
 
@@ -55,6 +55,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
55
55
  ;
56
56
  }
57
57
  };
58
+ var numericType = Modernizr.inputtypes.tel && navigator.userAgent.indexOf('Mobile') != -1 && !('inputMode' in document.createElement('input') && !('inputmode' in document.createElement('input'))) ?
59
+ 'tel' : 'text';
58
60
  var splitInputs = {
59
61
  date: {
60
62
  _create: function(opts){
@@ -65,18 +67,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
65
67
  if(opts.yearSelect){
66
68
  obj.splits.push($('<select class="yy"></select>')[0]);
67
69
  } else {
68
- obj.splits.push($('<input type="text" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]);
70
+ obj.splits.push($('<input type="'+ numericType +'" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]);
69
71
  }
70
72
 
71
73
  if(opts.monthSelect){
72
74
  obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
73
75
  } else {
74
- obj.splits.push($('<input type="text" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
76
+ obj.splits.push($('<input type="'+ numericType +'" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
75
77
  }
76
78
  if(opts.daySelect){
77
79
  obj.splits.push($(daySelect)[0]);
78
80
  } else {
79
- obj.splits.push($('<input type="text" class="dd ws-spin" inputmode="numeric" maxlength="2" size="2" />')[0]);
81
+ obj.splits.push($('<input type="'+ numericType +'" class="dd ws-spin" inputmode="numeric" maxlength="2" size="2" />')[0]);
80
82
  }
81
83
 
82
84
  obj.elements = [obj.splits[0], $('<span class="ws-input-seperator" />')[0], obj.splits[1], $('<span class="ws-input-seperator" />')[0], obj.splits[2]];
@@ -111,7 +113,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
111
113
  if(opts.yearSelect){
112
114
  obj.splits.push($('<select class="yy"></select>')[0]);
113
115
  } else {
114
- obj.splits.push($('<input type="text" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]);
116
+ obj.splits.push($('<input type="'+ numericType +'" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]);
115
117
  }
116
118
 
117
119
  if(opts.monthSelect){
@@ -119,7 +121,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
119
121
  } else {
120
122
  obj.splits.push($('<input type="text" class="mm ws-spin" />')[0]);
121
123
  if(opts.onlyMonthDigits){
122
- $(obj.splits[1]).attr({inputmode: 'numeric', size: 2, maxlength: 2});
124
+ $().attr({inputmode: 'numeric', size: 2, maxlength: 2});
125
+ try {
126
+ obj.splits[1].setAttribute('type', numericType);
127
+ } catch(e){}
123
128
  }
124
129
  }
125
130
 
@@ -142,7 +147,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
142
147
  }
143
148
  }
144
149
  };
145
-
150
+
146
151
  var nowDate = new Date(new Date().getTime() - (new Date().getTimezoneOffset() * 60 * 1000 ));
147
152
  var nowYear = nowDate.getFullYear();
148
153
  nowDate = new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate(), nowDate.getHours()).getTime();
@@ -962,7 +967,11 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
962
967
  } else if(!isNaN(this.maxAsNumber) && start > this.maxAsNumber){
963
968
  start = this.maxAsNumber;
964
969
  }
965
- this.elemHelper.prop('valueAsNumber', start);
970
+ try {
971
+ this.elemHelper.prop('valueAsNumber', start);
972
+ } catch(e){
973
+ webshims.warn('valueAsNumber set: '+e);
974
+ }
966
975
  this.options.defValue = this.elemHelper.prop('value');
967
976
  },
968
977
  reorderInputs: function(){
@@ -986,7 +995,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
986
995
  _beforeValue: function(val){
987
996
  this.valueAsNumber = this.asNumber(val);
988
997
  this.options.value = val;
989
-
998
+
990
999
  if(isNaN(this.valueAsNumber) || (!isNaN(this.minAsNumber) && this.valueAsNumber < this.minAsNumber) || (!isNaN(this.maxAsNumber) && this.valueAsNumber > this.maxAsNumber)){
991
1000
  this._setStartInRange();
992
1001
  } else {
@@ -1102,9 +1111,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1102
1111
  touchEnd = function(e){
1103
1112
  var ret, touch;
1104
1113
  e = e.originalEvent || {};
1105
- $(this).off('touchend', touchEnd);
1114
+ $(this).off('touchend touchcancel', touchEnd);
1106
1115
  var changedTouches = e.changedTouches || e.touches;
1107
- if(!touchData || !changedTouches || changedTouches.length != 1){
1116
+ if(e.type == 'touchcancel' || !touchData || !changedTouches || changedTouches.length != 1){
1108
1117
  return;
1109
1118
  }
1110
1119
 
@@ -1135,7 +1144,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1135
1144
  y: touch.pageY,
1136
1145
  now: Date.now()
1137
1146
  };
1138
- elemTarget.on('touchend', touchEnd);
1147
+ elemTarget.on('touchend touchcancel', touchEnd);
1139
1148
  };
1140
1149
 
1141
1150
  this.each(function(){
@@ -1249,7 +1258,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1249
1258
  cancel: function(val, popover, data){
1250
1259
  if(!data.options.inlinePicker){
1251
1260
  popover.stopOpen = true;
1252
- if(assumeVirtualKeyBoard){
1261
+ if(!popover.openedByFocus && assumeVirtualKeyBoard){
1253
1262
  $('button', data.buttonWrapper).trigger('focus');
1254
1263
  } else {
1255
1264
  data.element.getShadowFocusElement().trigger('focus');
@@ -1349,14 +1358,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1349
1358
  var popover = webshims.objectCreate(options.inlinePicker ? webshims.inlinePopover : webshims.wsPopover, {}, $.extend(options.popover || {}, {prepareFor: options.inlinePicker ? data.buttonWrapper : data.element}));
1350
1359
  var opener = $('<button type="button" class="ws-popover-opener"><span /></button>').appendTo(data.buttonWrapper);
1351
1360
 
1352
- if(options.widgetPosition){
1353
- webshims.error('options.widgetPosition was removed use options.popover.position instead');
1354
- }
1355
-
1356
- if(options.openOnFocus && popover.options && (popover.options.appendTo == 'auto' || popover.options.appendTo == 'element')){
1357
- webshims.error('openOnFocus and popover.appendTo "auto/element" can prduce a11y problems try to change appendTo to body or similiar or use openOnMouseFocus instead');
1358
- }
1359
-
1360
1361
  var showPickerContent = function(){
1361
1362
  (picker[data.type].showPickerContent || picker.showPickerContent)(data, popover);
1362
1363
  };
@@ -1425,9 +1426,28 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1425
1426
  stopPropagation.apply(this, arguments);
1426
1427
  popover.preventBlur();
1427
1428
  },
1428
- focus: function(){
1429
- popover.preventBlur();
1430
- }
1429
+ keydown: function(e){
1430
+ if(e.keyCode == 40 && e.altKey){
1431
+ open();
1432
+ }
1433
+ },
1434
+ 'focus mousedown': (function(){
1435
+ var allowClose = true;
1436
+ var reset = function(){
1437
+ allowClose = true;
1438
+ };
1439
+ return function(e){
1440
+ if(e.type == 'mousedown'){
1441
+ allowClose = false;
1442
+ setTimeout(reset);
1443
+ }
1444
+ if(e.type == 'focus' && allowClose && options.openOnFocus && popover.openedByFocus && (popover.options.appendTo == 'auto' || popover.options.appendTo == 'element')){
1445
+ popover.hide();
1446
+ } else {
1447
+ popover.preventBlur();
1448
+ }
1449
+ };
1450
+ })()
1431
1451
  })
1432
1452
  ;
1433
1453
 
@@ -1674,6 +1694,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1674
1694
  }
1675
1695
 
1676
1696
  };
1697
+ oriStyleO.webkitAppearance = 'none';
1677
1698
  data.element.onWSOff('updateshadowdom', updateStyles, true);
1678
1699
  };
1679
1700
 
@@ -1681,13 +1702,14 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1681
1702
  var implementType = function(){
1682
1703
 
1683
1704
  var type = $.prop(this, 'type');
1684
-
1685
1705
  var i, opts, data, optsName, labels, cNames, hasInitialFocus;
1686
- if(inputTypes[type] && webshims.implement(this, 'inputwidgets')){
1706
+
1707
+ if(inputTypes[type] && webshims.implement(this, 'inputwidgets') && (!modernizrInputTypes[type] || !$(this).hasClass('ws-noreplace'))){
1687
1708
  data = {};
1688
1709
  optsName = type;
1689
1710
  hasInitialFocus = $(this).is(':focus');
1690
1711
  labels = $(this).jProp('labels');
1712
+
1691
1713
  opts = $.extend(webshims.getOptions(this, type, [options.widgets, options[type], $($.prop(this, 'form')).data(type)]), {
1692
1714
  orig: this,
1693
1715
  type: type,
@@ -1720,6 +1742,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1720
1742
  opts[optsName] = $.attr(this, copyAttrs[i]) || opts[optsName];
1721
1743
  }
1722
1744
  }
1745
+
1723
1746
  if(opts.formatMonthNames){
1724
1747
  webshims.error('formatMonthNames was renamded to monthNames');
1725
1748
  }
@@ -1743,11 +1766,11 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1743
1766
  cNames = cNames.replace('form-control', '');
1744
1767
  }
1745
1768
 
1746
- data.shim.element.on('change input', stopPropagation).addClass(cNames);
1769
+ data.shim.element.on('change input', stopPropagation).addClass(cNames+' '+webshims.shadowClass);
1747
1770
 
1748
1771
  if(data.shim.buttonWrapper){
1749
1772
 
1750
- data.shim.buttonWrapper.addClass('input-button-size-'+(data.shim.buttonWrapper.children().filter(isVisible).length));
1773
+ data.shim.buttonWrapper.addClass('input-button-size-'+(data.shim.buttonWrapper.children().filter(isVisible).length)+' '+webshims.shadowClass);
1751
1774
 
1752
1775
  if(data.shim.buttonWrapper.filter(isVisible).length){
1753
1776
  data.shim.element.addClass('has-input-buttons');
@@ -4,17 +4,21 @@ webshims.inputTypes = webshims.inputTypes || {};
4
4
  //some helper-functions
5
5
  var cfg = webshims.cfg.forms;
6
6
  var bugs = webshims.bugs;
7
-
8
- var isNumber = function(string){
9
- return (typeof string == 'number' || (string && string == string * 1));
10
- },
11
- typeModels = webshims.inputTypes,
7
+ var splitReg = /\s*,\s*/g;
8
+ var typeModels = webshims.inputTypes,
12
9
  checkTypes = {
13
10
  radio: 1,
14
11
  checkbox: 1
15
12
  },
16
- getType = function(elem){
17
- return (elem.getAttribute('type') || elem.type || '').toLowerCase();
13
+ getType = function(){
14
+ var elem = this;
15
+ var type = (elem.getAttribute('type') || '').toLowerCase();
16
+ return (webshims.inputTypes[type]) ? type : elem.type;
17
+ },
18
+ cacheType = function(cache, input){
19
+ if(!('type' in cache)){
20
+ cache.type = getType.call(input);
21
+ }
18
22
  }
19
23
  ;
20
24
 
@@ -94,6 +98,7 @@ var isPlaceholderOptionSelected = function(select){
94
98
  };
95
99
 
96
100
  var emptyJ = $([]);
101
+ //TODO: cache + perftest
97
102
  var getGroupElements = function(elem){
98
103
  elem = $(elem);
99
104
  var name, form;
@@ -118,9 +123,7 @@ var validityRules = {
118
123
  valueMissing: function(input, val, cache){
119
124
  if(!input.prop('required')){return false;}
120
125
  var ret = false;
121
- if(!('type' in cache)){
122
- cache.type = getType(input[0]);
123
- }
126
+ cacheType(cache, input[0]);
124
127
  if(cache.nodeName == 'select'){
125
128
  ret = (!val && (input[0].selectedIndex < 0 || isPlaceholderOptionSelected(input[0]) ));
126
129
  } else if(checkTypes[cache.type]){
@@ -131,21 +134,32 @@ var validityRules = {
131
134
  return ret;
132
135
  },
133
136
  patternMismatch: function(input, val, cache) {
134
- if(val === '' || cache.nodeName == 'select'){return false;}
135
- if(!('type' in cache)){
136
- cache.type = getType(input[0]);
137
- }
138
- if(!patternTypes[cache.type]){return false;}
137
+ var i;
138
+ var ret = false;
139
+ if(val === '' || cache.nodeName == 'select'){return ret;}
140
+
141
+ cacheType(cache, input[0]);
142
+
143
+ if(!patternTypes[cache.type]){return ret;}
139
144
  var pattern = input.attr('pattern');
140
- if(!pattern){return false;}
145
+ if(!pattern){return ret;}
141
146
  try {
142
147
  pattern = new RegExp('^(?:' + pattern + ')$');
143
148
  } catch(er){
144
149
  webshims.error('invalid pattern value: "'+ pattern +'" | '+ er);
145
- pattern = false;
150
+ pattern = ret;
151
+ }
152
+ if(!pattern){return ret;}
153
+
154
+ val = cache.type == 'email' && input.prop('multiple') ? val.split(splitReg) : [val];
155
+
156
+ for(i = 0; i < val.length; i++){
157
+ if(!pattern.test(val[i])){
158
+ ret = true;
159
+ break;
160
+ }
146
161
  }
147
- if(!pattern){return false;}
148
- return !(pattern.test(val));
162
+ return ret;
149
163
  }
150
164
  }
151
165
  ;
@@ -154,9 +168,9 @@ $.each({tooShort: ['minLength', -1], tooLong: ['maxLength', 1]}, function(name,
154
168
  validityRules[name] = function(input, val, cache){
155
169
  //defaultValue is not the same as dirty flag, but very similiar
156
170
  if(cache.nodeName == 'select' || input.prop('defaultValue') == val){return false;}
157
- if(!('type' in cache)){
158
- cache.type = getType(input[0]);
159
- }
171
+
172
+ cacheType(cache, input[0]);
173
+
160
174
  if(!lengthTypes[cache.type]){return false;}
161
175
  var prop = input.prop(props[0]);
162
176
 
@@ -168,9 +182,8 @@ $.each({typeMismatch: 'mismatch', badInput: 'bad'}, function(name, fn){
168
182
  validityRules[name] = function (input, val, cache){
169
183
  if(val === '' || cache.nodeName == 'select'){return false;}
170
184
  var ret = false;
171
- if(!('type' in cache)){
172
- cache.type = getType(input[0]);
173
- }
185
+
186
+ cacheType(cache, input[0]);
174
187
 
175
188
  if(typeModels[cache.type] && typeModels[cache.type][fn]){
176
189
  ret = typeModels[cache.type][fn](val, input);
@@ -238,6 +251,7 @@ $.extend($.event.special.submit, {
238
251
  return submitSetup.apply(this, arguments);
239
252
  }
240
253
  });
254
+
241
255
  webshims.ready('form-shim-extend2 WINDOWLOAD', function(){
242
256
  $(window).on('invalid', $.noop);
243
257
  });
@@ -247,15 +261,16 @@ webshims.addInputType('email', {
247
261
  mismatch: (function(){
248
262
  //taken from http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
249
263
  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])?)*$/;
250
- var splitReg = /\s*,\s*/g;
251
264
  return function(val, input){
265
+ var i;
252
266
  var ret = false;
253
- val = $(input).prop('multiple') ? val.split(splitReg) : [val];
254
-
255
- for(var i = 0; i < val.length; i++){
256
- if(!test.test(val[i])){
257
- ret = true;
258
- break;
267
+ if(val){
268
+ val = input.prop('multiple') ? val.split(splitReg) : [val];
269
+ for(i = 0; i < val.length; i++){
270
+ if(!test.test(val[i])){
271
+ ret = true;
272
+ break;
273
+ }
259
274
  }
260
275
  }
261
276
  return ret;
@@ -268,18 +283,14 @@ webshims.addInputType('url', {
268
283
  //taken from scott gonzales
269
284
  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;
270
285
  return function(val){
271
- return !test.test(val);
286
+ return val && !test.test(val);
272
287
  };
273
288
  })()
274
289
  });
275
290
 
276
291
  webshims.defineNodeNameProperty('input', 'type', {
277
292
  prop: {
278
- get: function(){
279
- var elem = this;
280
- var type = (elem.getAttribute('type') || '').toLowerCase();
281
- return (webshims.inputTypes[type]) ? type : elem.type;
282
- }
293
+ get: getType
283
294
  }
284
295
  });
285
296