webshims-rails 0.4.7 → 1.10.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +15 -0
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/custom-validity.js +1 -1
  4. data/vendor/assets/javascripts/webshims/extras/mousepress.js +1 -1
  5. data/vendor/assets/javascripts/webshims/polyfiller.js +197 -166
  6. data/vendor/assets/javascripts/webshims/shims/combos/1.js +1711 -1609
  7. data/vendor/assets/javascripts/webshims/shims/combos/10.js +2575 -2253
  8. data/vendor/assets/javascripts/webshims/shims/combos/11.js +2452 -1476
  9. data/vendor/assets/javascripts/webshims/shims/combos/12.js +1405 -1159
  10. data/vendor/assets/javascripts/webshims/shims/combos/13.js +1316 -963
  11. data/vendor/assets/javascripts/webshims/shims/combos/14.js +1862 -179
  12. data/vendor/assets/javascripts/webshims/shims/combos/15.js +4327 -287
  13. data/vendor/assets/javascripts/webshims/shims/combos/16.js +3887 -586
  14. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2911 -2159
  15. data/vendor/assets/javascripts/webshims/shims/combos/18.js +3425 -1730
  16. data/vendor/assets/javascripts/webshims/shims/combos/19.js +2854 -1203
  17. data/vendor/assets/javascripts/webshims/shims/combos/2.js +3351 -2130
  18. data/vendor/assets/javascripts/webshims/shims/combos/20.js +2426 -581
  19. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1915 -1574
  20. data/vendor/assets/javascripts/webshims/shims/combos/22.js +864 -2275
  21. data/vendor/assets/javascripts/webshims/shims/combos/23.js +609 -1811
  22. data/vendor/assets/javascripts/webshims/shims/combos/3.js +1655 -2736
  23. data/vendor/assets/javascripts/webshims/shims/combos/4.js +1037 -603
  24. data/vendor/assets/javascripts/webshims/shims/combos/5.js +3100 -773
  25. data/vendor/assets/javascripts/webshims/shims/combos/6.js +3631 -840
  26. data/vendor/assets/javascripts/webshims/shims/combos/7.js +3596 -1354
  27. data/vendor/assets/javascripts/webshims/shims/combos/8.js +1731 -188
  28. data/vendor/assets/javascripts/webshims/shims/combos/9.js +3243 -1431
  29. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +107 -18
  30. data/vendor/assets/javascripts/webshims/shims/es5.js +1 -0
  31. data/vendor/assets/javascripts/webshims/shims/form-core.js +553 -464
  32. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +160 -154
  33. data/vendor/assets/javascripts/webshims/shims/form-message.js +73 -49
  34. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +18 -1
  35. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +161 -36
  36. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +2130 -813
  37. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +206 -58
  38. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ar.js → formcfg-ar.js} +30 -0
  39. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ch-ZN.js → formcfg-ch-ZN.js} +31 -0
  40. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-de.txt → formcfg-de.txt} +50 -11
  41. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-el.js → formcfg-el.js} +31 -0
  42. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-en.txt → formcfg-en.txt} +44 -11
  43. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-es.js → formcfg-es.js} +31 -0
  44. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-fr.js → formcfg-fr.js} +31 -0
  45. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-he.js → formcfg-he.js} +31 -0
  46. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-hi.js → formcfg-hi.js} +31 -0
  47. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-hu.js → formcfg-hu.js} +31 -0
  48. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-it.js → formcfg-it.js} +31 -0
  49. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ja.js → formcfg-ja.js} +31 -0
  50. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-nl.js → formcfg-nl.js} +31 -0
  51. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-pt-PT.js → formcfg-pt-PT.js} +31 -0
  52. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ru.js → formcfg-ru.js} +31 -0
  53. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-sv.js → formcfg-sv.js} +32 -0
  54. data/vendor/assets/javascripts/webshims/shims/json-storage.js +16 -10
  55. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +155 -122
  56. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +76 -41
  57. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +8 -16
  58. data/vendor/assets/javascripts/webshims/shims/range-ui.js +388 -0
  59. data/vendor/assets/javascripts/webshims/shims/styles/config.rb +12 -0
  60. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +1186 -0
  62. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +868 -548
  63. data/vendor/assets/javascripts/webshims/shims/styles/vertical-range.png +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/swfmini.js +497 -0
  66. data/vendor/assets/javascripts/webshims/shims/track-ui.js +3 -0
  67. data/vendor/assets/javascripts/webshims/shims/track.js +29 -29
  68. metadata +26 -125
  69. data/vendor/assets/javascripts/webshims/minified/extras/custom-validity.js +0 -1
  70. data/vendor/assets/javascripts/webshims/minified/extras/modernizr-custom.js +0 -1
  71. data/vendor/assets/javascripts/webshims/minified/extras/mousepress.js +0 -1
  72. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +0 -1
  73. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/canvas2png.js +0 -1
  74. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/flashcanvas.js +0 -1
  75. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/flashcanvas.swf +0 -0
  76. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/proxy.php +0 -73
  77. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/save.php +0 -49
  78. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/canvas2png.js +0 -1
  79. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  80. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  81. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flashcanvas.js +0 -1
  82. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/proxy.php +0 -73
  83. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/save.php +0 -49
  84. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +0 -1
  85. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +0 -1
  86. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +0 -1
  87. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +0 -1
  88. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +0 -1
  89. data/vendor/assets/javascripts/webshims/minified/shims/combos/14.js +0 -1
  90. data/vendor/assets/javascripts/webshims/minified/shims/combos/15.js +0 -1
  91. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +0 -1
  92. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +0 -1
  93. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +0 -1
  94. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +0 -1
  95. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +0 -1
  96. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +0 -1
  97. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +0 -1
  98. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +0 -1
  99. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +0 -1
  100. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +0 -1
  101. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +0 -1
  102. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +0 -1
  103. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +0 -1
  104. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +0 -1
  105. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +0 -1
  106. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +0 -1
  107. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +0 -1
  108. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +0 -1
  109. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +0 -1
  110. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +0 -1
  111. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +0 -1
  112. data/vendor/assets/javascripts/webshims/minified/shims/details.js +0 -1
  113. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +0 -1
  114. data/vendor/assets/javascripts/webshims/minified/shims/es5.js +0 -1
  115. data/vendor/assets/javascripts/webshims/minified/shims/excanvas.js +0 -1
  116. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +0 -1
  117. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +0 -1
  118. data/vendor/assets/javascripts/webshims/minified/shims/form-message.js +0 -1
  119. data/vendor/assets/javascripts/webshims/minified/shims/form-native-extend.js +0 -1
  120. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-api.js +0 -1
  121. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +0 -1
  122. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +0 -1
  123. data/vendor/assets/javascripts/webshims/minified/shims/geolocation.js +0 -1
  124. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ar.js +0 -1
  125. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ch-ZN.js +0 -1
  126. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-de.txt +0 -33
  127. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-el.js +0 -1
  128. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-en.txt +0 -34
  129. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-es.js +0 -1
  130. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-fr.js +0 -1
  131. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-he.js +0 -1
  132. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-hi.js +0 -1
  133. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-hu.js +0 -1
  134. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-it.js +0 -1
  135. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ja.js +0 -1
  136. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-nl.js +0 -1
  137. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-pt-PT.js +0 -1
  138. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ru.js +0 -1
  139. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-sv.js +0 -1
  140. data/vendor/assets/javascripts/webshims/minified/shims/json-storage.js +0 -1
  141. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/license.txt +0 -1
  142. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/player.swf +0 -0
  143. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/readme.html +0 -87
  144. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +0 -1
  145. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-jaris.js +0 -1
  146. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-native-fix.js +0 -1
  147. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +0 -1
  148. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +0 -1
  149. data/vendor/assets/javascripts/webshims/minified/shims/styles/details-arrows.png +0 -0
  150. data/vendor/assets/javascripts/webshims/minified/shims/styles/forms.png +0 -0
  151. data/vendor/assets/javascripts/webshims/minified/shims/styles/polyfill-loader.gif +0 -0
  152. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +0 -1
  153. data/vendor/assets/javascripts/webshims/minified/shims/swf/JarisFLVPlayer.swf +0 -0
  154. data/vendor/assets/javascripts/webshims/minified/shims/swf/jwwebshims.swf +0 -0
  155. data/vendor/assets/javascripts/webshims/minified/shims/swf/localStorage.swf +0 -0
  156. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +0 -1
  157. data/vendor/assets/javascripts/webshims/minified/shims/track.js +0 -1
  158. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/README +0 -62
  159. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/README +0 -82
  160. data/vendor/assets/javascripts/webshims/shims/combos/24.js +0 -2872
  161. data/vendor/assets/javascripts/webshims/shims/combos/25.js +0 -2376
  162. data/vendor/assets/javascripts/webshims/shims/combos/26.js +0 -3009
  163. data/vendor/assets/javascripts/webshims/shims/combos/27.js +0 -4150
  164. data/vendor/assets/javascripts/webshims/shims/combos/59.js +0 -1747
  165. data/vendor/assets/javascripts/webshims/shims/jwplayer/license.txt +0 -1
  166. data/vendor/assets/javascripts/webshims/shims/jwplayer/player.swf +0 -0
  167. data/vendor/assets/javascripts/webshims/shims/jwplayer/readme.html +0 -87
  168. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +0 -972
