webshims-rails 1.11.3.1 → 1.11.6

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 +4 -4
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +114 -104
  4. data/vendor/assets/javascripts/webshims/extras/mousepress.js +5 -5
  5. data/vendor/assets/javascripts/webshims/polyfiller.js +156 -207
  6. data/vendor/assets/javascripts/webshims/shims/$ajax.js +862 -0
  7. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js +20 -0
  8. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/flashcanvas.js +20 -0
  9. data/vendor/assets/javascripts/webshims/shims/color-picker.js +12 -12
  10. data/vendor/assets/javascripts/webshims/shims/combos/1.js +62 -32
  11. data/vendor/assets/javascripts/webshims/shims/combos/10.js +192 -509
  12. data/vendor/assets/javascripts/webshims/shims/combos/11.js +96 -415
  13. data/vendor/assets/javascripts/webshims/shims/combos/12.js +36 -26
  14. data/vendor/assets/javascripts/webshims/shims/combos/13.js +36 -26
  15. data/vendor/assets/javascripts/webshims/shims/combos/14.js +1007 -359
  16. data/vendor/assets/javascripts/webshims/shims/combos/15.js +310 -235
  17. data/vendor/assets/javascripts/webshims/shims/combos/16.js +313 -237
  18. data/vendor/assets/javascripts/webshims/shims/combos/17.js +96 -415
  19. data/vendor/assets/javascripts/webshims/shims/combos/18.js +1003 -678
  20. data/vendor/assets/javascripts/webshims/shims/combos/19.js +1085 -387
  21. data/vendor/assets/javascripts/webshims/shims/combos/2.js +161 -127
  22. data/vendor/assets/javascripts/webshims/shims/combos/20.js +1086 -388
  23. data/vendor/assets/javascripts/webshims/shims/combos/21.js +168 -96
  24. data/vendor/assets/javascripts/webshims/shims/combos/22.js +36 -27
  25. data/vendor/assets/javascripts/webshims/shims/combos/23.js +2 -1
  26. data/vendor/assets/javascripts/webshims/shims/combos/24.js +411 -172
  27. data/vendor/assets/javascripts/webshims/shims/combos/25.js +1085 -387
  28. data/vendor/assets/javascripts/webshims/shims/combos/26.js +96 -94
  29. data/vendor/assets/javascripts/webshims/shims/combos/3.js +163 -140
  30. data/vendor/assets/javascripts/webshims/shims/combos/30.js +166 -141
  31. data/vendor/assets/javascripts/webshims/shims/combos/31.js +159 -126
  32. data/vendor/assets/javascripts/webshims/shims/combos/4.js +103 -109
  33. data/vendor/assets/javascripts/webshims/shims/combos/5.js +98 -417
  34. data/vendor/assets/javascripts/webshims/shims/combos/6.js +101 -418
  35. data/vendor/assets/javascripts/webshims/shims/combos/7.js +168 -142
  36. data/vendor/assets/javascripts/webshims/shims/combos/8.js +165 -141
  37. data/vendor/assets/javascripts/webshims/shims/combos/9.js +195 -510
  38. data/vendor/assets/javascripts/webshims/shims/details.js +2 -2
  39. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +96 -94
  40. data/vendor/assets/javascripts/webshims/shims/es5.js +908 -264
  41. data/vendor/assets/javascripts/webshims/shims/excanvas.js +16 -1
  42. data/vendor/assets/javascripts/webshims/shims/form-combat.js +147 -0
  43. data/vendor/assets/javascripts/webshims/shims/form-core.js +60 -31
  44. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +114 -33
  45. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +3 -1
  46. data/vendor/assets/javascripts/webshims/shims/form-message.js +7 -15
  47. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +2 -2
  48. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +88 -410
  49. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +143 -93
  50. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +268 -79
  51. data/vendor/assets/javascripts/webshims/shims/form-validation.js +116 -81
  52. data/vendor/assets/javascripts/webshims/shims/form-validators.js +23 -10
  53. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +605 -9
  54. data/vendor/assets/javascripts/webshims/shims/geolocation.js +51 -39
  55. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.js +78 -33
  56. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.js +24 -6
  57. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +110 -49
  58. data/vendor/assets/javascripts/webshims/shims/json-storage.js +3 -1
  59. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +2 -1
  60. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +81 -30
  61. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +131 -54
  62. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +497 -0
  63. data/vendor/assets/javascripts/webshims/shims/range-ui.js +8 -5
  64. data/vendor/assets/javascripts/webshims/shims/sizzle.js +2026 -0
  65. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +401 -521
  66. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +1 -1
  67. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +94 -82
  68. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +250 -321
  69. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  70. data/vendor/assets/javascripts/webshims/shims/track-ui.js +1 -1
  71. data/vendor/assets/javascripts/webshims/shims/track.js +34 -25
  72. metadata +7 -3
@@ -10,8 +10,8 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
10
10
  webshims.error("IE browser modes are busted in IE10+. Please test your HTML/CSS/JS with a real IE version or at least IETester or similiar tools");
