webshims-rails 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. data/lib/webshims-rails/version.rb +2 -2
  2. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +30 -29
  3. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +12 -12
  4. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +76 -76
  5. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +12 -12
  6. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +12 -12
  7. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +27 -27
  8. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +12 -12
  9. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +14 -14
  10. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +63 -60
  11. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +59 -59
  12. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +1 -1
  13. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +1 -1
  14. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +67 -67
  15. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +59 -58
  16. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +81 -80
  17. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +103 -102
  18. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +34 -31
  19. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +41 -38
  20. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +35 -35
  21. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +67 -67
  22. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +17 -17
  23. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-api.js +10 -8
  24. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +24 -23
  25. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +1 -1
  26. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +9 -0
  27. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +9 -9
  28. data/vendor/assets/javascripts/webshims/minified/shims/track.js +21 -20
  29. data/vendor/assets/javascripts/webshims/polyfiller.js +144 -140
  30. data/vendor/assets/javascripts/webshims/shims/combos/1.js +10 -6
  31. data/vendor/assets/javascripts/webshims/shims/combos/10.js +11 -7
  32. data/vendor/assets/javascripts/webshims/shims/combos/11.js +10 -6
  33. data/vendor/assets/javascripts/webshims/shims/combos/12.js +10 -6
  34. data/vendor/assets/javascripts/webshims/shims/combos/13.js +10 -6
  35. data/vendor/assets/javascripts/webshims/shims/combos/16.js +10 -6
  36. data/vendor/assets/javascripts/webshims/shims/combos/17.js +10 -6
  37. data/vendor/assets/javascripts/webshims/shims/combos/18.js +986 -924
  38. data/vendor/assets/javascripts/webshims/shims/combos/19.js +10 -6
  39. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1 -1
  40. data/vendor/assets/javascripts/webshims/shims/combos/22.js +1 -1
  41. data/vendor/assets/javascripts/webshims/shims/combos/24.js +10 -6
  42. data/vendor/assets/javascripts/webshims/shims/combos/25.js +820 -768
  43. data/vendor/assets/javascripts/webshims/shims/combos/26.js +820 -768
  44. data/vendor/assets/javascripts/webshims/shims/combos/27.js +821 -769
  45. data/vendor/assets/javascripts/webshims/shims/combos/6.js +986 -924
  46. data/vendor/assets/javascripts/webshims/shims/combos/7.js +986 -924
  47. data/vendor/assets/javascripts/webshims/shims/combos/8.js +10 -6
  48. data/vendor/assets/javascripts/webshims/shims/combos/9.js +11 -7
  49. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +10 -6
  50. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +77 -77
  51. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +909 -847
  52. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +1 -1
  53. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +9 -0
  54. data/vendor/assets/javascripts/webshims/shims/track-ui.js +300 -291
  55. data/vendor/assets/javascripts/webshims/shims/track.js +810 -762
  56. metadata +10 -5
