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');
@@ -1138,8 +1139,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1138
1139
  }
1139
1140
  });
1140
1141
 
1141
- })(webshims.$, document);
1142
- webshims.register('form-message', function($, webshims, window, document, undefined, options){
1142
+ })(webshims.$, document);;webshims.register('form-message', function($, webshims, window, document, undefined, options){
1143
1143
  "use strict";
1144
1144
  if(options.lazyCustomMessages){
1145
1145
  options.customMessages = true;
@@ -209,8 +209,7 @@ webshims.register('form-native-extend', function($, webshims, window, doc, undef
209
209
  });
210
210
 
211
211
 
212
- });
213
- webshims.register('form-number-date-api', function($, webshims, window, document, undefined, options){
212
+ });;webshims.register('form-number-date-api', function($, webshims, window, document, undefined, options){
214
213
  "use strict";
215
214
  if(!webshims.addInputType){
216
215
  webshims.error("you can not call forms-ext feature after calling forms feature. call both at once instead: $.webshims.polyfill('forms forms-ext')");
@@ -275,7 +274,8 @@ webshims.register('form-number-date-api', function($, webshims, window, document
275
274
  cache.type = getType(input[0]);
276
275
  }
277
276
  if(cache.type == 'week'){return false;}
278
- var ret = (validityState || {}).stepMismatch || false, base;
277
+ var base, attrVal;
278
+ var ret = (validityState || {}).stepMismatch || false;
279
279
  if(typeModels[cache.type] && typeModels[cache.type].step){
280
280
  if( !('step' in cache) ){
281
281
  cache.step = webshims.getStep(input[0], cache.type);
@@ -290,6 +290,11 @@ webshims.register('form-number-date-api', function($, webshims, window, document
290
290
 
291
291
  addMinMaxNumberToCache('min', input, cache);
292
292
  base = cache.minAsNumber;
293
+
294
+ if(isNaN(base) && (attrVal = input.prop('defaultValue'))){
295
+ base = typeModels[cache.type].asNumber( attrVal );
296
+ }
297
+
293
298
  if(isNaN(base)){
294
299
  base = typeModels[cache.type].stepBase || 0;
295
300
  }
@@ -404,7 +409,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
404
409
  var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
405
410
  prop: {
406
411
  value: function(factor){
407
- var step, val, dateVal, valModStep, alignValue, cache;
412
+ var step, val, dateVal, valModStep, alignValue, cache, base, attrVal;
408
413
  var type = getType(this);
409
414
  if(typeModels[type] && typeModels[type].asNumber){
410
415
  cache = {type: type};
@@ -431,10 +436,21 @@ webshims.register('form-number-date-api', function($, webshims, window, document
431
436
  webshims.addMinMaxNumberToCache('min', $(this), cache);
432
437
  webshims.addMinMaxNumberToCache('max', $(this), cache);
433
438
 
439
+ base = cache.minAsNumber;
440
+
441
+ if(isNaN(base) && (attrVal = $.prop(this, 'defaultValue'))){
442
+ base = typeModels[type].asNumber( attrVal );
443
+ }
444
+
445
+ if(!base){
446
+ base = 0;
447
+ }
448
+
434
449
  step *= factor;
435
450
 
436
451
  val = (val + step).toFixed(5) * 1;
437
- valModStep = (val - (cache.minAsNumber || 0)) % step;
452
+
453
+ valModStep = (val - base) % step;
438
454
 
439
455
  if ( valModStep && (Math.abs(valModStep) > EPS) ) {
440
456
  alignValue = val - valModStep;
@@ -798,8 +814,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
798
814
  });
799
815
  }
800
816
 
801
- });
802
- (function($){
817
+ });;(function($){
803
818
 
804
819
  var id = 0;
805
820
  var isNumber = function(string){
@@ -819,7 +834,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
819
834
 
820
835
  this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min ws-range-progress" /><span class="ws-range-rail ws-range-track"><span class="ws-range-thumb" /></span>');
821
836
  this.trail = $('.ws-range-track', this.element);
822
- this.range = $('.ws-range-progress ', this.element);
837
+ this.range = $('.ws-range-progress', this.element);
823
838
  this.thumb = $('.ws-range-thumb', this.trail);
824
839
 
825
840
  this.updateMetrics();
@@ -839,7 +854,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
839
854
  },
840
855
  value: $.noop,
841
856
  _value: function(val, _noNormalize, animate){
842
- var left, posDif;
857
+ var left, posDif, textValue;
843
858
  var o = this.options;
844
859
  var oVal = val;
845
860
  var thumbStyle = {};
@@ -888,9 +903,15 @@ webshims.register('form-number-date-api', function($, webshims, window, document
888
903
  if(this.orig && (oVal != val || (!this._init && this.orig.value != val)) ){
889
904
  this.options._change(val);
890
905
  }
906
+
907
+ textValue = this.options.textValue ? this.options.textValue(this.options.value) : this.options.options[this.options.value] || this.options.value;
891
908
  this.element.attr({
892
909
  'aria-valuenow': this.options.value,
893
- 'aria-valuetext': this.options.textValue ? this.options.textValue(this.options.value) : this.options.options[this.options.value] || this.options.value
910
+ 'aria-valuetext': textValue
911
+ });
912
+ this.thumb.attr({
913
+ 'data-value': this.options.value,
914
+ 'data-valuetext': textValue
894
915
  });
895
916
  },
896
917
  initDataList: function(){
@@ -934,13 +955,19 @@ webshims.register('form-number-date-api', function($, webshims, window, document
934
955
  $.each(o.options, function(val, label){
935
956
  if(!isNumber(val) || val < min || val > max){return;}
936
957
  var left = 100 * ((val - min) / (max - min));
937
- var title = o.showLabels && label ? ' title="'+ label +'"' : '';
958
+ var attr = '';
959
+ if(label){
960
+ attr += 'data-label="'+label+'"';
961
+ if(o.showLabels){
962
+ attr += ' title="'+label+'"';
963
+ }
964
+ }
938
965
  if(that.vertical){
939
966
  left = Math.abs(left - 100);
940
967
  }
941
968
 
942
969
  that.posCenter(
943
- $('<span class="ws-range-ticks"'+ title +' data-label="'+label+'" style="'+(that.dirs.left)+': '+left+'%;" />').appendTo(trail)
970
+ $('<span class="ws-range-ticks"'+ attr +' style="'+(that.dirs.left)+': '+left+'%;" />').appendTo(trail)
944
971
  );
945
972
  });
946
973
  },
@@ -1349,33 +1376,36 @@ webshims.register('form-number-date-api', function($, webshims, window, document
1349
1376
  });
1350
1377
  };
1351
1378
  if(window.webshims && webshims.isReady){
1352
- webshims.ready('es5', function(){
1353
- webshims.isReady('range-ui', true);
1354
- });
1355
- if(webshims._polyfill){
1356
- webshims._polyfill(['es5']);
1357
- }
1379
+ webshims.isReady('range-ui', true);
1358
1380
  }
1359
- })(window.webshims ? webshims.$ : jQuery);
1360
- webshims.register('form-number-date-ui', function($, webshims, window, document, undefined, options){
1381
+ })(window.webshims ? webshims.$ : jQuery);;webshims.register('form-number-date-ui', function($, webshims, window, document, undefined, options){
1361
1382
  "use strict";
1362
1383
  var curCfg;
1363
1384
  var formcfg = webshims.formcfg;
1385
+ var hasFormValidation = Modernizr.formvalidation && !webshims.bugs.bustedValidity;
1364
1386
  var monthDigits = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
1365
1387
  var stopPropagation = function(e){
1366
1388
  e.stopImmediatePropagation();
1367
1389
  };
1368
- var getMonthOptions = (function(){
1369
- var str;
1370
- return function(){
1371
- if(!str){
1372
- str = ('<option value=""></option>')+$.map(monthDigits, function(val){
1373
- return '<option value="'+val+'"]>'+val+'</option>';
1374
- }).join('');
1375
- }
1376
- return str;
1377
- };
1378
- })();
1390
+ var getMonthOptions = function(opts){
1391
+ var selectName = 'monthSelect'+opts.formatMonthNames;
1392
+ if(!curCfg[selectName]){
1393
+ var labels = curCfg.date[opts.formatMonthNames] || monthDigits;
1394
+ curCfg[selectName] = ('<option value=""></option>')+$.map(monthDigits, function(val, i){
1395
+ return '<option value="'+val+'"]>'+labels[i]+'</option>';
1396
+ }).join('');
1397
+ }
1398
+ return curCfg[selectName];
1399
+ };
1400
+ var daySelect = '<select class="dd"><option value=""></option>'+ (function(){
1401
+ var i = 1;
1402
+ var opts = [];
1403
+ while(i < 32){
1404
+ opts.push('<option>'+ ((i < 10) ? '0'+ i : i) +'</option>' );
1405
+ i++;
1406
+ }
1407
+ return opts.join('');
1408
+ })() +'</select>';
1379
1409
  var createFormat = function(name){
1380
1410
  if(!curCfg.patterns[name+'Obj']){
1381
1411
  var obj = {};
@@ -1389,15 +1419,19 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1389
1419
  date: {
1390
1420
  _create: function(opts){
1391
1421
  var obj = {
1392
- splits: [$('<input type="text" class="yy" size="4" inputmode="numeric" />')[0]]
1422
+ splits: [$('<input type="text" class="yy" size="4" inputmode="numeric" maxlength="4" />')[0]]
1393
1423
  };
1424
+
1394
1425
  if(opts.monthSelect){
1395
1426
  obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
1396
1427
  } else {
1397
1428
  obj.splits.push($('<input type="text" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
1398
1429
  }
1399
- obj.splits.push($('<input type="text" class="dd ws-spin" inputmode="numeric" maxlength="2" size="2" />')[0]);
1400
-
1430
+ if(opts.daySelect){
1431
+ obj.splits.push($(daySelect)[0]);
1432
+ } else {
1433
+ obj.splits.push($('<input type="text" class="dd ws-spin" inputmode="numeric" maxlength="2" size="2" />')[0]);
1434
+ }
1401
1435
 
1402
1436
  obj.elements = [obj.splits[0], $('<span class="ws-input-seperator" />')[0], obj.splits[1], $('<span class="ws-input-seperator" />')[0], obj.splits[2]];
1403
1437
  return obj;
@@ -1427,7 +1461,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1427
1461
  splits: [$('<input type="text" class="yy" inputmode="numeric" size="4" />')[0]]
1428
1462
  };
1429
1463
  if(opts.monthSelect){
1430
- obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions(opts)+'</select>')[0]);
1464
+ obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
1431
1465
  } else {
1432
1466
  obj.splits.push($('<input type="text" class="mm ws-spin" />')[0]);
1433
1467
  if(opts.onlyMonthDigits){
@@ -1831,18 +1865,30 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1831
1865
  },
1832
1866
  date: function(val, opts, noCorrect){
1833
1867
  createFormat('d');
1834
- var i;
1835
- var obj;
1868
+ var tmp, obj;
1869
+ var ret = '';
1836
1870
  if(opts.splitInput){
1837
1871
  obj = {yy: 0, mm: 1, dd: 2};
1838
1872
  } else {
1839
1873
  obj = curCfg.patterns.dObj;
1840
1874
  val = val.split(curCfg.dFormat);
1841
1875
  }
1842
-
1843
- 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))) ?
1844
- ([addZero(val[obj.yy]), addZero(val[obj.mm]), addZero(val[obj.dd])]).join('-') :
1845
- ''
1876
+ 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))){
1877
+ if(val[obj.mm] > 12 && val[obj.dd] < 13){
1878
+ tmp = val[obj.dd];
1879
+ val[obj.dd] = val[obj.mm];
1880
+ val[obj.mm] = tmp;
1881
+ }
1882
+ if(val[obj.yy].length < 4){
1883
+ tmp = ((new Date()).getFullYear() +'').substr(0, 4 - val[obj.yy].length);
1884
+ if(val[obj.yy] > 50){
1885
+ tmp--;
1886
+ }
1887
+ val[obj.yy] = tmp + val[obj.yy];
1888
+ }
1889
+ ret = ([addZero(val[obj.yy]), addZero(val[obj.mm]), addZero(val[obj.dd])]).join('-');
1890
+ }
1891
+ return ret
1846
1892
  ;
1847
1893
  },
1848
1894
  color: function(val, opts){
@@ -1942,7 +1988,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1942
1988
  this.buttonWrapper = $('<span class="input-buttons '+this.type+'-input-buttons"></span>').insertAfter(this.element);
1943
1989
  this.options.containerElements.push(this.buttonWrapper[0]);
1944
1990
 
1945
- o.mirrorValidity = o.mirrorValidity && this.orig && Modernizr.formvalidation && !webshims.bugs.bustedValidity;
1991
+ o.mirrorValidity = o.mirrorValidity && this.orig && hasFormValidation;
1946
1992
 
1947
1993
  if(o.splitInput && this._addSplitInputs){
1948
1994
  if(o.monthSelect){
@@ -2046,7 +2092,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2046
2092
 
2047
2093
  if(this.type != 'color'){
2048
2094
  (function(){
2049
- var localeChange ;
2095
+ var localeChange, select, selectVal;
2050
2096
  if(!o.splitInput){
2051
2097
  localeChange = function(){
2052
2098
 
@@ -2061,6 +2107,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2061
2107
  } else {
2062
2108
  localeChange = function(){
2063
2109
  that.reorderInputs();
2110
+ if(o.monthSelect){
2111
+ select = that.inputElements.filter('select.mm');
2112
+ selectVal = select.prop('value');
2113
+ select.html(getMonthOptions(o));
2114
+ select.prop('value', selectVal);
2115
+ }
2064
2116
  };
2065
2117
  that.reorderInputs();
2066
2118
  }
@@ -2094,7 +2146,11 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2094
2146
  }
2095
2147
  if(options.splitInput && typeof placeholder == 'object'){
2096
2148
  $.each(this.splits, function(i, elem){
2097
- $.prop(elem, 'placeholder', placeholder[i]);
2149
+ if($.nodeName(elem, 'select')){
2150
+ $(elem).children('option:first-child').text(placeholder[i]);
2151
+ } else {
2152
+ $.prop(elem, 'placeholder', placeholder[i]);
2153
+ }
2098
2154
  });
2099
2155
  } else {
2100
2156
  this.element.prop('placeholder', placeholder);
@@ -2178,14 +2234,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2178
2234
  }
2179
2235
 
2180
2236
 
2181
- if(!o.min && typeof o.relMin == 'number'){
2182
- o.min = this.asValue(this.getRelNumber(o.relMin));
2183
- $.prop(this.orig, 'min', o.min);
2184
- }
2185
2237
 
2186
- if(!o.max && typeof o.relMax == 'number'){
2187
- o.max = this.asValue(this.getRelNumber(o.relMax));
2188
- $.prop(this.orig, 'max', o.max);
2238
+ if((!o.max && typeof o.relMax == 'number') || (!o.min && typeof o.relMin == 'number')){
2239
+ webshims.error('relMax/relMin are not supported anymore')
2189
2240
  }
2190
2241
  this._init = true;
2191
2242
  },
@@ -2254,6 +2305,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2254
2305
  if(!this._init || force || this.options[name] !== val){
2255
2306
  if(isValue){
2256
2307
  this._beforeValue(val);
2308
+ } else {
2309
+ this.elemHelper.prop(name, val);
2257
2310
  }
2258
2311
 
2259
2312
  val = formatVal[this.type](val, this.options);
@@ -2304,9 +2357,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2304
2357
 
2305
2358
  $.fn.spinbtnUI = function(opts){
2306
2359
  opts = $.extend({
2307
- monthNames: 'monthNames',
2308
- size: 1,
2309
- startView: 0
2360
+ monthNames: 'monthNames'
2310
2361
  }, opts);
2311
2362
  return this.each(function(){
2312
2363
  $.webshims.objectCreate(spinBtnProto, {
@@ -2378,10 +2429,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2378
2429
 
2379
2430
 
2380
2431
  picker.commonInit = function(data, popover){
2432
+ if(data._commonInit){return;}
2433
+ data._commonInit = true;
2381
2434
  var tabbable;
2382
2435
 
2383
2436
  popover.isDirty = true;
2384
-
2437
+
2385
2438
  popover.element.on('updatepickercontent pickerchange', function(){
2386
2439
  tabbable = false;
2387
2440
  });
@@ -2421,6 +2474,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2421
2474
  return function(prop){
2422
2475
  if(prop == 'value' && !data.options.inlinePicker){return;}
2423
2476
  popover.isDirty = true;
2477
+
2424
2478
  if(popover.isVisible){
2425
2479
  clearTimeout(timer);
2426
2480
  timer = setTimeout(update, 9);
@@ -2488,30 +2542,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2488
2542
 
2489
2543
  options.containerElements.push(popover.element[0]);
2490
2544
 
2491
- if(data.type != 'color'){
2492
- if(options.yearButtons){
2493
- options.startView = 2;
2494
- }
2495
- if(!options.startView){
2496
- options.startView = 0;
2497
- }
2498
-
2499
- if(data.type == 'time'){
2500
- options.minView = 3;
2501
- options.startView = 3;
2502
- }
2503
- if(!options.minView){
2504
- options.minView = 0;
2505
- }
2506
- if(options.startView < options.minView){
2507
- options.startView = options.minView;
2508
- webshims.warn("wrong config for minView/startView.");
2509
- }
2510
- if(!options.size){
2511
- options.size = 1;
2512
- }
2513
- }
2514
-
2515
2545
  popover.element
2516
2546
  .addClass(data.type+'-popover input-picker')
2517
2547
  .attr({role: 'application'})
@@ -2572,12 +2602,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2572
2602
  };
2573
2603
  data.inputElements.on({
2574
2604
  keydown: function(e){
2575
- if(e.keyCode == 40 && e.altKey){
2605
+ if(e.keyCode == 40 && e.altKey && !$.nodeName(e.target, 'select')){
2576
2606
  open();
2577
2607
  }
2578
2608
  },
2579
- focus: function(){
2580
- if(!popover.stopOpen && (options.buttonOnly || options.openOnFocus || (mouseFocus && options.openOnMouseFocus))){
2609
+ focus: function(e){
2610
+ if(!popover.stopOpen && (options.buttonOnly || options.openOnFocus || (mouseFocus && options.openOnMouseFocus)) && !$.nodeName(e.target, 'select')){
2581
2611
  popover.openedByFocus = options.buttonOnly ? false : !options.noInput;
2582
2612
  show();
2583
2613
  } else {
@@ -2594,7 +2624,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2594
2624
  popover.activeElement.focus();
2595
2625
  }, 4);
2596
2626
  }
2597
- if(data.element.is(':focus')){
2627
+ if(data.element.is(':focus') && !$.nodeName(e.target, 'select')){
2598
2628
  popover.openedByFocus = options.buttonOnly ? false : !options.noInput;
2599
2629
  show();
2600
2630
  }
@@ -2822,10 +2852,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2822
2852
  opts[optsName] = $.attr(this, copyAttrs[i]) || opts[optsName];
2823
2853
  }
2824
2854
  }
2825
- if(opts.monthSelect){
2826
- opts.onlyMonthDigits = true;
2827
- }
2828
- if(opts.onlyMonthDigits){
2855
+
2856
+ if(opts.onlyMonthDigits || (!opts.formatMonthNames && opts.monthSelect)){
2829
2857
  opts.formatMonthNames = 'monthDigits';
2830
2858
  }
2831
2859
  data.shim = inputTypes[type]._create(opts);
@@ -2875,11 +2903,11 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2875
2903
 
2876
2904
  data.shim.element.on('change input', stopPropagation);
2877
2905
 
2878
- if(Modernizr.formvalidation){
2906
+ if(hasFormValidation){
2879
2907
  $(opts.orig).on('firstinvalid', function(e){
2880
2908
  if(!webshims.fromSubmit && isCheckValidity){return;}
2881
2909
  $(opts.orig).off('invalid.replacedwidgetbubble').on('invalid.replacedwidgetbubble', function(evt){
2882
- if(!e.isInvalidUIPrevented() && !evt.isDefaultPrevented()){
2910
+ if(!evt.isDefaultPrevented()){
2883
2911
  webshims.validityAlert.showFor( e.target );
2884
2912
  e.preventDefault();
2885
2913
  evt.preventDefault();
@@ -2906,7 +2934,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2906
2934
  };
2907
2935
 
2908
2936
 
2909
- if(Modernizr.formvalidation){
2937
+ if(hasFormValidation){
2910
2938
  ['input', 'form'].forEach(function(name){
2911
2939
  var desc = webshims.defineNodeNameProperty(name, 'checkValidity', {
2912
2940
  prop: {
@@ -2957,7 +2985,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2957
2985
  if(!modernizrInputTypes[name] || replace[name]){
2958
2986
  extendType(name, {
2959
2987
  _create: function(opts, set){
2960
- if(opts.monthSelect){
2988
+ if(opts.monthSelect || opts.daySelect){
2961
2989
  opts.splitInput = true;
2962
2990
  }
2963
2991
  if(opts.splitInput && !splitInputs[name]){