webshims-rails 1.11.6.1 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +126 -72
  4. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/canvas2png.js +9 -4
  5. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js +32 -26
  6. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.swf +0 -0
  7. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/proxy.php +25 -4
  8. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/save.php +9 -3
  9. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/canvas2png.js +9 -4
  10. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  11. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  12. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flashcanvas.js +36 -30
  13. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/proxy.php +25 -4
  14. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/save.php +9 -3
  15. data/vendor/assets/javascripts/webshims/shims/combos/1.js +13 -6
  16. data/vendor/assets/javascripts/webshims/shims/combos/10.js +156 -143
  17. data/vendor/assets/javascripts/webshims/shims/combos/11.js +97 -84
  18. data/vendor/assets/javascripts/webshims/shims/combos/12.js +2 -4
  19. data/vendor/assets/javascripts/webshims/shims/combos/13.js +1 -2
  20. data/vendor/assets/javascripts/webshims/shims/combos/14.js +956 -2819
  21. data/vendor/assets/javascripts/webshims/shims/combos/15.js +73 -67
  22. data/vendor/assets/javascripts/webshims/shims/combos/16.js +75 -71
  23. data/vendor/assets/javascripts/webshims/shims/combos/17.js +118 -89
  24. data/vendor/assets/javascripts/webshims/shims/combos/18.js +119 -91
  25. data/vendor/assets/javascripts/webshims/shims/combos/19.js +62 -65
  26. data/vendor/assets/javascripts/webshims/shims/combos/2.js +73 -67
  27. data/vendor/assets/javascripts/webshims/shims/combos/20.js +61 -63
  28. data/vendor/assets/javascripts/webshims/shims/combos/21.js +3 -6
  29. data/vendor/assets/javascripts/webshims/shims/combos/22.js +1 -2
  30. data/vendor/assets/javascripts/webshims/shims/combos/23.js +1 -2
  31. data/vendor/assets/javascripts/webshims/shims/combos/24.js +22 -12
  32. data/vendor/assets/javascripts/webshims/shims/combos/25.js +63 -67
  33. data/vendor/assets/javascripts/webshims/shims/combos/26.js +59 -59
  34. data/vendor/assets/javascripts/webshims/shims/combos/27.js +1 -2
  35. data/vendor/assets/javascripts/webshims/shims/combos/28.js +1915 -0
  36. data/vendor/assets/javascripts/webshims/shims/combos/29.js +817 -0
  37. data/vendor/assets/javascripts/webshims/shims/combos/3.js +71 -63
  38. data/vendor/assets/javascripts/webshims/shims/combos/30.js +72 -65
  39. data/vendor/assets/javascripts/webshims/shims/combos/31.js +71 -63
  40. data/vendor/assets/javascripts/webshims/shims/combos/32.js +2343 -0
  41. data/vendor/assets/javascripts/webshims/shims/combos/33.js +897 -0
  42. data/vendor/assets/javascripts/webshims/shims/combos/4.js +59 -59
  43. data/vendor/assets/javascripts/webshims/shims/combos/5.js +119 -91
  44. data/vendor/assets/javascripts/webshims/shims/combos/6.js +120 -93
  45. data/vendor/assets/javascripts/webshims/shims/combos/7.js +74 -69
  46. data/vendor/assets/javascripts/webshims/shims/combos/8.js +73 -67
  47. data/vendor/assets/javascripts/webshims/shims/combos/9.js +157 -145
  48. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +58 -57
  49. data/vendor/assets/javascripts/webshims/shims/form-combat.js +0 -1
  50. data/vendor/assets/javascripts/webshims/shims/form-core.js +12 -3
  51. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +4 -3
  52. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +20 -3
  53. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +78 -71
  54. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +21 -10
  55. data/vendor/assets/javascripts/webshims/shims/form-validation.js +39 -27
  56. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +173 -128
  57. data/vendor/assets/javascripts/webshims/shims/i18n/{formcfg-ch-ZN.js → formcfg-ch-CN.js} +0 -0
  58. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.js +0 -2
  59. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-zh-CN.js +65 -0
  60. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +1 -1
  61. data/vendor/assets/javascripts/webshims/shims/range-ui.js +18 -11
  62. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +221 -153
  63. data/vendor/assets/javascripts/webshims/shims/styles/progress.gif +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/styles/progress.png +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +5 -0
  66. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +273 -177
  67. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +113 -98
  68. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +114 -88
  69. data/vendor/assets/javascripts/webshims/shims/track-ui.js +2 -2
  70. metadata +10 -7
  71. data/vendor/assets/javascripts/webshims/extras/mousepress.js +0 -60
  72. data/vendor/assets/javascripts/webshims/shims/jpicker/images/Thumbs.db +0 -0
  73. data/vendor/assets/javascripts/webshims/shims/json-storage.js +0 -316
  74. data/vendor/assets/javascripts/webshims/shims/mediagroup.js +0 -29
