webshims-rails 1.12.0 → 1.12.2

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +440 -440
  4. data/vendor/assets/javascripts/webshims/polyfiller.js +132 -91
  5. data/vendor/assets/javascripts/webshims/shims/combos/10.js +248 -91
  6. data/vendor/assets/javascripts/webshims/shims/combos/11.js +237 -84
  7. data/vendor/assets/javascripts/webshims/shims/combos/15.js +21 -8
  8. data/vendor/assets/javascripts/webshims/shims/combos/16.js +21 -8
  9. data/vendor/assets/javascripts/webshims/shims/combos/17.js +237 -84
  10. data/vendor/assets/javascripts/webshims/shims/combos/18.js +237 -84
  11. data/vendor/assets/javascripts/webshims/shims/combos/19.js +11 -7
  12. data/vendor/assets/javascripts/webshims/shims/combos/2.js +18 -8
  13. data/vendor/assets/javascripts/webshims/shims/combos/20.js +11 -7
  14. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1 -1
  15. data/vendor/assets/javascripts/webshims/shims/combos/22.js +1 -1
  16. data/vendor/assets/javascripts/webshims/shims/combos/24.js +9 -6
  17. data/vendor/assets/javascripts/webshims/shims/combos/25.js +11 -7
  18. data/vendor/assets/javascripts/webshims/shims/combos/26.js +11 -7
  19. data/vendor/assets/javascripts/webshims/shims/combos/28.js +10 -1
  20. data/vendor/assets/javascripts/webshims/shims/combos/3.js +11 -7
  21. data/vendor/assets/javascripts/webshims/shims/combos/30.js +18 -8
  22. data/vendor/assets/javascripts/webshims/shims/combos/31.js +18 -8
  23. data/vendor/assets/javascripts/webshims/shims/combos/32.js +7 -1
  24. data/vendor/assets/javascripts/webshims/shims/combos/33.js +7 -1
  25. data/vendor/assets/javascripts/webshims/shims/combos/4.js +11 -7
  26. data/vendor/assets/javascripts/webshims/shims/combos/5.js +237 -84
  27. data/vendor/assets/javascripts/webshims/shims/combos/6.js +244 -85
  28. data/vendor/assets/javascripts/webshims/shims/combos/7.js +18 -8
  29. data/vendor/assets/javascripts/webshims/shims/combos/8.js +11 -7
  30. data/vendor/assets/javascripts/webshims/shims/combos/9.js +255 -92
  31. data/vendor/assets/javascripts/webshims/shims/details.js +1 -1
  32. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +10 -7
  33. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +53 -56
  34. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +7 -1
  35. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +175 -60
  36. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +3 -0
  37. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +6 -6
  38. data/vendor/assets/javascripts/webshims/shims/form-validation.js +77 -28
  39. data/vendor/assets/javascripts/webshims/shims/form-validators.js +24 -16
  40. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +40 -68
  41. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js +4 -4
  42. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-sv.js +13 -6
  43. data/vendor/assets/javascripts/webshims/shims/range-ui.js +61 -24
  44. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +278 -95
  45. data/vendor/assets/javascripts/webshims/shims/styles/progress.gif +0 -0
  46. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-forms-ext.scss +203 -0
  47. data/vendor/assets/javascripts/webshims/shims/styles/scss/_api-shim.scss +115 -0
  48. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +18 -2
  49. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +227 -113
  50. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +168 -159
  51. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +106 -69
  52. metadata +4 -7
  53. data/vendor/assets/javascripts/webshims/shims/styles/details-arrows.png +0 -0
  54. data/vendor/assets/javascripts/webshims/shims/styles/polyfill-loader.gif +0 -0
  55. data/vendor/assets/javascripts/webshims/shims/styles/range-track.png +0 -0
  56. data/vendor/assets/javascripts/webshims/shims/styles/vertical-range.png +0 -0
  57. data/vendor/assets/javascripts/webshims/shims/swf/localStorage.swf +0 -0
@@ -222,6 +222,9 @@ $.event.special.invalid = {
222
222
  var notValid = !($(e.target).callProp('reportValidity'));
223
223
  if(notValid){
224
224
  e.stopImmediatePropagation();
225
+ if(!options.noFormInvalid){
226
+ $(e.target).trigger('invalid');
227
+ }
225
228
  return false;
226
229
  }
227
230
  }