11
11
  }
12
12
 
13
- if(!$.parseHTML){
14
- webshims.error("Webshims needs jQuery 1.8+ to work properly. Please update your jQuery version or downgrade webshims.");
13
+ if('debug' in webshims){
14
+ webshims.error('Use webshims.setOptions("debug", true||false||"noCombo"); to debug flag');
15
15
  }
16
16
 
17
17
  if (!webshims.cfg.no$Switch) {
@@ -47,7 +47,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
47
47
  // '127.0.0.1': 1
48
48
  // };
49
49
  //
50
- // if( webshims.debug && (hostNames[location.hostname] || location.protocol == 'file:') ){
50
+ // if( webshims.cfg.debug && (hostNames[location.hostname] || location.protocol == 'file:') ){
51
51
  // var list = $('<ul class="webshims-debug-list" />');
52
52
  // webshims.errorLog.push = function(message){
53
53
  // list.appendTo('body');
@@ -479,7 +479,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
479
479
  };
480
480
 
481
481
  $.extend(webshims, {
482
-
483
482
  getID: (function(){
484
483
  var ID = new Date().getTime();
485
484
  return function(elem){
@@ -509,6 +508,51 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
509
508
  }
510
509
  });
511
510
  },
511
+ getOptions: (function(){
512
+ var regs = {};
513
+ var regFn = function(f, upper){
514
+ return upper.toLowerCase();
515
+ };
516
+ return function(elem, name, bases){
517
+ var data = elementData(elem, 'cfg'+name);
518
+ var dataName;
519
+ var cfg = {};
520
+
521
+ if(data){
522
+ return data;
523
+ }
524
+ data = $(elem).data();
525
+
526
+ if(!bases){
527
+ bases = [true, {}];
528
+ } else if(!Array.isArray(bases)){
529
+ bases = [true, {}, bases];
530
+ } else {
531
+ bases.unshift(true, {});
532
+ }
533
+
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
+ }
540
+ }
541
+
542
+ if(!regs[name]){
543
+ regs[name] = new RegExp('^'+ name +'([A-Z])');
544
+ }
545
+
546
+ for(dataName in data){
547
+ if(regs[name].test(dataName)){
548
+ cfg[dataName.replace(regs[name], regFn)] = data[dataName];
549
+ }
550
+ }
551
+ bases.push(cfg);
552
+
553
+ return elementData(elem, 'cfg'+name, $.extend.apply($, bases));
554
+ };
555
+ })(),
512
556
  //http://www.w3.org/TR/html5/common-dom-interfaces.html#reflect
513
557
  createPropDefault: createPropDefault,
514
558
  data: elementData,
@@ -596,7 +640,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
596
640
  setInterval(this.test, 600);
597
641
  $(this.test);
598
642
  webshims.ready('WINDOWLOAD', this.test);
599
- $(document).on('updatelayout', this.handler);
643
+ $(document).on('updatelayout pageinit collapsibleexpand shown.bs.modal shown.bs.collapse slid.bs.carousel', this.handler);
600
644
  $(window).on('resize', this.handler);
601
645
  (function(){
602
646
  var oldAnimate = $.fn.animate;
@@ -954,109 +998,67 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
954
998
  }
955
999
  },
956
1000
 
