webshims-rails 1.11.1 → 1.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +41 -20
  4. data/vendor/assets/javascripts/webshims/shims/combos/10.js +212 -42
  5. data/vendor/assets/javascripts/webshims/shims/combos/11.js +196 -37
  6. data/vendor/assets/javascripts/webshims/shims/combos/12.js +82 -36
  7. data/vendor/assets/javascripts/webshims/shims/combos/13.js +82 -36
  8. data/vendor/assets/javascripts/webshims/shims/combos/14.js +17 -6
  9. data/vendor/assets/javascripts/webshims/shims/combos/15.js +234 -1247
  10. data/vendor/assets/javascripts/webshims/shims/combos/16.js +234 -1247
  11. data/vendor/assets/javascripts/webshims/shims/combos/17.js +202 -45
  12. data/vendor/assets/javascripts/webshims/shims/combos/18.js +202 -45
  13. data/vendor/assets/javascripts/webshims/shims/combos/19.js +16 -5
  14. data/vendor/assets/javascripts/webshims/shims/combos/2.js +51 -11
  15. data/vendor/assets/javascripts/webshims/shims/combos/20.js +16 -5
  16. data/vendor/assets/javascripts/webshims/shims/combos/21.js +82 -36
  17. data/vendor/assets/javascripts/webshims/shims/combos/22.js +82 -36
  18. data/vendor/assets/javascripts/webshims/shims/combos/24.js +1689 -997
  19. data/vendor/assets/javascripts/webshims/shims/combos/25.js +16 -5
  20. data/vendor/assets/javascripts/webshims/shims/combos/26.js +16 -5
  21. data/vendor/assets/javascripts/webshims/shims/combos/3.js +16 -5
  22. data/vendor/assets/javascripts/webshims/shims/combos/30.js +51 -11
  23. data/vendor/assets/javascripts/webshims/shims/combos/31.js +51 -11
  24. data/vendor/assets/javascripts/webshims/shims/combos/4.js +16 -5
  25. data/vendor/assets/javascripts/webshims/shims/combos/5.js +202 -45
  26. data/vendor/assets/javascripts/webshims/shims/combos/6.js +237 -51
  27. data/vendor/assets/javascripts/webshims/shims/combos/7.js +51 -11
  28. data/vendor/assets/javascripts/webshims/shims/combos/8.js +16 -5
  29. data/vendor/assets/javascripts/webshims/shims/combos/9.js +247 -48
  30. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +17 -5
  31. data/vendor/assets/javascripts/webshims/shims/form-datalist-lazy.js +21 -3
  32. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +35 -6
  33. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +6 -8
  34. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +134 -24
  35. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +152 -1205
  36. data/vendor/assets/javascripts/webshims/shims/form-shim-extend2.js +1076 -0
  37. data/vendor/assets/javascripts/webshims/shims/form-validation.js +47 -20
  38. data/vendor/assets/javascripts/webshims/shims/form-validators.js +2 -2
  39. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +1 -1
  40. data/vendor/assets/javascripts/webshims/shims/i18n/{formcfg-de.txt → formcfg-de.js} +3 -0
  41. data/vendor/assets/javascripts/webshims/shims/i18n/{formcfg-en.txt → formcfg-en.js} +5 -1
  42. data/vendor/assets/javascripts/webshims/shims/json-storage.js +1 -1
  43. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +1 -1
  44. data/vendor/assets/javascripts/webshims/shims/range-ui.js +62 -13
  45. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +610 -0
  46. data/vendor/assets/javascripts/webshims/shims/styles/scss/_extends.scss +10 -0
  47. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +743 -0
  48. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +1 -755
  49. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +0 -606
  50. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  51. data/vendor/assets/javascripts/webshims/shims/track-ui.js +36 -23
  52. data/vendor/assets/javascripts/webshims/shims/track.js +82 -36
  53. metadata +8 -6
  54. data/vendor/assets/javascripts/webshims/shims/combos/28.js +0 -2196
  55. data/vendor/assets/javascripts/webshims/shims/combos/29.js +0 -1167
@@ -458,7 +458,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
458
458
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
459
459
 
460
460
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
461
- 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");
461
+ 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");
462
462
  }
463
463
 