@@ -481,10 +481,7 @@ if(!Modernizr.formattribute || !Modernizr.fieldsetdisabled || !Modernizr.fieldse
481
481
  var nan = parseInt('NaN', 10);
482
482
 
483
483
  var updateProgress = function(progress){
484
- var position;
485
-
486
-
487
- position = $.prop(progress, 'position');
484
+ var position = $.prop(progress, 'position');
488
485
 
489
486
  $.attr(progress, 'data-position', position);
490
487
  $('> span', progress).css({width: (position < 0 ? 100 : position * 100) +'%'});
@@ -508,8 +505,9 @@ if(!Modernizr.formattribute || !Modernizr.fieldsetdisabled || !Modernizr.fieldse
508
505
  $.attr(this, 'aria-valuemax', max);
509
506
  }
510
507
  }
508
+ $(this).removeClass('ws-indeterminate');
511
509
  } else if(updateProgress.isInChange) {
512
- $(this).removeAttr('aria-valuenow');
510
+ $(this).removeAttr('aria-valuenow').addClass('ws-indeterminate');
513
511
  }
514
512
  return ret;
515
513
  },
@@ -584,7 +582,9 @@ if(!Modernizr.formattribute || !Modernizr.fieldsetdisabled || !Modernizr.fieldse
584
582
  } else {
585
583
  webshims.info("you should use label elements for your prgogress elements");
586
584
  }
587
-
585
+ if($(this).css('direction') == 'rtl'){
586
+ $(this).addClass('ws-is-rtl');
587
+ }
588
588
  updateProgress.isInChange = 'max';
589
589
  updateProgress(this);
590
590
  updateProgress.isInChange = false;