@@ -40,34 +40,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
40
40
  webshims.ready('WINDOWLOAD', switch$);
41
41
 
42
42
  }
43
- // (function(){
44
- // var hostNames = {
45
- // 'afarkas.github.io': 1,
46
- // localhost: 1,
47
- // '127.0.0.1': 1
48
- // };
49
- //
50
- // if( webshims.cfg.debug && (hostNames[location.hostname] || location.protocol == 'file:') ){
51
- // var list = $('<ul class="webshims-debug-list" />');
52
- // webshims.errorLog.push = function(message){
53
- // list.appendTo('body');
54
- // $('<li style="display: none;">'+ message +'</li>')
55
- // .appendTo(list)
56
- // .slideDown()
57
- // .delay(3000)
58
- // .slideUp(function(){
59
- // $(this).remove();
60
- // if(!$('li', list).length){
61
- // list.detach();
62
- // }
63
- // })
64
- // ;
65
- // };
66
- // $.each(webshims.errorLog, function(i, message){
67
- // webshims.errorLog.push(message);
68
- // });
69
- // }
70
- // })();
71
43
 
72
44
  //shortcus
73
45
  var modules = webshims.modules;
@@ -509,11 +481,22 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
509
481
  });
510
482
  },
511
483
  getOptions: (function(){
484
+ var normalName = /\-([a-z])/g;
512
485
  var regs = {};
486
+ var nameRegs = {};
513
487
  var regFn = function(f, upper){
514
488
  return upper.toLowerCase();
515
489
  };
516
- return function(elem, name, bases){
490
+ var nameFn = function(f, dashed){
491
+ return dashed.toUpperCase();
492
+ };
493
+ return function(elem, name, bases, stringAllowed){
494
+ if(nameRegs[name]){
495
+ name = nameRegs[name];
496
+ } else {
497
+ nameRegs[name] = name.replace(normalName, nameFn);
498
+ name = nameRegs[name];
499
+ }
517
500
  var data = elementData(elem, 'cfg'+name);
518
501
  var dataName;
519
502
  var cfg = {};
@@ -522,7 +505,12 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
522
505
  return data;
523
506
  }
524
507
  data = $(elem).data();
525
-
508
+ if(data && typeof data[name] == 'string'){
509
+ if(stringAllowed){
510
+ return elementData(elem, 'cfg'+name, data[name]);
511
+ }
512
+ webshims.error('data-'+ name +' attribute has to be a valid JSON, was: '+ data[name]);
513
+ }
526
514
  if(!bases){
527
515
  bases = [true, {}];
528
516
  } else if(!Array.isArray(bases)){
@@ -531,12 +519,8 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
531
519
  bases.unshift(true, {});
532
520
  }
533
521
 
534
- if(data && data[name]){
535
- if(typeof data[name] == 'object'){
536
- bases.push(data[name]);
537
- } else {
538
- webshims.error('data-'+ name +' attribute has to be a valid JSON, was: '+ data[name]);
539
- }
522
+ if(data && typeof data[name] == 'object'){
523
+ bases.push(data[name]);
540
524
  }
541
525
 
542
526
  if(!regs[name]){
@@ -549,7 +533,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
549
533
  }
550
534
  }
551
535
  bases.push(cfg);
552
-
553
536
  return elementData(elem, 'cfg'+name, $.extend.apply($, bases));
554
537
  };
555
538
  })(),