@@ -1,4 +1,4 @@
1
- jQuery.webshims.register('form-datalist', function($, webshims, window, document, undefined){
1
+ jQuery.webshims.register('form-datalist', function($, webshims, window, document, undefined, options){
2
2
  "use strict";
3
3
  var doc = document;
4
4
 
@@ -10,7 +10,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
10
10
  if(descs.prop){return;}
11
11
  descs.prop = {
12
12
  get: function(){
13
- var elem = descs.attr.get.call(this);
13
+ var elem = $.attr(this, 'list');
14
14
  if(elem){
15
15
  elem = document.getElementById(elem);
16
16
  if(elem && descs.propNodeName && !$.nodeName(elem, descs.propNodeName)){
@@ -90,34 +90,35 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
90
90
  }
91
91
  };
92
92
 
93
- // if(formsCFG.customDatalist && (!listSupport || !('selectedOption') in $('<input />')[0])){
94
- // //currently not supported x-browser (FF4 has not implemented and is not polyfilled )
95
- // inputListProto.selectedOption = {
96
- // prop: {
97
- // writeable: false,
98
- // get: function(){
99
- // var elem = this;
100
- // var list = $.prop(elem, 'list');
101
- // var ret = null;
102
- // var value, options;
103
- // if(!list){return ret;}
104
- // value = $.prop(elem, 'value');
105
- // if(!value){return ret;}
106
- // options = $.prop(list, 'options');
107
- // if(!options.length){return ret;}
108
- // $.each(options, function(i, option){
109
- // if(value == $.prop(option, 'value')){
110
- // ret = option;
111
- // return false;
112
- // }
113
- // });
114
- // return ret;
115
- // }
116
- // }
117
- // };
118
- // }
93
+ if(formsCFG.customDatalist && (!listSupport || !('selectedOption' in $('<input />')[0]))){
94
+ //currently not supported x-browser (FF4 has not implemented and is not polyfilled )
95
+ inputListProto.selectedOption = {
96
+ prop: {
97
+ writeable: false,
98
+ get: function(){
99
+ var elem = this;
100
+ var list = $.prop(elem, 'list');
101
+ var ret = null;
102
+ var value, options;
103
+ if(!list){return ret;}
104
+ value = $.prop(elem, 'value');
105
+ if(!value){return ret;}
106
+ options = $.prop(list, 'options');
107
+ if(!options.length){return ret;}
108
+ $.each(options, function(i, option){
109
+ if(value == $.prop(option, 'value')){
110
+ ret = option;
111
+ return false;
112
+ }
113
+ });
114
+ return ret;
115
+ }
116
+ }
117
+ };
118
+ }
119
119
 
120
120
  if(!listSupport){
121
+
121
122
  inputListProto['list'] = {
122
123
  attr: {
123
124
  get: function(){
@@ -128,6 +129,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
128
129
  var elem = this;
129
130
  webshims.contentAttr(elem, 'list', value);
130
131
  webshims.objectCreate(shadowListProto, undefined, {input: elem, id: value, datalist: $.prop(elem, 'list')});
132
+ $(elem).triggerHandler('listdatalistchange');
131
133
  }
132
134
  },
133
135
  initAttr: true,
@@ -160,6 +162,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
160
162
  get: function(){
161
163
  var val = webshims.contentAttr(this, 'list');
162
164
  if(val != null){
165
+ $.data(this, 'datalistListAttr', val);
163
166
  this.removeAttribute('list');
164
167
  } else {
165
168
  val = $.data(this, 'datalistListAttr');
@@ -171,6 +174,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
171
174
  var elem = this;
172
175
  $.data(elem, 'datalistListAttr', value);
173
176
  webshims.objectCreate(shadowListProto, undefined, {input: elem, id: value, datalist: $.prop(elem, 'list')});
177
+ $(elem).triggerHandler('listdatalistchange');
174
178
  }
175
179
  },
176
180
  initAttr: true,
@@ -179,20 +183,17 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
179
183
  propNodeName: 'datalist'
180
184
  };
181
185
  }
182
-
183
-
186
+
184
187
  webshims.defineNodeNameProperties('input', inputListProto);
185
188
 
186
- if($.event.customEvent){
187
- $.event.customEvent.updateDatalist = true;
188
- $.event.customEvent.updateInput = true;
189
- $.event.customEvent.datalistselect = true;
190
- }
191
189
  webshims.addReady(function(context, contextElem){
192
190
  contextElem
193
191
  .filter('datalist > select, datalist, datalist > option, datalist > select > option')
194
192
  .closest('datalist')
195
- .triggerHandler('updateDatalist')
193
+ .each(function(){
194
+ $(this).triggerHandler('updateDatalist');
195
+ })
196
+
196
197
  ;
197
198
 
198
199
  });
@@ -205,17 +206,23 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
205
206
  * ShadowList
206
207
  */
207
208
  var listidIndex = 0;
208
-
209
209
  var noDatalistSupport = {
210
210
  submit: 1,
211
211
  button: 1,
212
212
  reset: 1,
213
213
  hidden: 1,
214
214
 
215
- //ToDo
216
215
  range: 1,
217
- date: 1
216
+ date: 1,
217
+ month: 1
218
218
  };
219
+ if(webshims.modules["form-number-date-ui"].loaded){
220
+ $.extend(noDatalistSupport, {
221
+ number: 1,
222
+ time: 1
223
+ });
224
+ }
225
+
219
226
  var globStoredOptions = {};
220
227
  var getStoredOptions = function(name){
221
228
  if(!name){return [];}
@@ -240,27 +247,25 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
240
247
  var getText = function(elem){
241
248
  return (elem.textContent || elem.innerText || $.text([ elem ]) || '');
242
249
  };
250
+ var lReg = /</g;
251
+ var gReg = />/g;
243
252
 
244
253
  var shadowListProto = {
245
254
  _create: function(opts){
246
255
 
247
- if(noDatalistSupport[$.prop(opts.input, 'type')]){return;}
256
+ if(noDatalistSupport[$.prop(opts.input, 'type')] || noDatalistSupport[$.attr(opts.input, 'type')]){return;}
248
257
  var datalist = opts.datalist;
249
258
  var data = $.data(opts.input, 'datalistWidget');
250
259
  if(datalist && data && data.datalist !== datalist){
251
260
  data.datalist = datalist;
252
261
  data.id = opts.id;
253
262
 
254
- data.shadowList.prop('className', 'datalist-polyfill '+ (data.datalist.className || '') + ' '+ data.datalist.id +'-shadowdom');
255
- if(formsCFG.positionDatalist){
256
- data.shadowList.insertAfter(opts.input);
257
- } else {
258
- data.shadowList.appendTo('body');
259
- }
263
+
260
264
  $(data.datalist)
261
265
  .off('updateDatalist.datalistWidget')
262
266
  .on('updateDatalist.datalistWidget', $.proxy(data, '_resetListCached'))
263
267
  ;
268
+
264
269
  data._resetListCached();
265
270
  return;
266
271
  } else if(!datalist){
@@ -274,22 +279,16 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
274
279
  listidIndex++;
275
280
  var that = this;
276
281
  this.hideList = $.proxy(that, 'hideList');
277
- this.timedHide = function(){
278
- clearTimeout(that.hideTimer);
279
- that.hideTimer = setTimeout(that.hideList, 9);
280
- };
282
+
281
283
  this.datalist = datalist;
282
284
  this.id = opts.id;
283
285
  this.hasViewableData = true;
284
286
  this._autocomplete = $.attr(opts.input, 'autocomplete');
285
287
  $.data(opts.input, 'datalistWidget', this);
286
- this.shadowList = $('<div class="datalist-polyfill '+ (this.datalist.className || '') + ' '+ this.datalist.id +'-shadowdom' +'" />');
287
288
 
288
- if(formsCFG.positionDatalist || $(opts.input).hasClass('position-datalist')){
289
- this.shadowList.insertAfter(opts.input);
290
- } else {
291
- this.shadowList.appendTo('body');
292
- }
289
+ this.popover = webshims.objectCreate(webshims.wsPopover, {}, options.datalistPopover);
290
+ this.shadowList = this.popover.element.addClass('datalist-polyfill');
291
+
293
292
 
294
293
  this.index = -1;
295
294
  this.input = opts.input;
@@ -303,12 +302,11 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
303
302
  if(e.type == 'click'){
304
303
  that.hideList();
305
304
  if(formsCFG.customDatalist){
306
- $(opts.input).trigger('datalistselect');
305
+ $(opts.input).getNativeElement().trigger('datalistselect');
307
306
  }
308
307
  }
309
308
  return (e.type != 'mousedown');
310
309
  })
311
- .on('focusout', this.timedHide)
312
310
  ;
313
311
 
314
312
  opts.input.setAttribute('autocomplete', 'off');
@@ -334,7 +332,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
334
332
  return false;
335
333
  }
336
334
 
337
- if(!that.isListVisible){return;}
335
+ if(!that.popover.isVisible){return;}
338
336
 
339
337
 
340
338
  if(keyCode == 38){
@@ -357,7 +355,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
357
355
  }
358
356
  that.hideList();
359
357
  if(formsCFG.customDatalist && activeItem && activeItem[0]){
360
- $(opts.input).trigger('datalistselect');
358
+ $(opts.input).getNativeElement().trigger('datalistselect');
361
359
  }
362
360
  return false;
363
361
  }
@@ -371,8 +369,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
371
369
  if($(this).is(':focus')){
372
370
  that.showList();
373
371
  }
374
- },
375
- 'blur.datalistWidget': this.timedHide
372
+ }
376
373
  })
377
374
  ;
378
375
 
@@ -430,7 +427,7 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
430
427
  this.lastUnfoundValue = '';
431
428
 
432
429
  if(!this.updateTimer){
433
- if(window.QUnit || (forceShow = (e && document.activeElement == that.input))){
430
+ if(window.QUnit || (forceShow = ($(that.input).is(':focus') && ($(that.input).hasClass('list-focus') || $.prop(that.input, 'value'))) )){
434
431
  that.updateListOptions(forceShow);
435
432
  } else {
436
433
  webshims.ready('WINDOWLOAD', function(){
@@ -443,42 +440,34 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
443
440
  }
444
441
  }
445
442
  },
446
- maskHTML: function(str){
447
- return str.replace(/</g, '&lt;').replace(/>/g, '&gt;');
448
- },
449
443
  updateListOptions: function(_forceShow){
450
444
  this.needsUpdate = false;
451
445
  clearTimeout(this.updateTimer);
452
446
  this.updateTimer = false;
453
- this.shadowList
454
- .css({
455
- fontSize: $.css(this.input, 'fontSize'),
456
- fontFamily: $.css(this.input, 'fontFamily')
457
- })
458
- ;
447
+
459
448
  this.searchStart = formsCFG.customDatalist && $(this.input).hasClass('search-start');
449
+ this.addMarkElement = options.addMark || $(this.input).hasClass('mark-option-text');
460
450
 
461
451
  var list = [];
462
452
 
463
453
  var values = [];
464
454
  var allOptions = [];
465
- var rElem, rItem, rOptions, rI, rLen, item;
455
+ var rElem, rItem, rOptions, rI, rLen, item, value;
466
456
  for(rOptions = $.prop(this.datalist, 'options'), rI = 0, rLen = rOptions.length; rI < rLen; rI++){
467
457
  rElem = rOptions[rI];
468
- if(rElem.disabled){return;}
469
- rItem = {
470
- value: $(rElem).val() || '',
471
- text: $.trim($.attr(rElem, 'label') || getText(rElem)),
472
- className: rElem.className || '',
473
- style: $.attr(rElem, 'style') || ''
474
- };
475
- if(!rItem.text){
476
- rItem.text = rItem.value;
477
- } else if(rItem.text != rItem.value){
478
- rItem.className += ' different-label-value';
458
+ if(!rElem.disabled && (value = $(rElem).val())){
459
+ rItem = {
460
+ value: value.replace(lReg, '&lt;').replace(gReg, '&gt;'),
461
+ label: $.trim($.attr(rElem, 'label') || getText(rElem)).replace(lReg, '&lt;').replace(gReg, '&gt;'),
462
+ className: rElem.className || ''
463
+ };
464
+
465
+ if(rItem.label){
466
+ rItem.className += ' has-option-label';
467
+ }
468
+ values.push(rItem.value);
469
+ allOptions.push(rItem);
479
470
  }
480
- values[rI] = rItem.value;
481
- allOptions[rI] = rItem;
482
471
  }
483
472
 
484
473
  if(!this.storedOptions){
@@ -487,58 +476,85 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
487
476
 
488
477
  this.storedOptions.forEach(function(val, i){
489
478
  if(values.indexOf(val) == -1){
490
- allOptions.push({value: val, text: val, className: 'stored-suggest', style: ''});
479
+ allOptions.push({value: val, label: '', className: 'stored-suggest', style: ''});
491
480
  }
492
481
  });
493
482
 
494
483
  for(rI = 0, rLen = allOptions.length; rI < rLen; rI++){
495
484
  item = allOptions[rI];
496
- list[rI] = '<li class="'+ item.className +'" style="'+ item.style +'" tabindex="-1" role="listitem"><span class="option-label">'+ this.maskHTML(item.text) +'</span> <span class="option-value">'+ this.maskHTML(item.value) +'</span></li>';
485
+ list[rI] = '<li class="'+ item.className +'" tabindex="-1" role="listitem">'+ this.getOptionContent(item) +'</li>';
497
486
  }
498
487
 
499
488
  this.arrayOptions = allOptions;
500
- this.shadowList.html('<div class="datalist-outer-box"><div class="datalist-box"><ul role="list">'+ list.join("\n") +'</ul></div></div>');
489
+ this.popover.contentElement.html('<div class="datalist-box"><ul role="list">'+ list.join("\n") +'</ul></div>');
501
490
 
502
- if($.fn.bgIframe){
503
- this.shadowList.bgIframe();
504
- }
505
491
 
506
- if(_forceShow || this.isListVisible){
492
+ if(_forceShow || this.popover.isVisible){
507
493
  this.showHideOptions();
508
494
  }
509
495
  },
496
+ getOptionContent: function(item){
497
+ var content = '';
498
+ if(options.getOptionContent){
499
+ content = options.apply(this, arguments) || '';
500
+ } else {
501
+ content = '<span class="option-value">'+ item.value +'</span>';
502
+ if(item.label){
503
+ content += ' <span class="option-label">'+ item.label +'</span>';
504
+ }
505
+ }
506
+ return content;
507
+ },
510
508
  showHideOptions: function(_fromShowList){
511
509
  var value = $.prop(this.input, 'value').toLowerCase();
510
+
512
511
  //first check prevent infinite loop, second creates simple lazy optimization
513
- if(value === this.lastUpdatedValue || (this.lastUnfoundValue && value.indexOf(this.lastUnfoundValue) === 0)){
512
+ if(value === this.lastUpdatedValue){
513
+ return;
514
+ }
515
+ if(this.lastUnfoundValue && value.indexOf(this.lastUnfoundValue) === 0){
516
+ this.hideList();
514
517
  return;
515
518
  }
516
519
 
520
+
517
521
  this.lastUpdatedValue = value;
518
522
  var found = false;
519
523
  var startSearch = this.searchStart;
520
524
  var lis = $('li', this.shadowList);
525
+ var that = this;
521
526
  if(value){
527
+
522
528
  this.arrayOptions.forEach(function(item, i){
523
- var search;
524
- if(!('lowerText' in item)){
525
- if(item.text != item.value){
526
- item.lowerText = item.value.toLowerCase() + item.text.toLowerCase();
527
- } else {
528
- item.lowerText = item.text.toLowerCase();
529
+ var search, searchIndex, foundName;
530
+ if(!('lowerValue' in item)){
531
+ item.lowerValue = item.value.toLowerCase();
532
+ if(item.label && item.label != item.value ){
533
+ item.lowerLabel = item.label.toLowerCase();
529
534
  }
530
535
  }
531
- search = item.lowerText.indexOf(value);
532
- search = startSearch ? !search : search !== -1;
536
+
537
+ if(value != item.lowerValue && item.lowerLabel != value){
538
+ searchIndex = item.lowerValue.indexOf(value);
539
+ search = startSearch ? !searchIndex : searchIndex !== -1;
540
+ if(search){
541
+ foundName = 'value';
542
+ } else if(item.lowerLabel){
543
+ searchIndex = item.lowerLabel.indexOf(value);
544
+ search = startSearch ? !searchIndex : searchIndex !== -1;
545
+ foundName = 'label';
546
+ }
547
+ }
548
+
533
549
  if(search){
534
- $(lis[i]).removeClass('hidden-item');
550
+ that.addMark($(lis[i]).removeClass('hidden-item'), item, foundName, searchIndex, value.length);
535
551
  found = true;
536
552
  } else {
537
553
  $(lis[i]).addClass('hidden-item');
538
554
  }
539
555
  });
540
556
  } else if(lis.length) {
541
- lis.removeClass('hidden-item');
557
+ this.removeMark(lis.removeClass('hidden-item'));
542
558
  found = true;
543
559
  }
544
560
 
@@ -546,81 +562,66 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
546
562
  if(!_fromShowList && found){
547
563
  this.showList();
548
564
  }
565
+
549
566
  if(!found){
550
567
  this.lastUnfoundValue = value;
551
568
  this.hideList();
569
+ } else {
570
+ this.lastUnfoundValue = false;
552
571
  }
553
572
  },
554
- setPos: function(){
555
- this.shadowList.css({marginTop: 0, marginLeft: 0, marginRight: 0, marginBottom: 0});
556
- var css = (formsCFG.positionDatalist) ? $(this.input).position() : webshims.getRelOffset(this.shadowList, this.input);
557
- css.top += $(this.input).outerHeight();
558
- css.width = $(this.input).outerWidth() - (parseInt(this.shadowList.css('borderLeftWidth'), 10) || 0) - (parseInt(this.shadowList.css('borderRightWidth'), 10) || 0);
559
- this.shadowList.css({marginTop: '', marginLeft: '', marginRight: '', marginBottom: ''}).css(css);
560
- return css;
573
+ otherType: {
574
+ value: 'label',
575
+ label: 'value'
576
+ },
577
+ addMark: function(elem, item, prop, start, length){
578
+ if(this.addMarkElement){
579
+ var text = item[prop].substr(start, length);
580
+ text = item[prop].replace(text ,'<mark>'+ text +'</mark>');
581
+ $('.option-'+ this.otherType[prop] +' > mark', elem).each(this._replaceMark);
582
+ $('.option-'+prop, elem).html(text);
583
+
584
+ }
585
+ },
586
+ _replaceMark: function(){
587
+ var content = $(this).html();
588
+ $(this).replaceWith(content);
589
+ },
590
+ removeMark: function(lis){
591
+ if(this.addMarkElement){
592
+ $('mark', lis).each(this._replaceMark);
593
+ }
561
594
  },
562
595
  showList: function(){
563
- if(this.isListVisible){return false;}
596
+ if(this.popover.isVisible){return false;}
564
597
  if(this.needsUpdate){
565
598
  this.updateListOptions();
566
599
  }
567
600
  this.showHideOptions(true);
568
601
  if(!this.hasViewableData){return false;}
569
- this.isListVisible = true;
570
602
  var that = this;
571
603
 
572
- that.setPos();
573
- that.shadowList.addClass('datalist-visible').find('li.active-item').removeClass('active-item');
574
-
575
- $(window).unbind('.datalist'+that.id);
576
- $(document)
577
- .off('.datalist'+that.id)
578
- .on('mousedown.datalist'+that.id +' focusin.datalist'+that.id, function(e){
579
- if(e.target === that.input || that.shadowList[0] === e.target || $.contains( that.shadowList[0], e.target )){
580
- clearTimeout(that.hideTimer);
581
- setTimeout(function(){
582
- clearTimeout(that.hideTimer);
583
- }, 9);
584
- } else {
585
- that.timedHide();
586
- }
587
- })
588
- .on('updateshadowdom.datalist'+that.id, function(){
589
- that.setPos();
590
- })
591
- ;
604
+ that.shadowList.find('li.active-item').removeClass('active-item');
605
+ that.popover.show(this.input);
606
+
607
+
592
608
  return true;
593
609
  },
594
610
  hideList: function(){
595
- if(!this.isListVisible){return false;}
611
+ if(!this.popover.isVisible){return false;}
596
612
  var that = this;
597
- var triggerChange = function(e){
598
- if(that.changedValue){
599
- $(that.input).trigger('change');
600
- }
601
- that.changedValue = false;
602
- };
603
613
 
614
+
615
+ this.popover.hide();
604
616
  that.shadowList.removeClass('datalist-visible list-item-active');
605
617
  that.index = -1;
606
- that.isListVisible = false;
607
618
  if(that.changedValue){
608
619
  that.triggeredByDatalist = true;
609
- webshims.triggerInlineForm && webshims.triggerInlineForm(that.input, 'input');
610
- if($(that.input).is(':focus')){
611
- $(that.input).one('blur', triggerChange);
612
- } else {
613
- triggerChange();
614
- }
620
+ $(that.input).trigger('input').trigger('change');
621
+ that.changedValue = false;
615
622
  that.triggeredByDatalist = false;
616
623
  }
617
- $(document).unbind('.datalist'+that.id);
618
- $(window)
619
- .off('.datalist'+that.id)
620
- .one('resize.datalist'+that.id, function(){
621
- that.shadowList.css({top: 0, left: 0});
622
- })
623
- ;
624
+
624
625
  return true;
625
626
  },
626
627
  scrollIntoView: function(elem){
@@ -641,14 +642,19 @@ jQuery.webshims.register('form-datalist', function($, webshims, window, document
641
642
  },
642
643
  changeValue: function(activeItem){
643
644
  if(!activeItem[0]){return;}
645
+ var spinner;
644
646
  var newValue = $('span.option-value', activeItem).text();
645
647
  var oldValue = $.prop(this.input, 'value');
646
648
  if(newValue != oldValue){
649
+
647
650
  $(this.input)
648
651
  .prop('value', newValue)
649
652
  .triggerHandler('updateInput')
650
653
  ;
651
654
  this.changedValue = true;
655
+ if((spinner = $.data(this.input, 'wsspinner')) && spinner.setInput){
656
+ spinner.setInput(newValue);
657
+ }
652
658
  }
653
659
  },
654
660
  markItem: function(index, doValue, items){