@@ -2,7 +2,8 @@ webshims.register('form-validation', function($, webshims, window, document, und
2
2
  "use strict";
3
3
 
4
4
  var isWebkit = 'webkitURL' in window;
5
- var chromeBugs = isWebkit && Modernizr.formvalidation && !webshims.bugs.bustedValidity;
5
+ var hasNative = Modernizr.formvalidation && !webshims.bugs.bustedValidity;
6
+ var chromeBugs = isWebkit && hasNative;
6
7
  var webkitVersion = chromeBugs && parseFloat((navigator.userAgent.match(/Safari\/([\d\.]+)/) || ['', '999999'])[1], 10);
7
8
 
8
9
  var iVal = options.iVal;
@@ -215,25 +216,42 @@ webshims.register('form-validation', function($, webshims, window, document, und
215
216
  setRoot();
216
217
  webshims.ready('DOM', setRoot);
217
218
 
218
-
219
+ var rtlReg = /right|left/g;
220
+ var rtlReplace = function(ret){
221
+ return ret == 'left' ? 'right' : 'left';
222
+ };
219
223
  webshims.getRelOffset = function(posElem, relElem, opts){
220
224
  var offset, bodyOffset, dirs;
221
225
  posElem = $(posElem);
222
- $.swap($(posElem)[0], resetPos, function(){
226
+ $.swap(posElem[0], resetPos, function(){
227
+ var isRtl;
223
228
  if($.position && opts && $.position.getScrollInfo){
224
229
  if(!opts.of){
225
230
  opts.of = relElem;
226
231
  }
227
232
 
233
+ isRtl = $(opts.of).css('direction') == 'rtl';
234
+ if(!opts.isRtl){
235
+ opts.isRtl = false;
236
+ }
237
+ if(opts.isRtl != isRtl){
238
+ opts.my = (opts.my || 'center').replace(rtlReg, rtlReplace);
239
+ opts.at = (opts.at || 'center').replace(rtlReg, rtlReplace);
240
+ opts.isRtl = isRtl;
241
+ }
242
+
243
+ posElem[opts.isRtl ? 'addClass' : 'removeClass']('ws-is-rtl');
244
+
228
245
  opts.using = function(calced, data){
229
246
  posElem.attr({'data-horizontal': data.horizontal, 'data-vertical': data.vertical});
230
247
  offset = calced;
231
248
  };
249
+
232
250
  posElem.attr({
233
251
  'data-horizontal': '',
234
252
  'data-vertical': '',
235
- 'data-my': opts.my || 'center',
236
- 'data-at': opts.at || 'center'
253
+ 'data-my': opts.my,
254
+ 'data-at': opts.at
237
255
  });
238
256
  posElem.position(opts);
239
257
 
@@ -463,6 +481,9 @@ webshims.register('form-validation', function($, webshims, window, document, und
463
481
  try {
464
482
  focusElem[0].focus();
465
483
  } catch(e){}
484
+ if(!focusElem[0].offsetWidth && !focusElem[0].offsetHeight){
485
+ webshims.warn('invalid element seems to be hidden. Make element either visible or use disabled/readonly to bar elements from validation. With fieldset[disabled] a group of elements can be ignored.');
486
+ }
466
487
  api.element.triggerHandler('pospopover');
467
488
  };
468
489
 
@@ -546,6 +567,16 @@ webshims.register('form-validation', function($, webshims, window, document, und
546
567
  return fieldWrapper;
547
568
  },
548
569
  _createContentMessage: (function(){
570
+ var noValidate = function(){
571
+ return !noValidate.types[this.type];
572
+ };
573
+ noValidate.types = {
574
+ hidden: 1,
575
+ image: 1,
576
+ button: 1,
577
+ reset: 1,
578
+ submit: 1
579
+ };
549
580
  var fields = {};
550
581
  var deCamelCase = function(c){
551
582
  return '-'+(c).toLowerCase();
@@ -566,26 +597,36 @@ webshims.register('form-validation', function($, webshims, window, document, und
566
597
  var cName = name.replace(/[A-Z]/, deCamelCase);
567
598
  fields[name] = '.'+cName+', .'+name+', .'+(name).toLowerCase()+', [data-errortype="'+ name +'"]';
568
599
  });
569
- return function(elem, errorBox){
600
+ return function(elem, errorBox, fieldWrapper){
570
601
  var extended = false;
571
- var errorMessages = $(elem).data('errormessage') || {};
572
- if(typeof errorMessages == 'string'){
573
- errorMessages = {defaultMessage: errorMessages};
574
- }
602
+ var descriptiveMessages = {};
603
+
575
604
  $(errorBox).children().each(function(){
576
605
  var name = getErrorName(this);
577
- if(!errorMessages[name]){
578
- extended = true;
579
- errorMessages[name] = $(this).html();
606
+ descriptiveMessages[name] = $(this).html();
607
+ });
608
+
609
+ $('input, select, textarea', fieldWrapper).filter(noValidate).each(function(i, elem){
610
+ var errorMessages = $(elem).data('errormessage') || {};
611
+ if(typeof errorMessages == 'string'){
612
+ errorMessages = {defaultMessage: errorMessages};
613
+ }
614
+
615
+ $.each(descriptiveMessages, function(name, val){
616
+ if(!errorMessages[name]){
617
+ extended = true;
618
+ errorMessages[name] = val;
619
+ }
620
+ });
621
+
622
+ if(extended){
623
+ $(elem).data('errormessage', errorMessages);
624
+ }
625
+ if(webshims.getOptions){
626
+ webshims.getOptions(elem, 'errormessage');
580
627
  }
581
628
  });
582
-
583
- if(extended){
584
- $(elem).data('errormessage', errorMessages);
585
- }
586
- if(webshims.getOptions){
587
- webshims.getOptions(elem, 'errormessage');
588
- }
629
+
589
630
  };
590
631
  })(),
591
632
  initIvalContentMessage: function(elem){
@@ -600,10 +641,10 @@ webshims.register('form-validation', function($, webshims, window, document, und
600
641
  var errorBox = fieldWrapper.data('errorbox');
601
642
  if(!errorBox){
602
643
  errorBox = this.create(elem, fieldWrapper);
603
- this._createContentMessage(elem, errorBox);
644
+ this._createContentMessage(elem, errorBox, fieldWrapper);
604
645
  } else if(typeof errorBox == 'string'){
605
646
  errorBox = $('#'+errorBox);
606
- fieldWrapper.data('errorbox', errorBox);
647
+ fieldWrapper.data('errorbox', errorBox, fieldWrapper);
607
648
  this._createContentMessage(elem, errorBox);
608
649
  }
609
650
  return errorBox;
@@ -622,8 +663,9 @@ webshims.register('form-validation', function($, webshims, window, document, und
622
663
  hideError: function(elem, reset){
623
664
  var invalid;
624
665
  var fieldWrapper = this.getFieldWrapper(elem);
625
- var errorBox = this.get(elem, fieldWrapper);
626
-
666
+ //only if an errorbox was already created! don't use this.get here!
667
+ var errorBox = fieldWrapper.data('errorbox');
668
+
627
669
  if(errorBox && errorBox.jquery){
628
670
  $(elem).filter('input').off('.recheckinvalid');
629
671
  if(!reset && (invalid = $('input:invalid, select:invalid, textarea:invalid', fieldWrapper)[0])){
@@ -726,7 +768,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
726
768
  },
727
769
  firstinvalid: function(e){
728
770
  if(iVal.sel && iVal.handleBubble){
729
- var form = $(e.target).jProp('form');
771
+ var form = $(e.target).jProp('form');
730
772
  if(form.is(iVal.sel)){
731
773
  e.preventDefault();
732
774
  if(iVal.handleBubble != 'none'){
@@ -767,11 +809,11 @@ webshims.register('form-validation', function($, webshims, window, document, und
767
809
  var firstEvent,
768
810
  invalids = [],
769
811
  stopSubmitTimer,
770
- form
812
+ stop
771
813
  ;
772
814
 
773
815
  $(document).on('invalid', function(e){
774
- if(e.wrongWebkitInvalid){return;}
816
+ if(e.wrongWebkitInvalid || stop){return;}
775
817
  var jElm = $(e.target);
776
818
 
777
819
 
@@ -793,7 +835,14 @@ webshims.register('form-validation', function($, webshims, window, document, und
793
835
  //reset firstinvalid
794
836
  firstEvent = false;
795
837
  invalids = [];
838
+ stop = true;
796
839
  $(e.target).trigger(lastEvent, [lastEvent]);
840
+ /*
841
+ if(hasNative && !$.nodeName(e.target, 'form')){
842
+ $(e.target).jProp('form').triggerHandler('invalid');
843
+ }
844
+ */
845
+ stop = false;
797
846
  }, 9);
798
847
  jElm = null;
799
848
  });
@@ -936,7 +985,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
936
985
  }
937
986
  });
938
987
  }
939
- if(webshims.cfg.debug !== false){
988
+ if(webshims.cfg.debug !== false && iVal.sel != '.ws-instantvalidation'){
940
989
  $(function(){
941
990
  if($('form.ws-instantvalidation').length){
942
991
  webshims.error('.ws-instantvalidation was renamed to .ws-validate');
@@ -32,7 +32,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
32
32
  webshims.customErrorMessages[name][''] = defaultMessage || name;
33
33
  }
34
34
  if(formReady){
35
- $('input, select, textarea')
35
+ $('input, select, textarea, fieldset[data-dependent-validation]')
36
36
  .filter(noValidate)
37
37
  .each(function(){
38
38
  testValidityRules(this);
@@ -42,7 +42,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
42
42
  };
43
43
  webshims.refreshCustomValidityRules = function(elem){
44
44
  if(!initTest){return;}
45
-
45
+ var val;
46
46
  var data = $(elem).data() || $.data(elem, {});
47
47
  var customMismatchedRule = data.customMismatchedRule;
48
48
  var validity = $.prop(elem, 'validity') || {};
@@ -75,8 +75,8 @@ webshims.register('form-validators', function($, webshims, window, document, und
75
75
  $(elem).setCustomValidity(message);
76
76
  blockCustom = false;
77
77
  };
78
- if(customMismatchedRule || validity.valid || (data.dependentValidation && !data.dependentValidation._init)){
79
- var val = $(elem).val();
78
+ if(customMismatchedRule || validity.valid){
79
+ val = $(elem).val();
80
80
  $.each(customValidityRules, function(name, test){
81
81
  message = test(elem, val, data, setMessage) || '';
82
82
  customMismatchedRule = name;
@@ -84,6 +84,10 @@ webshims.register('form-validators', function($, webshims, window, document, und
84
84
  return false;
85
85
  }
86
86
  });
87
+
88
+ if(data.dependentValidation && !data.dependentValidation._init && !data.dependentValidation.masterElement){
89
+ customValidityRules.dependent(elem, val, data, $.noop);
90
+ }
87
91
  if(message != 'async' && (message || !validity.valid)){
88
92
  setMessage(message, customMismatchedRule);
89
93
  }
@@ -107,7 +111,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
107
111
  setTimeout(function(){
108
112
  webshims.addReady(function(context, selfElement){
109
113
  initTest = true;
110
- $('input, select, textarea', context).add(selfElement.filter('input, select, textarea'))
114
+ $('input, select, textarea, fieldset[data-dependent-validation]', context).add(selfElement.filter('input, select, textarea, fieldset[data-dependent-validation]'))
111
115
  .filter(noValidate)
112
116
  .each(function(){
113
117
  testValidityRules(this);
@@ -147,6 +151,10 @@ webshims.register('form-validators', function($, webshims, window, document, und
147
151
 
148
152
  addCustomValidityRule('tooShort', function(elem, val, data){
149
153
  if(!val || !data.minlength){return;}
154
+
155
+ if($.nodeName(elem, 'input')){
156
+ webshims.warn('depreacated data-minlength usage: Use pattern=".{'+ data.minlength +'3,}" instead.');
157
+ }
150
158
  return data.minlength > val.length;
151
159
  }, 'Entered value is too short.');
152
160
 
@@ -236,7 +244,7 @@ webshims.register('form-validators', function($, webshims, window, document, und
236
244
 
237
245
 
238
246
  data.masterElement = document.getElementById(data["from"]) || (document.getElementsByName(data["from"] || [])[0]);
239
-
247
+ data._init = true;
240
248
  if (!data.masterElement || !data.masterElement.form) {return;}
241
249
 
242
250
  if(/radio|checkbox/i.test(data.masterElement.type)){
@@ -307,16 +315,16 @@ webshims.register('form-validators', function($, webshims, window, document, und
307
315
  this.restartAjax = false;
308
316
  this.ajaxLoading = true;
309
317
  $.ajax(
310
- $.extend({}, opts, {
311
- url: opts.url,
312
- dataType: 'json',
313
- depData: remoteData,
314
- data: formCFG.fullRemoteForm || opts.fullForm ?
315
- $(elem).jProp('form').serializeArray() :
316
- remoteData,
317
- success: this.getResponse,
318
- complete: this._complete
319
- })
318
+ $.extend({}, opts, {
319
+ url: opts.url,
320
+ dataType: 'json',
321
+ depData: remoteData,
322
+ data: formCFG.fullRemoteForm || opts.fullForm ?
323
+ $(elem).jProp('form').serializeArray() :
324
+ remoteData,
325
+ success: this.getResponse,
326
+ complete: this._complete
327
+ })
320
328
  );
321
329
  }
322
330
  },
@@ -513,7 +513,9 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
513
513
  var elem = this;
514
514
  setTimeout(function(){
515
515
  elem.focus();
516
- elem.select();
516
+ if(elem.select){
517
+ elem.select();
518
+ }
517
519
  }, 4);
518
520
 
519
521
  stopTab();
@@ -526,8 +528,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
526
528
  try {
527
529
  $(this).next().next('input, select').each(select);
528
530
  }
529
- catch (er) {
530
- }
531
+ catch (er) {}
531
532
  }
532
533
  }
533
534
  else
@@ -586,9 +587,13 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
586
587
  mouseDownInit();
587
588
  }
588
589
  var ret = false;
590
+
589
591
  if (!factor) {
590
592
  factor = 1;
591
593
  }
594
+ if(o.stepfactor){
595
+ factor *= o.stepfactor;
596
+ }
592
597
  try {
593
598
  that.elemHelper[name](factor);
594
599
 
@@ -602,6 +607,9 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
602
607
  }
603
608
  if (ret !== false && o.value != ret) {
604
609
  that.value(ret);
610
+ if(o.toFixed && o.type == 'number'){
611
+ that.element[0].value = that.toFixed(that.element[0].value, true);
612
+ }
605
613
  eventTimer.call('input', ret);
606
614
  }
607
615
  return ret;
@@ -928,7 +936,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
928
936
  if(data.options.useDecadeBase == 'max' && max[0]){
929
937
  xthCorrect = 11 - (max[0] % 12);
930
938
  } else if(data.options.useDecadeBase == 'min' && min[0]){
931
- xthCorrect = 11 - (min[0] % 12);
939
+ xthCorrect = 0 - (min[0] % 12);
932
940
  }
933
941
 
934
942
  value = value[0] * 1;
@@ -989,11 +997,11 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
989
997
 
990
998
  picker.getMonthList = function(value, data){
991
999
 
992
- var j, i, name, val, disabled, lis, fullyDisabled, prevDisabled, nextDisabled, classStr, classArray;
1000
+ var j, i, name, val, disabled, lis, prevDisabled, nextDisabled, classStr, classArray;
993
1001
  var o = data.options;
994
1002
  var size = o.size;
995
- var max = o.max.split('-');
996
- var min = o.min.split('-');
1003
+ var max = o.maxS;
1004
+ var min = o.minS;
997
1005
  var cols = o.cols || 4;
998
1006
  var currentValue = o.value.split('-');
999
1007
  var enabled = 0;
@@ -1015,9 +1023,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1015
1023
 
1016
1024
  if( !picker.isInRange([value, '01'], max, min) && !picker.isInRange([value, '12'], max, min)){
1017
1025
  disabled = ' disabled=""';
1018
- fullyDisabled = true;
1019
1026
  } else {
1020
- fullyDisabled = false;
1021
1027
  disabled = '';
1022
1028
  }
1023
1029
 
@@ -1034,7 +1040,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1034
1040
  val = curCfg.date.monthkeys[i+1];
1035
1041
  name = getMonthNameHTML(i);
1036
1042
  classArray = [];
1037
- if(fullyDisabled || !picker.isInRange([value, val], max, min) ){
1043
+ if(!picker.isInRange([value, val], max, min) ){
1038
1044
  disabled = ' disabled=""';
1039
1045
  } else {
1040
1046
  disabled = '';
@@ -1343,47 +1349,6 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1343
1349
  }
1344
1350
  return options;
1345
1351
  };
1346
-
1347
- picker.createYearSelect = function(value, max, min, valueAdd, stepper){
1348
- if(!stepper){
1349
- stepper = {start: value, step: 1, label: value};
1350
- }
1351
- var temp;
1352
- var goUp = true;
1353
- var goDown = true;
1354
- var options = ['<option selected="">'+ stepper.label + '</option>'];
1355
- var i = 0;
1356
- var createOption = function(value, add){
1357
- var value2, label;
1358
- if(stepper.step > 1){
1359
- value2 = value + stepper.step - 1;
1360
- label = value+' – '+value2;
1361
- } else {
1362
- label = value;
1363
- }
1364
-
1365
- if(picker.isInRange([value], max, min) || (value2 && picker.isInRange([value2], max, min))){
1366
- options[add]('<option value="'+ (value+valueAdd) +'">'+ label +'</option>');
1367
- return true;
1368
- }
1369
- };
1370
- if(!valueAdd){
1371
- valueAdd = '';
1372
- }
1373
- while(i < 18 && (goUp || goDown)){
1374
- i++;
1375
- if(goUp){
1376
- temp = stepper.start - (i * stepper.step);
1377
- goUp = createOption(temp, 'unshift');
1378
- }
1379
- if(goDown){
1380
- temp = stepper.start + (i * stepper.step);
1381
- goDown = createOption(temp, 'push');
1382
- }
1383
-
1384
- }
1385
- return options;
1386
- };
1387
1352
 
1388
1353
  (function(){
1389
1354
  var retNames = function(name){
@@ -1401,16 +1366,18 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1401
1366
  };
1402
1367
  var setDirButtons = function(content, popover, dir){
1403
1368
  if(content[dir]){
1404
- popover[dir+'Element']
1405
- .attr(content[dir])
1406
- .prop({disabled: false})
1407
- ;
1408
- } else {
1409
- popover[dir+'Element']
1410
- .removeAttr('data-action')
1411
- .prop({disabled: true})
1412
- ;
1413
- }
1369
+ //set content and idl attribute (content for css + idl for IE8-)
1370
+ popover[dir+'Element']
1371
+ .attr(content[dir])
1372
+ .prop({disabled: false})
1373
+ .prop(content[dir])
1374
+ ;
1375
+ } else {
1376
+ popover[dir+'Element']
1377
+ .removeAttr('data-action')
1378
+ .prop({disabled: true})
1379
+ ;
1380
+ }
1414
1381
  };
1415
1382
 
1416
1383
  $.each({'setYearList' : ['Year', 'Month', 'Day', 'Time'], 'setMonthList': ['Month', 'Day', 'Time'], 'setDayList': ['Day', 'Time'], 'setTimeList': ['Time']}, function(setName, names){
@@ -1427,7 +1394,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1427
1394
  if(i >= startAt){
1428
1395
  var content = picker[item](values, data);
1429
1396
 
1430
- if( values.length < 2 || content.enabled > 1 || stops[data.type] === names[i]){
1397
+ if( values.length < 2 || content.enabled > 1 || content.prev || content.next || stops[data.type] === names[i]){
1431
1398
  popover.element
1432
1399
  .attr({'data-currentview': setNames[i]})
1433
1400
  .addClass('ws-size-'+o.size)
@@ -1580,8 +1547,11 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1580
1547
  popover.yearPrevElement
1581
1548
  .attr({'aria-label': curCfg.date.prevText})
1582
1549
  ;
1583
-
1584
-
1550
+ popover.contentElement.attr({
1551
+ dir: curCfg.date.isRTL ? 'rtl' : 'ltr',
1552
+ lang: webshims.formcfg.__activeName
1553
+ });
1554
+
1585
1555
  generateList(o, o.maxS, o.minS);
1586
1556
 
1587
1557
  if(popover.isVisible){
@@ -1593,7 +1563,6 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1593
1563
  popover.isDirty = false;
1594
1564
  };
1595
1565
 
1596
-
1597
1566
  if(data.type == 'time'){
1598
1567
  o.minView = 3;
1599
1568
  o.startView = 3;
@@ -1620,7 +1589,7 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1620
1589
 
1621
1590
 
1622
1591
 
1623
- popover.contentElement.html('<div class="prev-controls ws-picker-controls"><button class="ws-super-prev ws-year-btn" tabindex="0"></button><button class="ws-prev" tabindex="0"></button></div> <div class="next-controls ws-picker-controls"><button class="ws-next" tabindex="0"></button><button class="ws-super-next ws-year-btn" tabindex="0"></button></div><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>');
1592
+ popover.contentElement.html('<div class="prev-controls ws-picker-controls"><button class="ws-super-prev ws-year-btn" tabindex="0" type="button"></button><button class="ws-prev" tabindex="0" type="button"></button></div> <div class="next-controls ws-picker-controls"><button class="ws-next" tabindex="0" type="button"></button><button class="ws-super-next ws-year-btn" tabindex="0" type="button"></button></div><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>');
1624
1593
  popover.nextElement = $('button.ws-next', popover.contentElement);
1625
1594
  popover.prevElement = $('button.ws-prev', popover.contentElement);
1626
1595
  popover.yearNextElement = $('button.ws-super-next', popover.contentElement);
@@ -1642,10 +1611,13 @@ webshims.register('forms-picker', function($, webshims, window, document, undefi
1642
1611
  }
1643
1612
  });
1644
1613
  $(document).onTrigger('wslocalechange', data._propertyChange);
1645
-
1646
- if(o.inlinePicker){
1614
+ if(o.updateOnInput == null && (o.inlinePicker || o.noChangeDismiss)){
1647
1615
  o.updateOnInput = true;
1648
1616
  }
1617
+ if(o.inlinePicker){
1618
+ popover.element.attr('data-class', $.prop(data.orig, 'className'));
1619
+ popover.element.attr('data-id', $.prop(data.orig, 'id'));
1620
+ }
1649
1621
 
1650
1622
  $(o.orig).trigger('pickercreated');
1651
1623
  };