@@ -579,7 +562,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
579
562
  var resizeTimer;
580
563
  var lastHeight;
581
564
  var lastWidth;
582
-
565
+ var $window = $(window);
583
566
  var docObserve = {
584
567
  init: false,
585
568
  runs: 0,
@@ -599,25 +582,36 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
599
582
  docObserve.runs = 0;
600
583
  }
601
584
  },
602
- handler: function(e){
603
- clearTimeout(resizeTimer);
604
- resizeTimer = setTimeout(function(){
605
- if(e.type == 'resize'){
606
- var width = $(window).width();
607
- var height = $(window).width();
608
- if(height == lastHeight && width == lastWidth){
609
- return;
585
+ handler: (function(){
586
+ var trigger = function(){
587
+ $(document).triggerHandler('updateshadowdom');
588
+ };
589
+ return function(e){
590
+ clearTimeout(resizeTimer);
591
+ resizeTimer = setTimeout(function(){
592
+ if(e.type == 'resize'){
593
+ var width = $window.width();
594
+ var height = $window.width();
595
+
596
+ if(height == lastHeight && width == lastWidth){
597
+ return;
598
+ }
599
+ lastHeight = height;
600
+ lastWidth = width;
601
+
602
+ docObserve.height = docObserve.getHeight();
603
+ docObserve.width = docObserve.getWidth();
604
+ }
605
+
606
+ if(window.requestAnimationFrame){
607
+ requestAnimationFrame(trigger);
608
+ } else {
609
+ setTimeout(trigger, 0);
610
610
  }
611
- lastHeight = height;
612
- lastWidth = width;
613
-
614
- docObserve.height = docObserve.getHeight();
615
- docObserve.width = docObserve.getWidth();
616
611
 
617
- }
618
- $(document).triggerHandler('updateshadowdom');
619
- }, (e.type == 'resize') ? 50 : 9);
620
- },
612
+ }, (e.type == 'resize' && !window.requestAnimationFrame) ? 50 : 0);
613
+ };
614
+ })(),
621
615
  _create: function(){
622
616
  $.each({ Height: "getHeight", Width: "getWidth" }, function(name, type){
623
617
  var body = document.body;
@@ -955,13 +949,17 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
955
949
  webshims.defineNodeNamesProperty(elementNames, prop, {
956
950
  attr: {
957
951
  set: function(val){
958
- this.setAttribute(prop, val);
952
+ if(descs.useContentAttribute){
953
+ webshims.contentAttr(this, prop, val);
954
+ } else {
955
+ this.setAttribute(prop, val);
956
+ }
959
957
  if(descs.set){
960
958
  descs.set.call(this, true);
961
959
  }
962
960
  },
963
961
  get: function(){
964
- var ret = this.getAttribute(prop);
962
+ var ret = (descs.useContentAttribute) ? webshims.contentAttr(this, prop) : this.getAttribute(prop);
965
963
  return (ret == null) ? undefined : prop;
966
964
  }
967
965
  },
@@ -1018,6 +1016,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1018
1016
  });
1019
1017
  }
1020
1018
  };
1019
+
1021
1020
  var select = function(obj){
1022
1021
  var oldLang = obj.__active;
1023
1022
  var selectLang = function(i, lang){
@@ -1025,6 +1024,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1025
1024
  if(obj[lang] || obj.availableLangs.indexOf(lang) != -1){
1026
1025
  if(obj[lang]){
1027
1026
  obj.__active = obj[lang];
1027
+ obj.__activeName = lang;
1028
1028
  } else {
1029
1029
  load(obj.langSrc+lang, obj, curLang.join());
1030
1030
  }
@@ -1034,6 +1034,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1034
1034
  $.each(curLang, selectLang);
1035
1035
  if(!obj.__active){
1036
1036
  obj.__active = obj[''];
1037
+ obj.__activeName = '';
1037
1038
  }
1038
1039
  if(oldLang != obj.__active){
1039
1040
  $(obj).trigger('change');
@@ -139,7 +139,6 @@ webshims.register('form-combat', function($,webshims){
139
139
  };
140
140
 
141
141
  webshims.addReady(function(context){
142
-
143
142
  setTimeout(function(){
144
143
  find(context);
145
144
  }, 4);
@@ -1,3 +1,4 @@
1
+
1
2
  webshims.register('form-core', function($, webshims, window, document, undefined, options){
2
3
  "use strict";
3
4
 
@@ -62,6 +63,7 @@ webshims.register('form-core', function($, webshims, window, document, undefined
62
63
  };
63
64
 
64
65
  var extendSels = function(){
66
+ var matches, matchesOverride;
65
67
  var exp = $.expr[":"];
66
68
  $.extend(exp, {
67
69
  "valid-element": function(elem){
@@ -86,7 +88,15 @@ webshims.register('form-core', function($, webshims, window, document, undefined
86
88
  });
87
89
 
88
90
  // sizzle/jQuery has a bug with :disabled/:enabled selectors
89
- if(Modernizr.fieldsetdisabled && !$('<fieldset disabled=""><input /><fieldset>').find('input').is(':disabled')){
91
+ if(Modernizr.fieldsetdisabled && !$('<fieldset disabled=""><input /><input /></fieldset>').find(':disabled').filter(':disabled').is(':disabled')){
92
+ matches = $.find.matches;
93
+ matchesOverride = {':disabled': 1, ':enabled': 1};
94
+ $.find.matches = function(expr, elements){
95
+ if(matchesOverride[expr]){
96
+ return matches.call(this, '*'+expr, elements);
97
+ }
98
+ return matches.apply(this, arguments);
99
+ };
90
100
  $.extend(exp, {
91
101
  "enabled": function( elem ) {
92
102
  return elem.disabled === false && !$(elem).is('fieldset[disabled] *');
@@ -190,7 +200,7 @@ webshims.register('form-core', function($, webshims, window, document, undefined
190
200
  if(webshims.errorbox && webshims.errorbox.initIvalContentMessage){
191
201
  webshims.errorbox.initIvalContentMessage(elem);
192
202
  }
193
- var message = (webshims.getOptions && webshims.errorbox ? webshims.getOptions(elem, 'errormessage') : $(elem).data('errormessage')) || elem.getAttribute('x-moz-errormessage') || '';
203
+ var message = (webshims.getOptions && webshims.errorbox ? webshims.getOptions(elem, 'errormessage', false, true) : $(elem).data('errormessage')) || elem.getAttribute('x-moz-errormessage') || '';
194
204
  if(key && message[key]){
195
205
  message = message[key];
196
206
  } else if(message) {
@@ -241,5 +251,4 @@ webshims.register('form-core', function($, webshims, window, document, undefined
241
251
  }
242
252
  });
243
253
  webshims.ready('WINDOWLOAD', lazyLoad);
244
-
245
254
  });
@@ -63,7 +63,8 @@ webshims.register('form-datalist-lazy', function($, webshims, window, document,
63
63
  $(opts.input)
64
64
  .attr({
65
65
  //role: 'combobox',
66
- 'aria-haspopup': 'true'
66
+ 'aria-haspopup': 'true',
67
+ 'aria-autocomplete': 'both' //support only list?
67
68
  })
68
69
  .on({
69
70
  'input.datalistWidget': function(){
@@ -239,7 +240,7 @@ webshims.register('form-datalist-lazy', function($, webshims, window, document,
239
240
  value: this.options.noHtmlEscape ? value : value.replace(lReg, '&lt;').replace(gReg, '&gt;'),
240
241
  label: $.trim($.attr(rElem, 'label')) || '',
241
242
  className: rElem.className || '',
242
- elem: options.getOptionContent ? rElem : null
243
+ elem: rElem
243
244
  };
244
245
 
245
246
  if(rItem.label){
@@ -279,7 +280,7 @@ webshims.register('form-datalist-lazy', function($, webshims, window, document,
279
280
  getOptionContent: function(item){
280
281
  var content;
281
282
  var args = [{instance: this, item: item}];
282
- if( ( content = $(this.input).triggerHandler('getoptioncontent', args) || (this.options.getOptionContent && this.options.getOptionContent.apply(this.input, args)) ) && content.indexOf && content.indexOf('option-value') == -1 ){
283
+ if( ( content = $(this.input).triggerHandler('getoptioncontent', args) ) && content.indexOf && content.indexOf('option-value') == -1 ){
283
284
  content += '<span class="option-value" style="display: none;">'+ item.value +'</span>';
284
285
  }
285
286
  if(content == null){
@@ -63,7 +63,8 @@ webshims.register('form-number-date-api', function($, webshims, window, document
63
63
  cache.type = getType(input[0]);
64
64
  }
65
65
  if(cache.type == 'week'){return false;}
66
- var ret = (validityState || {}).stepMismatch || false, base;
66
+ var base, attrVal;
67
+ var ret = (validityState || {}).stepMismatch || false;
67
68
  if(typeModels[cache.type] && typeModels[cache.type].step){
68
69
  if( !('step' in cache) ){
69
70
  cache.step = webshims.getStep(input[0], cache.type);
@@ -78,6 +79,11 @@ webshims.register('form-number-date-api', function($, webshims, window, document
78
79
 
79
80
  addMinMaxNumberToCache('min', input, cache);
80
81
  base = cache.minAsNumber;
82
+
83
+ if(isNaN(base) && (attrVal = input.prop('defaultValue'))){
84
+ base = typeModels[cache.type].asNumber( attrVal );
85
+ }
86
+
81
87
  if(isNaN(base)){
82
88
  base = typeModels[cache.type].stepBase || 0;
83
89
  }
@@ -192,7 +198,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
192
198
  var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
193
199
  prop: {
194
200
  value: function(factor){
195
- var step, val, dateVal, valModStep, alignValue, cache;
201
+ var step, val, dateVal, valModStep, alignValue, cache, base, attrVal;
196
202
  var type = getType(this);
197
203
  if(typeModels[type] && typeModels[type].asNumber){
198
204
  cache = {type: type};
@@ -219,10 +225,21 @@ webshims.register('form-number-date-api', function($, webshims, window, document
219
225
  webshims.addMinMaxNumberToCache('min', $(this), cache);
220
226
  webshims.addMinMaxNumberToCache('max', $(this), cache);
221
227
 
228
+ base = cache.minAsNumber;
229
+
230
+ if(isNaN(base) && (attrVal = $.prop(this, 'defaultValue'))){
231
+ base = typeModels[type].asNumber( attrVal );
232
+ }
233
+
234
+ if(!base){
235
+ base = 0;
236
+ }
237
+
222
238
  step *= factor;
223
239
 
224
240
  val = (val + step).toFixed(5) * 1;
225
- valModStep = (val - (cache.minAsNumber || 0)) % step;
241
+
242
+ valModStep = (val - base) % step;
226
243
 
227
244
  if ( valModStep && (Math.abs(valModStep) > EPS) ) {
228
245
  alignValue = val - valModStep;
@@ -2,21 +2,30 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2
2
  "use strict";
3
3
  var curCfg;
4
4
  var formcfg = webshims.formcfg;
5
+ var hasFormValidation = Modernizr.formvalidation && !webshims.bugs.bustedValidity;
5
6
  var monthDigits = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
6
7
  var stopPropagation = function(e){
7
8
  e.stopImmediatePropagation();
8
9
  };
9
- var getMonthOptions = (function(){
10
- var str;
11
- return function(){
12
- if(!str){
13
- str = ('<option value=""></option>')+$.map(monthDigits, function(val){
14
- return '<option value="'+val+'"]>'+val+'</option>';
15
- }).join('');
16
- }
17
- return str;
18
- };
19
- })();
10
+ var getMonthOptions = function(opts){
11
+ var selectName = 'monthSelect'+opts.formatMonthNames;
12
+ if(!curCfg[selectName]){
13
+ var labels = curCfg.date[opts.formatMonthNames] || monthDigits;
14
+ curCfg[selectName] = ('<option value=""></option>')+$.map(monthDigits, function(val, i){
15
+ return '<option value="'+val+'"]>'+labels[i]+'</option>';
16
+ }).join('');
17
+ }
18
+ return curCfg[selectName];
19
+ };
20
+ var daySelect = '<select class="dd"><option value=""></option>'+ (function(){
21
+ var i = 1;
22
+ var opts = [];
23
+ while(i < 32){
24
+ opts.push('<option>'+ ((i < 10) ? '0'+ i : i) +'</option>' );
25
+ i++;
26
+ }
27
+ return opts.join('');
28
+ })() +'</select>';
20
29
  var createFormat = function(name){
21
30
  if(!curCfg.patterns[name+'Obj']){
22
31
  var obj = {};
@@ -30,15 +39,19 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
30
39
  date: {
31
40
  _create: function(opts){
32
41
  var obj = {
33
- splits: [$('<input type="text" class="yy" size="4" inputmode="numeric" />')[0]]
42
+ splits: [$('<input type="text" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]]
34
43
  };
44
+
35
45
  if(opts.monthSelect){
36
46
  obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
37
47
  } else {
38
48
  obj.splits.push($('<input type="text" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
39
49
  }
40
- obj.splits.push($('<input type="text" class="dd ws-spin" inputmode="numeric" maxlength="2" size="2" />')[0]);
41
-
50
+ if(opts.daySelect){
51
+ obj.splits.push($(daySelect)[0]);
52
+ } else {
53
+ obj.splits.push($('<input type="text" class="dd ws-spin" inputmode="numeric" maxlength="2" size="2" />')[0]);
54
+ }
42
55
 
43
56
  obj.elements = [obj.splits[0], $('<span class="ws-input-seperator" />')[0], obj.splits[1], $('<span class="ws-input-seperator" />')[0], obj.splits[2]];
44
57
  return obj;
@@ -68,7 +81,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
68
81
  splits: [$('<input type="text" class="yy" inputmode="numeric" size="4" />')[0]]
69
82
  };
70
83
  if(opts.monthSelect){
71
- obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions(opts)+'</select>')[0]);
84
+ obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
72
85
  } else {
73
86
  obj.splits.push($('<input type="text" class="mm ws-spin" />')[0]);
74
87
  if(opts.onlyMonthDigits){
@@ -472,18 +485,30 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
472
485
  },
473
486
  date: function(val, opts, noCorrect){
474
487
  createFormat('d');
475
- var i;
476
- var obj;
488
+ var tmp, obj;
489
+ var ret = '';
477
490
  if(opts.splitInput){
478
491
  obj = {yy: 0, mm: 1, dd: 2};
479
492
  } else {
480
493
  obj = curCfg.patterns.dObj;
481
494
  val = val.split(curCfg.dFormat);
482
495
  }
483
-
484
- return (val.length == 3 && val[0] && val[1] && val[2] && (!noCorrect || (val[obj.yy].length > 3 && val[obj.mm].length == 2 && val[obj.dd].length == 2))) ?
485
- ([addZero(val[obj.yy]), addZero(val[obj.mm]), addZero(val[obj.dd])]).join('-') :
486
- ''
496
+ if(val.length == 3 && val[0] && val[1] && val[2] && (!noCorrect || (val[obj.yy].length > 3 && val[obj.mm].length == 2 && val[obj.dd].length == 2))){
497
+ if(val[obj.mm] > 12 && val[obj.dd] < 13){
498
+ tmp = val[obj.dd];
499
+ val[obj.dd] = val[obj.mm];
500
+ val[obj.mm] = tmp;
501
+ }
502
+ if(val[obj.yy].length < 4){
503
+ tmp = ((new Date()).getFullYear() +'').substr(0, 4 - val[obj.yy].length);
504
+ if(val[obj.yy] > 50){
505
+ tmp--;
506
+ }
507
+ val[obj.yy] = tmp + val[obj.yy];
508
+ }
509
+ ret = ([addZero(val[obj.yy]), addZero(val[obj.mm]), addZero(val[obj.dd])]).join('-');
510
+ }
511
+ return ret
487
512
  ;
488
513
  },
489
514
  color: function(val, opts){
@@ -583,7 +608,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
583
608
  this.buttonWrapper = $('<span class="input-buttons '+this.type+'-input-buttons"></span>').insertAfter(this.element);
584
609
  this.options.containerElements.push(this.buttonWrapper[0]);
585
610
 
586
- o.mirrorValidity = o.mirrorValidity && this.orig && Modernizr.formvalidation && !webshims.bugs.bustedValidity;
611
+ o.mirrorValidity = o.mirrorValidity && this.orig && hasFormValidation;
587
612
 
588
613
  if(o.splitInput && this._addSplitInputs){
589
614
  if(o.monthSelect){
@@ -687,7 +712,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
687
712
 
688
713
  if(this.type != 'color'){
689
714
  (function(){
690
- var localeChange ;
715
+ var localeChange, select, selectVal;
691
716
  if(!o.splitInput){
692
717
  localeChange = function(){
693
718
 
@@ -702,6 +727,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
702
727
  } else {
703
728
  localeChange = function(){
704
729
  that.reorderInputs();
730
+ if(o.monthSelect){
731
+ select = that.inputElements.filter('select.mm');
732
+ selectVal = select.prop('value');
733
+ select.html(getMonthOptions(o));
734
+ select.prop('value', selectVal);
735
+ }
705
736
  };
706
737
  that.reorderInputs();
707
738
  }
@@ -735,7 +766,11 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
735
766
  }
736
767
  if(options.splitInput && typeof placeholder == 'object'){
737
768
  $.each(this.splits, function(i, elem){
738
- $.prop(elem, 'placeholder', placeholder[i]);
769
+ if($.nodeName(elem, 'select')){
770
+ $(elem).children('option:first-child').text(placeholder[i]);
771
+ } else {
772
+ $.prop(elem, 'placeholder', placeholder[i]);
773
+ }
739
774
  });
740
775
  } else {
741
776
  this.element.prop('placeholder', placeholder);
@@ -819,14 +854,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
819
854
  }
820
855
 
821
856
 
822
- if(!o.min && typeof o.relMin == 'number'){
823
- o.min = this.asValue(this.getRelNumber(o.relMin));
824
- $.prop(this.orig, 'min', o.min);
825
- }
826
857
 
827
- if(!o.max && typeof o.relMax == 'number'){
828
- o.max = this.asValue(this.getRelNumber(o.relMax));
829
- $.prop(this.orig, 'max', o.max);
858
+ if((!o.max && typeof o.relMax == 'number') || (!o.min && typeof o.relMin == 'number')){
859
+ webshims.error('relMax/relMin are not supported anymore')
830
860
  }
831
861
  this._init = true;
832
862
  },
@@ -895,6 +925,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
895
925
  if(!this._init || force || this.options[name] !== val){
896
926
  if(isValue){
897
927
  this._beforeValue(val);
928
+ } else {
929
+ this.elemHelper.prop(name, val);
898
930
  }
899
931
 
900
932
  val = formatVal[this.type](val, this.options);
@@ -945,9 +977,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
945
977
 
946
978
  $.fn.spinbtnUI = function(opts){
947
979
  opts = $.extend({
948
- monthNames: 'monthNames',
949
- size: 1,
950
- startView: 0
980
+ monthNames: 'monthNames'
951
981
  }, opts);
952
982
  return this.each(function(){
953
983
  $.webshims.objectCreate(spinBtnProto, {
@@ -1019,10 +1049,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1019
1049
 
1020
1050
 
1021
1051
  picker.commonInit = function(data, popover){
1052
+ if(data._commonInit){return;}
1053
+ data._commonInit = true;
1022
1054
  var tabbable;
1023
1055
 
1024
1056
  popover.isDirty = true;
1025
-
1057
+
1026
1058
  popover.element.on('updatepickercontent pickerchange', function(){
1027
1059
  tabbable = false;
1028
1060
  });
@@ -1062,6 +1094,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1062
1094
  return function(prop){
1063
1095
  if(prop == 'value' && !data.options.inlinePicker){return;}
1064
1096
  popover.isDirty = true;
1097
+
1065
1098
  if(popover.isVisible){
1066
1099
  clearTimeout(timer);
1067
1100
  timer = setTimeout(update, 9);
@@ -1129,30 +1162,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1129
1162
 
1130
1163
  options.containerElements.push(popover.element[0]);
1131
1164
 
1132
- if(data.type != 'color'){
1133
- if(options.yearButtons){
1134
- options.startView = 2;
1135
- }
1136
- if(!options.startView){
1137
- options.startView = 0;
1138
- }
1139
-
1140
- if(data.type == 'time'){
1141
- options.minView = 3;
1142
- options.startView = 3;
1143
- }
1144
- if(!options.minView){
1145
- options.minView = 0;
1146
- }
1147
- if(options.startView < options.minView){
1148
- options.startView = options.minView;
1149
- webshims.warn("wrong config for minView/startView.");
1150
- }
1151
- if(!options.size){
1152
- options.size = 1;
1153
- }
1154
- }
1155
-
1156
1165
  popover.element
1157
1166
  .addClass(data.type+'-popover input-picker')
1158
1167
  .attr({role: 'application'})
@@ -1213,12 +1222,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1213
1222
  };
1214
1223
  data.inputElements.on({
1215
1224
  keydown: function(e){
1216
- if(e.keyCode == 40 && e.altKey){
1225
+ if(e.keyCode == 40 && e.altKey && !$.nodeName(e.target, 'select')){
1217
1226
  open();
1218
1227
  }
1219
1228
  },
1220
- focus: function(){
1221
- if(!popover.stopOpen && (options.buttonOnly || options.openOnFocus || (mouseFocus && options.openOnMouseFocus))){
1229
+ focus: function(e){
1230
+ if(!popover.stopOpen && (options.buttonOnly || options.openOnFocus || (mouseFocus && options.openOnMouseFocus)) && !$.nodeName(e.target, 'select')){
1222
1231
  popover.openedByFocus = options.buttonOnly ? false : !options.noInput;
1223
1232
  show();
1224
1233
  } else {
@@ -1235,7 +1244,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1235
1244
  popover.activeElement.focus();
1236
1245
  }, 4);
1237
1246
  }
1238
- if(data.element.is(':focus')){
1247
+ if(data.element.is(':focus') && !$.nodeName(e.target, 'select')){
1239
1248
  popover.openedByFocus = options.buttonOnly ? false : !options.noInput;
1240
1249
  show();
1241
1250
  }
@@ -1463,10 +1472,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1463
1472
  opts[optsName] = $.attr(this, copyAttrs[i]) || opts[optsName];
1464
1473
  }
1465
1474
  }
1466
- if(opts.monthSelect){
1467
- opts.onlyMonthDigits = true;
1468
- }
1469
- if(opts.onlyMonthDigits){
1475
+
1476
+ if(opts.onlyMonthDigits || (!opts.formatMonthNames && opts.monthSelect)){
1470
1477
  opts.formatMonthNames = 'monthDigits';
1471
1478
  }
1472
1479
  data.shim = inputTypes[type]._create(opts);
@@ -1516,11 +1523,11 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1516
1523
 
1517
1524
  data.shim.element.on('change input', stopPropagation);
1518
1525
 
1519
- if(Modernizr.formvalidation){
1526
+ if(hasFormValidation){
1520
1527
  $(opts.orig).on('firstinvalid', function(e){
1521
1528
  if(!webshims.fromSubmit && isCheckValidity){return;}
1522
1529
  $(opts.orig).off('invalid.replacedwidgetbubble').on('invalid.replacedwidgetbubble', function(evt){
1523
- if(!e.isInvalidUIPrevented() && !evt.isDefaultPrevented()){
1530
+ if(!evt.isDefaultPrevented()){
1524
1531
  webshims.validityAlert.showFor( e.target );
1525
1532
  e.preventDefault();
1526
1533
  evt.preventDefault();
@@ -1547,7 +1554,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1547
1554
  };
1548
1555
 
1549
1556
 
1550
- if(Modernizr.formvalidation){
1557
+ if(hasFormValidation){
1551
1558
  ['input', 'form'].forEach(function(name){
1552
1559
  var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
1553
1560
  prop: {
@@ -1598,7 +1605,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1598
1605
  if(!modernizrInputTypes[name] || replace[name]){
1599
1606
  extendType(name, {
1600
1607
  _create: function(opts, set){
1601
- if(opts.monthSelect){
1608
+ if(opts.monthSelect || opts.daySelect){
1602
1609
  opts.splitInput = true;
1603
1610
  }
1604
1611
  if(opts.splitInput && !splitInputs[name]){