957
- // set current Lang:
958
- // - webshims.activeLang(lang:string);
959
- // get current lang
960
- // - webshims.activeLang();
961
- // get current lang
962
- // webshims.activeLang({
963
- // register: moduleName:string,
964
- // callback: callback:function
965
- // });
966
- // get/set including remoteLang
967
- // - webshims.activeLang({
968
- // module: moduleName:string,
969
- // callback: callback:function,
970
- // langObj: languageObj:array/object
971
- // });
972
1001
  activeLang: (function(){
973
- var callbacks = [];
974
- var registeredCallbacks = {};
975
- var currentLang;
976
- var shortLang;
977
- var notLocal = /:\/\/|^\.*\//;
978
- var loadRemoteLang = function(data, lang, options){
979
- var langSrc;
980
- if(lang && options && $.inArray(lang, options.availableLangs || options.availabeLangs || []) !== -1){
981
- data.loading = true;
982
- langSrc = options.langSrc;
983
- if(!notLocal.test(langSrc)){
984
- langSrc = webshims.cfg.basePath+langSrc;
985
- }
986
- webshims.loader.loadScript(langSrc+lang+'.js', function(){
987
- if(data.langObj[lang]){
988
- data.loading = false;
989
- callLang(data, true);
990
- } else {
991
- $(function(){
992
- if(data.langObj[lang]){
993
- callLang(data, true);
994
- }
995
- data.loading = false;
1002
+ var curLang = [];
1003
+ var langDatas = [];
1004
+ var loading = {};
1005
+ var load = function(src, obj, loadingLang){
1006
+ obj._isLoading = true;
1007
+ if(loading[src]){
1008
+ loading[src].push(obj);
1009
+ } else {
1010
+ loading[src] = [obj];
1011
+ webshims.loader.loadScript(src, function(){
1012
+ if(loadingLang == curLang.join()){
1013
+ $.each(loading[src], function(i, obj){
1014
+ select(obj);
996
1015
  });
997
1016
  }
998
- });
999
- return true;
1000
- }
1001
- return false;
1002
- };
1003
- var callRegister = function(module){
1004
- if(registeredCallbacks[module]){
1005
- registeredCallbacks[module].forEach(function(data){
1006
- data.callback(currentLang, shortLang, '');
1017
+ delete loading[src];
1007
1018
  });
1008
1019
  }
1009
1020
  };
1010
- var callLang = function(data, _noLoop){
1011
- if(data.activeLang != currentLang && data.activeLang !== shortLang){
1012
- var options = modules[data.module].options;
1013
- if( data.langObj[currentLang] || (shortLang && data.langObj[shortLang]) ){
1014
- data.activeLang = currentLang;
1015
- data.callback(data.langObj[currentLang] || data.langObj[shortLang], currentLang);
1016
- callRegister(data.module);
1017
- } else if( !_noLoop &&
1018
- !loadRemoteLang(data, currentLang, options) &&
1019
- !loadRemoteLang(data, shortLang, options) &&
1020
- data.langObj[''] && data.activeLang !== '' ) {
1021
- data.activeLang = '';
1022
- data.callback(data.langObj[''], currentLang);
1023
- callRegister(data.module);
1021
+ var select = function(obj){
1022
+ var oldLang = obj.__active;
1023
+ var selectLang = function(i, lang){
1024
+ obj._isLoading = false;
1025
+ if(obj[lang] || obj.availableLangs.indexOf(lang) != -1){
1026
+ if(obj[lang]){
1027
+ obj.__active = obj[lang];
1028
+ } else {
1029
+ load(obj.langSrc+lang, obj, curLang.join());
1030
+ }
1031
+ return false;
1024
1032
  }
1033
+ };
1034
+ $.each(curLang, selectLang);
1035
+ if(!obj.__active){
1036
+ obj.__active = obj[''];
1037
+ }
1038
+ if(oldLang != obj.__active){
1039
+ $(obj).trigger('change');
1025
1040
  }
1026
1041
  };
1027
-
1028
-
1029
- var activeLang = function(lang){
1030
-
1031
- if(typeof lang == 'string' && lang !== currentLang){
1032
- currentLang = lang;
1033
- shortLang = currentLang.split('-')[0];
1034
- if(currentLang == shortLang){
1035
- shortLang = false;
1042
+ return function(lang){
1043
+ var shortLang;
1044
+ if(typeof lang == 'string'){
1045
+ if(curLang[0] != lang){
1046
+ curLang = [lang];
1047
+ shortLang = curLang[0].split('-')[0];
1048
+ if(shortLang && shortLang != lang){
1049
+ curLang.push(shortLang);
1050
+ }
1051
+ langDatas.forEach(select);
1036
1052
  }
1037
- $.each(callbacks, function(i, data){
1038
- callLang(data);
1039
- });
1040
1053
  } else if(typeof lang == 'object'){
1041
-
1042
- if(lang.register){
1043
- if(!registeredCallbacks[lang.register]){
1044
- registeredCallbacks[lang.register] = [];
1045
- }
1046
- registeredCallbacks[lang.register].push(lang);
1047
- lang.callback(currentLang, shortLang, '');
1048
- } else {
1049
- if(!lang.activeLang){
1050
- lang.activeLang = '';
1051
- }
1052
- callbacks.push(lang);
1053
- callLang(lang);
1054
+ if(!lang.__active){
1055
+ langDatas.push(lang);
1056
+ select(lang);
1054
1057
  }
1058
+ return lang.__active;
1055
1059
  }
1056
- return currentLang;
1060
+ return curLang[0];
1057
1061
  };
1058
-
1059
- return activeLang;
1060
1062
  })()
1061
1063
  });
1062
1064
 
@@ -1194,8 +1196,11 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1194
1196
 
1195
1197
  if(this._init && val == o.value && oVal == val){return;}
1196
1198
  this.options.value = val;
1197
- this.thumb.stop();
1198
- this.range.stop();
1199
+
1200
+ if($.fn.stop){
1201
+ this.thumb.stop();
1202
+ this.range.stop();
1203
+ }
1199
1204
 
1200
1205
  rangeStyle[this.dirs.width] = left+'%';
1201
1206
  if(this.vertical){
@@ -1204,7 +1209,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1204
1209
  thumbStyle[this.dirs.left] = left+'%';
1205
1210
 
1206
1211
 
1207
- if(!animate){
1212
+ if(!animate || !$.fn.animate){
1208
1213
  this.thumb.css(thumbStyle);
1209
1214
  this.range.css(rangeStyle);
1210
1215
  } else {
@@ -1493,9 +1498,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1493
1498
  $(window).off('blur', removeWin);
1494
1499
  if(!o.readonly && !o.disabled){
1495
1500
  normalizeTouch(e);
1496
- that.element.focus();
1501
+ that.element.trigger('focus');
1497
1502
  that.addRemoveClass('ws-active', true);
1498
- leftOffset = that.element.focus().offset();
1503
+ leftOffset = that.element.offset();
1499
1504
  widgetUnits = that.element[that.dirs.innerWidth]();
1500
1505
  if(!widgetUnits || !leftOffset){return;}
1501
1506
  outerWidth = that.thumb[that.dirs.outerWidth]();
@@ -1836,6 +1841,32 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1836
1841
  return val.length == 1 ? '0'+val : val;
1837
1842
  };
1838
1843
 
1844
+ var loadPicker = function(type, name){
1845
+ type = (type == 'color' ? 'color' : 'forms')+'-picker';
1846
+ if(!loadPicker[name+'Loaded'+type]){
1847
+ loadPicker[name+'Loaded'+type] = true;
1848
+ webshims.ready(name, function(){
1849
+ webshims.loader.loadList([type]);
1850
+
1851
+ });
1852
+ }
1853
+ return type;
1854
+ };
1855
+
1856
+
1857
+ options.addZero = addZero;
1858
+ webshims.loader.addModule('forms-picker', {
1859
+ noAutoCallback: true,
1860
+ options: options
1861
+ });
1862
+ webshims.loader.addModule('color-picker', {
1863
+ noAutoCallback: true,
1864
+ css: 'jpicker/jpicker.css',
1865
+ options: options,
1866
+ d: ['forms-picker']
1867
+ });
1868
+
1869
+ options.steps = steps;
1839
1870
 
1840
1871
  (function(){
1841
1872
 
@@ -1948,7 +1979,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1948
1979
  langCfg.date.monthDigits = monthDigits;
1949
1980
  langCfg.numberSigns += '-';
1950
1981
  if(langCfg.meridian){
1951
- langCfg.timeSigns += langCfg.meridian[0] + langCfg.meridian[1];
1982
+ langCfg.timeSigns += langCfg.meridian[0] + langCfg.meridian[1] + langCfg.meridian[0].toLowerCase() + langCfg.meridian[1].toLowerCase();
1952
1983
  }
1953
1984
  $.each(langCfg.date.monthNames, create);
1954
1985
  $.each(langCfg.date.monthNamesShort, create);
@@ -1974,43 +2005,24 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1974
2005
  $(document).triggerHandler('wslocalechange');
1975
2006
  };
1976
2007
 
1977
- triggerLocaleChange();
1978
2008
 
1979
- webshims.activeLang({
1980
- register: 'form-core',
1981
- callback: function(){
1982
- $.each(arguments, function(i, val){
1983
- if(formcfg[val]){
1984
- if(formcfg[val] != curCfg){
1985
- curCfg = formcfg[val];
1986
- triggerLocaleChange();
1987
- }
1988
- return false;
1989
- }
1990
- });
1991
- }
1992
- });
1993
- webshims.activeLang({
1994
- langObj: formcfg,
1995
- module: 'form-core',
1996
- callback: function(val){
1997
- if(curCfg != val){
1998
- curCfg = val;
1999
- triggerLocaleChange();
2000
- }
2001
- }
2009
+
2010
+
2011
+ curCfg = webshims.activeLang(formcfg);
2012
+
2013
+ triggerLocaleChange();
2014
+
2015
+ $(formcfg).on('change', function(){
2016
+ curCfg = formcfg.__active;
2017
+ triggerLocaleChange();
2002
2018
  });
2019
+
2003
2020
  })();
2004
2021
 
2005
2022
 
2006
2023
 
2007
2024
  (function(){
2008
2025
 
2009
-
2010
- var mousePress = function(e){
2011
- $(this)[e.type == 'mousepressstart' ? 'addClass' : 'removeClass']('mousepress-ui');
2012
- };
2013
-
2014
2026
  var retDefault = function(val, def){
2015
2027
  if(!(typeof val == 'number' || (val && val == val * 1))){
2016
2028
  return def;
@@ -2122,6 +2134,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2122
2134
  time: function(val){
2123
2135
  var fVal;
2124
2136
  if(val && curCfg.meridian){
2137
+ val = val.toUpperCase();
2125
2138
  if(val.substr(0,2) === "12"){
2126
2139
  val = "00" + val.substr(2);
2127
2140
  }
@@ -2345,300 +2358,32 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2345
2358
  }
2346
2359
  },
2347
2360
  addBindings: function(){
2348
- var isFocused;
2349
-
2350
2361
  var that = this;
2351
2362
  var o = this.options;
2352
-
2353
- var eventTimer = (function(){
2354
- var events = {};
2355
- return {
2356
- init: function(name, curVal, fn){
2357
- if(!events[name]){
2358
- events[name] = {fn: fn};
2359
- $(that.orig).on(name, function(){
2360
- events[name].val = $.prop(that.orig, 'value');
2361
- });
2362
- }
2363
- events[name].val = curVal;
2364
- },
2365
- call: function(name, val){
2366
- if(events[name] && events[name].val != val){
2367
- clearTimeout(events[name].timer);
2368
- events[name].val = val;
2369
- events[name].timer = setTimeout(function(){
2370
- events[name].fn(val, that);
2371
- }, 9);
2372
- }
2373
- }
2374
- };
2375
- })();
2376
- var initChangeEvents = function(){
2377
- eventTimer.init('input', $.prop(that.orig, 'value'), that.options.input);
2378
- eventTimer.init('change', $.prop(that.orig, 'value'), that.options.change);
2379
- };
2380
-
2381
- var step = {};
2382
-
2383
- var preventBlur = function(e){
2384
- if(preventBlur.prevent){
2385
- e.preventDefault();
2386
- (isFocused || that.element.getShadowFocusElement()).focus();
2387
- stopPropagation(e);
2388
- return true;
2389
- }
2363
+ var run = function(){
2364
+ that._addBindings();
2390
2365
  };
2391
- var callSplitChange = (function(){
2392
- var timer;
2393
-
2394
- var call = function(e){
2395
- var val;
2396
- clearTimeout(timer);
2397
- val = that.parseValue();
2398
- if(that.type == 'color'){
2399
- that.inputElements.val(val);
2400
- }
2401
- $.prop(that.orig, 'value', val);
2402
- eventTimer.call('input', val);
2403
- if(!e || e.type != 'wsupdatevalue'){
2404
- eventTimer.call('change', val);
2405
- }
2406
- };
2407
-
2408
- var onFocus = function(){
2409
- clearTimeout(timer);
2410
- };
2411
- var onBlur = function(e){
2412
- clearTimeout(timer);
2413
- timer = setTimeout(call, 0);
2414
-
2415
- if(e.type == 'change'){
2416
- stopPropagation(e);
2417
- if(!o.splitInput){
2418
- call();
2419
- }
2420
- }
2421
- };
2422
-
2423
- that.element.on('wsupdatevalue', call);
2424
-
2425
- that.inputElements
2426
- .add(that.buttonWrapper)
2427
- .add(that.element)
2428
- .on(
2429
- {
2430
- 'focus focusin': onFocus,
2431
- 'blur focusout change': onBlur
2432
- }
2433
- )
2434
- ;
2435
- setTimeout(function(){
2436
- if(that.popover){
2437
- that.popover.element.on('wspopoverhide', onBlur);
2438
- $('> *', that.popover.element)
2439
- .on({
2440
- 'focusin': onFocus,
2441
- 'focusout': onBlur
2442
- })
2443
- ;
2444
- }
2445
- }, 0);
2446
- })();
2366
+ if(this._addBindings){
2367
+ run();
2368
+ } else {
2369
+ webshims.ready('forms-picker', run);
2370
+ loadPicker(this.type, 'WINDOWLOAD');
2371
+ }
2447
2372
 
2448
- var spinEvents = {};
2449
- var spinElement = o.splitInput ? this.inputElements.filter('.ws-spin') : this.inputElements.eq(0);
2450
- var elementEvts = {
2451
- blur: function(e){
2452
- if(!preventBlur(e) && !o.disabled && !o.readonly){
2453
- if(!preventBlur.prevent){
2454
- isFocused = false;
2455
- }
2456
- }
2457
- stopPropagation(e);
2458
- },
2459
- focus: function(e){
2460
- if(!isFocused){
2461
- initChangeEvents();
2462
- isFocused = this;
2463
- }
2464
- },
2465
- keypress: function(e){
2466
- if(e.isDefaultPrevented()){return;}
2467
- var chr;
2468
- var stepped = true;
2469
- var code = e.keyCode;
2470
- if(!e.ctrlKey && !e.metaKey && curCfg[that.type+'Signs']){
2471
- chr = String.fromCharCode(e.charCode == null ? code : e.charCode);
2472
- stepped = !(chr < " " || (curCfg[that.type+'Signs']+'0123456789').indexOf(chr) > -1);
2473
- } else {
2474
- stepped = false;
2475
- }
2476
- if(stepped){
2477
- e.preventDefault();
2373
+ this.inputElements
2374
+ .add(this.buttonWrapper)
2375
+ .add(this.element)
2376
+ .one('mousedown focusin', function(e){
2377
+ loadPicker(that.type, 'DOM');
2378
+ })
2379
+ .on({
2380
+ 'change input focus focusin blur focusout': function(e){
2381
+ $(e.target).trigger('ws__'+e.type);
2478
2382
  }
2479
- },
2480
- input: (this.type == 'color' && this.isValid) ?
2481
- $.noop :
2482
- (function(){
2483
- var timer;
2484
- var check = function(){
2485
- var val = that.parseValue(true);
2486
- if(val && that.isValid(val)){
2487
- that.setInput(val);
2488
- }
2489
-
2490
- };
2491
- return function(){
2492
- clearTimeout(timer);
2493
- timer = setTimeout(check, 200);
2494
- };
2495
- })(),
2496
- 'input keydown keypress': (function(){
2497
- var timer;
2498
- var isStopped = false;
2499
- var releaseTab = function(){
2500
- if(isStopped === true){
2501
- isStopped = 'semi';
2502
- timer = setTimeout(releaseTab, 250);
2503
- } else {
2504
- isStopped = false;
2505
- }
2506
- };
2507
- var stopTab = function(){
2508
- isStopped = true;
2509
- clearTimeout(timer);
2510
- timer = setTimeout(releaseTab, 300);
2511
- };
2512
- var select = function(){
2513
- var elem = this;
2514
- setTimeout(function(){
2515
- elem.focus();
2516
- elem.select();
2517
- }, 4);
2518
-
2519
- stopTab();
2520
- };
2521
-
2522
- return function(e){
2523
- if(o.splitInput && o.jumpInputs){
2524
- if(e.type == 'input'){
2525
- if($.prop(this, 'value').length === $.prop(this, 'maxLength')){
2526
- try {
2527
- $(this)
2528
- .next()
2529
- .next('input, select')
2530
- .each(select)
2531
- ;
2532
- } catch(er){}
2533
- }
2534
- } else if(!e.shiftKey && !e.crtlKey && e.keyCode == 9 && (isStopped === true || (isStopped && !$.prop(this, 'value')))){
2535
- e.preventDefault();
2536
- }
2537
- }
2538
- };
2539
- })()
2540
- };
2541
- var mouseDownInit = function(){
2542
- if(!o.disabled && !isFocused){
2543
- that.element.getShadowFocusElement().focus();
2544
- }
2545
- preventBlur.set();
2383
+ })
2546
2384
 
2547
- return false;
2548
- };
2549
-
2550
- preventBlur.set = (function(){
2551
- var timer;
2552
- var reset = function(){
2553
- preventBlur.prevent = false;
2554
- };
2555
- return function(){
2556
- clearTimeout(timer);
2557
- preventBlur.prevent = true;
2558
- setTimeout(reset, 9);
2559
- };
2560
- })();
2561
-
2562
-
2563
- this.buttonWrapper.on('mousedown', mouseDownInit);
2564
-
2565
- this.setInput = function(value){
2566
- that.value(value);
2567
- eventTimer.call('input', value);
2568
- };
2569
- this.setChange = function(value){
2570
- that.setInput(value);
2571
- eventTimer.call('change', value);
2572
- };
2573
-
2574
-
2575
-
2576
- this.inputElements.on(elementEvts);
2385
+ ;
2577
2386
 
2578
- if(steps[this.type]){
2579
- ['stepUp', 'stepDown'].forEach(function(name){
2580
- step[name] = function(factor){
2581
- if(!o.disabled && !o.readonly){
2582
- if(!isFocused){
2583
- mouseDownInit();
2584
- }
2585
- var ret = false;
2586
- if (!factor) {
2587
- factor = 1;
2588
- }
2589
- try {
2590
- that.elemHelper[name](factor);
2591
-
2592
- ret = that.elemHelper.prop('value');
2593
-
2594
- } catch (er) {
2595
- if(!o.value && that.maxAsNumber >= that.minAsNumber){
2596
- ret = o.defValue;
2597
- }
2598
- }
2599
- if(ret !== false && o.value != ret){
2600
- that.value(ret);
2601
- eventTimer.call('input', ret);
2602
- }
2603
- return ret;
2604
- }
2605
- };
2606
- });
2607
- if(!o.noSpinbtn){
2608
- spinEvents[$.fn.mwheelIntent ? 'mwheelIntent' : 'mousewheel'] = function(e, delta){
2609
- if(delta && isFocused && !o.disabled){
2610
- step[delta > 0 ? 'stepUp' : 'stepDown']();
2611
- e.preventDefault();
2612
- }
2613
- };
2614
- spinEvents.keydown = function(e){
2615
- if(o.list || e.isDefaultPrevented() || (e.altKey && e.keyCode == 40) || $.attr(this, 'list')){return;}
2616
- var stepped = true;
2617
- var code = e.keyCode;
2618
- if (code == 38) {
2619
- step.stepUp();
2620
- } else if (code == 40) {
2621
- step.stepDown();
2622
- } else {
2623
- stepped = false;
2624
- }
2625
- if(stepped){
2626
- e.preventDefault();
2627
- }
2628
- };
2629
-
2630
- spinElement.attr({'autocomplete': 'off', role: 'spinbutton'}).on(spinEvents);
2631
- }
2632
- $(this.buttonWrapper)
2633
- .on('mousepressstart mousepressend', '.step-up, .step-down', mousePress)
2634
- .on('mousedown mousepress', '.step-up', function(e){
2635
- step.stepUp();
2636
- })
2637
- .on('mousedown mousepress', '.step-down', function(e){
2638
- step.stepDown();
2639
- })
2640
- ;
2641
- }
2642
2387
  if(this.type != 'color'){
2643
2388
  (function(){
2644
2389
  var localeChange ;
@@ -2662,8 +2407,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2662
2407
  $(that.orig).onWSOff('wslocalechange', localeChange);
2663
2408
  })();
2664
2409
  }
2665
-
2666
- initChangeEvents();
2667
2410
  },
2668
2411
  required: function(val, boolVal){
2669
2412
  this.inputElements.attr({'aria-required': ''+boolVal});
@@ -2697,34 +2440,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2697
2440
  this.element.prop('placeholder', placeholder);
2698
2441
  }
2699
2442
  },
2700
- initDataList: function(){
2701
- var listTimer;
2702
- var that = this;
2703
- var updateList = function(){
2704
- $(that.orig)
2705
- .jProp('list')
2706
- .off('updateDatalist', updateList)
2707
- .on('updateDatalist', updateList)
2708
- ;
2709
- clearTimeout(listTimer);
2710
- listTimer = setTimeout(function(){
2711
- if(that.list){
2712
- that.list();
2713
- }
2714
- }, 9);
2715
-
2716
- };
2717
-
2718
- $(this.orig).onTrigger('listdatalistchange', updateList);
2719
- },
2720
- getOptions: function(){
2721
- var options = {};
2722
- var datalist = $(this.orig).jProp('list');
2723
- datalist.find('option').each(function(){
2724
- options[$.prop(this, 'value')] = $.prop(this, 'label');
2725
- });
2726
- return [options, datalist.data('label')];
2727
- },
2728
2443
  list: function(val){
2729
2444
  if(this.type == 'number'){
2730
2445
  this.element.attr('list', $.attr(this.orig, 'list'));
@@ -2854,31 +2569,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2854
2569
  }, 9);
2855
2570
  }
2856
2571
  },
2857
- value: function(val, force){
2858
-
2859
- if(!this._init || force || this.options.value !== val){
2860
- this.valueAsNumber = this.asNumber(val);
2861
- this.options.value = val;
2862
-
2863
- if(isNaN(this.valueAsNumber) || (!isNaN(this.minAsNumber) && this.valueAsNumber < this.minAsNumber) || (!isNaN(this.maxAsNumber) && this.valueAsNumber > this.maxAsNumber)){
2864
- this._setStartInRange();
2865
- } else {
2866
- this.elemHelper.prop('value', val);
2867
- this.options.defValue = "";
2868
- }
2869
-
2870
- val = formatVal[this.type](val, this.options);
2871
- if(this.options.splitInput){
2872
- $.each(this.splits, function(i, elem){
2873
- $.prop(elem, 'value', val[i]);
2874
- });
2875
- } else {
2876
- this.element.prop('value', val);
2877
- }
2878
- this._propertyChange('value');
2879
- this.mirrorValidity();
2880
- }
2881
- },
2882
2572
  step: function(val){
2883
2573
  var defStep = steps[this.type];
2884
2574
  this.options.step = val;
@@ -2950,6 +2640,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2950
2640
  });
2951
2641
  };
2952
2642
 
2643
+ $.fn.wsBaseWidget.wsProto = wsWidgetProto;
2644
+
2953
2645
  $.fn.spinbtnUI = function(opts){
2954
2646
  opts = $.extend({
2955
2647
  monthNames: 'monthNames',
@@ -2964,32 +2656,14 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2964
2656
  }, opts);
2965
2657
  });
2966
2658
  };
2659
+
2660
+ $.fn.spinbtnUI.wsProto = spinBtnProto;
2661
+
2967
2662
  })();
2968
2663
 
2969
2664
  (function(){
2970
2665
  var picker = {};
2971
2666
 
2972
- var loadPicker = function(type, name){
2973
- type = (type == 'color' ? 'color' : 'forms')+'-picker';
2974
- if(!loadPicker[name+'Loaded'+type]){
2975
- loadPicker[name+'Loaded'+type] = true;
2976
- webshims.ready(name, function(){
2977
- webshims.loader.loadList([type]);
2978
- });
2979
- }
2980
- return type;
2981
- };
2982
- options.addZero = addZero;
2983
- webshims.loader.addModule('forms-picker', {
2984
- noAutoCallback: true,
2985
- options: options
2986
- });
2987
- webshims.loader.addModule('color-picker', {
2988
- noAutoCallback: true,
2989
- css: 'jpicker/jpicker.css',
2990
- options: options
2991
- });
2992
-
2993
2667
  webshims.inlinePopover = {
2994
2668
  _create: function(){
2995
2669
  this.element = $('<div class="ws-inline-picker"><div class="ws-po-box" /></div>').data('wspopover', this);
@@ -3033,7 +2707,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3033
2707
  cancel: function(val, popover, data){
3034
2708
  if(!data.options.inlinePicker){
3035
2709
  popover.stopOpen = true;
3036
- data.element.getShadowFocusElement().focus();
2710
+ data.element.getShadowFocusElement().trigger('focus');
3037
2711
  setTimeout(function(){
3038
2712
  popover.stopOpen = false;
3039
2713
  }, 9);
@@ -3122,9 +2796,16 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3122
2796
 
3123
2797
  picker._common = function(data){
3124
2798
  var options = data.options;
3125
- var popover = webshims.objectCreate(options.inlinePicker ? webshims.inlinePopover : webshims.wsPopover, {}, {prepareFor: options.inlinePicker ? data.buttonWrapper : data.element, position: options.widgetPosition});
2799
+ var popover = webshims.objectCreate(options.inlinePicker ? webshims.inlinePopover : webshims.wsPopover, {}, $.extend(options.popover || {}, {prepareFor: options.inlinePicker ? data.buttonWrapper : data.element}));
3126
2800
  var opener = $('<button type="button" class="ws-popover-opener"><span /></button>').appendTo(data.buttonWrapper);
3127
2801
 
2802
+ if(options.widgetPosition){
2803
+ webshims.error('options.widgetPosition was removed use options.popover.position instead');
2804
+ }
2805
+
2806
+ if(options.openOnFocus && popover.options && (popover.options.appendTo == 'auto' || popover.options.appendTo == 'element')){
2807
+ webshims.error('openOnFocus and popover.appendTo "auto/element" can prduce a11y problems try to change appendTo to body or similiar or use openOnMouseFocus instead');
2808
+ }
3128
2809
 
3129
2810
  var showPickerContent = function(){
3130
2811
  (picker[data.type].showPickerContent || picker.showPickerContent)(data, popover);
@@ -3276,7 +2957,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3276
2957
  if(options.inlinePicker){
3277
2958
  show();
3278
2959
  }
3279
- loadPicker(data.type, 'WINDOWLOAD');
3280
2960
  };
3281
2961
 
3282
2962
  picker.month = picker._common;
@@ -3292,7 +2972,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3292
2972
  .find('.ws-color-indicator')
3293
2973
  ;
3294
2974
  var showColor = function(){
3295
- colorIndicator.css({backgroundColor: $.prop(this, 'value') || '#000'})
2975
+ colorIndicator.css({backgroundColor: $.prop(this, 'value') || '#000000'});
3296
2976
  };
3297
2977
  var showOpacity = (function(){
3298
2978
  var timer;
@@ -3449,11 +3129,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3449
3129
  data = {};
3450
3130
  optsName = type;
3451
3131
 
3452
- //todo: do we need deep extend?
3453
-
3454
3132
  labels = $(this).jProp('labels');
3455
-
3456
- opts = $.extend({}, options.widgets, options[type], $($.prop(this, 'form')).data(type) || {}, $(this).data(type) || {}, {
3133
+ opts = $.extend(webshims.getOptions(this, type, [options.widgets, options[type], $($.prop(this, 'form')).data(type)]), {
3457
3134
  orig: this,
3458
3135
  type: type,
3459
3136
  labels: labels,
@@ -3475,7 +3152,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3475
3152
  containerElements: []
3476
3153
  });
3477
3154
 
3478
-
3479
3155
  for(i = 0; i < copyProps.length; i++){
3480
3156
  opts[copyProps[i]] = $.prop(this, copyProps[i]);
3481
3157
  }
@@ -3629,8 +3305,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3629
3305
  opts.splitInput = false;
3630
3306
  }
3631
3307
  var markup = opts.splitInput ?
3632
- '<span class="ws-'+name+' ws-input" role="group"></span>' :
3633
- '<input class="ws-'+name+'" type="text" />';
3308
+ '<span class="ws-'+name+' ws-input ws-inputreplace" role="group"></span>' :
3309
+ '<input class="ws-'+name+' ws-inputreplace" type="text" />';
3634
3310
  var data = $(markup).insertAfter(opts.orig);
3635
3311
  if(steps[name]){
3636
3312
  data = data.spinbtnUI(opts).data('wsWidget'+name);
@@ -3647,13 +3323,20 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3647
3323
  }
3648
3324
  });
3649
3325
 
3326
+ var init = function(){
3327
+ webshims.addReady(function(context, contextElem){
3328
+ $('input', context)
3329
+ .add(contextElem.filter('input'))
3330
+ .each(implementType)
3331
+ ;
3332
+ });
3333
+ };
3334
+ if(formcfg._isLoading){
3335
+ $(formcfg).one('change', init);
3336
+ } else {
3337
+ init();
3338
+ }
3650
3339
 
3651
- webshims.addReady(function(context, contextElem){
3652
- $('input', context)
3653
- .add(contextElem.filter('input'))
3654
- .each(implementType)
3655
- ;
3656
- });
3657
3340
  })();
3658
3341
  });
3659
3342
 
@@ -3942,7 +3625,9 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
3942
3625
  noAutoCallback: true,
3943
3626
  options: $.extend(options, {shadowListProto: shadowListProto})
3944
3627
  });
3945
-
3628
+ if(!options.list){
3629
+ options.list = {};
3630
+ }
3946
3631
  //init datalist update
3947
3632
  initializeDatalist();
3948
3633
  })();