464
464
  if(!$.parseHTML){
@@ -1011,7 +1011,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1011
1011
  $(this.test);
1012
1012
  webshims.ready('WINDOWLOAD', this.test);
1013
1013
  $(document).on('updatelayout', this.handler);
1014
- $(window).bind('resize', this.handler);
1014
+ $(window).on('resize', this.handler);
1015
1015
  (function(){
1016
1016
  var oldAnimate = $.fn.animate;
1017
1017
  var animationTimer;
@@ -1033,6 +1033,13 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1033
1033
  webshims.docObserve = function(){
1034
1034
  webshims.ready('DOM', function(){
1035
1035
  docObserve.start();
1036
+ if($.support.boxSizing == null){
1037
+ $(function(){
1038
+ if($.support.boxSizing){
1039
+ docObserve.handler({type: 'boxsizing'});
1040
+ }
1041
+ });
1042
+ }
1036
1043
  });
1037
1044
  };
1038
1045
  return function(nativeElem, shadowElem, opts){
@@ -1193,7 +1200,12 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1193
1200
  havePolyfill[prop] = true;
1194
1201
 
1195
1202
  if(descs.reflect){
1196
- webshims.propTypes[descs.propType || 'standard'](descs, prop);
1203
+ if(descs.propType && !webshims.propTypes[descs.propType]){
1204
+ webshims.error('could not finde propType '+ descs.propType);
1205
+ } else {
1206
+ webshims.propTypes[descs.propType || 'standard'](descs, prop);
1207
+ }
1208
+
1197
1209
  }
1198
1210
 
1199
1211
  ['prop', 'attr', 'removeAttr'].forEach(function(type){
@@ -1379,7 +1391,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1379
1391
  var notLocal = /:\/\/|^\.*\//;
1380
1392
  var loadRemoteLang = function(data, lang, options){
1381
1393
  var langSrc;
1382
- if(lang && options && $.inArray(lang, options.availabeLangs || []) !== -1){
1394
+ if(lang && options && $.inArray(lang, options.availableLangs || options.availabeLangs || []) !== -1){
1383
1395
  data.loading = true;
1384
1396
  langSrc = options.langSrc;
1385
1397
  if(!notLocal.test(langSrc)){
@@ -1539,7 +1551,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1539
1551
  });
1540
1552
 
1541
1553
  })(webshims.$, document);
1542
-
1543
1554
  webshims.register('form-core', function($, webshims, window, document, undefined, options){
1544
1555
  "use strict";
1545
1556
 
@@ -2021,12 +2032,12 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
2021
2032
  /*
2022
2033
  * implement propType "element" currently only used for list-attribute (will be moved to dom-extend, if needed)
2023
2034
  */
2024
- webshims.propTypes.element = function(descs){
2035
+ webshims.propTypes.element = function(descs, name){
2025
2036
  webshims.createPropDefault(descs, 'attr');
2026
2037
  if(descs.prop){return;}
2027
2038
  descs.prop = {
2028
2039
  get: function(){
2029
- var elem = $.attr(this, 'list');
2040
+ var elem = $.attr(this, name);
2030
2041
  if(elem){
2031
2042
  elem = document.getElementById(elem);
2032
2043
  if(elem && descs.propNodeName && !$.nodeName(elem, descs.propNodeName)){
@@ -2050,7 +2061,15 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
2050
2061
  if(listSupport && !formsCFG.customDatalist){return;}
2051
2062
 
2052
2063
  var initializeDatalist = function(){
2053
-
2064
+
2065
+ var updateDatlistAndOptions = function(){
2066
+ var id;
2067
+ if(!$.data(this, 'datalistWidgetData') && (id = $.prop(this, 'id'))){
2068
+ $('input[list="'+ id +'"], input[data-wslist="'+ id +'"]').eq(0).attr('list', id);
2069
+ } else {
2070
+ $(this).triggerHandler('updateDatalist');
2071
+ }
2072
+ };
2054
2073
 
2055
2074
  var inputListProto = {
2056
2075
  //override autocomplete
@@ -2128,6 +2147,7 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
2128
2147
  id: value,
2129
2148
  datalist: $.prop(elem, 'list')
2130
2149
  });
2150
+ elem.setAttribute('data-wslist', value);
2131
2151
  } else {
2132
2152
  elem.setAttribute('list', value);
2133
2153
  }
@@ -2139,6 +2159,27 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
2139
2159
  propType: 'element',
2140
2160
  propNodeName: 'datalist'
2141
2161
  };
2162
+ } else {
2163
+ webshims.defineNodeNameProperties('input', {
2164
+ list: {
2165
+ attr: {
2166
+ get: function(){
2167
+ var val = webshims.contentAttr(this, 'list');
2168
+ return (val == null) ? undefined : val;
2169
+ },
2170
+ set: function(value){
2171
+ var elem = this;
2172
+ webshims.contentAttr(elem, 'list', value);
2173
+ webshims.objectCreate(options.shadowListProto, undefined, {input: elem, id: value, datalist: $.prop(elem, 'list')});
2174
+ $(elem).triggerHandler('listdatalistchange');
2175
+ }
2176
+ },
2177
+ initAttr: true,
2178
+ reflect: true,
2179
+ propType: 'element',
2180
+ propNodeName: 'datalist'
2181
+ }
2182
+ });
2142
2183
  }
2143
2184
 
2144
2185
  webshims.defineNodeNameProperties('input', inputListProto);
@@ -2147,9 +2188,7 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
2147
2188
  contextElem
2148
2189
  .filter('datalist > select, datalist, datalist > option, datalist > select > option')
2149
2190
  .closest('datalist')
2150
- .each(function(){
2151
- $(this).triggerHandler('updateDatalist');
2152
- })
2191
+ .each(updateDatlistAndOptions)
2153
2192
  ;
2154
2193
  });
2155
2194
  };
@@ -2194,6 +2233,7 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
2194
2233
  this.hasViewableData = true;
2195
2234
  this._autocomplete = $.attr(opts.input, 'autocomplete');
2196
2235
  $.data(opts.input, 'datalistWidget', this);
2236
+ $.data(datalist, 'datalistWidgetData', this);
2197
2237
 
2198
2238
  lazyLoad('WINDOWLOAD');
2199
2239
 
@@ -458,7 +458,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
458
458
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
459
459
 
460
460
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
461
- 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");
461
+ 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");
462
462
  }
463
463
 
464
464
  if(!$.parseHTML){
@@ -1011,7 +1011,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1011
1011
  $(this.test);
1012
1012
  webshims.ready('WINDOWLOAD', this.test);
1013
1013
  $(document).on('updatelayout', this.handler);
1014
- $(window).bind('resize', this.handler);
1014
+ $(window).on('resize', this.handler);
1015
1015
  (function(){
1016
1016
  var oldAnimate = $.fn.animate;
1017
1017
  var animationTimer;
@@ -1033,6 +1033,13 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1033
1033
  webshims.docObserve = function(){
1034
1034
  webshims.ready('DOM', function(){
1035
1035
  docObserve.start();
1036
+ if($.support.boxSizing == null){
1037
+ $(function(){
1038
+ if($.support.boxSizing){
1039
+ docObserve.handler({type: 'boxsizing'});
1040
+ }
1041
+ });
1042
+ }
1036
1043
  });
1037
1044
  };
1038
1045
  return function(nativeElem, shadowElem, opts){
@@ -1193,7 +1200,12 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1193
1200
  havePolyfill[prop] = true;
1194
1201
 
1195
1202
  if(descs.reflect){
1196
- webshims.propTypes[descs.propType || 'standard'](descs, prop);
1203
+ if(descs.propType && !webshims.propTypes[descs.propType]){
1204
+ webshims.error('could not finde propType '+ descs.propType);
1205
+ } else {
1206
+ webshims.propTypes[descs.propType || 'standard'](descs, prop);
1207
+ }
1208
+
1197
1209
  }
1198
1210
 
1199
1211
  ['prop', 'attr', 'removeAttr'].forEach(function(type){
@@ -1379,7 +1391,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1379
1391
  var notLocal = /:\/\/|^\.*\//;
1380
1392
  var loadRemoteLang = function(data, lang, options){
1381
1393
  var langSrc;
1382
- if(lang && options && $.inArray(lang, options.availabeLangs || []) !== -1){
1394
+ if(lang && options && $.inArray(lang, options.availableLangs || options.availabeLangs || []) !== -1){
1383
1395
  data.loading = true;
1384
1396
  langSrc = options.langSrc;
1385
1397
  if(!notLocal.test(langSrc)){
@@ -1539,7 +1551,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1539
1551
  });
1540
1552
 
1541
1553
  })(webshims.$, document);
1542
-
1543
1554
  webshims.register('form-core', function($, webshims, window, document, undefined, options){
1544
1555
  "use strict";
1545
1556
 
@@ -6,7 +6,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
6
6
  webshims.assumeARIA = supportGetSetAttribute || Modernizr.canvas || Modernizr.video || Modernizr.boxsizing;
7
7
 
8
8
  if($('<input type="email" />').attr('type') == 'text' || $('<form />').attr('novalidate') === "" || ('required' in $('<input />')[0].attributes)){
9
- 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");
9
+ 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");
10
10
  }
11
11
 
12
12
  if(!$.parseHTML){
@@ -559,7 +559,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
559
559
  $(this.test);
560
560
  webshims.ready('WINDOWLOAD', this.test);
561
561
  $(document).on('updatelayout', this.handler);
562
- $(window).bind('resize', this.handler);
562
+ $(window).on('resize', this.handler);
563
563
  (function(){
564
564
  var oldAnimate = $.fn.animate;
565
565
  var animationTimer;
@@ -581,6 +581,13 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
581
581
  webshims.docObserve = function(){
582
582
  webshims.ready('DOM', function(){
583
583
  docObserve.start();
584
+ if($.support.boxSizing == null){
585
+ $(function(){
586
+ if($.support.boxSizing){
587
+ docObserve.handler({type: 'boxsizing'});
588
+ }
589
+ });
590
+ }
584
591
  });
585
592
  };
586
593
  return function(nativeElem, shadowElem, opts){
@@ -741,7 +748,12 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
741
748
  havePolyfill[prop] = true;
742
749
 
743
750
  if(descs.reflect){
744
- webshims.propTypes[descs.propType || 'standard'](descs, prop);
751
+ if(descs.propType && !webshims.propTypes[descs.propType]){
752
+ webshims.error('could not finde propType '+ descs.propType);
753
+ } else {
754
+ webshims.propTypes[descs.propType || 'standard'](descs, prop);
755
+ }
756
+
745
757
  }
746
758
 
747
759
  ['prop', 'attr', 'removeAttr'].forEach(function(type){
@@ -927,7 +939,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
927
939
  var notLocal = /:\/\/|^\.*\//;
928
940
  var loadRemoteLang = function(data, lang, options){
929
941
  var langSrc;
930
- if(lang && options && $.inArray(lang, options.availabeLangs || []) !== -1){
942
+ if(lang && options && $.inArray(lang, options.availableLangs || options.availabeLangs || []) !== -1){
931
943
  data.loading = true;
932
944
  langSrc = options.langSrc;
933
945
  if(!notLocal.test(langSrc)){
@@ -1087,7 +1099,6 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1087
1099
  });
1088
1100
 
1089
1101
  })(webshims.$, document);
1090
-
1091
1102
  (function($){
1092
1103
 
1093
1104
  var id = 0;
@@ -1106,9 +1117,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1106
1117
  var i;
1107
1118
 
1108
1119
 
1109
- this.element.addClass('ws-range').attr({role: 'slider'}).append('<span class="ws-range-min" /><span class="ws-range-rail"><span class="ws-range-thumb" /></span>');
1110
- this.trail = $('.ws-range-rail', this.element);
1111
- this.range = $('.ws-range-min', this.element);
1120
+ 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>');
1121
+ this.trail = $('.ws-range-track', this.element);
1122
+ this.range = $('.ws-range-progress ', this.element);
1112
1123
  this.thumb = $('.ws-range-thumb', this.trail);
1113
1124
 
1114
1125
  this.updateMetrics();
@@ -1118,6 +1129,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1118
1129
  for(i = 0; i < createOpts.length; i++){
1119
1130
  this[createOpts[i]](this.options[createOpts[i]]);
1120
1131
  }
1132
+
1121
1133
  this.value = this._value;
1122
1134
  this.value(this.options.value);
1123
1135
  this.initDataList();
@@ -1356,7 +1368,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1356
1368
  }
1357
1369
  },
1358
1370
  addBindings: function(){
1359
- var leftOffset, widgetUnits, hasFocus;
1371
+ var leftOffset, widgetUnits, hasFocus, isActive;
1360
1372
  var that = this;
1361
1373
  var o = this.options;
1362
1374
 
@@ -1386,8 +1398,28 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1386
1398
  }
1387
1399
  };
1388
1400
  })();
1389
-
1401
+ var normalizeTouch = (function(){
1402
+ var types = {
1403
+ touchstart: 1,
1404
+ touchend: 1,
1405
+ touchmove: 1
1406
+ };
1407
+ var normalize = ['pageX', 'pageY'];
1408
+ return function(e){
1409
+ if(types[e.type] && e.originalEvent && e.originalEvent.touches && e.originalEvent.touches.length){
1410
+ for(var i = 0; i < normalize.length; i++){
1411
+ e[normalize[i]] = e.originalEvent.touches[0][normalize[i]];
1412
+ }
1413
+
1414
+ }
1415
+ return e;
1416
+ };
1417
+ })();
1390
1418
  var setValueFromPos = function(e, animate){
1419
+ if(e.type == 'touchmove'){
1420
+ e.preventDefault();
1421
+ normalizeTouch(e);
1422
+ }
1391
1423
 
1392
1424
  var val = that.getStepedValueFromPos((e[that.dirs.mouse] - leftOffset) * widgetUnits);
1393
1425
  if(val != o.value){
@@ -1404,18 +1436,25 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1404
1436
  eventTimer.call('change', o.value);
1405
1437
  }
1406
1438
  that.addRemoveClass('ws-active');
1407
- $(document).off('mousemove', setValueFromPos).off('mouseup', remove);
1439
+ $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
1408
1440
  $(window).off('blur', removeWin);
1441
+ isActive = false;
1409
1442
  };
1410
1443
  var removeWin = function(e){
1411
1444
  if(e.target == window){remove();}
1412
1445
  };
1413
1446
  var add = function(e){
1414
1447
  var outerWidth;
1448
+
1449
+ if(isActive || (e.type == 'touchstart' && (!e.originalEvent || !e.originalEvent.touches || e.originalEvent.touches.length != 1))){
1450
+ return;
1451
+ }
1415
1452
  e.preventDefault();
1416
- $(document).off('mousemove', setValueFromPos).off('mouseup', remove);
1453
+
1454
+ $(document).off('mousemove touchmove', setValueFromPos).off('mouseup touchend', remove);
1417
1455
  $(window).off('blur', removeWin);
1418
1456
  if(!o.readonly && !o.disabled){
1457
+ normalizeTouch(e);
1419
1458
  that.element.focus();
1420
1459
  that.addRemoveClass('ws-active', true);
1421
1460
  leftOffset = that.element.focus().offset();
@@ -1425,20 +1464,27 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1425
1464
  leftOffset = leftOffset[that.dirs.pos];
1426
1465
  widgetUnits = 100 / widgetUnits;
1427
1466
  setValueFromPos(e, o.animate);
1467
+ isActive = true;
1428
1468
  $(document)
1429
- .on({
1430
- mouseup: remove,
1431
- mousemove: setValueFromPos
1432
- })
1469
+ .on(e.type == 'touchstart' ?
1470
+ {
1471
+ touchend: remove,
1472
+ touchmove: setValueFromPos
1473
+ } :
1474
+ {
1475
+ mouseup: remove,
1476
+ mousemove: setValueFromPos
1477
+ }
1478
+ )
1433
1479
  ;
1434
1480
  $(window).on('blur', removeWin);
1435
1481
  e.stopPropagation();
1436
1482
  }
1437
1483
  };
1438
1484
  var elementEvts = {
1439
- mousedown: add,
1485
+ 'touchstart mousedown': add,
1440
1486
  focus: function(e){
1441
- if(!o.disabled){
1487
+ if(!o.disabled && !hasFocus){
1442
1488
  eventTimer.init('input', o.value);
1443
1489
  eventTimer.init('change', o.value);
1444
1490
  that.addRemoveClass('ws-focus', true);
@@ -1501,6 +1547,20 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1501
1547
  this.thumb.on({
1502
1548
  mousedown: add
1503
1549
  });
1550
+
1551
+ if(this.orig){
1552
+ $(this.orig).jProp('form').on('reset', function(){
1553
+ var val = $.prop(that.orig, 'value');
1554
+ that.value(val);
1555
+ setTimeout(function(){
1556
+ var val2 = $.prop(that.orig, 'value');
1557
+ if(val != val2){
1558
+ that.value(val2);
1559
+ }
1560
+ }, 4);
1561
+ });
1562
+ }
1563
+
1504
1564
  if (window.webshims) {
1505
1565
  webshims.ready('WINDOWLOAD', function(){
1506
1566
  webshims.ready('dom-support', function(){
@@ -1606,8 +1666,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1606
1666
  var str;
1607
1667
  return function(){
1608
1668
  if(!str){
1609
- str = ('<option></option>')+$.map(monthDigits, function(val){
1610
- return '<option>'+val+'</option>';
1669
+ str = ('<option value=""></option>')+$.map(monthDigits, function(val){
1670
+ return '<option value="'+val+'"]>'+val+'</option>';
1611
1671
  }).join('');
1612
1672
  }
1613
1673
  return str;
@@ -1629,7 +1689,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1629
1689
  splits: [$('<input type="text" class="yy" size="4" inputmode="numeric" />')[0]]
1630
1690
  };
1631
1691
  if(opts.monthSelect){
1632
- obj.splits.push($('<select class="mm">'+getMonthOptions()+'</select>')[0]);
1692
+ obj.splits.push($('<select class="mm">'+getMonthOptions(opts)+'</select>')[0]);
1633
1693
  } else {
1634
1694
  obj.splits.push($('<input type="text" class="mm" inputmode="numeric" maxlength="2" size="2" />')[0]);
1635
1695
  }
@@ -1664,7 +1724,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1664
1724
  splits: [$('<input type="text" class="yy" inputmode="numeric" size="4" />')[0]]
1665
1725
  };
1666
1726
  if(opts.monthSelect){
1667
- obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions()+'</select>')[0]);
1727
+ obj.splits.push($('<select class="mm ws-spin">'+getMonthOptions(opts)+'</select>')[0]);
1668
1728
  } else {
1669
1729
  obj.splits.push($('<input type="text" class="mm ws-spin" />')[0]);
1670
1730
  if(opts.onlyMonthDigits){
@@ -1756,6 +1816,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1756
1816
  month: {
1757
1817
  currentText: 'Aktueller Monat'
1758
1818
  },
1819
+ time: {
1820
+ currentText: 'Jetzt'
1821
+ },
1759
1822
  date: {
1760
1823
  close: 'schließen',
1761
1824
  clear: 'Löschen',
@@ -1793,6 +1856,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1793
1856
  month: {
1794
1857
  currentText: 'This month'
1795
1858
  },
1859
+ time: {
1860
+ "currentText": "Now"
1861
+ },
1796
1862
  date: {
1797
1863
  "closeText": "Done",
1798
1864
  clear: 'Clear',
@@ -1855,6 +1921,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1855
1921
  if(!langCfg['datetime-localSigns']){
1856
1922
  langCfg['datetime-localSigns'] = langCfg.dateSigns+langCfg.timeSigns;
1857
1923
  }
1924
+ if(!langCfg['datetime-local']){
1925
+ langCfg['datetime-local'] = {};
1926
+ }
1927
+ if(!langCfg['datetime-local'].currentText && langCfg.time.currentText){
1928
+ langCfg['datetime-local'].currentText = langCfg.time.currentText;
1929
+ }
1858
1930
  };
1859
1931
  var triggerLocaleChange = function(){
1860
1932
  processLangCFG(curCfg);
@@ -1922,6 +1994,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1922
1994
  } else {
1923
1995
  fVal = 0;
1924
1996
  }
1997
+ if(val[0] === '00'){
1998
+ val[0] = '12';
1999
+ }
1925
2000
  val = $.trim(val.join(':')) + ' '+ curCfg.meridian[fVal];
1926
2001
  }
1927
2002
  return val;
@@ -2006,6 +2081,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2006
2081
  time: function(val){
2007
2082
  var fVal;
2008
2083
  if(val && curCfg.meridian){
2084
+ if(val.substr(0,2) === "12"){
2085
+ val = "00" + val.substr(2);
2086
+ }
2009
2087
  if(val.indexOf(curCfg.meridian[1]) != -1){
2010
2088
  val = val.split(':');
2011
2089
  fVal = (val[0] * 1);
@@ -2091,7 +2169,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2091
2169
  if(hintValue.length == 2){
2092
2170
  hintValue = opts.splitInput ?
2093
2171
  hintValue :
2094
- curCfg.patterns.d.replace('yy', hintValue[0]).replace('mm', hintValue[1]);
2172
+ curCfg.date.showMonthAfterYear ?
2173
+ hintValue[0] +' '+hintValue[1] :
2174
+
2175
+ hintValue[1] +' '+ hintValue[0];
2095
2176
  } else {
2096
2177
  hintValue = opts.splitInput ?
2097
2178
  [val, val] :
@@ -2466,10 +2547,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2466
2547
  }
2467
2548
  try {
2468
2549
  that.elemHelper[name](factor);
2550
+
2469
2551
  ret = that.elemHelper.prop('value');
2552
+
2553
+ } catch (er) {
2554
+ if(!o.value && that.maxAsNumber >= that.minAsNumber){
2555
+ ret = o.defValue;
2556
+ }
2557
+ }
2558
+ if(ret !== false && o.value != ret){
2470
2559
  that.value(ret);
2471
2560
  eventTimer.call('input', ret);
2472
- } catch (er) {}
2561
+ }
2473
2562
  return ret;
2474
2563
  }
2475
2564
  };
@@ -2535,15 +2624,6 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2535
2624
 
2536
2625
  initChangeEvents();
2537
2626
  },
2538
- value: function(val, force){
2539
- if(!this._init || force || val !== this.options.value){
2540
- this.element.val(this.formatValue(val));
2541
- this.options.value = val;
2542
- this._propertyChange('value');
2543
- this.mirrorValidity();
2544
- }
2545
-
2546
- },
2547
2627
  required: function(val, boolVal){
2548
2628
  this.inputElements.attr({'aria-required': ''+boolVal});
2549
2629
  this.mirrorValidity();
@@ -2560,7 +2640,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2560
2640
  formatValue: function(val, noSplit){
2561
2641
  return formatVal[this.type](val, noSplit === false ? false : this.options);
2562
2642
  },
2563
- createOpts: ['readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'value', 'required'],
2643
+ createOpts: ['readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'defaultValue', 'value', 'required'],
2564
2644
  placeholder: function(val){
2565
2645
  var options = this.options;
2566
2646
  options.placeholder = val;
@@ -2630,6 +2710,16 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2630
2710
  }
2631
2711
  };
2632
2712
 
2713
+ ['defaultValue', 'value'].forEach(function(name){
2714
+ wsWidgetProto[name] = function(val, force){
2715
+ if(!this._init || force || val !== this.options[name]){
2716
+ this.element.prop(name, this.formatValue(val));
2717
+ this.options[name] = val;
2718
+ this._propertyChange(name);
2719
+ this.mirrorValidity();
2720
+ }
2721
+ };
2722
+ });
2633
2723
 
2634
2724
  ['readonly', 'disabled'].forEach(function(name){
2635
2725
  var isDisabled = name == 'disabled';
@@ -2683,7 +2773,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2683
2773
  }
2684
2774
  this._init = true;
2685
2775
  },
2686
- createOpts: ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'value', 'required'],
2776
+ createOpts: ['step', 'min', 'max', 'readonly', 'title', 'disabled', 'tabindex', 'placeholder', 'defaultValue', 'value', 'required'],
2687
2777
  _addSplitInputs: function(){
2688
2778
  if(!this.inputElements){
2689
2779
  var create = splitInputs[this.type]._create(this.options);
@@ -2753,9 +2843,47 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
2753
2843
  this.options.step = val;
2754
2844
  this.elemHelper.prop('step', retDefault(val, defStep.step));
2755
2845
  this.mirrorValidity();
2846
+ },
2847
+ _beforeValue: function(val){
2848
+ this.valueAsNumber = this.asNumber(val);
2849
+ this.options.value = val;
2850
+
2851
+ if(isNaN(this.valueAsNumber) || (!isNaN(this.minAsNumber) && this.valueAsNumber < this.minAsNumber) || (!isNaN(this.maxAsNumber) && this.valueAsNumber > this.maxAsNumber)){
2852
+ this._setStartInRange();
2853
+ } else {
2854
+ this.elemHelper.prop('value', val);
2855
+ this.options.defValue = "";
2856
+ }
2756
2857
  }
2757
2858
  });
2758
2859
 
2860
+ ['defaultValue', 'value'].forEach(function(name){
2861
+ var isValue = name == 'value';
2862
+ spinBtnProto[name] = function(val, force){
2863
+ if(!this._init || force || this.options[name] !== val){
2864
+ if(isValue){
2865
+ this._beforeValue(val);
2866
+ }
2867
+
2868
+ val = formatVal[this.type](val, this.options);
2869
+ if(this.options.splitInput){
2870
+ $.each(this.splits, function(i, elem){
2871
+ var setOption;
2872
+ if(!(name in elem) && !isValue && $.nodeName(elem, 'select')){
2873
+ $('option[value="'+ val[i] +'"]', elem).prop('defaultSelected', true);
2874
+ } else {
2875
+ $.prop(elem, name, val[i]);
2876
+ }
2877
+ });
2878
+ } else {
2879
+ this.element.prop(name, val);
2880
+ }
2881
+ this._propertyChange(name);
2882
+ this.mirrorValidity();
2883
+ }
2884
+ };
2885
+ });
2886
+
2759
2887
  $.each({min: 1, max: -1}, function(name, factor){
2760
2888
  var numName = name +'AsNumber';
2761
2889
  spinBtnProto[name] = function(val){
@@ -3159,10 +3287,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3159
3287
  var inputTypes = {
3160
3288
 
3161
3289
  };
3290
+ var boolAttrs = {disabled: 1, required: 1, readonly: 1};
3162
3291
  var copyProps = [
3163
3292
  'disabled',
3164
3293
  'readonly',
3165
3294
  'value',
3295
+ 'defaultValue',
3166
3296
  'min',
3167
3297
  'max',
3168
3298
  'step',
@@ -3180,14 +3310,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3180
3310
  if(!stopCircular){
3181
3311
  var shadowData = webshims.data(this, 'shadowData');
3182
3312
  if(shadowData && shadowData.data && shadowData.nativeElement === this && shadowData.data[fnName]){
3183
- shadowData.data[fnName](val, boolVal);
3313
+ if(boolAttrs[fnName]){
3314
+ shadowData.data[fnName](val, boolVal);
3315
+ } else {
3316
+ shadowData.data[fnName](val);
3317
+ }
3184
3318
  }
3185
3319
  }
3186
3320
  });
3187
3321
  });
3188
3322
 
3189
3323
  if(options.replaceUI && 'valueAsNumber' in document.createElement('input')){
3190
- var reflectFn = function(val){
3324
+ var reflectFn = function(){
3191
3325
  if(webshims.data(this, 'hasShadow')){
3192
3326
  $.prop(this, 'value', $.prop(this, 'value'));
3193
3327
  }
@@ -3195,6 +3329,20 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3195
3329
 
3196
3330
  webshims.onNodeNamesPropertyModify('input', 'valueAsNumber', reflectFn);
3197
3331
  webshims.onNodeNamesPropertyModify('input', 'valueAsDate', reflectFn);
3332
+ $.each({stepUp: 1, stepDown: -1}, function(name, stepFactor){
3333
+ var stepDescriptor = webshims.defineNodeNameProperty('input', name, {
3334
+ prop: {
3335
+ value: function(){
3336
+ var ret;
3337
+ if(stepDescriptor.prop && stepDescriptor.prop._supvalue){
3338
+ ret = stepDescriptor.prop._supvalue.apply(this, arguments);
3339
+ reflectFn.apply(this, arguments);
3340
+ }
3341
+ return ret;
3342
+ }
3343
+ }
3344
+ });
3345
+ });
3198
3346
  }
3199
3347
 
3200
3348
  var extendType = (function(){
@@ -3214,7 +3362,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3214
3362
  $(data.orig).removeClass('ws-important-hide');
3215
3363
  $.style( data.orig, 'display', '' );
3216
3364
  var hasButtons, marginR, marginL;
3217
- var correctWidth = 0.6;
3365
+ var correctWidth = 0.8;
3218
3366
  if(!init || data.orig.offsetWidth){
3219
3367
  hasButtons = data.buttonWrapper && data.buttonWrapper.filter(isVisible).length;
3220
3368
  marginR = $.css( data.orig, 'marginRight');
@@ -3238,7 +3386,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3238
3386
  ;
3239
3387
  } else {
3240
3388
  data.buttonWrapper.css('marginRight', marginR);
3241
- correctWidth = data.buttonWrapper.outerWidth(true) + 0.6;
3389
+ correctWidth = data.buttonWrapper.outerWidth(true) + correctWidth;
3242
3390
  }
3243
3391
  }
3244
3392
 
@@ -3396,7 +3544,29 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3396
3544
  });
3397
3545
  }
3398
3546
 
3399
- if(!modernizrInputTypes.range || options.replaceUI){
3547
+ var replace = {};
3548
+
3549
+
3550
+ if(options.replaceUI){
3551
+ if( $.isPlainObject(options.replaceUI) ){
3552
+ $.extend(replace, options.replaceUI);
3553
+ } else {
3554
+ $.extend(replace, {
3555
+ 'range': 1,
3556
+ 'number': 1,
3557
+ 'time': 1,
3558
+ 'month': 1,
3559
+ 'date': 1,
3560
+ 'color': 1,
3561
+ 'datetime-local': 1
3562
+ });
3563
+ }
3564
+ }
3565
+ if(modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)))){
3566
+ replace.number = 1;
3567
+ }
3568
+
3569
+ if(!modernizrInputTypes.range || replace.range){
3400
3570
  extendType('range', {
3401
3571
  _create: function(opts, set){
3402
3572
  var data = $('<span />').insertAfter(opts.orig).rangeUI(opts).data('rangeUi');
@@ -3405,9 +3575,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
3405
3575
  });
3406
3576
  }
3407
3577
 
3408
- var isStupid = modernizrInputTypes.number && navigator.userAgent.indexOf('Touch') == -1 && ((/MSIE 1[0|1]\.\d/.test(navigator.userAgent)) || (/Trident\/7\.0/.test(navigator.userAgent)));
3578
+
3409
3579
  ['number', 'time', 'month', 'date', 'color', 'datetime-local'].forEach(function(name){
3410
- if(!modernizrInputTypes[name] || options.replaceUI || (name == 'number' && isStupid)){
3580
+ if(!modernizrInputTypes[name] || replace[name]){
3411
3581
  extendType(name, {
3412
3582
  _create: function(opts, set){
3413
3583
  if(opts.monthSelect){
@@ -3482,12 +3652,12 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
3482
3652
  /*
3483
3653
  * implement propType "element" currently only used for list-attribute (will be moved to dom-extend, if needed)
3484
3654
  */
3485
- webshims.propTypes.element = function(descs){
3655
+ webshims.propTypes.element = function(descs, name){
3486
3656
  webshims.createPropDefault(descs, 'attr');
3487
3657
  if(descs.prop){return;}
3488
3658
  descs.prop = {
3489
3659
  get: function(){
3490
- var elem = $.attr(this, 'list');
3660
+ var elem = $.attr(this, name);
3491
3661
  if(elem){
3492
3662
  elem = document.getElementById(elem);
3493
3663
  if(elem && descs.propNodeName && !$.nodeName(elem, descs.propNodeName)){
@@ -3511,7 +3681,15 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
3511
3681
  if(listSupport && !formsCFG.customDatalist){return;}
3512
3682
 
3513
3683
  var initializeDatalist = function(){
3514
-
3684
+
3685
+ var updateDatlistAndOptions = function(){
3686
+ var id;
3687
+ if(!$.data(this, 'datalistWidgetData') && (id = $.prop(this, 'id'))){
3688
+ $('input[list="'+ id +'"], input[data-wslist="'+ id +'"]').eq(0).attr('list', id);
3689
+ } else {
3690
+ $(this).triggerHandler('updateDatalist');
3691
+ }
3692
+ };
3515
3693
 
3516
3694
  var inputListProto = {
3517
3695
  //override autocomplete
@@ -3589,6 +3767,7 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
3589
3767
  id: value,
3590
3768
  datalist: $.prop(elem, 'list')
3591
3769
  });
3770
+ elem.setAttribute('data-wslist', value);
3592
3771
  } else {
3593
3772
  elem.setAttribute('list', value);
3594
3773
  }
@@ -3600,6 +3779,27 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
3600
3779
  propType: 'element',
3601
3780
  propNodeName: 'datalist'
3602
3781
  };
3782
+ } else {
3783
+ webshims.defineNodeNameProperties('input', {
3784
+ list: {
3785
+ attr: {
3786
+ get: function(){
3787
+ var val = webshims.contentAttr(this, 'list');
3788
+ return (val == null) ? undefined : val;
3789
+ },
3790
+ set: function(value){
3791
+ var elem = this;
3792
+ webshims.contentAttr(elem, 'list', value);
3793
+ webshims.objectCreate(options.shadowListProto, undefined, {input: elem, id: value, datalist: $.prop(elem, 'list')});
3794
+ $(elem).triggerHandler('listdatalistchange');
3795
+ }
3796
+ },
3797
+ initAttr: true,
3798
+ reflect: true,
3799
+ propType: 'element',
3800
+ propNodeName: 'datalist'
3801
+ }
3802
+ });
3603
3803
  }
3604
3804
 
3605
3805
  webshims.defineNodeNameProperties('input', inputListProto);
@@ -3608,9 +3808,7 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
3608
3808
  contextElem
3609
3809
  .filter('datalist > select, datalist, datalist > option, datalist > select > option')
3610
3810
  .closest('datalist')
3611
- .each(function(){
3612
- $(this).triggerHandler('updateDatalist');
3613
- })
3811
+ .each(updateDatlistAndOptions)
3614
3812
  ;
3615
3813
  });
3616
3814
  };
@@ -3655,6 +3853,7 @@ webshims.register('form-datalist', function($, webshims, window, document, undef
3655
3853
  this.hasViewableData = true;
3656
3854
  this._autocomplete = $.attr(opts.input, 'autocomplete');
3657
3855
  $.data(opts.input, 'datalistWidget', this);
3856
+ $.data(datalist, 'datalistWidgetData', this);
3658
3857
 
3659
3858
  lazyLoad('WINDOWLOAD');
3660
3859