@@ -1,847 +1,909 @@
1
- /* number-date-ui */
2
- /* https://github.com/aFarkas/webshim/issues#issue/23 */
3
- jQuery.webshims.register('form-number-date-ui', function($, webshims, window, document, undefined, options){
4
- "use strict";
5
-
6
- var triggerInlineForm = webshims.triggerInlineForm;
7
- var modernizrInputTypes = Modernizr.inputtypes;
8
- var adjustInputWithBtn = (function(){
9
- var fns = {"padding-box": "innerWidth", "border-box": "outerWidth", "content-box": "width"};
10
- var boxSizing = Modernizr.prefixed && Modernizr.prefixed("boxSizing");
11
- if($.browser.msie && webshims.browserVersion < 8){
12
- boxSizing = false;
13
- }
14
- var getWidth = function(input){
15
- var widthFn = "width";
16
- if(boxSizing){
17
- widthFn = fns[input.css(boxSizing)] || widthFn;
18
- }
19
-
20
- return {
21
- w: input[widthFn](),
22
- add: widthFn == "width"
23
- };
24
-
25
- };
26
-
27
-
28
- return function(input, button){
29
- var inputDim = getWidth(input);
30
- if(!inputDim.w){return;}
31
- var controlDim = {
32
- mL: (parseInt(button.css('marginLeft'), 10) || 0),
33
- w: button.outerWidth()
34
- };
35
- inputDim.mR = (parseInt(input.css('marginRight'), 10) || 0);
36
- if(inputDim.mR){
37
- input.css('marginRight', 0);
38
- }
39
- //is inside
40
- if( controlDim.mL <= (controlDim.w * -1) ){
41
- button.css('marginRight', Math.floor(Math.abs(controlDim.w + controlDim.mL - 0.1) + inputDim.mR));
42
- input.css('paddingRight', (parseInt(input.css('paddingRight'), 10) || 0) + Math.abs(controlDim.mL));
43
- if(inputDim.add){
44
- input.css('width', Math.floor(inputDim.w + controlDim.mL));
45
- }
46
- } else {
47
- button.css('marginRight', inputDim.mR);
48
- input.css('width', Math.floor(inputDim.w - controlDim.mL - controlDim.w - 0.2));
49
- }
50
- };
51
- })();
52
-
53
-
54
- var defaultDatepicker = {};
55
- var labelID = 0;
56
- var emptyJ = $([]);
57
- var isCheckValidity;
58
- var replaceInputUI = function(context, elem){
59
- $('input', context).add(elem.filter('input')).each(function(){
60
- var type = $.prop(this, 'type');
61
- if(replaceInputUI[type] && !webshims.data(this, 'shadowData')){
62
- replaceInputUI[type]($(this));
63
- }
64
- });
65
- };
66
- //set date is extremly slow in IE so we do it lazy
67
- var lazySetDate = function(elem, date){
68
- if(!options.lazyDate){
69
- elem.datepicker('setDate', date);
70
- return;
71
- }
72
- var timer = $.data(elem[0], 'setDateLazyTimer');
73
- if(timer){
74
- clearTimeout(timer);
75
- }
76
- $.data(elem[0], 'setDateLazyTimer', setTimeout(function(){
77
- elem.datepicker('setDate', date);
78
- $.removeData(elem[0], 'setDateLazyTimer');
79
- elem = null;
80
- }, 0));
81
- };
82
-
83
-
84
- var copyAttrs = {
85
- tabindex: 1,
86
- tabIndex: 1,
87
- title: 1,
88
- "aria-required": 1,
89
- "aria-invalid": 1
90
- };
91
- if(!options.copyAttrs){
92
- options.copyAttrs = {};
93
- }
94
-
95
- webshims.extendUNDEFProp(options.copyAttrs, copyAttrs);
96
-
97
- var getDimensions = function(orig){
98
- return (options.calculateWidth) ?
99
- {
100
- css: {
101
- marginRight: orig.css('marginRight'),
102
- marginLeft: orig.css('marginLeft')
103
- },
104
- outerWidth: orig.outerWidth()
105
-
106
- } :
107
- {}
108
- ;
109
- };
110
- var focusAttrs = copyAttrs;
111
-
112
- replaceInputUI.common = function(orig, shim, methods){
113
- if(Modernizr.formvalidation){
114
- orig.bind('firstinvalid', function(e){
115
- if(!webshims.fromSubmit && isCheckValidity){return;}
116
- orig.unbind('invalid.replacedwidgetbubble').bind('invalid.replacedwidgetbubble', function(evt){
117
- if(!e.isInvalidUIPrevented() && !evt.isDefaultPrevented()){
118
- webshims.validityAlert.showFor( e.target );
119
- e.preventDefault();
120
- evt.preventDefault();
121
- }
122
- orig.unbind('invalid.replacedwidgetbubble');
123
- });
124
- });
125
- }
126
- var i, prop;
127
- var focusElement = $('input, span.ui-slider-handle', shim);
128
- var attrs = orig[0].attributes;
129
- for(i in options.copyAttrs){
130
- if ((prop = attrs[i]) && prop.specified) {
131
- if(focusAttrs[i] && focusElement[0]){
132
- focusElement.attr(i, prop.nodeValue);
133
- } else {
134
- shim[0].setAttribute(i, prop.nodeValue);
135
- }
136
- }
137
- }
138
-
139
- var id = orig.attr('id'),
140
- label = (id) ? $('label[for="'+ id +'"]', orig[0].form) : emptyJ
141
- ;
142
-
143
-
144
-
145
- shim.addClass(orig[0].className);
146
- webshims.addShadowDom(orig, shim, {
147
- data: methods || {},
148
- shadowFocusElement: $('input.input-datetime-local-date, span.ui-slider-handle', shim)[0],
149
- shadowChilds: focusElement
150
- });
151
-
152
- orig.after(shim);
153
-
154
- if(orig[0].form){
155
- $(orig[0].form).bind('reset', function(e){
156
- if(e.originalEvent && !e.isDefaultPrevented()){
157
- setTimeout(function(){orig.prop( 'value', orig.prop('value') );}, 0);
158
- }
159
- });
160
- }
161
-
162
- if(label[0]){
163
- shim.getShadowFocusElement().attr('aria-labelledby', webshims.getID(label));
164
- label.bind('click', function(){
165
- orig.getShadowFocusElement().focus();
166
- return false;
167
- });
168
- }
169
- };
170
-
171
- if(Modernizr.formvalidation){
172
- ['input', 'form'].forEach(function(name){
173
- var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
174
- prop: {
175
- value: function(){
176
- isCheckValidity = true;
177
- var ret = desc.prop._supvalue.apply(this, arguments);
178
- isCheckValidity = false;
179
- return ret;
180
- }
181
- }
182
- });
183
- });
184
- }
185
- //date and datetime-local implement if we have to replace
186
- if(!modernizrInputTypes['date'] /*||!modernizrInputTypes['datetime-local']*/ || options.replaceUI){
187
-
188
- var datetimeFactor = {
189
- trigger: [0.595,0.395],
190
- normal: [0.565,0.425]
191
- };
192
- var subPixelCorrect = (!$.browser.msie || webshims.browserVersion > 6) ? 0 : 0.45;
193
-
194
- var configureDatePicker = function(elem, datePicker, change, _wrapper){
195
- var stopFocusout;
196
- var focusedOut;
197
- var resetFocusHandler = function(){
198
- data.dpDiv.unbind('mousedown.webshimsmousedownhandler');
199
- stopFocusout = false;
200
- focusedOut = false;
201
- };
202
- var data = datePicker
203
- .bind('focusin', function(){
204
- resetFocusHandler();
205
- data.dpDiv.unbind('mousedown.webshimsmousedownhandler').bind('mousedown.webshimsmousedownhandler', function(){
206
- stopFocusout = true;
207
- });
208
- })
209
- .bind('focusout blur', function(e){
210
- if(stopFocusout){
211
- focusedOut = true;
212
- e.stopImmediatePropagation();
213
- }
214
- })
215
- .datepicker($.extend({
216
- onClose: function(){
217
- if(focusedOut && datePicker.not(':focus')){
218
- resetFocusHandler();
219
- datePicker.trigger('focusout');
220
- datePicker.triggerHandler('blur');
221
- } else {
222
- resetFocusHandler();
223
- }
224
- }
225
- }, defaultDatepicker, options.datepicker, elem.data('datepicker')))
226
- .bind('change', change)
227
- .data('datepicker')
228
- ;
229
- data.dpDiv.addClass('input-date-datepicker-control');
230
-
231
- if(_wrapper){
232
- webshims.triggerDomUpdate(_wrapper[0]);
233
- }
234
- ['disabled', 'min', 'max', 'value', 'step', 'data-placeholder'].forEach(function(name){
235
- var fn = 'data-placeholder' ? 'attr' : 'prop';
236
- var val = elem[fn](name);
237
- if(val){
238
- elem[fn](name, val);
239
- }
240
- });
241
-
242
- return data;
243
- };
244
-
245
- // replaceInputUI['datetime-local'] = function(elem){
246
- // if(!$.fn.datepicker){return;}
247
- //
248
- // 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>'),
249
- // attr = this.common(elem, date, replaceInputUI['datetime-local'].attrs),
250
- // datePicker = $('input.input-datetime-local-date', date),
251
- // datePickerChange = function(e){
252
- //
253
- // var value = datePicker.prop('value') || '',
254
- // timeVal = ''
255
- // ;
256
- // if(options.lazyDate){
257
- // var timer = $.data(datePicker[0], 'setDateLazyTimer');
258
- // if(timer){
259
- // clearTimeout(timer);
260
- // $.removeData(datePicker[0], 'setDateLazyTimer');
261
- // }
262
- // }
263
- //
264
- // if(value){
265
- // timeVal = $('input.input-datetime-local-time', date).prop('value') || '00:00';
266
- // try {
267
- // value = $.datepicker.parseDate(datePicker.datepicker('option', 'dateFormat'), value);
268
- // value = (value) ? $.datepicker.formatDate('yy-mm-dd', value) : datePicker.prop('value');
269
- // } catch (e) {value = datePicker.prop('value');}
270
- // }
271
- // value = (!value && !timeVal) ? '' : value + 'T' + timeVal;
272
- // replaceInputUI['datetime-local'].blockAttr = true;
273
- // elem.prop('value', value);
274
- // replaceInputUI['datetime-local'].blockAttr = false;
275
- // e.stopImmediatePropagation();
276
- // triggerInlineForm(elem[0], 'input');
277
- // triggerInlineForm(elem[0], 'change');
278
- // },
279
- // data = configureDatePicker(elem, datePicker, datePickerChange, date)
280
- // ;
281
- //
282
- //
283
- // $('input.input-datetime-local-time', date).bind('change', function(e){
284
- // var timeVal = $.prop(this, 'value');
285
- // var val = ['', ''];
286
- // if(timeVal){
287
- // val = elem.prop('value').split('T');
288
- // if((val.length < 2 || !val[0])){
289
- // val[0] = $.datepicker.formatDate('yy-mm-dd', new Date());
290
- // }
291
- // val[1] = timeVal;
292
- //
293
- // if (timeVal) {
294
- // try {
295
- // datePicker.prop('value', $.datepicker.formatDate(datePicker.datepicker('option', 'dateFormat'), $.datepicker.parseDate('yy-mm-dd', val[0])));
296
- // } catch (e) {}
297
- // }
298
- // }
299
- // val = (!val[0] && !val[1]) ? '' : val.join('T');
300
- // replaceInputUI['datetime-local'].blockAttr = true;
301
- // elem.prop('value', val);
302
- // replaceInputUI['datetime-local'].blockAttr = false;
303
- // e.stopImmediatePropagation();
304
- // triggerInlineForm(elem[0], 'input');
305
- // triggerInlineForm(elem[0], 'change');
306
- // });
307
- //
308
- //
309
- //
310
- // date.attr('aria-labelledby', attr.label.attr('id'));
311
- // attr.label.bind('click', function(){
312
- // datePicker.focus();
313
- // return false;
314
- // });
315
- //
316
- // if(attr.css){
317
- // date.css(attr.css);
318
- // if(attr.outerWidth){
319
- // date.outerWidth(attr.outerWidth);
320
- // var width = date.width();
321
- // var widthFac = (data.trigger[0]) ? datetimeFactor.trigger : datetimeFactor.normal;
322
- // datePicker.outerWidth(Math.floor((width * widthFac[0]) - subPixelCorrect), true);
323
- // $('input.input-datetime-local-time', date).outerWidth(Math.floor((width * widthFac[1]) - subPixelCorrect), true);
324
- // if(data.trigger[0]){
325
- // adjustInputWithBtn(datePicker, data.trigger);
326
- // }
327
- // }
328
- // }
329
- //
330
- //
331
- // };
332
- //
333
- // replaceInputUI['datetime-local'].attrs = {
334
- // disabled: function(orig, shim, value){
335
- // $('input.input-datetime-local-date', shim).prop('disabled', !!value);
336
- // $('input.input-datetime-local-time', shim).prop('disabled', !!value);
337
- // },
338
- // step: function(orig, shim, value){
339
- // $('input.input-datetime-local-time', shim).attr('step', value);
340
- // },
341
- // //ToDo: use min also on time
342
- // min: function(orig, shim, value){
343
- // if(value){
344
- // value = (value.split) ? value.split('T') : [];
345
- // try {
346
- // value = $.datepicker.parseDate('yy-mm-dd', value[0]);
347
- // } catch(e){value = false;}
348
- // }
349
- // if(!value){
350
- // value = null;
351
- // }
352
- // $('input.input-datetime-local-date', shim).datepicker('option', 'minDate', value);
353
- //
354
- // },
355
- // //ToDo: use max also on time
356
- // max: function(orig, shim, value){
357
- // if(value){
358
- // value = (value.split) ? value.split('T') : [];
359
- // try {
360
- // value = $.datepicker.parseDate('yy-mm-dd', value[0]);
361
- // } catch(e){value = false;}
362
- // }
363
- // if(!value){
364
- // value = null;
365
- // }
366
- // $('input.input-datetime-local-date', shim).datepicker('option', 'maxDate', value);
367
- // },
368
- // value: function(orig, shim, value){
369
- // var dateValue;
370
- // if(value){
371
- // value = (value.split) ? value.split('T') : [];
372
- // try {
373
- // dateValue = $.datepicker.parseDate('yy-mm-dd', value[0]);
374
- // } catch(e){dateValue = false;}
375
- // }
376
- // if(dateValue){
377
- // if(!replaceInputUI['datetime-local'].blockAttr){
378
- // lazySetDate($('input.input-datetime-local-date', shim), dateValue);
379
- // }
380
- // $('input.input-datetime-local-time', shim).prop('value', value[1] || '00:00');
381
- // } else {
382
- // $('input.input-datetime-local-date', shim).prop('value', value[0] || '');
383
- // $('input.input-datetime-local-time', shim).prop('value', value[1] || '');
384
- // }
385
- //
386
- //
387
- // }
388
- // };
389
-
390
-
391
- replaceInputUI.date = function(elem){
392
-
393
- if(!$.fn.datepicker){return;}
394
- var date = $('<input class="input-date" type="text" />'),
395
-
396
- change = function(e){
397
-
398
- replaceInputUI.date.blockAttr = true;
399
- var value;
400
- if(options.lazyDate){
401
- var timer = $.data(date[0], 'setDateLazyTimer');
402
- if(timer){
403
- clearTimeout(timer);
404
- $.removeData(date[0], 'setDateLazyTimer');
405
- }
406
- }
407
- try {
408
- value = $.datepicker.parseDate(date.datepicker('option', 'dateFormat'), date.prop('value') );
409
- value = (value) ? $.datepicker.formatDate( 'yy-mm-dd', value ) : date.prop('value');
410
- } catch(e){
411
- value = date.prop('value');
412
- }
413
- elem.prop('value', value);
414
- replaceInputUI.date.blockAttr = false;
415
- e.stopImmediatePropagation();
416
- triggerInlineForm(elem[0], 'input');
417
- triggerInlineForm(elem[0], 'change');
418
- },
419
- data
420
-
421
- ;
422
-
423
- this.common(elem, date, replaceInputUI.date.attrs);
424
-
425
- data = configureDatePicker(elem, date, change);
426
-
427
- $(elem)
428
- .bind('updateshadowdom', function(){
429
- if (data.trigger[0]) {
430
- elem.css({display: ''});
431
- if(elem[0].offsetWidth || elem[0].offsetHeight){
432
- var attr = getDimensions(elem);
433
- if (attr.css) {
434
- date.css(attr.css);
435
- if (attr.outerWidth) {
436
- date.outerWidth(attr.outerWidth);
437
- }
438
- adjustInputWithBtn(date, data.trigger);
439
- }
440
- }
441
- }
442
- elem.css({display: 'none'});
443
- })
444
- .triggerHandler('updateshadowdom')
445
- ;
446
- if (data.trigger[0]) {
447
- setTimeout(function(){
448
- webshims.ready('WINDOWLOAD', function(){
449
- $(elem).triggerHandler('updateshadowdom');
450
- });
451
- }, 9);
452
- }
453
-
454
- };
455
-
456
-
457
- replaceInputUI.date.attrs = {
458
- disabled: function(orig, shim, value){
459
- $.prop(shim, 'disabled', !!value);
460
- },
461
- min: function(orig, shim, value){
462
- try {
463
- value = $.datepicker.parseDate('yy-mm-dd', value);
464
- } catch(e){value = false;}
465
- if(value){
466
- $(shim).datepicker('option', 'minDate', value);
467
- }
468
- },
469
- max: function(orig, shim, value){
470
- try {
471
- value = $.datepicker.parseDate('yy-mm-dd', value);
472
- } catch(e){value = false;}
473
- if(value){
474
- $(shim).datepicker('option', 'maxDate', value);
475
- }
476
- },
477
- 'data-placeholder': function(orig, shim, value){
478
- var hintValue = (value || '').split('-');
479
- var dateFormat;
480
- if(hintValue.length == 3){
481
- value = $(shim).datepicker('option','dateFormat').replace('yy', hintValue[0]).replace('mm', hintValue[1]).replace('dd', hintValue[2]);
482
- }
483
- $.prop(shim, 'placeholder', value);
484
- },
485
- value: function(orig, shim, value){
486
- if(!replaceInputUI.date.blockAttr){
487
- try {
488
- var dateValue = $.datepicker.parseDate('yy-mm-dd', value);
489
- } catch(e){var dateValue = false;}
490
-
491
- if(dateValue){
492
- lazySetDate($(shim), dateValue);
493
- } else {
494
- $.prop(shim, 'value', value);
495
- }
496
- }
497
- }
498
- };
499
- }
500
- if (!modernizrInputTypes.range || options.replaceUI) {
501
- replaceInputUI.range = function(elem){
502
- if(!$.fn.slider){return;}
503
- var range = $('<span class="input-range"><span class="ui-slider-handle" role="slider" tabindex="0" /></span>'),
504
- change = function(e, ui){
505
- if(e.originalEvent){
506
- replaceInputUI.range.blockAttr = true;
507
- elem.prop('value', ui.value);
508
- replaceInputUI.range.blockAttr = false;
509
- triggerInlineForm(elem[0], 'input');
510
- triggerInlineForm(elem[0], 'change');
511
- }
512
- }
513
- ;
514
-
515
- this.common(elem, range, replaceInputUI.range.attrs);
516
-
517
-
518
- elem
519
- .bind('updateshadowdom', function(){
520
- elem.css({display: ''});
521
- if (elem[0].offsetWidth || elem[0].offsetHeight) {
522
- var attr = getDimensions(elem);
523
- if (attr.css) {
524
- range.css(attr.css);
525
- if (attr.outerWidth) {
526
- range.outerWidth(attr.outerWidth);
527
- }
528
- }
529
- }
530
- elem.css({display: 'none'});
531
- })
532
- .triggerHandler('updateshadowdom')
533
- ;
534
-
535
-
536
- range.slider($.extend(true, {}, options.slider, elem.data('slider'))).bind('slide', change);
537
-
538
- ['disabled', 'min', 'max', 'step', 'value'].forEach(function(name){
539
- var val = elem.prop(name);
540
- var shadow;
541
- if(name == 'value' && !val){
542
-
543
- shadow = elem.getShadowElement();
544
- if(shadow){
545
- val = ($(shadow).slider('option', 'max') - $(shadow).slider('option', 'min')) / 2;
546
- }
547
- }
548
- if(val != null){
549
- elem.prop(name, val);
550
- }
551
- });
552
- };
553
-
554
- replaceInputUI.range.attrs = {
555
- disabled: function(orig, shim, value){
556
- value = !!value;
557
- $(shim).slider( "option", "disabled", value );
558
- $('span', shim)
559
- .attr({
560
- 'aria-disabled': value+'',
561
- 'tabindex': (value) ? '-1' : '0'
562
- })
563
- ;
564
- },
565
- min: function(orig, shim, value){
566
- value = (value) ? value * 1 || 0 : 0;
567
- $(shim).slider( "option", "min", value );
568
- $('span', shim).attr({'aria-valuemin': value});
569
- },
570
- max: function(orig, shim, value){
571
- value = (value || value === 0) ? value * 1 || 100 : 100;
572
- $(shim).slider( "option", "max", value );
573
- $('span', shim).attr({'aria-valuemax': value});
574
- },
575
- value: function(orig, shim, value){
576
- value = $(orig).prop('valueAsNumber');
577
- if(!isNaN(value)){
578
- if(!replaceInputUI.range.blockAttr){
579
- $(shim).slider( "option", "value", value );
580
- }
581
- $('span', shim).attr({'aria-valuenow': value, 'aria-valuetext': value});
582
- }
583
- },
584
- step: function(orig, shim, value){
585
- value = (value && $.trim(value)) ? value * 1 || 1 : 1;
586
- $(shim).slider( "option", "step", value );
587
- }
588
- };
589
- }
590
-
591
- if(!webshims.bugs.valueAsNumberSet && (options.replaceUI || !Modernizr.inputtypes.date /*|| !Modernizr.inputtypes["datetime-local"]*/ || !Modernizr.inputtypes.range)){
592
- var reflectFn = function(val){
593
- if(webshims.data(this, 'hasShadow')){
594
- $.prop(this, 'value', $.prop(this, 'value'));
595
- }
596
- };
597
-
598
- webshims.onNodeNamesPropertyModify('input', 'valueAsNumber', reflectFn);
599
- webshims.onNodeNamesPropertyModify('input', 'valueAsDate', reflectFn);
600
- }
601
-
602
- $.each(['disabled', 'min', 'max', 'value', 'step', 'data-placeholder'], function(i, attr){
603
- webshims.onNodeNamesPropertyModify('input', attr, function(val){
604
- var shadowData = webshims.data(this, 'shadowData');
605
- if(shadowData && shadowData.data && shadowData.data[attr] && shadowData.nativeElement === this){
606
- shadowData.data[attr](this, shadowData.shadowElement, val);
607
- }
608
- }
609
- );
610
- });
611
- if(!options.availabeLangs){
612
- 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(' ');
613
- }
614
-
615
- var getDefaults = function(){
616
- if(!$.datepicker){return;}
617
-
618
- webshims.activeLang({
619
- langObj: $.datepicker.regional,
620
- module: 'form-number-date-ui',
621
- callback: function(langObj){
622
- var datepickerCFG = $.extend({}, defaultDatepicker, langObj, options.datepicker);
623
-
624
-
625
- if(datepickerCFG.dateFormat && options.datepicker.dateFormat != datepickerCFG.dateFormat ){
626
- $('input.hasDatepicker')
627
- .filter('.input-date, .input-datetime-local-date')
628
- .datepicker('option', 'dateFormat', datepickerCFG.dateFormat)
629
- .getNativeElement()
630
- .filter('[data-placeholder]')
631
- .attr('data-placeholder', function(i, val){
632
- return val;
633
- })
634
- ;
635
- }
636
- $.datepicker.setDefaults(datepickerCFG);
637
- }
638
- });
639
- $(document).unbind('jquery-uiReady.langchange input-widgetsReady.langchange');
640
- };
641
-
642
- $(document).bind('jquery-uiReady.langchange input-widgetsReady.langchange', getDefaults);
643
- getDefaults();
644
-
645
- //implement set/arrow controls
646
- (function(){
647
- var supportsType = (function(){
648
- var types = {};
649
- return function(type){
650
- if(type in types){
651
- return types[type];
652
- }
653
- return (types[type] = ($('<input type="'+type+'" />')[0].type === type));
654
- };
655
- })();
656
-
657
- if(supportsType('number')/* && supportsType('time')*/){return;}
658
- var doc = document;
659
- var options = webshims.cfg["forms-ext"];
660
- var typeModels = webshims.inputTypes;
661
-
662
- var getNextStep = function(input, upDown, cache){
663
-
664
- cache = cache || {};
665
-
666
- if( !('type' in cache) ){
667
- cache.type = $.prop(input, 'type');
668
- }
669
- if( !('step' in cache) ){
670
- cache.step = webshims.getStep(input, cache.type);
671
- }
672
- if( !('valueAsNumber' in cache) ){
673
- cache.valueAsNumber = typeModels[cache.type].asNumber($.prop(input, 'value'));
674
- }
675
- var delta = (cache.step == 'any') ? typeModels[cache.type].step * typeModels[cache.type].stepScaleFactor : cache.step,
676
- ret
677
- ;
678
- webshims.addMinMaxNumberToCache('min', $(input), cache);
679
- webshims.addMinMaxNumberToCache('max', $(input), cache);
680
-
681
- if(isNaN(cache.valueAsNumber)){
682
- cache.valueAsNumber = typeModels[cache.type].stepBase || 0;
683
- }
684
- //make a valid step
685
- if(cache.step !== 'any'){
686
- ret = Math.round( ((cache.valueAsNumber - (cache.minAsnumber || 0)) % cache.step) * 1e7 ) / 1e7;
687
- if(ret && Math.abs(ret) != cache.step){
688
- cache.valueAsNumber = cache.valueAsNumber - ret;
689
- }
690
- }
691
- ret = cache.valueAsNumber + (delta * upDown);
692
- //using NUMBER.MIN/MAX is really stupid | ToDo: either use disabled state or make this more usable
693
- if(!isNaN(cache.minAsNumber) && ret < cache.minAsNumber){
694
- ret = (cache.valueAsNumber * upDown < cache.minAsNumber) ? cache.minAsNumber : isNaN(cache.maxAsNumber) ? cache.valueAsNumber : cache.maxAsNumber;
695
- } else if(!isNaN(cache.maxAsNumber) && ret > cache.maxAsNumber){
696
- ret = (cache.valueAsNumber * upDown > cache.maxAsNumber) ? cache.maxAsNumber : isNaN(cache.minAsNumber) ? cache.valueAsNumber : cache.minAsNumber;
697
- } else {
698
- ret = Math.round( ret * 1e7) / 1e7;
699
- }
700
- return ret;
701
- };
702
-
703
- webshims.modules["form-number-date-ui"].getNextStep = getNextStep;
704
-
705
- var doSteps = function(input, type, control){
706
- if(input.disabled || input.readOnly || $(control).hasClass('step-controls')){return;}
707
- $.prop(input, 'value', typeModels[type].numberToString(getNextStep(input, ($(control).hasClass('step-up')) ? 1 : -1, {type: type})));
708
- $(input).unbind('blur.stepeventshim');
709
- triggerInlineForm(input, 'input');
710
-
711
-
712
- if( doc.activeElement ){
713
- if(doc.activeElement !== input){
714
- try {input.focus();} catch(e){}
715
- }
716
- setTimeout(function(){
717
- if(doc.activeElement !== input){
718
- try {input.focus();} catch(e){}
719
- }
720
- $(input)
721
- .one('blur.stepeventshim', function(){
722
- triggerInlineForm(input, 'change');
723
- })
724
- ;
725
- }, 0);
726
-
727
- }
728
- };
729
-
730
-
731
- if(options.stepArrows){
732
- var stepDisableEnable = {
733
- // don't change getter
734
- set: function(value){
735
- var stepcontrols = webshims.data(this, 'step-controls');
736
- if(stepcontrols){
737
- stepcontrols[ (this.disabled || this.readonly) ? 'addClass' : 'removeClass' ]('disabled-step-control');
738
- }
739
- }
740
- };
741
- webshims.onNodeNamesPropertyModify('input', 'disabled', stepDisableEnable);
742
- webshims.onNodeNamesPropertyModify('input', 'readonly', $.extend({}, stepDisableEnable));
743
- }
744
- var stepKeys = {
745
- 38: 1,
746
- 40: -1
747
- };
748
- webshims.addReady(function(context, contextElem){
749
- //ui for numeric values
750
- if(options.stepArrows){
751
- $('input', context).add(contextElem.filter('input')).each(function(){
752
- var type = $.prop(this, 'type');
753
- if(!typeModels[type] || !typeModels[type].asNumber || !options.stepArrows || (options.stepArrows !== true && !options.stepArrows[type]) || supportsType(type) || $(elem).hasClass('has-step-controls')){return;}
754
- var elem = this;
755
- var controls = $('<span class="step-controls" unselectable="on"><span class="step-up" /><span class="step-down" /></span>')
756
- .insertAfter(elem)
757
- .bind('selectstart dragstart', function(){return false;})
758
- .bind('mousedown mousepress', function(e){
759
- doSteps(elem, type, e.target);
760
- return false;
761
- })
762
- .bind('mousepressstart mousepressend', function(e){
763
- $(e.target)[e.type == 'mousepressstart' ? 'addClass' : 'removeClass']('mousepress-ui');
764
- })
765
- ;
766
- var mwheelUpDown = function(e, d){
767
- if(elem.disabled || elem.readOnly || !d){return;}
768
- $.prop(elem, 'value', typeModels[type].numberToString(getNextStep(elem, d, {type: type})));
769
- triggerInlineForm(elem, 'input');
770
- return false;
771
- };
772
- var jElm = $(elem)
773
- .addClass('has-step-controls')
774
- .attr({
775
- readonly: elem.readOnly,
776
- disabled: elem.disabled,
777
- autocomplete: 'off',
778
- role: 'spinbutton'
779
- })
780
- .bind(($.browser.msie) ? 'keydown' : 'keypress', function(e){
781
- if(elem.disabled || elem.readOnly || !stepKeys[e.keyCode]){return;}
782
- $.prop(elem, 'value', typeModels[type].numberToString(getNextStep(elem, stepKeys[e.keyCode], {type: type})));
783
- triggerInlineForm(elem, 'input');
784
- return false;
785
- })
786
- ;
787
- if(type == 'number'){
788
- jElm.bind('keypress', (function(){
789
- var chars = '0123456789.';
790
- return function(event){
791
- var chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
792
- return event.ctrlKey || event.metaKey || (chr < ' ' || chars.indexOf(chr) > -1);
793
- };
794
- })());
795
- }
796
- if($.fn.mwheelIntent){
797
- jElm.add(controls).bind('mwheelIntent', mwheelUpDown);
798
- } else if($.fn.mousewheel) {
799
- jElm
800
- .bind('focus', function(){
801
- jElm.add(controls).unbind('.mwhellwebshims')
802
- .bind('mousewheel.mwhellwebshims', mwheelUpDown)
803
- ;
804
- })
805
- .bind('blur', function(){
806
- $(elem).add(controls).unbind('.mwhellwebshims');
807
- })
808
- ;
809
- }
810
- webshims.data(elem, 'step-controls', controls);
811
- if(options.calculateWidth){
812
- var init;
813
- jElm
814
- .bind('updateshadowdom', function(){
815
- if(!init && (elem.offsetWidth || elem.offsetHeight)){
816
- init = true;
817
- adjustInputWithBtn(jElm, controls);
818
- controls.css('marginTop', (jElm.outerHeight() - controls.outerHeight()) / 2);
819
- }
820
- })
821
- .triggerHandler('updateshadowdom')
822
- ;
823
- }
824
- });
825
- }
826
- });
827
- })();
828
-
829
-
830
- webshims.addReady(function(context, elem){
831
- $(document).bind('jquery-uiReady.initinputui input-widgetsReady.initinputui', function(e){
832
- if($.datepicker || $.fn.slider){
833
- if($.datepicker && !defaultDatepicker.dateFormat){
834
- defaultDatepicker.dateFormat = $.datepicker._defaults.dateFormat;
835
- }
836
- replaceInputUI(context, elem);
837
- }
838
- if($.datepicker && $.fn.slider){
839
- $(document).unbind('.initinputui');
840
- } else if(!webshims.modules["input-widgets"].src){
841
- webshims.warn('jQuery UI Widget factory is already included, but not datepicker or slider. configure src of $.webshims.modules["input-widgets"].src');
842
- }
843
- });
844
- });
845
-
846
- });
847
-
1
+ /* number-date-ui */
2
+ /* https://github.com/aFarkas/webshim/issues#issue/23 */
3
+ jQuery.webshims.register('form-number-date-ui', function($, webshims, window, document, undefined, options){
4
+ "use strict";
5
+
6
+ var triggerInlineForm = webshims.triggerInlineForm;
7
+ var modernizrInputTypes = Modernizr.inputtypes;
8
+ var adjustInputWithBtn = (function(){
9
+ var fns = {"padding-box": "innerWidth", "border-box": "outerWidth", "content-box": "width"};
10
+ var boxSizing = Modernizr.prefixed && Modernizr.prefixed("boxSizing");
11
+ if($.browser.msie && webshims.browserVersion < 8){
12
+ boxSizing = false;
13
+ }
14
+ var getWidth = function(input){
15
+ var widthFn = "width";
16
+ if(boxSizing){
17
+ widthFn = fns[input.css(boxSizing)] || widthFn;
18
+ }
19
+
20
+ return {
21
+ w: input[widthFn](),
22
+ add: widthFn == "width"
23
+ };
24
+
25
+ };
26
+
27
+
28
+ return function(input, button){
29
+ var inputDim = getWidth(input);
30
+ if(!inputDim.w){return;}
31
+ var controlDim = {
32
+ mL: (parseInt(button.css('marginLeft'), 10) || 0),
33
+ w: button.outerWidth()
34
+ };
35
+ inputDim.mR = (parseInt(input.css('marginRight'), 10) || 0);
36
+ if(inputDim.mR){
37
+ input.css('marginRight', 0);
38
+ }
39
+ //is inside
40
+ if( controlDim.mL <= (controlDim.w * -1) ){
41
+ button.css('marginRight', Math.floor(Math.abs(controlDim.w + controlDim.mL - 0.1) + inputDim.mR));
42
+ input.css('paddingRight', (parseInt(input.css('paddingRight'), 10) || 0) + Math.abs(controlDim.mL));
43
+ if(inputDim.add){
44
+ input.css('width', Math.floor(inputDim.w + controlDim.mL));
45
+ }
46
+ } else {
47
+ button.css('marginRight', inputDim.mR);
48
+ input.css('width', Math.floor(inputDim.w - controlDim.mL - controlDim.w - 0.2));
49
+ }
50
+ };
51
+ })();
52
+
53
+
54
+ var defaultDatepicker = {};
55
+ var labelID = 0;
56
+ var emptyJ = $([]);
57
+ var isCheckValidity;
58
+ var replaceInputUI = function(context, elem){
59
+ $('input', context).add(elem.filter('input')).each(function(){
60
+ var type = $.prop(this, 'type');
61
+ if(replaceInputUI[type] && !webshims.data(this, 'shadowData')){
62
+ replaceInputUI[type]($(this));
63
+ }
64
+ });
65
+ };
66
+ //set date is extremly slow in IE so we do it lazy
67
+ var lazySetDate = function(elem, date){
68
+ if(!options.lazyDate){
69
+ elem.datepicker('setDate', date);
70
+ return;
71
+ }
72
+ var timer = $.data(elem[0], 'setDateLazyTimer');
73
+ if(timer){
74
+ clearTimeout(timer);
75
+ }
76
+ $.data(elem[0], 'setDateLazyTimer', setTimeout(function(){
77
+ elem.datepicker('setDate', date);
78
+ $.removeData(elem[0], 'setDateLazyTimer');
79
+ elem = null;
80
+ }, 0));
81
+ };
82
+
83
+
84
+ var copyAttrs = {
85
+ tabindex: 1,
86
+ tabIndex: 1,
87
+ title: 1,
88
+ "aria-required": 1,
89
+ "aria-invalid": 1
90
+ };
91
+ if(!options.copyAttrs){
92
+ options.copyAttrs = {};
93
+ }
94
+
95
+ webshims.extendUNDEFProp(options.copyAttrs, copyAttrs);
96
+
97
+ var getDimensions = function(orig){
98
+ return (options.calculateWidth) ?
99
+ {
100
+ css: {
101
+ marginRight: orig.css('marginRight'),
102
+ marginLeft: orig.css('marginLeft')
103
+ },
104
+ outerWidth: orig.outerWidth()
105
+
106
+ } :
107
+ {}
108
+ ;
109
+ };
110
+ var focusAttrs = copyAttrs;
111
+
112
+ replaceInputUI.common = function(orig, shim, methods){
113
+ if(Modernizr.formvalidation){
114
+ orig.bind('firstinvalid', function(e){
115
+ if(!webshims.fromSubmit && isCheckValidity){return;}
116
+ orig.unbind('invalid.replacedwidgetbubble').bind('invalid.replacedwidgetbubble', function(evt){
117
+ if(!e.isInvalidUIPrevented() && !evt.isDefaultPrevented()){
118
+ webshims.validityAlert.showFor( e.target );
119
+ e.preventDefault();
120
+ evt.preventDefault();
121
+ }
122
+ orig.unbind('invalid.replacedwidgetbubble');
123
+ });
124
+ });
125
+ }
126
+ var i, prop;
127
+ var focusElement = $('input, span.ui-slider-handle', shim);
128
+ var attrs = orig[0].attributes;
129
+ for(i in options.copyAttrs){
130
+ if ((prop = attrs[i]) && prop.specified) {
131
+ if(focusAttrs[i] && focusElement[0]){
132
+ focusElement.attr(i, prop.nodeValue);
133
+ } else {
134
+ shim[0].setAttribute(i, prop.nodeValue);
135
+ }
136
+ }
137
+ }
138
+
139
+ var id = orig.attr('id'),
140
+ label = (id) ? $('label[for="'+ id +'"]', orig[0].form) : emptyJ
141
+ ;
142
+
143
+
144
+
145
+ shim.addClass(orig[0].className);
146
+ webshims.addShadowDom(orig, shim, {
147
+ data: methods || {},
148
+ shadowFocusElement: $('input.input-datetime-local-date, span.ui-slider-handle', shim)[0],
149
+ shadowChilds: focusElement
150
+ });
151
+
152
+ orig.after(shim);
153
+
154
+ if(orig[0].form){
155
+ $(orig[0].form).bind('reset', function(e){
156
+ if(e.originalEvent && !e.isDefaultPrevented()){
157
+ setTimeout(function(){orig.prop( 'value', orig.prop('value') );}, 0);
158
+ }
159
+ });
160
+ }
161
+
162
+ if(label[0]){
163
+ shim.getShadowFocusElement().attr('aria-labelledby', webshims.getID(label));
164
+ label.bind('click', function(){
165
+ orig.getShadowFocusElement().focus();
166
+ return false;
167
+ });
168
+ }
169
+ };
170
+
171
+ if(Modernizr.formvalidation){
172
+ ['input', 'form'].forEach(function(name){
173
+ var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
174
+ prop: {
175
+ value: function(){
176
+ isCheckValidity = true;
177
+ var ret = desc.prop._supvalue.apply(this, arguments);
178
+ isCheckValidity = false;
179
+ return ret;
180
+ }
181
+ }
182
+ });
183
+ });
184
+ }
185
+ //date and datetime-local implement if we have to replace
186
+ if(!modernizrInputTypes['date'] /*||!modernizrInputTypes['datetime-local']*/ || options.replaceUI){
187
+
188
+ var datetimeFactor = {
189
+ trigger: [0.595,0.395],
190
+ normal: [0.565,0.425]
191
+ };
192
+ var subPixelCorrect = (!$.browser.msie || webshims.browserVersion > 6) ? 0 : 0.45;
193
+
194
+ var configureDatePicker = function(elem, datePicker, change, _wrapper){
195
+ var stopFocusout;
196
+ var focusedOut;
197
+ var resetFocusHandler = function(){
198
+ data.dpDiv.unbind('mousedown.webshimsmousedownhandler');
199
+ stopFocusout = false;
200
+ focusedOut = false;
201
+ };
202
+ var data = datePicker
203
+ .bind('focusin', function(){
204
+ resetFocusHandler();
205
+ data.dpDiv.unbind('mousedown.webshimsmousedownhandler').bind('mousedown.webshimsmousedownhandler', function(){
206
+ stopFocusout = true;
207
+ });
208
+ })
209
+ .bind('focusout blur', function(e){
210
+ if(stopFocusout){
211
+ focusedOut = true;
212
+ e.stopImmediatePropagation();
213
+ }
214
+ })
215
+ .datepicker($.extend({
216
+ onClose: function(){
217
+ if(focusedOut && datePicker.not(':focus')){
218
+ resetFocusHandler();
219
+ datePicker.trigger('focusout');
220
+ datePicker.triggerHandler('blur');
221
+ } else {
222
+ resetFocusHandler();
223
+ }
224
+ }
225
+ }, defaultDatepicker, options.datepicker, elem.data('datepicker')))
226
+ .bind('change', change)
227
+ .data('datepicker')
228
+ ;
229
+ data.dpDiv.addClass('input-date-datepicker-control');
230
+
231
+ if(_wrapper){
232
+ webshims.triggerDomUpdate(_wrapper[0]);
233
+ }
234
+ ['disabled', 'min', 'max', 'value', 'step', 'data-placeholder'].forEach(function(name){
235
+ var fn = 'data-placeholder' ? 'attr' : 'prop';
236
+ var val = elem[fn](name);
237
+ if(val){
238
+ elem[fn](name, val);
239
+ }
240
+ });
241
+
242
+ return data;
243
+ };
244
+
245
+ // replaceInputUI['datetime-local'] = function(elem){
246
+ // if(!$.fn.datepicker){return;}
247
+ //
248
+ // 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>'),
249
+ // attr = this.common(elem, date, replaceInputUI['datetime-local'].attrs),
250
+ // datePicker = $('input.input-datetime-local-date', date),
251
+ // datePickerChange = function(e){
252
+ //
253
+ // var value = datePicker.prop('value') || '',
254
+ // timeVal = ''
255
+ // ;
256
+ // if(options.lazyDate){
257
+ // var timer = $.data(datePicker[0], 'setDateLazyTimer');
258
+ // if(timer){
259
+ // clearTimeout(timer);
260
+ // $.removeData(datePicker[0], 'setDateLazyTimer');
261
+ // }
262
+ // }
263
+ //
264
+ // if(value){
265
+ // timeVal = $('input.input-datetime-local-time', date).prop('value') || '00:00';
266
+ // try {
267
+ // value = $.datepicker.parseDate(datePicker.datepicker('option', 'dateFormat'), value);
268
+ // value = (value) ? $.datepicker.formatDate('yy-mm-dd', value) : datePicker.prop('value');
269
+ // } catch (e) {value = datePicker.prop('value');}
270
+ // }
271
+ // value = (!value && !timeVal) ? '' : value + 'T' + timeVal;
272
+ // replaceInputUI['datetime-local'].blockAttr = true;
273
+ // elem.prop('value', value);
274
+ // replaceInputUI['datetime-local'].blockAttr = false;
275
+ // e.stopImmediatePropagation();
276
+ // triggerInlineForm(elem[0], 'input');
277
+ // triggerInlineForm(elem[0], 'change');
278
+ // },
279
+ // data = configureDatePicker(elem, datePicker, datePickerChange, date)
280
+ // ;
281
+ //
282
+ //
283
+ // $('input.input-datetime-local-time', date).bind('change', function(e){
284
+ // var timeVal = $.prop(this, 'value');
285
+ // var val = ['', ''];
286
+ // if(timeVal){
287
+ // val = elem.prop('value').split('T');
288
+ // if((val.length < 2 || !val[0])){
289
+ // val[0] = $.datepicker.formatDate('yy-mm-dd', new Date());
290
+ // }
291
+ // val[1] = timeVal;
292
+ //
293
+ // if (timeVal) {
294
+ // try {
295
+ // datePicker.prop('value', $.datepicker.formatDate(datePicker.datepicker('option', 'dateFormat'), $.datepicker.parseDate('yy-mm-dd', val[0])));
296
+ // } catch (e) {}
297
+ // }
298
+ // }
299
+ // val = (!val[0] && !val[1]) ? '' : val.join('T');
300
+ // replaceInputUI['datetime-local'].blockAttr = true;
301
+ // elem.prop('value', val);
302
+ // replaceInputUI['datetime-local'].blockAttr = false;
303
+ // e.stopImmediatePropagation();
304
+ // triggerInlineForm(elem[0], 'input');
305
+ // triggerInlineForm(elem[0], 'change');
306
+ // });
307
+ //
308
+ //
309
+ //
310
+ // date.attr('aria-labelledby', attr.label.attr('id'));
311
+ // attr.label.bind('click', function(){
312
+ // datePicker.focus();
313
+ // return false;
314
+ // });
315
+ //
316
+ // if(attr.css){
317
+ // date.css(attr.css);
318
+ // if(attr.outerWidth){
319
+ // date.outerWidth(attr.outerWidth);
320
+ // var width = date.width();
321
+ // var widthFac = (data.trigger[0]) ? datetimeFactor.trigger : datetimeFactor.normal;
322
+ // datePicker.outerWidth(Math.floor((width * widthFac[0]) - subPixelCorrect), true);
323
+ // $('input.input-datetime-local-time', date).outerWidth(Math.floor((width * widthFac[1]) - subPixelCorrect), true);
324
+ // if(data.trigger[0]){
325
+ // adjustInputWithBtn(datePicker, data.trigger);
326
+ // }
327
+ // }
328
+ // }
329
+ //
330
+ //
331
+ // };
332
+ //
333
+ // replaceInputUI['datetime-local'].attrs = {
334
+ // disabled: function(orig, shim, value){
335
+ // $('input.input-datetime-local-date', shim).prop('disabled', !!value);
336
+ // $('input.input-datetime-local-time', shim).prop('disabled', !!value);
337
+ // },
338
+ // step: function(orig, shim, value){
339
+ // $('input.input-datetime-local-time', shim).attr('step', value);
340
+ // },
341
+ // //ToDo: use min also on time
342
+ // min: function(orig, shim, value){
343
+ // if(value){
344
+ // value = (value.split) ? value.split('T') : [];
345
+ // try {
346
+ // value = $.datepicker.parseDate('yy-mm-dd', value[0]);
347
+ // } catch(e){value = false;}
348
+ // }
349
+ // if(!value){
350
+ // value = null;
351
+ // }
352
+ // $('input.input-datetime-local-date', shim).datepicker('option', 'minDate', value);
353
+ //
354
+ // },
355
+ // //ToDo: use max also on time
356
+ // max: function(orig, shim, value){
357
+ // if(value){
358
+ // value = (value.split) ? value.split('T') : [];
359
+ // try {
360
+ // value = $.datepicker.parseDate('yy-mm-dd', value[0]);
361
+ // } catch(e){value = false;}
362
+ // }
363
+ // if(!value){
364
+ // value = null;
365
+ // }
366
+ // $('input.input-datetime-local-date', shim).datepicker('option', 'maxDate', value);
367
+ // },
368
+ // value: function(orig, shim, value){
369
+ // var dateValue;
370
+ // if(value){
371
+ // value = (value.split) ? value.split('T') : [];
372
+ // try {
373
+ // dateValue = $.datepicker.parseDate('yy-mm-dd', value[0]);
374
+ // } catch(e){dateValue = false;}
375
+ // }
376
+ // if(dateValue){
377
+ // if(!replaceInputUI['datetime-local'].blockAttr){
378
+ // lazySetDate($('input.input-datetime-local-date', shim), dateValue);
379
+ // }
380
+ // $('input.input-datetime-local-time', shim).prop('value', value[1] || '00:00');
381
+ // } else {
382
+ // $('input.input-datetime-local-date', shim).prop('value', value[0] || '');
383
+ // $('input.input-datetime-local-time', shim).prop('value', value[1] || '');
384
+ // }
385
+ //
386
+ //
387
+ // }
388
+ // };
389
+
390
+
391
+ replaceInputUI.date = function(elem){
392
+
393
+ if(!$.fn.datepicker){return;}
394
+ var date = $('<input class="input-date" type="text" />'),
395
+
396
+ change = function(e){
397
+
398
+ replaceInputUI.date.blockAttr = true;
399
+ var value;
400
+ if(options.lazyDate){
401
+ var timer = $.data(date[0], 'setDateLazyTimer');
402
+ if(timer){
403
+ clearTimeout(timer);
404
+ $.removeData(date[0], 'setDateLazyTimer');
405
+ }
406
+ }
407
+ try {
408
+ value = $.datepicker.parseDate(date.datepicker('option', 'dateFormat'), date.prop('value') );
409
+ value = (value) ? $.datepicker.formatDate( 'yy-mm-dd', value ) : date.prop('value');
410
+ } catch(e){
411
+ value = date.prop('value');
412
+ }
413
+ elem.prop('value', value);
414
+ replaceInputUI.date.blockAttr = false;
415
+ e.stopImmediatePropagation();
416
+ triggerInlineForm(elem[0], 'input');
417
+ triggerInlineForm(elem[0], 'change');
418
+ },
419
+ data
420
+
421
+ ;
422
+
423
+ this.common(elem, date, replaceInputUI.date.attrs);
424
+
425
+ data = configureDatePicker(elem, date, change);
426
+
427
+ $(elem)
428
+ .bind('updateshadowdom', function(){
429
+ if (data.trigger[0]) {
430
+ elem.css({display: ''});
431
+ if(elem[0].offsetWidth || elem[0].offsetHeight){
432
+ var attr = getDimensions(elem);
433
+ if (attr.css) {
434
+ date.css(attr.css);
435
+ if (attr.outerWidth) {
436
+ date.outerWidth(attr.outerWidth);
437
+ }
438
+ adjustInputWithBtn(date, data.trigger);
439
+ }
440
+ }
441
+ }
442
+ elem.css({display: 'none'});
443
+ })
444
+ .triggerHandler('updateshadowdom')
445
+ ;
446
+ if (data.trigger[0]) {
447
+ setTimeout(function(){
448
+ webshims.ready('WINDOWLOAD', function(){
449
+ $(elem).triggerHandler('updateshadowdom');
450
+ });
451
+ }, 9);
452
+ }
453
+
454
+ };
455
+
456
+
457
+ replaceInputUI.date.attrs = {
458
+ disabled: function(orig, shim, value){
459
+ $.prop(shim, 'disabled', !!value);
460
+ },
461
+ min: function(orig, shim, value){
462
+ try {
463
+ value = $.datepicker.parseDate('yy-mm-dd', value);
464
+ } catch(e){value = false;}
465
+ if(value){
466
+ $(shim).datepicker('option', 'minDate', value);
467
+ }
468
+ },
469
+ max: function(orig, shim, value){
470
+ try {
471
+ value = $.datepicker.parseDate('yy-mm-dd', value);
472
+ } catch(e){value = false;}
473
+ if(value){
474
+ $(shim).datepicker('option', 'maxDate', value);
475
+ }
476
+ },
477
+ 'data-placeholder': function(orig, shim, value){
478
+ var hintValue = (value || '').split('-');
479
+ var dateFormat;
480
+ if(hintValue.length == 3){
481
+ value = $(shim).datepicker('option','dateFormat').replace('yy', hintValue[0]).replace('mm', hintValue[1]).replace('dd', hintValue[2]);
482
+ }
483
+ $.prop(shim, 'placeholder', value);
484
+ },
485
+ value: function(orig, shim, value){
486
+ if(!replaceInputUI.date.blockAttr){
487
+ try {
488
+ var dateValue = $.datepicker.parseDate('yy-mm-dd', value);
489
+ } catch(e){var dateValue = false;}
490
+
491
+ if(dateValue){
492
+ lazySetDate($(shim), dateValue);
493
+ } else {
494
+ $.prop(shim, 'value', value);
495
+ }
496
+ }
497
+ }
498
+ };
499
+ }
500
+ if (!modernizrInputTypes.range || options.replaceUI) {
501
+ replaceInputUI.range = function(elem){
502
+ if(!$.fn.slider){return;}
503
+ var range = $('<span class="input-range"><span class="ui-slider-handle" role="slider" tabindex="0" /></span>'),
504
+ change = function(e, ui){
505
+ if(e.originalEvent){
506
+ replaceInputUI.range.blockAttr = true;
507
+ elem.prop('value', ui.value);
508
+ replaceInputUI.range.blockAttr = false;
509
+ triggerInlineForm(elem[0], 'input');
510
+ }
511
+ }
512
+ ;
513
+
514
+ this.common(elem, range, replaceInputUI.range.attrs);
515
+
516
+
517
+ elem
518
+ .bind('updateshadowdom', function(){
519
+ elem.css({display: ''});
520
+ if (elem[0].offsetWidth || elem[0].offsetHeight) {
521
+ var attr = getDimensions(elem);
522
+ if (attr.css) {
523
+ range.css(attr.css);
524
+ if (attr.outerWidth) {
525
+ range.outerWidth(attr.outerWidth);
526
+ }
527
+ }
528
+ }
529
+ elem.css({display: 'none'});
530
+ })
531
+ .triggerHandler('updateshadowdom')
532
+ ;
533
+
534
+
535
+ range.slider($.extend(true, {}, options.slider, elem.data('slider'))).bind('slide', change).bind('slidechange', function(e){
536
+ if(e.originalEvent){
537
+ triggerInlineForm(elem[0], 'change');
538
+ }
539
+ });
540
+
541
+ ['disabled', 'min', 'max', 'step', 'value'].forEach(function(name){
542
+ var val = elem.prop(name);
543
+ var shadow;
544
+ if(name == 'value' && !val){
545
+
546
+ shadow = elem.getShadowElement();
547
+ if(shadow){
548
+ val = ($(shadow).slider('option', 'max') - $(shadow).slider('option', 'min')) / 2;
549
+ }
550
+ }
551
+ if(val != null){
552
+ elem.prop(name, val);
553
+ }
554
+ });
555
+ };
556
+
557
+ replaceInputUI.range.attrs = {
558
+ disabled: function(orig, shim, value){
559
+ value = !!value;
560
+ $(shim).slider( "option", "disabled", value );
561
+ $('span', shim)
562
+ .attr({
563
+ 'aria-disabled': value+'',
564
+ 'tabindex': (value) ? '-1' : '0'
565
+ })
566
+ ;
567
+ },
568
+ min: function(orig, shim, value){
569
+ value = (value) ? value * 1 || 0 : 0;
570
+ $(shim).slider( "option", "min", value );
571
+ $('span', shim).attr({'aria-valuemin': value});
572
+ },
573
+ max: function(orig, shim, value){
574
+ value = (value || value === 0) ? value * 1 || 100 : 100;
575
+ $(shim).slider( "option", "max", value );
576
+ $('span', shim).attr({'aria-valuemax': value});
577
+ },
578
+ value: function(orig, shim, value){
579
+ value = $(orig).prop('valueAsNumber');
580
+ if(!isNaN(value)){
581
+ if(!replaceInputUI.range.blockAttr){
582
+ $(shim).slider( "option", "value", value );
583
+ }
584
+ $('span', shim).attr({'aria-valuenow': value, 'aria-valuetext': value});
585
+ }
586
+ },
587
+ step: function(orig, shim, value){
588
+ value = (value && $.trim(value)) ? value * 1 || 1 : 1;
589
+ $(shim).slider( "option", "step", value );
590
+ }
591
+ };
592
+ }
593
+
594
+ if(!webshims.bugs.valueAsNumberSet && (options.replaceUI || !Modernizr.inputtypes.date /*|| !Modernizr.inputtypes["datetime-local"]*/ || !Modernizr.inputtypes.range)){
595
+ var reflectFn = function(val){
596
+ if(webshims.data(this, 'hasShadow')){
597
+ $.prop(this, 'value', $.prop(this, 'value'));
598
+ }
599
+ };
600
+
601
+ webshims.onNodeNamesPropertyModify('input', 'valueAsNumber', reflectFn);
602
+ webshims.onNodeNamesPropertyModify('input', 'valueAsDate', reflectFn);
603
+ }
604
+
605
+ $.each(['disabled', 'min', 'max', 'value', 'step', 'data-placeholder'], function(i, attr){
606
+ webshims.onNodeNamesPropertyModify('input', attr, function(val){
607
+ var shadowData = webshims.data(this, 'shadowData');
608
+ if(shadowData && shadowData.data && shadowData.data[attr] && shadowData.nativeElement === this){
609
+ shadowData.data[attr](this, shadowData.shadowElement, val);
610
+ }
611
+ }
612
+ );
613
+ });
614
+ if(!options.availabeLangs){
615
+ 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(' ');
616
+ }
617
+
618
+ var getDefaults = function(){
619
+ if(!$.datepicker){return;}
620
+
621
+ webshims.activeLang({
622
+ langObj: $.datepicker.regional,
623
+ module: 'form-number-date-ui',
624
+ callback: function(langObj){
625
+ var datepickerCFG = $.extend({}, defaultDatepicker, langObj, options.datepicker);
626
+
627
+
628
+ if(datepickerCFG.dateFormat && options.datepicker.dateFormat != datepickerCFG.dateFormat ){
629
+ $('input.hasDatepicker')
630
+ .filter('.input-date, .input-datetime-local-date')
631
+ .datepicker('option', 'dateFormat', datepickerCFG.dateFormat)
632
+ .getNativeElement()
633
+ .filter('[data-placeholder]')
634
+ .attr('data-placeholder', function(i, val){
635
+ return val;
636
+ })
637
+ ;
638
+ }
639
+ $.datepicker.setDefaults(datepickerCFG);
640
+ }
641
+ });
642
+ $(document).unbind('jquery-uiReady.langchange input-widgetsReady.langchange');
643
+ };
644
+
645
+ $(document).bind('jquery-uiReady.langchange input-widgetsReady.langchange', getDefaults);
646
+ getDefaults();
647
+
648
+ //implement set/arrow controls
649
+ (function(){
650
+ var supportsType = (function(){
651
+ var types = {};
652
+ return function(type){
653
+ if(type in types){
654
+ return types[type];
655
+ }
656
+ return (types[type] = ($('<input type="'+type+'" />')[0].type === type));
657
+ };
658
+ })();
659
+
660
+ if(supportsType('number') && supportsType('time')){return;}
661
+ var doc = document;
662
+ var options = webshims.cfg["forms-ext"];
663
+ var typeModels = webshims.inputTypes;
664
+ var allowedChars = {
665
+ number: '0123456789.',
666
+ time: '0123456789:.'
667
+ };
668
+
669
+ var getNextStep = function(input, upDown, cache){
670
+
671
+ cache = cache || {};
672
+
673
+ if( !('type' in cache) ){
674
+ cache.type = $.prop(input, 'type');
675
+ }
676
+ if( !('step' in cache) ){
677
+ cache.step = webshims.getStep(input, cache.type);
678
+ }
679
+ if( !('valueAsNumber' in cache) ){
680
+ cache.valueAsNumber = typeModels[cache.type].asNumber($.prop(input, 'value'));
681
+ }
682
+ var delta = (cache.step == 'any') ? typeModels[cache.type].step * typeModels[cache.type].stepScaleFactor : cache.step,
683
+ ret
684
+ ;
685
+ webshims.addMinMaxNumberToCache('min', $(input), cache);
686
+ webshims.addMinMaxNumberToCache('max', $(input), cache);
687
+
688
+ if(isNaN(cache.valueAsNumber)){
689
+ cache.valueAsNumber = typeModels[cache.type].stepBase || 0;
690
+ }
691
+ //make a valid step
692
+ if(cache.step !== 'any'){
693
+ ret = Math.round( ((cache.valueAsNumber - (cache.minAsnumber || 0)) % cache.step) * 1e7 ) / 1e7;
694
+ if(ret && Math.abs(ret) != cache.step){
695
+ cache.valueAsNumber = cache.valueAsNumber - ret;
696
+ }
697
+ }
698
+ ret = cache.valueAsNumber + (delta * upDown);
699
+ //using NUMBER.MIN/MAX is really stupid | ToDo: either use disabled state or make this more usable
700
+ if(!isNaN(cache.minAsNumber) && ret < cache.minAsNumber){
701
+ ret = (cache.valueAsNumber * upDown < cache.minAsNumber) ? cache.minAsNumber : isNaN(cache.maxAsNumber) ? cache.valueAsNumber : cache.maxAsNumber;
702
+ } else if(!isNaN(cache.maxAsNumber) && ret > cache.maxAsNumber){
703
+ ret = (cache.valueAsNumber * upDown > cache.maxAsNumber) ? cache.maxAsNumber : isNaN(cache.minAsNumber) ? cache.valueAsNumber : cache.minAsNumber;
704
+ } else {
705
+ ret = Math.round( ret * 1e7) / 1e7;
706
+ }
707
+ return ret;
708
+ };
709
+
710
+ webshims.modules["form-number-date-ui"].getNextStep = getNextStep;
711
+
712
+
713
+ if(options.stepArrows){
714
+ var stepDisableEnable = {
715
+ // don't change getter
716
+ set: function(value){
717
+ var stepcontrols = webshims.data(this, 'step-controls');
718
+ if(stepcontrols){
719
+ stepcontrols[ (this.disabled || this.readonly) ? 'addClass' : 'removeClass' ]('disabled-step-control');
720
+ }
721
+ }
722
+ };
723
+ webshims.onNodeNamesPropertyModify('input', 'disabled', stepDisableEnable);
724
+ webshims.onNodeNamesPropertyModify('input', 'readonly', $.extend({}, stepDisableEnable));
725
+ }
726
+ var stepKeys = {
727
+ 38: 1,
728
+ 40: -1
729
+ };
730
+
731
+ var changeInput = function(elem, type){
732
+ var blockBlurChange = false;
733
+ var DELAY = 9;
734
+ var doChangeValue, blockChangeValue;
735
+
736
+ function step(dir){
737
+ if($.prop(elem, 'disabled') || elem.readOnly || !dir){return;}
738
+ doChangeValue = typeModels[type].numberToString(getNextStep(elem, dir, {type: type}));
739
+ $.prop(elem, 'value', doChangeValue);
740
+ triggerInlineForm(elem, 'input');
741
+ }
742
+
743
+ function setFocus(){
744
+ blockBlurChange = true;
745
+ setTimeout(function(){
746
+ blockBlurChange = false;
747
+ }, DELAY + 9);
748
+ setTimeout(function(){
749
+ if(!$(elem).is(':focus')){
750
+ try{
751
+ elem.focus();
752
+ } catch(e){}
753
+ }
754
+ }, 1);
755
+ }
756
+
757
+ function triggerChange(){
758
+ var curValue = $.prop(elem, 'value');
759
+ if(curValue == doChangeValue && curValue != blockChangeValue && typeof curValue == 'string'){
760
+ triggerInlineForm(elem, 'change');
761
+ }
762
+ blockChangeValue = curValue;
763
+ }
764
+
765
+ function init(){
766
+ blockChangeValue = $(elem)
767
+ .bind({
768
+ 'change.stepcontrol focus.stepcontrol': function(e){
769
+ if(!blockBlurChange || e.type != 'focus'){
770
+ blockChangeValue = $.prop(elem, 'value');
771
+ }
772
+ },
773
+ 'blur.stepcontrol': function(){
774
+ if(!blockBlurChange){
775
+ setTimeout(function(){
776
+ if(!blockBlurChange && !$(elem).is(':focus')){
777
+ triggerChange();
778
+ }
779
+ doChangeValue = false;
780
+ }, DELAY);
781
+ }
782
+ }
783
+ })
784
+ .prop('value')
785
+ ;
786
+ }
787
+
788
+ init();
789
+ return {
790
+ triggerChange: triggerChange,
791
+ step: step,
792
+ setFocus: setFocus
793
+ };
794
+ };
795
+
796
+ webshims.addReady(function(context, contextElem){
797
+ //ui for numeric values
798
+ if(options.stepArrows){
799
+ $('input', context).add(contextElem.filter('input')).each(function(){
800
+ var type = $.prop(this, 'type');
801
+ if(!typeModels[type] || !typeModels[type].asNumber || !options.stepArrows || (options.stepArrows !== true && !options.stepArrows[type]) || supportsType(type) || $(elem).hasClass('has-step-controls')){return;}
802
+ var elem = this;
803
+ var uiEvents = changeInput(elem, type);
804
+ var controls = $('<span class="step-controls" unselectable="on"><span class="step-up" /><span class="step-down" /></span>')
805
+ .insertAfter(elem)
806
+ .bind('selectstart dragstart', function(){return false;})
807
+ .bind('mousedown mousepress', function(e){
808
+ if(!$(e.target).hasClass('step-controls')){
809
+ uiEvents.step(($(e.target).hasClass('step-up')) ? 1 : -1);
810
+ }
811
+ uiEvents.setFocus();
812
+ return false;
813
+ })
814
+ .bind('mousepressstart mousepressend', function(e){
815
+ if(e.type == 'mousepressend'){
816
+ uiEvents.triggerChange();
817
+ }
818
+ $(e.target)[e.type == 'mousepressstart' ? 'addClass' : 'removeClass']('mousepress-ui');
819
+ })
820
+ ;
821
+ var mwheelUpDown = function(e, d){
822
+ if(d){
823
+ uiEvents.step(d);
824
+ return false;
825
+ }
826
+ };
827
+
828
+ var jElm = $(elem)
829
+ .addClass('has-step-controls')
830
+ .attr({
831
+ readonly: elem.readOnly,
832
+ disabled: elem.disabled,
833
+ autocomplete: 'off',
834
+ role: 'spinbutton'
835
+ })
836
+ .bind('keyup', function(e){
837
+ var step = stepKeys[e.keyCode];
838
+ if(step){
839
+ uiEvents.triggerChange(step);
840
+ }
841
+ })
842
+ .bind(($.browser.msie) ? 'keydown' : 'keypress', function(e){
843
+ var step = stepKeys[e.keyCode];
844
+ if(step){
845
+ uiEvents.step(step);
846
+ return false;
847
+ }
848
+ })
849
+ ;
850
+
851
+ if(allowedChars[type]){
852
+ jElm.bind('keypress', (function(){
853
+ var chars = allowedChars[type];
854
+ return function(event){
855
+ var chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
856
+ return event.ctrlKey || event.metaKey || (chr < ' ' || chars.indexOf(chr) > -1);
857
+ };
858
+ })());
859
+ }
860
+
861
+ jElm
862
+ .bind('focus', function(){
863
+ jElm.add(controls).unbind('.mwhellwebshims')
864
+ .bind('mousewheel.mwhellwebshims', mwheelUpDown)
865
+ ;
866
+ })
867
+ .bind('blur', function(){
868
+ $(elem).add(controls).unbind('.mwhellwebshims');
869
+ })
870
+ ;
871
+
872
+ webshims.data(elem, 'step-controls', controls);
873
+ if(options.calculateWidth){
874
+ var init;
875
+ jElm
876
+ .bind('updateshadowdom', function(){
877
+ if(!init && (elem.offsetWidth || elem.offsetHeight)){
878
+ init = true;
879
+ adjustInputWithBtn(jElm, controls);
880
+ controls.css('marginTop', (jElm.outerHeight() - controls.outerHeight()) / 2);
881
+ }
882
+ })
883
+ .triggerHandler('updateshadowdom')
884
+ ;
885
+ }
886
+ });
887
+ }
888
+ });
889
+ })();
890
+
891
+
892
+ webshims.addReady(function(context, elem){
893
+ $(document).bind('jquery-uiReady.initinputui input-widgetsReady.initinputui', function(e){
894
+ if($.datepicker || $.fn.slider){
895
+ if($.datepicker && !defaultDatepicker.dateFormat){
896
+ defaultDatepicker.dateFormat = $.datepicker._defaults.dateFormat;
897
+ }
898
+ replaceInputUI(context, elem);
899
+ }
900
+ if($.datepicker && $.fn.slider){
901
+ $(document).unbind('.initinputui');
902
+ } else if(!webshims.modules["input-widgets"].src){
903
+ webshims.warn('jQuery UI Widget factory is already included, but not datepicker or slider. configure src of $.webshims.modules["input-widgets"].src');
904
+ }
905
+ });
906
+ });
907
+
908
+ });
909
+