webshims-rails 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. data/lib/webshims-rails.rb +1 -1
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/readme.textile +5 -3
  4. data/vendor/assets/javascripts/webshims/dev/extras/custom-validity.js +261 -0
  5. data/vendor/assets/javascripts/webshims/dev/extras/modernizr-custom.js +535 -0
  6. data/vendor/assets/javascripts/webshims/dev/extras/mousepress.js +60 -0
  7. data/vendor/assets/javascripts/webshims/dev/polyfiller.js +1171 -0
  8. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/README +62 -0
  9. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/canvas2png.js +42 -0
  10. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/flashcanvas.js +28 -0
  11. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/flashcanvas.swf +0 -0
  12. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/proxy.php +73 -0
  13. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/save.php +49 -0
  14. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/README +82 -0
  15. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/canvas2png.js +42 -0
  16. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  17. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  18. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flashcanvas.js +31 -0
  19. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/proxy.php +73 -0
  20. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/save.php +49 -0
  21. data/vendor/assets/javascripts/webshims/dev/shims/combos/1.js +1710 -0
  22. data/vendor/assets/javascripts/webshims/dev/shims/combos/10.js +3317 -0
  23. data/vendor/assets/javascripts/webshims/dev/shims/combos/11.js +1585 -0
  24. data/vendor/assets/javascripts/webshims/dev/shims/combos/12.js +1587 -0
  25. data/vendor/assets/javascripts/webshims/dev/shims/combos/13.js +1054 -0
  26. data/vendor/assets/javascripts/webshims/dev/shims/combos/14.js +476 -0
  27. data/vendor/assets/javascripts/webshims/dev/shims/combos/15.js +314 -0
  28. data/vendor/assets/javascripts/webshims/dev/shims/combos/16.js +2101 -0
  29. data/vendor/assets/javascripts/webshims/dev/shims/combos/17.js +2264 -0
  30. data/vendor/assets/javascripts/webshims/dev/shims/combos/18.js +2161 -0
  31. data/vendor/assets/javascripts/webshims/dev/shims/combos/19.js +2244 -0
  32. data/vendor/assets/javascripts/webshims/dev/shims/combos/2.js +2294 -0
  33. data/vendor/assets/javascripts/webshims/dev/shims/combos/20.js +1607 -0
  34. data/vendor/assets/javascripts/webshims/dev/shims/combos/21.js +1635 -0
  35. data/vendor/assets/javascripts/webshims/dev/shims/combos/22.js +2409 -0
  36. data/vendor/assets/javascripts/webshims/dev/shims/combos/23.js +2168 -0
  37. data/vendor/assets/javascripts/webshims/dev/shims/combos/24.js +2777 -0
  38. data/vendor/assets/javascripts/webshims/dev/shims/combos/25.js +2204 -0
  39. data/vendor/assets/javascripts/webshims/dev/shims/combos/26.js +2863 -0
  40. data/vendor/assets/javascripts/webshims/dev/shims/combos/27.js +4079 -0
  41. data/vendor/assets/javascripts/webshims/dev/shims/combos/3.js +2971 -0
  42. data/vendor/assets/javascripts/webshims/dev/shims/combos/4.js +823 -0
  43. data/vendor/assets/javascripts/webshims/dev/shims/combos/5.js +1078 -0
  44. data/vendor/assets/javascripts/webshims/dev/shims/combos/59.js +1754 -0
  45. data/vendor/assets/javascripts/webshims/dev/shims/combos/6.js +1230 -0
  46. data/vendor/assets/javascripts/webshims/dev/shims/combos/7.js +1485 -0
  47. data/vendor/assets/javascripts/webshims/dev/shims/combos/8.js +1442 -0
  48. data/vendor/assets/javascripts/webshims/dev/shims/combos/9.js +2515 -0
  49. data/vendor/assets/javascripts/webshims/dev/shims/details.js +146 -0
  50. data/vendor/assets/javascripts/webshims/dev/shims/dom-extend.js +908 -0
  51. data/vendor/assets/javascripts/webshims/dev/shims/es5.js +802 -0
  52. data/vendor/assets/javascripts/webshims/dev/shims/excanvas.js +924 -0
  53. data/vendor/assets/javascripts/webshims/dev/shims/form-core.js +660 -0
  54. data/vendor/assets/javascripts/webshims/dev/shims/form-datalist.js +677 -0
  55. data/vendor/assets/javascripts/webshims/dev/shims/form-message.js +164 -0
  56. data/vendor/assets/javascripts/webshims/dev/shims/form-native-extend.js +256 -0
  57. data/vendor/assets/javascripts/webshims/dev/shims/form-native-fix.js +261 -0
  58. data/vendor/assets/javascripts/webshims/dev/shims/form-number-date-api.js +384 -0
  59. data/vendor/assets/javascripts/webshims/dev/shims/form-number-date-ui.js +847 -0
  60. data/vendor/assets/javascripts/webshims/dev/shims/form-shim-extend.js +1472 -0
  61. data/vendor/assets/javascripts/webshims/dev/shims/geolocation.js +168 -0
  62. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ar.js +32 -0
  63. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ch-ZN.js +32 -0
  64. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-de.txt +33 -0
  65. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-el.js +32 -0
  66. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-en.txt +34 -0
  67. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-es.js +32 -0
  68. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-fr.js +32 -0
  69. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-he.js +32 -0
  70. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-hi.js +32 -0
  71. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-hu.js +32 -0
  72. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-it.js +32 -0
  73. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ja.js +32 -0
  74. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-nl.js +32 -0
  75. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-pt-PT.js +32 -0
  76. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ru.js +32 -0
  77. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-sv.js +32 -0
  78. data/vendor/assets/javascripts/webshims/dev/shims/json-storage.js +308 -0
  79. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/license.txt +1 -0
  80. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/player.swf +0 -0
  81. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/readme.html +87 -0
  82. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-core.js +534 -0
  83. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-native-fix.js +99 -0
  84. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-swf.js +1074 -0
  85. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-yt.js +543 -0
  86. data/vendor/assets/javascripts/webshims/dev/shims/styles/details-arrows.png +0 -0
  87. data/vendor/assets/javascripts/webshims/dev/shims/styles/forms.png +0 -0
  88. data/vendor/assets/javascripts/webshims/dev/shims/styles/polyfill-loader.gif +0 -0
  89. data/vendor/assets/javascripts/webshims/dev/shims/styles/shim.css +677 -0
  90. data/vendor/assets/javascripts/webshims/dev/shims/swf/jwwebshims.swf +0 -0
  91. data/vendor/assets/javascripts/webshims/dev/shims/swf/localStorage.swf +0 -0
  92. data/vendor/assets/javascripts/webshims/dev/shims/track-ui.js +292 -0
  93. data/vendor/assets/javascripts/webshims/dev/shims/track.js +763 -0
  94. data/vendor/assets/javascripts/webshims/minified/extras/modernizr-custom.js +20 -20
  95. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +29 -29
  96. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +37 -33
  97. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +83 -76
  98. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +44 -42
  99. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +43 -38
  100. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +27 -25
  101. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +60 -55
  102. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +68 -64
  103. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +60 -59
  104. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +66 -64
  105. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +74 -69
  106. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +46 -43
  107. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +52 -47
  108. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +61 -57
  109. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +68 -60
  110. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +82 -77
  111. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +58 -0
  112. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +80 -0
  113. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +103 -0
  114. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +96 -91
  115. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +30 -31
  116. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +37 -39
  117. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +59 -61
  118. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +31 -29
  119. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +38 -37
  120. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +38 -33
  121. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +68 -63
  122. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +22 -20
  123. data/vendor/assets/javascripts/webshims/minified/shims/es5.js +15 -14
  124. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +22 -22
  125. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +22 -22
  126. data/vendor/assets/javascripts/webshims/minified/shims/form-message.js +8 -9
  127. data/vendor/assets/javascripts/webshims/minified/shims/form-native-extend.js +7 -8
  128. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +23 -21
  129. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +44 -33
  130. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-sv.js +3 -0
  131. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/player.swf +0 -0
  132. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/readme.html +86 -86
  133. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +16 -13
  134. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +30 -30
  135. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +14 -0
  136. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +71 -10
  137. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +9 -0
  138. data/vendor/assets/javascripts/webshims/minified/shims/track.js +20 -0
  139. metadata +101 -5
  140. data/vendor/assets/javascripts/webshims/minified/shims/form-output.js +0 -5
