webshims-rails 1.10.10 → 1.10.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +8 -8
  2. data/MIT_LICENSE.txt +3 -1
  3. data/lib/webshims-rails/version.rb +2 -2
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +8 -9
  5. data/vendor/assets/javascripts/webshims/shims/combos/1.js +91 -58
  6. data/vendor/assets/javascripts/webshims/shims/combos/10.js +247 -101
  7. data/vendor/assets/javascripts/webshims/shims/combos/11.js +241 -96
  8. data/vendor/assets/javascripts/webshims/shims/combos/12.js +79 -58
  9. data/vendor/assets/javascripts/webshims/shims/combos/13.js +79 -12
  10. data/vendor/assets/javascripts/webshims/shims/combos/14.js +6 -5
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +68 -75
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +147 -133
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +288 -143
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +288 -143
  15. data/vendor/assets/javascripts/webshims/shims/combos/19.js +85 -63
  16. data/vendor/assets/javascripts/webshims/shims/combos/2.js +97 -91
  17. data/vendor/assets/javascripts/webshims/shims/combos/20.js +85 -17
  18. data/vendor/assets/javascripts/webshims/shims/combos/21.js +17 -17
  19. data/vendor/assets/javascripts/webshims/shims/combos/23.js +79 -58
  20. data/vendor/assets/javascripts/webshims/shims/combos/24.js +17 -16
  21. data/vendor/assets/javascripts/webshims/shims/combos/25.js +85 -63
  22. data/vendor/assets/javascripts/webshims/shims/combos/26.js +6 -5
  23. data/vendor/assets/javascripts/webshims/shims/combos/27.js +0 -46
  24. data/vendor/assets/javascripts/webshims/shims/combos/28.js +6 -5
  25. data/vendor/assets/javascripts/webshims/shims/combos/29.js +13 -6
  26. data/vendor/assets/javascripts/webshims/shims/combos/3.js +47 -31
  27. data/vendor/assets/javascripts/webshims/shims/combos/30.js +47 -59
  28. data/vendor/assets/javascripts/webshims/shims/combos/31.js +18 -33
  29. data/vendor/assets/javascripts/webshims/shims/combos/4.js +35 -31
  30. data/vendor/assets/javascripts/webshims/shims/combos/5.js +304 -157
  31. data/vendor/assets/javascripts/webshims/shims/combos/6.js +304 -185
  32. data/vendor/assets/javascripts/webshims/shims/combos/7.js +126 -117
  33. data/vendor/assets/javascripts/webshims/shims/combos/8.js +126 -89
  34. data/vendor/assets/javascripts/webshims/shims/combos/9.js +247 -129
  35. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +6 -5
  36. data/vendor/assets/javascripts/webshims/shims/form-core.js +12 -0
  37. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +3 -0
  38. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +0 -28
  39. data/vendor/assets/javascripts/webshims/shims/form-message.js +29 -26
  40. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +16 -14
  41. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +47 -47
  42. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +241 -96
  43. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +21 -16
  44. data/vendor/assets/javascripts/webshims/shims/form-validation.js +17 -16
  45. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +173 -41
  46. data/vendor/assets/javascripts/webshims/shims/geolocation.js +17 -17
  47. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ar.js +35 -33
  48. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ch-ZN.js +32 -30
  49. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.txt +17 -13
  50. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-el.js +32 -30
  51. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.txt +4 -1
  52. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-es.js +30 -28
  53. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fr.js +35 -32
  54. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-he.js +32 -30
  55. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hi.js +32 -30
  56. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hu.js +32 -30
  57. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-it.js +32 -30
  58. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ja.js +32 -30
  59. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +37 -36
  60. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +32 -30
  61. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js +5 -2
  62. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-PT.js +33 -30
  63. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ru.js +3 -1
  64. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-sv.js +32 -30
  65. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +79 -12
  66. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  67. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +126 -121
  68. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +100 -111
  69. data/vendor/assets/javascripts/webshims/shims/swfmini.js +0 -46
  70. data/vendor/assets/javascripts/webshims/shims/track-ui.js +13 -6
  71. data/webshims-rails.gemspec +1 -0
  72. metadata +4 -3