@@ -0,0 +1,1485 @@
1
+ jQuery.webshims.register('form-extend', function($, webshims, window, doc, undefined, options){
2
+ "use strict";
3
+ var Modernizr = window.Modernizr;
4
+ var modernizrInputTypes = Modernizr.inputtypes;
5
+ if(!Modernizr.formvalidation || webshims.bugs.bustedValidity){return;}
6
+ var typeModels = webshims.inputTypes;
7
+ var validityRules = {};
8
+
9
+ webshims.addInputType = function(type, obj){
10
+ typeModels[type] = obj;
11
+ };
12
+
13
+ webshims.addValidityRule = function(type, fn){
14
+ validityRules[type] = fn;
15
+ };
16
+
17
+ webshims.addValidityRule('typeMismatch',function (input, val, cache, validityState){
18
+ if(val === ''){return false;}
19
+ var ret = validityState.typeMismatch;
20
+ if(!('type' in cache)){
21
+ cache.type = (input[0].getAttribute('type') || '').toLowerCase();
22
+ }
23
+
24
+ if(typeModels[cache.type] && typeModels[cache.type].mismatch){
25
+ ret = typeModels[cache.type].mismatch(val, input);
26
+ }
27
+ return ret;
28
+ });
29
+
30
+ var overrideNativeMessages = options.overrideMessages;
31
+
32
+ var overrideValidity = (!modernizrInputTypes.number || !modernizrInputTypes.time || !modernizrInputTypes.range || overrideNativeMessages);
33
+ var validityProps = ['customError','typeMismatch','rangeUnderflow','rangeOverflow','stepMismatch','tooLong','patternMismatch','valueMissing','valid'];
34
+
35
+ var validityChanger = (overrideNativeMessages)? ['value', 'checked'] : ['value'];
36
+ var validityElements = [];
37
+ var testValidity = function(elem, init){
38
+ if(!elem){return;}
39
+ var type = (elem.getAttribute && elem.getAttribute('type') || elem.type || '').toLowerCase();
40
+
41
+ if(!overrideNativeMessages && !typeModels[type]){
42
+ return;
43
+ }
44
+
45
+ if(overrideNativeMessages && !init && type == 'radio' && elem.name){
46
+ $(doc.getElementsByName( elem.name )).each(function(){
47
+ $.prop(this, 'validity');
48
+ });
49
+ } else {
50
+ $.prop(elem, 'validity');
51
+ }
52
+ };
53
+
54
+ var oldSetCustomValidity = {};
55
+ ['input', 'textarea', 'select'].forEach(function(name){
56
+ var desc = webshims.defineNodeNameProperty(name, 'setCustomValidity', {
57
+ prop: {
58
+ value: function(error){
59
+ error = error+'';
60
+ var elem = (name == 'input') ? $(this).getNativeElement()[0] : this;
61
+ desc.prop._supvalue.call(elem, error);
62
+
63
+ if(webshims.bugs.validationMessage){
64
+ webshims.data(elem, 'customvalidationMessage', error);
65
+ }
66
+ if(overrideValidity){
67
+ webshims.data(elem, 'hasCustomError', !!(error));
68
+ testValidity(elem);
69
+ }
70
+ }
71
+ }
72
+ });
73
+ oldSetCustomValidity[name] = desc.prop._supvalue;
74
+ });
75
+
76
+
77
+ if(overrideValidity || overrideNativeMessages){
78
+ validityChanger.push('min');
79
+ validityChanger.push('max');
80
+ validityChanger.push('step');
81
+ validityElements.push('input');
82
+ }
83
+ if(overrideNativeMessages){
84
+ validityChanger.push('required');
85
+ validityChanger.push('pattern');
86
+ validityElements.push('select');
87
+ validityElements.push('textarea');
88
+ }
89
+
90
+ if(overrideValidity){
91
+ var stopValidity;
92
+ validityElements.forEach(function(nodeName){
93
+
94
+ var oldDesc = webshims.defineNodeNameProperty(nodeName, 'validity', {
95
+ prop: {
96
+ get: function(){
97
+ if(stopValidity){return;}
98
+ var elem = (nodeName == 'input') ? $(this).getNativeElement()[0] : this;
99
+
100
+ var validity = oldDesc.prop._supget.call(elem);
101
+
102
+ if(!validity){
103
+ return validity;
104
+ }
105
+ var validityState = {};
106
+ validityProps.forEach(function(prop){
107
+ validityState[prop] = validity[prop];
108
+ });
109
+
110
+ if( !$.prop(elem, 'willValidate') ){
111
+ return validityState;
112
+ }
113
+ stopValidity = true;
114
+ var jElm = $(elem),
115
+ cache = {type: (elem.getAttribute && elem.getAttribute('type') || '').toLowerCase(), nodeName: (elem.nodeName || '').toLowerCase()},
116
+ val = jElm.val(),
117
+ customError = !!(webshims.data(elem, 'hasCustomError')),
118
+ setCustomMessage
119
+ ;
120
+ stopValidity = false;
121
+ validityState.customError = customError;
122
+
123
+ if( validityState.valid && validityState.customError ){
124
+ validityState.valid = false;
125
+ } else if(!validityState.valid) {
126
+ var allFalse = true;
127
+ $.each(validityState, function(name, prop){
128
+ if(prop){
129
+ allFalse = false;
130
+ return false;
131
+ }
132
+ });
133
+
134
+ if(allFalse){
135
+ validityState.valid = true;
136
+ }
137
+
138
+ }
139
+
140
+ $.each(validityRules, function(rule, fn){
141
+ validityState[rule] = fn(jElm, val, cache, validityState);
142
+ if( validityState[rule] && (validityState.valid || !setCustomMessage) && (overrideNativeMessages || (typeModels[cache.type] && typeModels[cache.type].mismatch)) ) {
143
+ oldSetCustomValidity[nodeName].call(elem, webshims.createValidationMessage(elem, rule));
144
+ validityState.valid = false;
145
+ setCustomMessage = true;
146
+ }
147
+ });
148
+ if(validityState.valid){
149
+ oldSetCustomValidity[nodeName].call(elem, '');
150
+ webshims.data(elem, 'hasCustomError', false);
151
+ } else if(overrideNativeMessages && !setCustomMessage && !customError){
152
+ $.each(validityState, function(name, prop){
153
+ if(name !== 'valid' && prop){
154
+ oldSetCustomValidity[nodeName].call(elem, webshims.createValidationMessage(elem, name));
155
+ return false;
156
+ }
157
+ });
158
+ }
159
+ return validityState;
160
+ },
161
+ writeable: false
162
+
163
+ }
164
+ });
165
+ });
166
+
167
+ validityChanger.forEach(function(prop){
168
+ webshims.onNodeNamesPropertyModify(validityElements, prop, function(s){
169
+ testValidity(this);
170
+ });
171
+ });
172
+
173
+ if(doc.addEventListener){
174
+ var inputThrottle;
175
+ var testPassValidity = function(e){
176
+ if(!('form' in e.target)){return;}
177
+ var form = e.target.form;
178
+ clearTimeout(inputThrottle);
179
+ testValidity(e.target);
180
+ if(form && overrideNativeMessages){
181
+ $('input', form).each(function(){
182
+ if(this.type == 'password'){
183
+ testValidity(this);
184
+ }
185
+ });
186
+ }
187
+ };
188
+
189
+ doc.addEventListener('change', testPassValidity, true);
190
+
191
+ if(overrideNativeMessages){
192
+ doc.addEventListener('blur', testPassValidity, true);
193
+ doc.addEventListener('keydown', function(e){
194
+ if(e.keyCode != 13){return;}
195
+ testPassValidity(e);
196
+ }, true);
197
+ }
198
+
199
+ doc.addEventListener('input', function(e){
200
+ clearTimeout(inputThrottle);
201
+ inputThrottle = setTimeout(function(){
202
+ testValidity(e.target);
203
+ }, 290);
204
+ }, true);
205
+ }
206
+
207
+ var validityElementsSel = validityElements.join(',');
208
+
209
+ webshims.addReady(function(context, elem){
210
+ $(validityElementsSel, context).add(elem.filter(validityElementsSel)).each(function(){
211
+ $.prop(this, 'validity');
212
+ });
213
+ });
214
+
215
+
216
+ if(overrideNativeMessages){
217
+ webshims.ready('DOM form-message', function(){
218
+ webshims.activeLang({
219
+ register: 'form-core',
220
+ callback: function(){
221
+ $('input, select, textarea')
222
+ .getNativeElement()
223
+ .each(function(){
224
+ if(webshims.data(this, 'hasCustomError')){return;}
225
+ var elem = this;
226
+ var validity = $.prop(elem, 'validity') || {valid: true};
227
+ var nodeName;
228
+ if(validity.valid){return;}
229
+ nodeName = (elem.nodeName || '').toLowerCase();
230
+ $.each(validity, function(name, prop){
231
+ if(name !== 'valid' && prop){
232
+ oldSetCustomValidity[nodeName].call(elem, webshims.createValidationMessage(elem, name));
233
+ return false;
234
+ }
235
+ });
236
+ })
237
+ ;
238
+ }
239
+ });
240
+ });
241
+ }
242
+
243
+ } //end: overrideValidity
244
+
245
+ webshims.defineNodeNameProperty('input', 'type', {
246
+ prop: {
247
+ get: function(){
248
+ var elem = this;
249
+ var type = (elem.getAttribute('type') || '').toLowerCase();
250
+ return (webshims.inputTypes[type]) ? type : elem.type;
251
+ }
252
+ }
253
+ });
254
+
255
+
256
+ });jQuery.webshims.register('form-number-date-api', function($, webshims, window, document, undefined){
257
+ "use strict";
258
+
259
+ //ToDo
260
+ if(!webshims.getStep){
261
+ webshims.getStep = function(elem, type){
262
+ var step = $.attr(elem, 'step');
263
+ if(step === 'any'){
264
+ return step;
265
+ }
266
+ type = type || getType(elem);
267
+ if(!typeModels[type] || !typeModels[type].step){
268
+ return step;
269
+ }
270
+ step = typeProtos.number.asNumber(step);
271
+ return ((!isNaN(step) && step > 0) ? step : typeModels[type].step) * typeModels[type].stepScaleFactor;
272
+ };
273
+ }
274
+ if(!webshims.addMinMaxNumberToCache){
275
+ webshims.addMinMaxNumberToCache = function(attr, elem, cache){
276
+ if (!(attr+'AsNumber' in cache)) {
277
+ cache[attr+'AsNumber'] = typeModels[cache.type].asNumber(elem.attr(attr));
278
+ if(isNaN(cache[attr+'AsNumber']) && (attr+'Default' in typeModels[cache.type])){
279
+ cache[attr+'AsNumber'] = typeModels[cache.type][attr+'Default'];
280
+ }
281
+ }
282
+ };
283
+ }
284
+
285
+ var nan = parseInt('NaN', 10),
286
+ doc = document,
287
+ typeModels = webshims.inputTypes,
288
+ isNumber = function(string){
289
+ return (typeof string == 'number' || (string && string == string * 1));
290
+ },
291
+ supportsType = function(type){
292
+ return ($('<input type="'+type+'" />').prop('type') === type);
293
+ },
294
+ getType = function(elem){
295
+ return (elem.getAttribute('type') || '').toLowerCase();
296
+ },
297
+ isDateTimePart = function(string){
298
+ return (isNumber(string) || (string && string == '0' + (string * 1)));
299
+ },
300
+ addMinMaxNumberToCache = webshims.addMinMaxNumberToCache,
301
+ addleadingZero = function(val, len){
302
+ val = ''+val;
303
+ len = len - val.length;
304
+ for(var i = 0; i < len; i++){
305
+ val = '0'+val;
306
+ }
307
+ return val;
308
+ },
309
+ EPS = 1e-7,
310
+ typeBugs = webshims.bugs.valueAsNumberSet || webshims.bugs.bustedValidity
311
+ ;
312
+
313
+ webshims.addValidityRule('stepMismatch', function(input, val, cache, validityState){
314
+ if(val === ''){return false;}
315
+ if(!('type' in cache)){
316
+ cache.type = getType(input[0]);
317
+ }
318
+ //stepmismatch with date is computable, but it would be a typeMismatch (performance)
319
+ if(cache.type == 'date'){
320
+ return false;
321
+ }
322
+ var ret = (validityState || {}).stepMismatch, base;
323
+ if(typeModels[cache.type] && typeModels[cache.type].step){
324
+ if( !('step' in cache) ){
325
+ cache.step = webshims.getStep(input[0], cache.type);
326
+ }
327
+
328
+ if(cache.step == 'any'){return false;}
329
+
330
+ if(!('valueAsNumber' in cache)){
331
+ cache.valueAsNumber = typeModels[cache.type].asNumber( val );
332
+ }
333
+ if(isNaN(cache.valueAsNumber)){return false;}
334
+
335
+ addMinMaxNumberToCache('min', input, cache);
336
+ base = cache.minAsNumber;
337
+ if(isNaN(base)){
338
+ base = typeModels[cache.type].stepBase || 0;
339
+ }
340
+
341
+ ret = Math.abs((cache.valueAsNumber - base) % cache.step);
342
+
343
+ ret = !( ret <= EPS || Math.abs(ret - cache.step) <= EPS );
344
+ }
345
+ return ret;
346
+ });
347
+
348
+
349
+
350
+ [{name: 'rangeOverflow', attr: 'max', factor: 1}, {name: 'rangeUnderflow', attr: 'min', factor: -1}].forEach(function(data, i){
351
+ webshims.addValidityRule(data.name, function(input, val, cache, validityState) {
352
+ var ret = (validityState || {})[data.name] || false;
353
+ if(val === ''){return ret;}
354
+ if (!('type' in cache)) {
355
+ cache.type = getType(input[0]);
356
+ }
357
+ if (typeModels[cache.type] && typeModels[cache.type].asNumber) {
358
+ if(!('valueAsNumber' in cache)){
359
+ cache.valueAsNumber = typeModels[cache.type].asNumber( val );
360
+ }
361
+ if(isNaN(cache.valueAsNumber)){
362
+ return false;
363
+ }
364
+
365
+ addMinMaxNumberToCache(data.attr, input, cache);
366
+
367
+ if(isNaN(cache[data.attr+'AsNumber'])){
368
+ return ret;
369
+ }
370
+ ret = ( cache[data.attr+'AsNumber'] * data.factor < cache.valueAsNumber * data.factor - EPS );
371
+ }
372
+ return ret;
373
+ });
374
+ });
375
+
376
+ webshims.reflectProperties(['input'], ['max', 'min', 'step']);
377
+
378
+
379
+ //IDLs and methods, that aren't part of constrain validation, but strongly tight to it
380
+ var valueAsNumberDescriptor = webshims.defineNodeNameProperty('input', 'valueAsNumber', {
381
+ prop: {
382
+ get: function(){
383
+ var elem = this;
384
+ var type = getType(elem);
385
+ var ret = (typeModels[type] && typeModels[type].asNumber) ?
386
+ typeModels[type].asNumber($.prop(elem, 'value')) :
387
+ (valueAsNumberDescriptor.prop._supget && valueAsNumberDescriptor.prop._supget.apply(elem, arguments));
388
+ if(ret == null){
389
+ ret = nan;
390
+ }
391
+ return ret;
392
+ },
393
+ set: function(val){
394
+ var elem = this;
395
+ var type = getType(elem);
396
+ if(typeModels[type] && typeModels[type].numberToString){
397
+ //is NaN a number?
398
+ if(isNaN(val)){
399
+ $.prop(elem, 'value', '');
400
+ return;
401
+ }
402
+ var set = typeModels[type].numberToString(val);
403
+ if(set !== false){
404
+ $.prop(elem, 'value', set);
405
+ } else {
406
+ webshims.warn('INVALID_STATE_ERR: DOM Exception 11');
407
+ }
408
+ } else {
409
+ valueAsNumberDescriptor.prop._supset && valueAsNumberDescriptor.prop._supset.apply(elem, arguments);
410
+ }
411
+ }
412
+ }
413
+ });
414
+
415
+ var valueAsDateDescriptor = webshims.defineNodeNameProperty('input', 'valueAsDate', {
416
+ prop: {
417
+ get: function(){
418
+ var elem = this;
419
+ var type = getType(elem);
420
+ return (typeModels[type] && typeModels[type].asDate && !typeModels[type].noAsDate) ?
421
+ typeModels[type].asDate($.prop(elem, 'value')) :
422
+ valueAsDateDescriptor.prop._supget && valueAsDateDescriptor.prop._supget.call(elem) || null;
423
+ },
424
+ set: function(value){
425
+ var elem = this;
426
+ var type = getType(elem);
427
+ if(typeModels[type] && typeModels[type].dateToString && !typeModels[type].noAsDate){
428
+
429
+ if(value === null){
430
+ $.prop(elem, 'value', '');
431
+ return '';
432
+ }
433
+ var set = typeModels[type].dateToString(value);
434
+ if(set !== false){
435
+ $.prop(elem, 'value', set);
436
+ return set;
437
+ } else {
438
+ webshims.warn('INVALID_STATE_ERR: DOM Exception 11');
439
+ }
440
+ } else {
441
+ return valueAsDateDescriptor.prop._supset && valueAsDateDescriptor.prop._supset.apply(elem, arguments) || null;
442
+ }
443
+ }
444
+ }
445
+ });
446
+
447
+ var typeProtos = {
448
+
449
+ number: {
450
+ mismatch: function(val){
451
+ return !(isNumber(val));
452
+ },
453
+ step: 1,
454
+ //stepBase: 0, 0 = default
455
+ stepScaleFactor: 1,
456
+ asNumber: function(str){
457
+ return (isNumber(str)) ? str * 1 : nan;
458
+ },
459
+ numberToString: function(num){
460
+ return (isNumber(num)) ? num : false;
461
+ }
462
+ },
463
+
464
+ range: {
465
+ minDefault: 0,
466
+ maxDefault: 100
467
+ },
468
+
469
+ date: {
470
+ mismatch: function(val){
471
+ if(!val || !val.split || !(/\d$/.test(val))){return true;}
472
+ var valA = val.split(/\u002D/);
473
+ if(valA.length !== 3){return true;}
474
+ var ret = false;
475
+ $.each(valA, function(i, part){
476
+ if(!isDateTimePart(part)){
477
+ ret = true;
478
+ return false;
479
+ }
480
+ });
481
+ if(ret){return ret;}
482
+ if(valA[0].length !== 4 || valA[1].length != 2 || valA[1] > 12 || valA[2].length != 2 || valA[2] > 33){
483
+ ret = true;
484
+ }
485
+ return (val !== this.dateToString( this.asDate(val, true) ) );
486
+ },
487
+ step: 1,
488
+ //stepBase: 0, 0 = default
489
+ stepScaleFactor: 86400000,
490
+ asDate: function(val, _noMismatch){
491
+ if(!_noMismatch && this.mismatch(val)){
492
+ return null;
493
+ }
494
+ return new Date(this.asNumber(val, true));
495
+ },
496
+ asNumber: function(str, _noMismatch){
497
+ var ret = nan;
498
+ if(_noMismatch || !this.mismatch(str)){
499
+ str = str.split(/\u002D/);
500
+ ret = Date.UTC(str[0], str[1] - 1, str[2]);
501
+ }
502
+ return ret;
503
+ },
504
+ numberToString: function(num){
505
+ return (isNumber(num)) ? this.dateToString(new Date( num * 1)) : false;
506
+ },
507
+ dateToString: function(date){
508
+ return (date && date.getFullYear) ? date.getUTCFullYear() +'-'+ addleadingZero(date.getUTCMonth()+1, 2) +'-'+ addleadingZero(date.getUTCDate(), 2) : false;
509
+ }
510
+ }
511
+ // ,time: {
512
+ // mismatch: function(val, _getParsed){
513
+ // if(!val || !val.split || !(/\d$/.test(val))){return true;}
514
+ // val = val.split(/\u003A/);
515
+ // if(val.length < 2 || val.length > 3){return true;}
516
+ // var ret = false,
517
+ // sFraction;
518
+ // if(val[2]){
519
+ // val[2] = val[2].split(/\u002E/);
520
+ // sFraction = parseInt(val[2][1], 10);
521
+ // val[2] = val[2][0];
522
+ // }
523
+ // $.each(val, function(i, part){
524
+ // if(!isDateTimePart(part) || part.length !== 2){
525
+ // ret = true;
526
+ // return false;
527
+ // }
528
+ // });
529
+ // if(ret){return true;}
530
+ // if(val[0] > 23 || val[0] < 0 || val[1] > 59 || val[1] < 0){
531
+ // return true;
532
+ // }
533
+ // if(val[2] && (val[2] > 59 || val[2] < 0 )){
534
+ // return true;
535
+ // }
536
+ // if(sFraction && isNaN(sFraction)){
537
+ // return true;
538
+ // }
539
+ // if(sFraction){
540
+ // if(sFraction < 100){
541
+ // sFraction *= 100;
542
+ // } else if(sFraction < 10){
543
+ // sFraction *= 10;
544
+ // }
545
+ // }
546
+ // return (_getParsed === true) ? [val, sFraction] : false;
547
+ // },
548
+ // step: 60,
549
+ // stepBase: 0,
550
+ // stepScaleFactor: 1000,
551
+ // asDate: function(val){
552
+ // val = new Date(this.asNumber(val));
553
+ // return (isNaN(val)) ? null : val;
554
+ // },
555
+ // asNumber: function(val){
556
+ // var ret = nan;
557
+ // val = this.mismatch(val, true);
558
+ // if(val !== true){
559
+ // ret = Date.UTC('1970', 0, 1, val[0][0], val[0][1], val[0][2] || 0);
560
+ // if(val[1]){
561
+ // ret += val[1];
562
+ // }
563
+ // }
564
+ // return ret;
565
+ // },
566
+ // dateToString: function(date){
567
+ // if(date && date.getUTCHours){
568
+ // var str = addleadingZero(date.getUTCHours(), 2) +':'+ addleadingZero(date.getUTCMinutes(), 2),
569
+ // tmp = date.getSeconds()
570
+ // ;
571
+ // if(tmp != "0"){
572
+ // str += ':'+ addleadingZero(tmp, 2);
573
+ // }
574
+ // tmp = date.getUTCMilliseconds();
575
+ // if(tmp != "0"){
576
+ // str += '.'+ addleadingZero(tmp, 3);
577
+ // }
578
+ // return str;
579
+ // } else {
580
+ // return false;
581
+ // }
582
+ // }
583
+ // }
584
+ // ,'datetime-local': {
585
+ // mismatch: function(val, _getParsed){
586
+ // if(!val || !val.split || (val+'special').split(/\u0054/).length !== 2){return true;}
587
+ // val = val.split(/\u0054/);
588
+ // return ( typeProtos.date.mismatch(val[0]) || typeProtos.time.mismatch(val[1], _getParsed) );
589
+ // },
590
+ // noAsDate: true,
591
+ // asDate: function(val){
592
+ // val = new Date(this.asNumber(val));
593
+ //
594
+ // return (isNaN(val)) ? null : val;
595
+ // },
596
+ // asNumber: function(val){
597
+ // var ret = nan;
598
+ // var time = this.mismatch(val, true);
599
+ // if(time !== true){
600
+ // val = val.split(/\u0054/)[0].split(/\u002D/);
601
+ //
602
+ // ret = Date.UTC(val[0], val[1] - 1, val[2], time[0][0], time[0][1], time[0][2] || 0);
603
+ // if(time[1]){
604
+ // ret += time[1];
605
+ // }
606
+ // }
607
+ // return ret;
608
+ // },
609
+ // dateToString: function(date, _getParsed){
610
+ // return typeProtos.date.dateToString(date) +'T'+ typeProtos.time.dateToString(date, _getParsed);
611
+ // }
612
+ // }
613
+ };
614
+
615
+ if(typeBugs || !supportsType('range') || !supportsType('time')){
616
+ typeProtos.range = $.extend({}, typeProtos.number, typeProtos.range);
617
+ // typeProtos.time = $.extend({}, typeProtos.date, typeProtos.time);
618
+ // typeProtos['datetime-local'] = $.extend({}, typeProtos.date, typeProtos.time, typeProtos['datetime-local']);
619
+ }
620
+
621
+ if(typeBugs || !supportsType('number')){
622
+ webshims.addInputType('number', typeProtos.number);
623
+ }
624
+
625
+ if(typeBugs || !supportsType('range')){
626
+ webshims.addInputType('range', typeProtos.range);
627
+ }
628
+ if(typeBugs || !supportsType('date')){
629
+ webshims.addInputType('date', typeProtos.date);
630
+ }
631
+ // if(typeBugs || !supportsType('time')){
632
+ // webshims.addInputType('time', typeProtos.time);
633
+ // }
634
+
635
+ // if(typeBugs || !supportsType('datetime-local')){
636
+ // webshims.addInputType('datetime-local', typeProtos['datetime-local']);
637
+ // }
638
+
639
+ });/* number-date-ui */
640
+ /* https://github.com/aFarkas/webshim/issues#issue/23 */
641
+ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, document, undefined, options){
642
+ "use strict";
643
+
644
+ var triggerInlineForm = webshims.triggerInlineForm;
645
+ var modernizrInputTypes = Modernizr.inputtypes;
646
+ var adjustInputWithBtn = (function(){
647
+ var fns = {"padding-box": "innerWidth", "border-box": "outerWidth", "content-box": "width"};
648
+ var boxSizing = Modernizr.prefixed && Modernizr.prefixed("boxSizing");
649
+ if($.browser.msie && webshims.browserVersion < 8){
650
+ boxSizing = false;
651
+ }
652
+ var getWidth = function(input){
653
+ var widthFn = "width";
654
+ if(boxSizing){
655
+ widthFn = fns[input.css(boxSizing)] || widthFn;
656
+ }
657
+
658
+ return {
659
+ w: input[widthFn](),
660
+ add: widthFn == "width"
661
+ };
662
+
663
+ };
664
+
665
+
666
+ return function(input, button){
667
+ var inputDim = getWidth(input);
668
+ if(!inputDim.w){return;}
669
+ var controlDim = {
670
+ mL: (parseInt(button.css('marginLeft'), 10) || 0),
671
+ w: button.outerWidth()
672
+ };
673
+ inputDim.mR = (parseInt(input.css('marginRight'), 10) || 0);
674
+ if(inputDim.mR){
675
+ input.css('marginRight', 0);
676
+ }
677
+ //is inside
678
+ if( controlDim.mL <= (controlDim.w * -1) ){
679
+ button.css('marginRight', Math.floor(Math.abs(controlDim.w + controlDim.mL - 0.1) + inputDim.mR));
680
+ input.css('paddingRight', (parseInt(input.css('paddingRight'), 10) || 0) + Math.abs(controlDim.mL));
681
+ if(inputDim.add){
682
+ input.css('width', Math.floor(inputDim.w + controlDim.mL));
683
+ }
684
+ } else {
685
+ button.css('marginRight', inputDim.mR);
686
+ input.css('width', Math.floor(inputDim.w - controlDim.mL - controlDim.w - 0.2));
687
+ }
688
+ };
689
+ })();
690
+
691
+
692
+ var defaultDatepicker = {};
693
+ var labelID = 0;
694
+ var emptyJ = $([]);
695
+ var isCheckValidity;
696
+ var replaceInputUI = function(context, elem){
697
+ $('input', context).add(elem.filter('input')).each(function(){
698
+ var type = $.prop(this, 'type');
699
+ if(replaceInputUI[type] && !webshims.data(this, 'shadowData')){
700
+ replaceInputUI[type]($(this));
701
+ }
702
+ });
703
+ };
704
+ //set date is extremly slow in IE so we do it lazy
705
+ var lazySetDate = function(elem, date){
706
+ if(!options.lazyDate){
707
+ elem.datepicker('setDate', date);
708
+ return;
709
+ }
710
+ var timer = $.data(elem[0], 'setDateLazyTimer');
711
+ if(timer){
712
+ clearTimeout(timer);
713
+ }
714
+ $.data(elem[0], 'setDateLazyTimer', setTimeout(function(){
715
+ elem.datepicker('setDate', date);
716
+ $.removeData(elem[0], 'setDateLazyTimer');
717
+ elem = null;
718
+ }, 0));
719
+ };
720
+
721
+
722
+ var copyAttrs = {
723
+ tabindex: 1,
724
+ tabIndex: 1,
725
+ title: 1,
726
+ "aria-required": 1,
727
+ "aria-invalid": 1
728
+ };
729
+ if(!options.copyAttrs){
730
+ options.copyAttrs = {};
731
+ }
732
+
733
+ webshims.extendUNDEFProp(options.copyAttrs, copyAttrs);
734
+
735
+ var getDimensions = function(orig){
736
+ return (options.calculateWidth) ?
737
+ {
738
+ css: {
739
+ marginRight: orig.css('marginRight'),
740
+ marginLeft: orig.css('marginLeft')
741
+ },
742
+ outerWidth: orig.outerWidth()
743
+
744
+ } :
745
+ {}
746
+ ;
747
+ };
748
+ var focusAttrs = copyAttrs;
749
+
750
+ replaceInputUI.common = function(orig, shim, methods){
751
+ if(Modernizr.formvalidation){
752
+ orig.bind('firstinvalid', function(e){
753
+ if(!webshims.fromSubmit && isCheckValidity){return;}
754
+ orig.unbind('invalid.replacedwidgetbubble').bind('invalid.replacedwidgetbubble', function(evt){
755
+ if(!e.isInvalidUIPrevented() && !evt.isDefaultPrevented()){
756
+ webshims.validityAlert.showFor( e.target );
757
+ e.preventDefault();
758
+ evt.preventDefault();
759
+ }
760
+ orig.unbind('invalid.replacedwidgetbubble');
761
+ });
762
+ });
763
+ }
764
+ var i, prop;
765
+ var focusElement = $('input, span.ui-slider-handle', shim);
766
+ var attrs = orig[0].attributes;
767
+ for(i in options.copyAttrs){
768
+ if ((prop = attrs[i]) && prop.specified) {
769
+ if(focusAttrs[i] && focusElement[0]){
770
+ focusElement.attr(i, prop.nodeValue);
771
+ } else {
772
+ shim[0].setAttribute(i, prop.nodeValue);
773
+ }
774
+ }
775
+ }
776
+
777
+ var id = orig.attr('id'),
778
+ label = (id) ? $('label[for="'+ id +'"]', orig[0].form) : emptyJ
779
+ ;
780
+
781
+
782
+
783
+ shim.addClass(orig[0].className);
784
+ webshims.addShadowDom(orig, shim, {
785
+ data: methods || {},
786
+ shadowFocusElement: $('input.input-datetime-local-date, span.ui-slider-handle', shim)[0],
787
+ shadowChilds: focusElement
788
+ });
789
+
790
+ orig.after(shim);
791
+
792
+ if(orig[0].form){
793
+ $(orig[0].form).bind('reset', function(e){
794
+ if(e.originalEvent && !e.isDefaultPrevented()){
795
+ setTimeout(function(){orig.prop( 'value', orig.prop('value') );}, 0);
796
+ }
797
+ });
798
+ }
799
+
800
+ if(label[0]){
801
+ shim.getShadowFocusElement().attr('aria-labelledby', webshims.getID(label));
802
+ label.bind('click', function(){
803
+ orig.getShadowFocusElement().focus();
804
+ return false;
805
+ });
806
+ }
807
+ };
808
+
809
+ if(Modernizr.formvalidation){
810
+ ['input', 'form'].forEach(function(name){
811
+ var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
812
+ prop: {
813
+ value: function(){
814
+ isCheckValidity = true;
815
+ var ret = desc.prop._supvalue.apply(this, arguments);
816
+ isCheckValidity = false;
817
+ return ret;
818
+ }
819
+ }
820
+ });
821
+ });
822
+ }
823
+ //date and datetime-local implement if we have to replace
824
+ if(!modernizrInputTypes['date'] /*||!modernizrInputTypes['datetime-local']*/ || options.replaceUI){
825
+
826
+ var datetimeFactor = {
827
+ trigger: [0.595,0.395],
828
+ normal: [0.565,0.425]
829
+ };
830
+ var subPixelCorrect = (!$.browser.msie || webshims.browserVersion > 6) ? 0 : 0.45;
831
+
832
+ var configureDatePicker = function(elem, datePicker, change, _wrapper){
833
+ var stopFocusout;
834
+ var focusedOut;
835
+ var resetFocusHandler = function(){
836
+ data.dpDiv.unbind('mousedown.webshimsmousedownhandler');
837
+ stopFocusout = false;
838
+ focusedOut = false;
839
+ };
840
+ var data = datePicker
841
+ .bind('focusin', function(){
842
+ resetFocusHandler();
843
+ data.dpDiv.unbind('mousedown.webshimsmousedownhandler').bind('mousedown.webshimsmousedownhandler', function(){
844
+ stopFocusout = true;
845
+ });
846
+ })
847
+ .bind('focusout blur', function(e){
848
+ if(stopFocusout){
849
+ focusedOut = true;
850
+ e.stopImmediatePropagation();
851
+ }
852
+ })
853
+ .datepicker($.extend({
854
+ onClose: function(){
855
+ if(focusedOut && datePicker.not(':focus')){
856
+ resetFocusHandler();
857
+ datePicker.trigger('focusout');
858
+ datePicker.triggerHandler('blur');
859
+ } else {
860
+ resetFocusHandler();
861
+ }
862
+ }
863
+ }, defaultDatepicker, options.datepicker, elem.data('datepicker')))
864
+ .bind('change', change)
865
+ .data('datepicker')
866
+ ;
867
+ data.dpDiv.addClass('input-date-datepicker-control');
868
+
869
+ if(_wrapper){
870
+ webshims.triggerDomUpdate(_wrapper[0]);
871
+ }
872
+ ['disabled', 'min', 'max', 'value', 'step', 'data-placeholder'].forEach(function(name){
873
+ var fn = 'data-placeholder' ? 'attr' : 'prop';
874
+ var val = elem[fn](name);
875
+ if(val){
876
+ elem[fn](name, val);
877
+ }
878
+ });
879
+
880
+ return data;
881
+ };
882
+
883
+ // replaceInputUI['datetime-local'] = function(elem){
884
+ // if(!$.fn.datepicker){return;}
885
+ //
886
+ // var date = $('<span role="group" class="input-datetime-local"><input type="text" class="input-datetime-local-date" /><input type="time" class="input-datetime-local-time" /></span>'),
887
+ // attr = this.common(elem, date, replaceInputUI['datetime-local'].attrs),
888
+ // datePicker = $('input.input-datetime-local-date', date),
889
+ // datePickerChange = function(e){
890
+ //
891
+ // var value = datePicker.prop('value') || '',
892
+ // timeVal = ''
893
+ // ;
894
+ // if(options.lazyDate){
895
+ // var timer = $.data(datePicker[0], 'setDateLazyTimer');
896
+ // if(timer){
897
+ // clearTimeout(timer);
898
+ // $.removeData(datePicker[0], 'setDateLazyTimer');
899
+ // }
900
+ // }
901
+ //
902
+ // if(value){
903
+ // timeVal = $('input.input-datetime-local-time', date).prop('value') || '00:00';
904
+ // try {
905
+ // value = $.datepicker.parseDate(datePicker.datepicker('option', 'dateFormat'), value);
906
+ // value = (value) ? $.datepicker.formatDate('yy-mm-dd', value) : datePicker.prop('value');
907
+ // } catch (e) {value = datePicker.prop('value');}
908
+ // }
909
+ // value = (!value && !timeVal) ? '' : value + 'T' + timeVal;
910
+ // replaceInputUI['datetime-local'].blockAttr = true;
911
+ // elem.prop('value', value);
912
+ // replaceInputUI['datetime-local'].blockAttr = false;
913
+ // e.stopImmediatePropagation();
914
+ // triggerInlineForm(elem[0], 'input');
915
+ // triggerInlineForm(elem[0], 'change');
916
+ // },
917
+ // data = configureDatePicker(elem, datePicker, datePickerChange, date)
918
+ // ;
919
+ //
920
+ //
921
+ // $('input.input-datetime-local-time', date).bind('change', function(e){
922
+ // var timeVal = $.prop(this, 'value');
923
+ // var val = ['', ''];
924
+ // if(timeVal){
925
+ // val = elem.prop('value').split('T');
926
+ // if((val.length < 2 || !val[0])){
927
+ // val[0] = $.datepicker.formatDate('yy-mm-dd', new Date());
928
+ // }
929
+ // val[1] = timeVal;
930
+ //
931
+ // if (timeVal) {
932
+ // try {
933
+ // datePicker.prop('value', $.datepicker.formatDate(datePicker.datepicker('option', 'dateFormat'), $.datepicker.parseDate('yy-mm-dd', val[0])));
934
+ // } catch (e) {}
935
+ // }
936
+ // }
937
+ // val = (!val[0] && !val[1]) ? '' : val.join('T');
938
+ // replaceInputUI['datetime-local'].blockAttr = true;
939
+ // elem.prop('value', val);
940
+ // replaceInputUI['datetime-local'].blockAttr = false;
941
+ // e.stopImmediatePropagation();
942
+ // triggerInlineForm(elem[0], 'input');
943
+ // triggerInlineForm(elem[0], 'change');
944
+ // });
945
+ //
946
+ //
947
+ //
948
+ // date.attr('aria-labelledby', attr.label.attr('id'));
949
+ // attr.label.bind('click', function(){
950
+ // datePicker.focus();
951
+ // return false;
952
+ // });
953
+ //
954
+ // if(attr.css){
955
+ // date.css(attr.css);
956
+ // if(attr.outerWidth){
957
+ // date.outerWidth(attr.outerWidth);
958
+ // var width = date.width();
959
+ // var widthFac = (data.trigger[0]) ? datetimeFactor.trigger : datetimeFactor.normal;
960
+ // datePicker.outerWidth(Math.floor((width * widthFac[0]) - subPixelCorrect), true);
961
+ // $('input.input-datetime-local-time', date).outerWidth(Math.floor((width * widthFac[1]) - subPixelCorrect), true);
962
+ // if(data.trigger[0]){
963
+ // adjustInputWithBtn(datePicker, data.trigger);
964
+ // }
965
+ // }
966
+ // }
967
+ //
968
+ //
969
+ // };
970
+ //
971
+ // replaceInputUI['datetime-local'].attrs = {
972
+ // disabled: function(orig, shim, value){
973
+ // $('input.input-datetime-local-date', shim).prop('disabled', !!value);
974
+ // $('input.input-datetime-local-time', shim).prop('disabled', !!value);
975
+ // },
976
+ // step: function(orig, shim, value){
977
+ // $('input.input-datetime-local-time', shim).attr('step', value);
978
+ // },
979
+ // //ToDo: use min also on time
980
+ // min: function(orig, shim, value){
981
+ // if(value){
982
+ // value = (value.split) ? value.split('T') : [];
983
+ // try {
984
+ // value = $.datepicker.parseDate('yy-mm-dd', value[0]);
985
+ // } catch(e){value = false;}
986
+ // }
987
+ // if(!value){
988
+ // value = null;
989
+ // }
990
+ // $('input.input-datetime-local-date', shim).datepicker('option', 'minDate', value);
991
+ //
992
+ // },
993
+ // //ToDo: use max also on time
994
+ // max: function(orig, shim, value){
995
+ // if(value){
996
+ // value = (value.split) ? value.split('T') : [];
997
+ // try {
998
+ // value = $.datepicker.parseDate('yy-mm-dd', value[0]);
999
+ // } catch(e){value = false;}
1000
+ // }
1001
+ // if(!value){
1002
+ // value = null;
1003
+ // }
1004
+ // $('input.input-datetime-local-date', shim).datepicker('option', 'maxDate', value);
1005
+ // },
1006
+ // value: function(orig, shim, value){
1007
+ // var dateValue;
1008
+ // if(value){
1009
+ // value = (value.split) ? value.split('T') : [];
1010
+ // try {
1011
+ // dateValue = $.datepicker.parseDate('yy-mm-dd', value[0]);
1012
+ // } catch(e){dateValue = false;}
1013
+ // }
1014
+ // if(dateValue){
1015
+ // if(!replaceInputUI['datetime-local'].blockAttr){
1016
+ // lazySetDate($('input.input-datetime-local-date', shim), dateValue);
1017
+ // }
1018
+ // $('input.input-datetime-local-time', shim).prop('value', value[1] || '00:00');
1019
+ // } else {
1020
+ // $('input.input-datetime-local-date', shim).prop('value', value[0] || '');
1021
+ // $('input.input-datetime-local-time', shim).prop('value', value[1] || '');
1022
+ // }
1023
+ //
1024
+ //
1025
+ // }
1026
+ // };
1027
+
1028
+
1029
+ replaceInputUI.date = function(elem){
1030
+
1031
+ if(!$.fn.datepicker){return;}
1032
+ var date = $('<input class="input-date" type="text" />'),
1033
+
1034
+ change = function(e){
1035
+
1036
+ replaceInputUI.date.blockAttr = true;
1037
+ var value;
1038
+ if(options.lazyDate){
1039
+ var timer = $.data(date[0], 'setDateLazyTimer');
1040
+ if(timer){
1041
+ clearTimeout(timer);
1042
+ $.removeData(date[0], 'setDateLazyTimer');
1043
+ }
1044
+ }
1045
+ try {
1046
+ value = $.datepicker.parseDate(date.datepicker('option', 'dateFormat'), date.prop('value') );
1047
+ value = (value) ? $.datepicker.formatDate( 'yy-mm-dd', value ) : date.prop('value');
1048
+ } catch(e){
1049
+ value = date.prop('value');
1050
+ }
1051
+ elem.prop('value', value);
1052
+ replaceInputUI.date.blockAttr = false;
1053
+ e.stopImmediatePropagation();
1054
+ triggerInlineForm(elem[0], 'input');
1055
+ triggerInlineForm(elem[0], 'change');
1056
+ },
1057
+ data
1058
+
1059
+ ;
1060
+
1061
+ this.common(elem, date, replaceInputUI.date.attrs);
1062
+
1063
+ data = configureDatePicker(elem, date, change);
1064
+
1065
+ $(elem)
1066
+ .bind('updateshadowdom', function(){
1067
+ if (data.trigger[0]) {
1068
+ elem.css({display: ''});
1069
+ if(elem[0].offsetWidth || elem[0].offsetHeight){
1070
+ var attr = getDimensions(elem);
1071
+ if (attr.css) {
1072
+ date.css(attr.css);
1073
+ if (attr.outerWidth) {
1074
+ date.outerWidth(attr.outerWidth);
1075
+ }
1076
+ adjustInputWithBtn(date, data.trigger);
1077
+ }
1078
+ }
1079
+ }
1080
+ elem.css({display: 'none'});
1081
+ })
1082
+ .triggerHandler('updateshadowdom')
1083
+ ;
1084
+ if (data.trigger[0]) {
1085
+ setTimeout(function(){
1086
+ webshims.ready('WINDOWLOAD', function(){
1087
+ $(elem).triggerHandler('updateshadowdom');
1088
+ });
1089
+ }, 9);
1090
+ }
1091
+
1092
+ };
1093
+
1094
+
1095
+ replaceInputUI.date.attrs = {
1096
+ disabled: function(orig, shim, value){
1097
+ $.prop(shim, 'disabled', !!value);
1098
+ },
1099
+ min: function(orig, shim, value){
1100
+ try {
1101
+ value = $.datepicker.parseDate('yy-mm-dd', value);
1102
+ } catch(e){value = false;}
1103
+ if(value){
1104
+ $(shim).datepicker('option', 'minDate', value);
1105
+ }
1106
+ },
1107
+ max: function(orig, shim, value){
1108
+ try {
1109
+ value = $.datepicker.parseDate('yy-mm-dd', value);
1110
+ } catch(e){value = false;}
1111
+ if(value){
1112
+ $(shim).datepicker('option', 'maxDate', value);
1113
+ }
1114
+ },
1115
+ 'data-placeholder': function(orig, shim, value){
1116
+ var hintValue = (value || '').split('-');
1117
+ var dateFormat;
1118
+ if(hintValue.length == 3){
1119
+ value = $(shim).datepicker('option','dateFormat').replace('yy', hintValue[0]).replace('mm', hintValue[1]).replace('dd', hintValue[2]);
1120
+ }
1121
+ $.prop(shim, 'placeholder', value);
1122
+ },
1123
+ value: function(orig, shim, value){
1124
+ if(!replaceInputUI.date.blockAttr){
1125
+ try {
1126
+ var dateValue = $.datepicker.parseDate('yy-mm-dd', value);
1127
+ } catch(e){var dateValue = false;}
1128
+
1129
+ if(dateValue){
1130
+ lazySetDate($(shim), dateValue);
1131
+ } else {
1132
+ $.prop(shim, 'value', value);
1133
+ }
1134
+ }
1135
+ }
1136
+ };
1137
+ }
1138
+ if (!modernizrInputTypes.range || options.replaceUI) {
1139
+ replaceInputUI.range = function(elem){
1140
+ if(!$.fn.slider){return;}
1141
+ var range = $('<span class="input-range"><span class="ui-slider-handle" role="slider" tabindex="0" /></span>'),
1142
+ change = function(e, ui){
1143
+ if(e.originalEvent){
1144
+ replaceInputUI.range.blockAttr = true;
1145
+ elem.prop('value', ui.value);
1146
+ replaceInputUI.range.blockAttr = false;
1147
+ triggerInlineForm(elem[0], 'input');
1148
+ triggerInlineForm(elem[0], 'change');
1149
+ }
1150
+ }
1151
+ ;
1152
+
1153
+ this.common(elem, range, replaceInputUI.range.attrs);
1154
+
1155
+
1156
+ elem
1157
+ .bind('updateshadowdom', function(){
1158
+ elem.css({display: ''});
1159
+ if (elem[0].offsetWidth || elem[0].offsetHeight) {
1160
+ var attr = getDimensions(elem);
1161
+ if (attr.css) {
1162
+ range.css(attr.css);
1163
+ if (attr.outerWidth) {
1164
+ range.outerWidth(attr.outerWidth);
1165
+ }
1166
+ }
1167
+ }
1168
+ elem.css({display: 'none'});
1169
+ })
1170
+ .triggerHandler('updateshadowdom')
1171
+ ;
1172
+
1173
+
1174
+ range.slider($.extend(true, {}, options.slider, elem.data('slider'))).bind('slide', change);
1175
+
1176
+ ['disabled', 'min', 'max', 'step', 'value'].forEach(function(name){
1177
+ var val = elem.prop(name);
1178
+ var shadow;
1179
+ if(name == 'value' && !val){
1180
+
1181
+ shadow = elem.getShadowElement();
1182
+ if(shadow){
1183
+ val = ($(shadow).slider('option', 'max') - $(shadow).slider('option', 'min')) / 2;
1184
+ }
1185
+ }
1186
+ if(val != null){
1187
+ elem.prop(name, val);
1188
+ }
1189
+ });
1190
+ };
1191
+
1192
+ replaceInputUI.range.attrs = {
1193
+ disabled: function(orig, shim, value){
1194
+ value = !!value;
1195
+ $(shim).slider( "option", "disabled", value );
1196
+ $('span', shim)
1197
+ .attr({
1198
+ 'aria-disabled': value+'',
1199
+ 'tabindex': (value) ? '-1' : '0'
1200
+ })
1201
+ ;
1202
+ },
1203
+ min: function(orig, shim, value){
1204
+ value = (value) ? value * 1 || 0 : 0;
1205
+ $(shim).slider( "option", "min", value );
1206
+ $('span', shim).attr({'aria-valuemin': value});
1207
+ },
1208
+ max: function(orig, shim, value){
1209
+ value = (value || value === 0) ? value * 1 || 100 : 100;
1210
+ $(shim).slider( "option", "max", value );
1211
+ $('span', shim).attr({'aria-valuemax': value});
1212
+ },
1213
+ value: function(orig, shim, value){
1214
+ value = $(orig).prop('valueAsNumber');
1215
+ if(!isNaN(value)){
1216
+ if(!replaceInputUI.range.blockAttr){
1217
+ $(shim).slider( "option", "value", value );
1218
+ }
1219
+ $('span', shim).attr({'aria-valuenow': value, 'aria-valuetext': value});
1220
+ }
1221
+ },
1222
+ step: function(orig, shim, value){
1223
+ value = (value && $.trim(value)) ? value * 1 || 1 : 1;
1224
+ $(shim).slider( "option", "step", value );
1225
+ }
1226
+ };
1227
+ }
1228
+
1229
+ if(!webshims.bugs.valueAsNumberSet && (options.replaceUI || !Modernizr.inputtypes.date /*|| !Modernizr.inputtypes["datetime-local"]*/ || !Modernizr.inputtypes.range)){
1230
+ var reflectFn = function(val){
1231
+ if(webshims.data(this, 'hasShadow')){
1232
+ $.prop(this, 'value', $.prop(this, 'value'));
1233
+ }
1234
+ };
1235
+
1236
+ webshims.onNodeNamesPropertyModify('input', 'valueAsNumber', reflectFn);
1237
+ webshims.onNodeNamesPropertyModify('input', 'valueAsDate', reflectFn);
1238
+ }
1239
+
1240
+ $.each(['disabled', 'min', 'max', 'value', 'step', 'data-placeholder'], function(i, attr){
1241
+ webshims.onNodeNamesPropertyModify('input', attr, function(val){
1242
+ var shadowData = webshims.data(this, 'shadowData');
1243
+ if(shadowData && shadowData.data && shadowData.data[attr] && shadowData.nativeElement === this){
1244
+ shadowData.data[attr](this, shadowData.shadowElement, val);
1245
+ }
1246
+ }
1247
+ );
1248
+ });
1249
+ if(!options.availabeLangs){
1250
+ options.availabeLangs = 'af ar ar-DZ az bg bs ca cs da de el en-AU en-GB en-NZ eo es et eu fa fi fo fr fr-CH gl he hr hu hy id is it ja ko kz lt lv ml ms nl no pl pt-BR rm ro ru sk sl sq sr sr-SR sv ta th tr uk vi zh-CN zh-HK zh-TW'.split(' ');
1251
+ }
1252
+
1253
+ var getDefaults = function(){
1254
+ if(!$.datepicker){return;}
1255
+
1256
+ webshims.activeLang({
1257
+ langObj: $.datepicker.regional,
1258
+ module: 'form-number-date-ui',
1259
+ callback: function(langObj){
1260
+ var datepickerCFG = $.extend({}, defaultDatepicker, langObj, options.datepicker);
1261
+
1262
+
1263
+ if(datepickerCFG.dateFormat && options.datepicker.dateFormat != datepickerCFG.dateFormat ){
1264
+ $('input.hasDatepicker')
1265
+ .filter('.input-date, .input-datetime-local-date')
1266
+ .datepicker('option', 'dateFormat', datepickerCFG.dateFormat)
1267
+ .getNativeElement()
1268
+ .filter('[data-placeholder]')
1269
+ .attr('data-placeholder', function(i, val){
1270
+ return val;
1271
+ })
1272
+ ;
1273
+ }
1274
+ $.datepicker.setDefaults(datepickerCFG);
1275
+ }
1276
+ });
1277
+ $(document).unbind('jquery-uiReady.langchange input-widgetsReady.langchange');
1278
+ };
1279
+
1280
+ $(document).bind('jquery-uiReady.langchange input-widgetsReady.langchange', getDefaults);
1281
+ getDefaults();
1282
+
1283
+ //implement set/arrow controls
1284
+ (function(){
1285
+ var supportsType = (function(){
1286
+ var types = {};
1287
+ return function(type){
1288
+ if(type in types){
1289
+ return types[type];
1290
+ }
1291
+ return (types[type] = ($('<input type="'+type+'" />')[0].type === type));
1292
+ };
1293
+ })();
1294
+
1295
+ if(supportsType('number')/* && supportsType('time')*/){return;}
1296
+ var doc = document;
1297
+ var options = webshims.cfg["forms-ext"];
1298
+ var typeModels = webshims.inputTypes;
1299
+
1300
+ var getNextStep = function(input, upDown, cache){
1301
+
1302
+ cache = cache || {};
1303
+
1304
+ if( !('type' in cache) ){
1305
+ cache.type = $.prop(input, 'type');
1306
+ }
1307
+ if( !('step' in cache) ){
1308
+ cache.step = webshims.getStep(input, cache.type);
1309
+ }
1310
+ if( !('valueAsNumber' in cache) ){
1311
+ cache.valueAsNumber = typeModels[cache.type].asNumber($.prop(input, 'value'));
1312
+ }
1313
+ var delta = (cache.step == 'any') ? typeModels[cache.type].step * typeModels[cache.type].stepScaleFactor : cache.step,
1314
+ ret
1315
+ ;
1316
+ webshims.addMinMaxNumberToCache('min', $(input), cache);
1317
+ webshims.addMinMaxNumberToCache('max', $(input), cache);
1318
+
1319
+ if(isNaN(cache.valueAsNumber)){
1320
+ cache.valueAsNumber = typeModels[cache.type].stepBase || 0;
1321
+ }
1322
+ //make a valid step
1323
+ if(cache.step !== 'any'){
1324
+ ret = Math.round( ((cache.valueAsNumber - (cache.minAsnumber || 0)) % cache.step) * 1e7 ) / 1e7;
1325
+ if(ret && Math.abs(ret) != cache.step){
1326
+ cache.valueAsNumber = cache.valueAsNumber - ret;
1327
+ }
1328
+ }
1329
+ ret = cache.valueAsNumber + (delta * upDown);
1330
+ //using NUMBER.MIN/MAX is really stupid | ToDo: either use disabled state or make this more usable
1331
+ if(!isNaN(cache.minAsNumber) && ret < cache.minAsNumber){
1332
+ ret = (cache.valueAsNumber * upDown < cache.minAsNumber) ? cache.minAsNumber : isNaN(cache.maxAsNumber) ? cache.valueAsNumber : cache.maxAsNumber;
1333
+ } else if(!isNaN(cache.maxAsNumber) && ret > cache.maxAsNumber){
1334
+ ret = (cache.valueAsNumber * upDown > cache.maxAsNumber) ? cache.maxAsNumber : isNaN(cache.minAsNumber) ? cache.valueAsNumber : cache.minAsNumber;
1335
+ } else {
1336
+ ret = Math.round( ret * 1e7) / 1e7;
1337
+ }
1338
+ return ret;
1339
+ };
1340
+
1341
+ webshims.modules["form-number-date-ui"].getNextStep = getNextStep;
1342
+
1343
+ var doSteps = function(input, type, control){
1344
+ if(input.disabled || input.readOnly || $(control).hasClass('step-controls')){return;}
1345
+ $.prop(input, 'value', typeModels[type].numberToString(getNextStep(input, ($(control).hasClass('step-up')) ? 1 : -1, {type: type})));
1346
+ $(input).unbind('blur.stepeventshim');
1347
+ triggerInlineForm(input, 'input');
1348
+
1349
+
1350
+ if( doc.activeElement ){
1351
+ if(doc.activeElement !== input){
1352
+ try {input.focus();} catch(e){}
1353
+ }
1354
+ setTimeout(function(){
1355
+ if(doc.activeElement !== input){
1356
+ try {input.focus();} catch(e){}
1357
+ }
1358
+ $(input)
1359
+ .one('blur.stepeventshim', function(){
1360
+ triggerInlineForm(input, 'change');
1361
+ })
1362
+ ;
1363
+ }, 0);
1364
+
1365
+ }
1366
+ };
1367
+
1368
+
1369
+ if(options.stepArrows){
1370
+ var stepDisableEnable = {
1371
+ // don't change getter
1372
+ set: function(value){
1373
+ var stepcontrols = webshims.data(this, 'step-controls');
1374
+ if(stepcontrols){
1375
+ stepcontrols[ (this.disabled || this.readonly) ? 'addClass' : 'removeClass' ]('disabled-step-control');
1376
+ }
1377
+ }
1378
+ };
1379
+ webshims.onNodeNamesPropertyModify('input', 'disabled', stepDisableEnable);
1380
+ webshims.onNodeNamesPropertyModify('input', 'readonly', $.extend({}, stepDisableEnable));
1381
+ }
1382
+ var stepKeys = {
1383
+ 38: 1,
1384
+ 40: -1
1385
+ };
1386
+ webshims.addReady(function(context, contextElem){
1387
+ //ui for numeric values
1388
+ if(options.stepArrows){
1389
+ $('input', context).add(contextElem.filter('input')).each(function(){
1390
+ var type = $.prop(this, 'type');
1391
+ if(!typeModels[type] || !typeModels[type].asNumber || !options.stepArrows || (options.stepArrows !== true && !options.stepArrows[type]) || supportsType(type) || $(elem).hasClass('has-step-controls')){return;}
1392
+ var elem = this;
1393
+ var controls = $('<span class="step-controls" unselectable="on"><span class="step-up" /><span class="step-down" /></span>')
1394
+ .insertAfter(elem)
1395
+ .bind('selectstart dragstart', function(){return false;})
1396
+ .bind('mousedown mousepress', function(e){
1397
+ doSteps(elem, type, e.target);
1398
+ return false;
1399
+ })
1400
+ .bind('mousepressstart mousepressend', function(e){
1401
+ $(e.target)[e.type == 'mousepressstart' ? 'addClass' : 'removeClass']('mousepress-ui');
1402
+ })
1403
+ ;
1404
+ var mwheelUpDown = function(e, d){
1405
+ if(elem.disabled || elem.readOnly || !d){return;}
1406
+ $.prop(elem, 'value', typeModels[type].numberToString(getNextStep(elem, d, {type: type})));
1407
+ triggerInlineForm(elem, 'input');
1408
+ return false;
1409
+ };
1410
+ var jElm = $(elem)
1411
+ .addClass('has-step-controls')
1412
+ .attr({
1413
+ readonly: elem.readOnly,
1414
+ disabled: elem.disabled,
1415
+ autocomplete: 'off',
1416
+ role: 'spinbutton'
1417
+ })
1418
+ .bind(($.browser.msie) ? 'keydown' : 'keypress', function(e){
1419
+ if(elem.disabled || elem.readOnly || !stepKeys[e.keyCode]){return;}
1420
+ $.prop(elem, 'value', typeModels[type].numberToString(getNextStep(elem, stepKeys[e.keyCode], {type: type})));
1421
+ triggerInlineForm(elem, 'input');
1422
+ return false;
1423
+ })
1424
+ ;
1425
+ if(type == 'number'){
1426
+ jElm.bind('keypress', (function(){
1427
+ var chars = '0123456789.';
1428
+ return function(event){
1429
+ var chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
1430
+ return event.ctrlKey || event.metaKey || (chr < ' ' || chars.indexOf(chr) > -1);
1431
+ };
1432
+ })());
1433
+ }
1434
+ if($.fn.mwheelIntent){
1435
+ jElm.add(controls).bind('mwheelIntent', mwheelUpDown);
1436
+ } else if($.fn.mousewheel) {
1437
+ jElm
1438
+ .bind('focus', function(){
1439
+ jElm.add(controls).unbind('.mwhellwebshims')
1440
+ .bind('mousewheel.mwhellwebshims', mwheelUpDown)
1441
+ ;
1442
+ })
1443
+ .bind('blur', function(){
1444
+ $(elem).add(controls).unbind('.mwhellwebshims');
1445
+ })
1446
+ ;
1447
+ }
1448
+ webshims.data(elem, 'step-controls', controls);
1449
+ if(options.calculateWidth){
1450
+ var init;
1451
+ jElm
1452
+ .bind('updateshadowdom', function(){
1453
+ if(!init && (elem.offsetWidth || elem.offsetHeight)){
1454
+ init = true;
1455
+ adjustInputWithBtn(jElm, controls);
1456
+ controls.css('marginTop', (jElm.outerHeight() - controls.outerHeight()) / 2);
1457
+ }
1458
+ })
1459
+ .triggerHandler('updateshadowdom')
1460
+ ;
1461
+ }
1462
+ });
1463
+ }
1464
+ });
1465
+ })();
1466
+
1467
+
1468
+ webshims.addReady(function(context, elem){
1469
+ $(document).bind('jquery-uiReady.initinputui input-widgetsReady.initinputui', function(e){
1470
+ if($.datepicker || $.fn.slider){
1471
+ if($.datepicker && !defaultDatepicker.dateFormat){
1472
+ defaultDatepicker.dateFormat = $.datepicker._defaults.dateFormat;
1473
+ }
1474
+ replaceInputUI(context, elem);
1475
+ }
1476
+ if($.datepicker && $.fn.slider){
1477
+ $(document).unbind('.initinputui');
1478
+ } else if(!webshims.modules["input-widgets"].src){
1479
+ webshims.warn('jQuery UI Widget factory is already included, but not datepicker or slider. configure src of $.webshims.modules["input-widgets"].src');
1480
+ }
1481
+ });
1482
+ });
1483
+
1484
+ });
1485
+