@@ -75,6 +75,7 @@ var validityPrototype = {
75
75
  customError: false,
76
76
 
77
77
  typeMismatch: false,
78
+ badInput: false,
78
79
  rangeUnderflow: false,
79
80
  rangeOverflow: false,
80
81
  stepMismatch: false,
@@ -134,20 +135,6 @@ var validityRules = {
134
135
  tooLong: function(){
135
136
  return false;
136
137
  },
137
- typeMismatch: function (input, val, cache){
138
- if(val === '' || cache.nodeName == 'select'){return false;}
139
- var ret = false;
140
- if(!('type' in cache)){
141
- cache.type = getType(input[0]);
142
- }
143
-
144
- if(typeModels[cache.type] && typeModels[cache.type].mismatch){
145
- ret = typeModels[cache.type].mismatch(val, input);
146
- } else if('validity' in input[0]){
147
- ret = input[0].validity.typeMismatch;
148
- }
149
- return ret;
150
- },
151
138
  patternMismatch: function(input, val, cache) {
152
139
  if(val === '' || cache.nodeName == 'select'){return false;}
153
140
  var pattern = input.attr('pattern');
@@ -164,6 +151,23 @@ var validityRules = {
164
151
  }
165
152
  ;
166
153
 
154
+ $.each({typeMismatch: 'mismatch', badInput: 'bad'}, function(name, fn){
155
+ validityRules[name] = function (input, val, cache){
156
+ if(val === '' || cache.nodeName == 'select'){return false;}
157
+ var ret = false;
158
+ if(!('type' in cache)){
159
+ cache.type = getType(input[0]);
160
+ }
161
+
162
+ if(typeModels[cache.type] && typeModels[cache.type][fn]){
163
+ ret = typeModels[cache.type][fn](val, input);
164
+ } else if('validity' in input[0] && ('name' in input[0].validity)){
165
+ ret = input[0].validity[name] || false;
166
+ }
167
+ return ret;
168
+ };
169
+ });
170
+
167
171
  webshims.addValidityRule = function(type, fn){
168
172
  validityRules[type] = fn;
169
173
  };
@@ -209,8 +213,9 @@ $.event.special.invalid = {
209
213
  }
210
214
  };
211
215
 
216
+ var supportSubmitBubbles = !('submitBubbles' in $.support) || $.support.submitBubbles;
212
217
  var addSubmitBubbles = function(form){
213
- if (!$.support.submitBubbles && form && typeof form == 'object' && !form._submit_attached ) {
218
+ if (!supportSubmitBubbles && form && typeof form == 'object' && !form._submit_attached ) {
214
219
 
215
220
  $.event.add( form, 'submit._submit', function( event ) {
216
221
  event._submit_bubble = true;
@@ -219,7 +224,7 @@ var addSubmitBubbles = function(form){
219
224
  form._submit_attached = true;
220
225
  }
221
226
  };
222
- if(!$.support.submitBubbles && $.event.special.submit){
227
+ if(!supportSubmitBubbles && $.event.special.submit){
223
228
  $.event.special.submit.setup = function() {
224
229
  // Only need this for delegated form submit events
225
230
  if ( $.nodeName( this, "form" ) ) {
@@ -2,8 +2,8 @@ webshims.register('form-validation', function($, webshims, window, document, und
2
2
  var isWebkit = 'webkitURL' in window;
3
3
  var chromeBugs = isWebkit && Modernizr.formvalidation && !webshims.bugs.bustedValidity;
4
4
  var webkitVersion = chromeBugs && parseFloat((navigator.userAgent.match(/Safari\/([\d\.]+)/) || ['', '999999'])[1], 10);
5
- var invalidClass = 'user-error';
6
- var validClass = 'user-success';
5
+ var invalidClass = options.iVal.errorClass || 'user-error';
6
+ var validClass = options.iVal.successClass || 'user-success';
7
7
  var checkTypes = {checkbox: 1, radio: 1};
8
8
 
9
9
  var emptyJ = $([]);
@@ -76,6 +76,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
76
76
  'datetime-local': 1
77
77
  };
78
78
  var switchValidityClass = function(e){
79
+ if(!options.iVal.sel){return;}
79
80
  var elem, timer, shadowElem, shadowType;
80
81
  if(!e.target){return;}
81
82
  elem = $(e.target).getNativeElement()[0];
@@ -182,7 +183,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
182
183
  $(document.documentElement)
183
184
  ;
184
185
  };
185
- var minWidth = (Modernizr.boxSizing || Modernizr['display-table'] || $.support.getSetAttribute) ?
186
+ var minWidth = (Modernizr.boxSizing || Modernizr['display-table'] || $.support.getSetAttribute || $.support.boxSizing) ?
186
187
  'minWidth' :
187
188
  'width'
188
189
  ;
@@ -235,14 +236,21 @@ webshims.register('form-validation', function($, webshims, window, document, und
235
236
  return container == contained || $.contains(container, contained);
236
237
  },
237
238
  show: function(element){
239
+ if(this.isVisible){return;}
238
240
  var e = $.Event('wspopoverbeforeshow');
239
241
  this.element.trigger(e);
240
- if(e.isDefaultPrevented() || this.isVisible){return;}
242
+ if(e.isDefaultPrevented()){return;}
241
243
  this.isVisible = true;
242
244
  element = $(element || this.options.prepareFor).getNativeElement() ;
243
245
 
244
246
  var that = this;
245
247
  var visual = $(element).getShadowElement();
248
+ var delayedRepos = function(e){
249
+ clearTimeout(that.timers.repos);
250
+ that.timers.repos = setTimeout(function(){
251
+ that.position(visual);
252
+ }, e && e.type == 'pospopover' ? 4 : 200);
253
+ };
246
254
 
247
255
  this.clear();
248
256
  this.element.removeClass('ws-po-visible').css('display', 'none');
@@ -256,22 +264,15 @@ webshims.register('form-validation', function($, webshims, window, document, und
256
264
  that.element.addClass('ws-po-visible').trigger('wspopovershow');
257
265
  }, 9);
258
266
  }, 9);
259
- this.element.on('remove', function(e){
260
- if(!e.originalEvent){
261
- that.destroy();
262
- }
263
- });
267
+
264
268
  $(document).on('focusin'+this.eventns+' mousedown'+this.eventns, function(e){
265
269
  if(that.options.hideOnBlur && !that.stopBlur && !that.isInElement(that.lastElement[0] || document.body, e.target) && !that.isInElement(element[0] || document.body, e.target) && !that.isInElement(that.element[0], e.target)){
266
270
  that.hide();
267
271
  }
268
272
  });
269
- $(window).on('resize'+this.eventns + ' pospopover'+this.eventns, function(){
270
- clearTimeout(that.timers.repos);
271
- that.timers.repos = setTimeout(function(){
272
- that.position(visual);
273
- }, 400);
274
- });
273
+
274
+ this.element.off('pospopover').on('pospopover', delayedRepos);
275
+ $(window).on('resize'+this.eventns + ' pospopover'+this.eventns, delayedRepos);
275
276
  },
276
277
  prepareFor: function(element, visual){
277
278
  var onBlur;
@@ -476,7 +477,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
476
477
  }
477
478
  }
478
479
  if(!fieldWrapper){
479
- fieldWrapper = $(elem).parent().closest(':not(span, label, em, strong, b, mark, p)');
480
+ fieldWrapper = $(elem).parent().closest(':not(span, label, em, strong, b, i, mark, p)');
480
481
  }
481
482
  return fieldWrapper;
482
483
  },
@@ -8,9 +8,12 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
8
8
  var ret = [date.getFullYear(), moduleOpts.addZero(date.getMonth() + 1), moduleOpts.addZero(date.getDate())];
9
9
  ret.month = ret[0]+'-'+ret[1];
10
10
  ret.date = ret[0]+'-'+ret[1]+'-'+ret[2];
11
+ ret.time = date.getHours() +':'+ date.getMinutes();
12
+
13
+ ret['datetime-local'] = ret.date +'T'+ ret.time;
11
14
  return ret;
12
15
  };
13
- var today = getDateArray(new Date(new Date().getTime() - (new Date().getTimezoneOffset() * 60 * 1000 )));
16
+ var today = getDateArray(new Date());
14
17
 
15
18
 
16
19
  var _setFocus = function(element, _noFocus){
@@ -296,11 +299,12 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
296
299
  picker.getYearList = function(value, data){
297
300
  var j, i, val, disabled, lis, prevDisabled, nextDisabled, classStr, classArray, start;
298
301
 
299
-
300
- var size = data.options.size;
301
- var max = data.options.max.split('-');
302
- var min = data.options.min.split('-');
303
- var currentValue = data.options.value.split('-');
302
+ var o = data.options;
303
+ var size = o.size;
304
+ var max = o.max.split('-');
305
+ var min = o.min.split('-');
306
+ var cols = o.cols || 4;
307
+ var currentValue = o.value.split('-');
304
308
  var xthCorrect = 0;
305
309
  var enabled = 0;
306
310
  var str = '';
@@ -346,7 +350,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
346
350
 
347
351
  classStr = classArray.length ? ' class="'+ (classArray.join(' ')) +'"' : '';
348
352
 
349
- if(i && !(i % 3)){
353
+ if(i && !(i % cols)){
350
354
  rowNum++;
351
355
  lis.push('</tr><tr class="ws-row-'+ rowNum +'">');
352
356
  }
@@ -375,6 +379,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
375
379
  var size = o.size;
376
380
  var max = o.max.split('-');
377
381
  var min = o.min.split('-');
382
+ var cols = o.cols || 4;
378
383
  var currentValue = o.value.split('-');
379
384
  var enabled = 0;
380
385
  var rowNum = 0;
@@ -387,6 +392,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
387
392
  } else {
388
393
  prevDisabled = picker.isInRange([value-1], max, min) ? {'data-action': 'setMonthList','value': value-1} : false;
389
394
  }
395
+
390
396
  if(j == size - 1){
391
397
  nextDisabled = picker.isInRange([value+1], max, min) ? {'data-action': 'setMonthList','value': value+1} : false;
392
398
  }
@@ -431,7 +437,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
431
437
  }
432
438
 
433
439
  classStr = (classArray.length) ? ' class="'+ (classArray.join(' ')) +'"' : '';
434
- if(i && !(i % 3)){
440
+ if(i && !(i % cols)){
435
441
  rowNum++;
436
442
  lis.push('</tr><tr class="ws-row-'+ rowNum +'">');
437
443
  }
@@ -455,7 +461,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
455
461
 
456
462
  picker.getDayList = function(value, data){
457
463
 
458
- var j, i, k, day, nDay, name, val, disabled, lis, prevDisabled, nextDisabled, addTr, week, rowNum;
464
+ var j, i, k, day, nDay, name, val, disabled, lis, prevDisabled, nextDisabled, yearNext, yearPrev, addTr, week, rowNum;
459
465
 
460
466
  var lastMotnh, curMonth, otherMonth, dateArray, monthName, fullMonthName, buttonStr, date2, classArray;
461
467
  var o = data.options;
@@ -467,9 +473,19 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
467
473
  var enabled = 0;
468
474
  var str = [];
469
475
  var date = new Date(value[0], value[1] - 1, 1);
476
+ var action = (data.type == 'datetime-local') ? 'setTimeList' : 'changeInput';
470
477
 
471
478
  date.setMonth(date.getMonth() - Math.floor((size - 1) / 2));
472
479
 
480
+ if(o.yearButtons){
481
+ yearNext = [ (value[0] * 1) + 1, value[1] ];
482
+ yearNext = picker.isInRange(yearNext, max, min) ? {'data-action': 'setDayList','value': yearNext.join('-')} : false;
483
+
484
+ yearPrev = [ (value[0] * 1) - 1, value[1] ];
485
+ yearPrev = picker.isInRange(yearPrev, max, min) ? {'data-action': 'setDayList','value': yearPrev.join('-')} : false;
486
+ }
487
+
488
+
473
489
  for(j = 0; j < size; j++){
474
490
  date.setDate(1);
475
491
  lastMotnh = date.getMonth();
@@ -483,6 +499,8 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
483
499
 
484
500
  dateArray = getDateArray(date);
485
501
 
502
+
503
+
486
504
  str.push('<div class="day-list picker-list ws-index-'+ j +'"><div class="ws-picker-header">');
487
505
  if( o.selectNav ){
488
506
  monthName = ['<select data-action="setDayList" class="month-select" tabindex="0">'+ picker.createMonthSelect(dateArray, max, min, monthNames).join('') +'</select>', '<select data-action="setDayList" class="year-select" tabindex="0">'+ picker.createYearSelect(dateArray[0], max, min, '-'+dateArray[1]).join('') +'</select>'];
@@ -563,7 +581,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
563
581
  }
564
582
 
565
583
  dateArray = getDateArray(date);
566
- buttonStr = '<td role="presentation" class="day-'+ day +'"><button data-id="day-'+ date.getDate() +'" role="gridcell" data-action="changeInput" value="'+ (dateArray.join('-')) +'"';
584
+ buttonStr = '<td role="presentation" class="day-'+ day +'"><button data-id="day-'+ date.getDate() +'" role="gridcell" data-action="'+action+'" value="'+ (dateArray.join('-')) +'" type="button"';
567
585
 
568
586
  if(otherMonth){
569
587
  classArray.push('othermonth');
@@ -605,6 +623,77 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
605
623
  main: str.join(''),
606
624
  prev: prevDisabled,
607
625
  next: nextDisabled,
626
+ yearPrev: yearPrev,
627
+ yearNext: yearNext,
628
+ type: 'Grid'
629
+ };
630
+ };
631
+
632
+ // var createDatimeValue =
633
+
634
+
635
+ picker.getTimeList = function(value, data){
636
+ var label, tmpValue, iVal, hVal, valPrefix;
637
+ var str = '<div class="time-list picker-list ws-index-0">';
638
+ var i = 0;
639
+ var rowNum = 0;
640
+ var len = 23;
641
+ var attrs = {
642
+ min: $.prop(data.orig, 'min'),
643
+ max: $.prop(data.orig, 'max'),
644
+ step: $.prop(data.orig, 'step')
645
+ };
646
+ var o = data.options;
647
+ var monthNames = curCfg.date[o.monthNamesHead] || curCfg.date[o.monthNames] || curCfg.date.monthNames;
648
+ var gridLabel = '';
649
+
650
+ if(data.type == 'time'){
651
+ label = '<button type="button" disabled="">'+ $.trim($(data.orig).jProp('labels').text() || '').replace(/[\:\*]/g, '')+'</button>';
652
+ } else {
653
+ tmpValue = value[2].split('T');
654
+ value[2] = tmpValue[0];
655
+ if(tmpValue[1]){
656
+ value[3] = tmpValue[1];
657
+ }
658
+ label = value[2] +'. '+ (monthNames[(value[1] * 1) - 1]) +' '+ value[0];
659
+ gridLabel = ' aria-label="'+ label +'"';
660
+ label = '<button tabindex="-1" data-action="setDayList" value="'+value[0]+'-'+value[1]+'-'+value[2]+'" type="button">'+label+'</button>';
661
+ valPrefix = value[0] +'-'+value[1]+'-'+value[2]+'T';
662
+ }
663
+
664
+ str += '<div class="ws-picker-header">'+label+'</div>';
665
+
666
+ str += '<div class="picker-grid"><table role="grid"'+ gridLabel +'><tbody><tr>';
667
+ for(; i <= len; i++){
668
+ iVal = moduleOpts.addZero(''+i) +':00';
669
+ hVal = valPrefix ?
670
+ valPrefix+iVal :
671
+ iVal
672
+ ;
673
+
674
+ if(i && !(i % 4)){
675
+ rowNum++;
676
+ str += '</tr><tr class="ws-row-'+ rowNum +'">';
677
+ }
678
+ str += '<td role="presentation"><button role="gridcell" data-action="changeInput" value="'+ hVal +'" type="button" tabindex="-1"';
679
+
680
+ if(!data.isValid(hVal, attrs)){
681
+ str += ' disabled=""';
682
+ }
683
+ if(value == iVal){
684
+ str += ' class="checked-value"';
685
+ }
686
+ str += '>'+ data.formatValue(iVal) +'</button></td>';
687
+ }
688
+
689
+
690
+ str += '</tr></tbody></table></div></div>';
691
+
692
+ return {
693
+ enabled: 9,
694
+ main: str,
695
+ prev: false,
696
+ next: false,
608
697
  type: 'Grid'
609
698
  };
610
699
  };
@@ -691,10 +780,25 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
691
780
  var stops = {
692
781
  date: 'Day',
693
782
  week: 'Day',
694
- month: 'Month'
783
+ month: 'Month',
784
+ 'datetime-local': 'Time',
785
+ time: 'Time'
786
+ };
787
+ var setDirButtons = function(content, popover, dir){
788
+ if(content[dir]){
789
+ popover[dir+'Element']
790
+ .attr(content[dir])
791
+ .prop({disabled: false})
792
+ ;
793
+ } else {
794
+ popover[dir+'Element']
795
+ .removeAttr('data-action')
796
+ .prop({disabled: true})
797
+ ;
798
+ }
695
799
  };
696
800
 
697
- $.each({'setYearList' : ['Year', 'Month', 'Day'], 'setMonthList': ['Month', 'Day'], 'setDayList': ['Day']}, function(setName, names){
801
+ $.each({'setYearList' : ['Year', 'Month', 'Day', 'Time'], 'setMonthList': ['Month', 'Day', 'Time'], 'setDayList': ['Day', 'Time'], 'setTimeList': ['Time']}, function(setName, names){
698
802
  var getNames = names.map(retNames);
699
803
  var setNames = names.map(retSetNames);
700
804
  actions[setName] = function(val, popover, data, startAt){
@@ -719,32 +823,22 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
719
823
  })
720
824
  ;
721
825
  popover.bodyElement.html(content.main);
722
- if(content.prev){
723
- popover.prevElement
724
- .attr(content.prev)
725
- .prop({disabled: false})
726
- ;
727
- } else {
728
- popover.prevElement
729
- .removeAttr('data-action')
730
- .prop({disabled: true})
731
- ;
732
- }
733
- if(content.next){
734
- popover.nextElement
735
- .attr(content.next)
736
- .prop({disabled: false})
737
- ;
738
- } else {
739
- popover.nextElement
740
- .removeAttr('data-action')
741
- .prop({disabled: true})
742
- ;
826
+
827
+ setDirButtons(content, popover, 'prev');
828
+ setDirButtons(content, popover, 'next');
829
+
830
+ if(o.yearButtons){
831
+ setDirButtons(content, popover, 'yearPrev');
832
+ setDirButtons(content, popover, 'yearNext');
743
833
  }
834
+
744
835
  if(webshims[content.type]){
745
836
  new webshims[content.type](popover.bodyElement.children(), popover, content);
746
837
  }
747
- popover.element.trigger('pickerchange');
838
+ popover.element.trigger('pickerchange')
839
+ .filter('[data-vertical="bottom"]')
840
+ .triggerHandler('pospopover')
841
+ ;
748
842
  return false;
749
843
  }
750
844
  }
@@ -780,6 +874,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
780
874
  return false;
781
875
  };
782
876
  var id = new Date().getTime();
877
+
783
878
  var generateList = function(o, max, min){
784
879
  var options = [];
785
880
  var label = '';
@@ -820,10 +915,12 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
820
915
  } else if($(this).is('.ws-current')){
821
916
  text = (curCfg[data.type] || {}).currentText;
822
917
  if(!text){
823
- text = (formcfg[''][[data.type]] || {}).currentText || 'current';
824
- webshims.warn("could not get currentText from form cfg");
918
+ text = (formcfg[''][[data.type]] || {}).currentText || (curCfg.date || {}).currentText || 'current';
919
+ webshims.warn("could not get currentText from form cfg for "+data.type);
920
+ }
921
+ if(today[data.type] && data.type != 'time'){
922
+ $.prop(this, 'disabled', !picker.isInRange(today[data.type].split('-'), o.maxS, o.minS));
825
923
  }
826
- $.prop(this, 'disabled', !picker.isInRange(today[data.type].split('-'), o.maxS, o.minS));
827
924
  }
828
925
  if(text){
829
926
  $(this).text(text).attr({'aria-label': text});
@@ -833,13 +930,36 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
833
930
  }
834
931
 
835
932
  });
836
- popover.nextElement.attr({'aria-label': curCfg.date.nextText});
837
- $('> span', popover.nextElement).html(curCfg.date.nextText);
838
- popover.prevElement.attr({'aria-label': curCfg.date.prevText});
839
- $('> span', popover.prevElement).html(curCfg.date.prevText);
933
+ popover.nextElement
934
+ .attr({'aria-label': curCfg.date.nextText})
935
+ .find('span')
936
+ .html(curCfg.date.nextText)
937
+ ;
938
+ popover.prevElement
939
+ .attr({'aria-label': curCfg.date.prevText})
940
+ .find('span')
941
+ .html(curCfg.date.prevText)
942
+ ;
943
+
944
+ if(o.yearButtons){
945
+ popover.yearNextElement
946
+ .attr({'aria-label': curCfg.date.nextText})
947
+ .find('span')
948
+ .html(curCfg.date.nextText)
949
+ ;
950
+ popover.yearPrevElement
951
+ .attr({'aria-label': curCfg.date.prevText})
952
+ .find('span')
953
+ .html(curCfg.date.prevText)
954
+ ;
955
+ }
840
956
 
841
957
  generateList(o, o.maxS, o.minS);
842
958
 
959
+ if(popover.isVisible){
960
+ picker.showPickerContent(data, popover);
961
+ }
962
+
843
963
  }
844
964
  $('button.ws-empty', popover.buttonRow).prop('disabled', $.prop(data.orig, 'required'));
845
965
  popover.isDirty = false;
@@ -853,6 +973,8 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
853
973
  }
854
974
  };
855
975
 
976
+
977
+
856
978
  popover.contentElement.html('<button class="ws-prev" tabindex="0"><span></span></button> <button class="ws-next" tabindex="0"><span></span></button><div class="ws-picker-body"></div><div class="ws-button-row"><button type="button" class="ws-current" data-action="changeInput" value="'+today[data.type]+'" tabindex="0"></button> <button type="button" data-action="changeInput" value="" class="ws-empty" tabindex="0"></button></div>');
857
979
  popover.nextElement = $('button.ws-next', popover.contentElement);
858
980
  popover.prevElement = $('button.ws-prev', popover.contentElement);
@@ -860,11 +982,21 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
860
982
  popover.buttonRow = $('div.ws-button-row', popover.contentElement);
861
983
  popover.element.on('updatepickercontent', updateContent);
862
984
 
985
+ if(data.options.yearButtons){
986
+ popover.element.addClass('ws-year-buttons');
987
+ popover.yearNextElement = $('<button class="ws-super-next" tabindex="0"><span></span></button>').insertAfter(popover.nextElement);
988
+ popover.yearPrevElement = $('<button class="ws-super-prev" tabindex="0"><span></span></button>').insertBefore(popover.prevElement);
989
+ }
990
+
863
991
  popover.contentElement
864
992
  .on('click', 'button[data-action]', actionfn)
865
993
  .on('change', 'select[data-action]', actionfn)
866
994
  ;
867
995
 
996
+ if(data.options.inlinePicker){
997
+ data.options.updateOnInput = true;
998
+ }
999
+
868
1000
  $(data.options.orig).on('input', function(){
869
1001
  var currentView;
870
1002
  if(data.options.updateOnInput && popover.isVisible && data.options.value && (currentView = popover.element.attr('data-currentview'))){