webshims-rails 1.10.9 → 1.10.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +8 -8
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/polyfiller.js +8 -9
  4. data/vendor/assets/javascripts/webshims/shims/combos/1.js +24 -14
  5. data/vendor/assets/javascripts/webshims/shims/combos/10.js +61 -20
  6. data/vendor/assets/javascripts/webshims/shims/combos/11.js +54 -16
  7. data/vendor/assets/javascripts/webshims/shims/combos/12.js +9 -13
  8. data/vendor/assets/javascripts/webshims/shims/combos/13.js +8 -12
  9. data/vendor/assets/javascripts/webshims/shims/combos/14.js +10 -7
  10. data/vendor/assets/javascripts/webshims/shims/combos/15.js +40 -11
  11. data/vendor/assets/javascripts/webshims/shims/combos/16.js +49 -24
  12. data/vendor/assets/javascripts/webshims/shims/combos/17.js +128 -19
  13. data/vendor/assets/javascripts/webshims/shims/combos/18.js +131 -22
  14. data/vendor/assets/javascripts/webshims/shims/combos/19.js +133 -40
  15. data/vendor/assets/javascripts/webshims/shims/combos/2.js +31 -18
  16. data/vendor/assets/javascripts/webshims/shims/combos/20.js +132 -39
  17. data/vendor/assets/javascripts/webshims/shims/combos/21.js +116 -22
  18. data/vendor/assets/javascripts/webshims/shims/combos/23.js +9 -13
  19. data/vendor/assets/javascripts/webshims/shims/combos/24.js +48 -13
  20. data/vendor/assets/javascripts/webshims/shims/combos/25.js +133 -40
  21. data/vendor/assets/javascripts/webshims/shims/combos/26.js +7 -4
  22. data/vendor/assets/javascripts/webshims/shims/combos/27.js +1 -1
  23. data/vendor/assets/javascripts/webshims/shims/combos/28.js +121 -24
  24. data/vendor/assets/javascripts/webshims/shims/combos/29.js +4 -6
  25. data/vendor/assets/javascripts/webshims/shims/combos/3.js +30 -6
  26. data/vendor/assets/javascripts/webshims/shims/combos/30.js +30 -6
  27. data/vendor/assets/javascripts/webshims/shims/combos/31.js +22 -5
  28. data/vendor/assets/javascripts/webshims/shims/combos/4.js +15 -5
  29. data/vendor/assets/javascripts/webshims/shims/combos/5.js +128 -19
  30. data/vendor/assets/javascripts/webshims/shims/combos/6.js +128 -19
  31. data/vendor/assets/javascripts/webshims/shims/combos/7.js +39 -19
  32. data/vendor/assets/javascripts/webshims/shims/combos/8.js +39 -19
  33. data/vendor/assets/javascripts/webshims/shims/combos/9.js +61 -20
  34. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +7 -4
  35. data/vendor/assets/javascripts/webshims/shims/es5.js +3 -3
  36. data/vendor/assets/javascripts/webshims/shims/form-core.js +15 -1
  37. data/vendor/assets/javascripts/webshims/shims/form-message.js +8 -1
  38. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +74 -3
  39. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +53 -15
  40. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +10 -5
  41. data/vendor/assets/javascripts/webshims/shims/form-validation.js +48 -13
  42. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +14 -2
  43. data/vendor/assets/javascripts/webshims/shims/geolocation.js +2 -2
  44. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ar.js +2 -2
  45. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ch-ZN.js +2 -2
  46. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-de.txt +2 -2
  47. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-el.js +2 -2
  48. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-en.txt +2 -2
  49. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-es.js +2 -2
  50. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fr.js +2 -2
  51. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-he.js +2 -2
  52. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hi.js +2 -2
  53. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-hu.js +2 -2
  54. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-it.js +2 -2
  55. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ja.js +2 -2
  56. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-lt.js +7 -4
  57. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-nl.js +2 -2
  58. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pl.js +106 -0
  59. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-pt-PT.js +2 -2
  60. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-ru.js +2 -2
  61. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-sv.js +2 -2
  62. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +8 -12
  63. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +114 -20
  64. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +132 -17
  65. data/vendor/assets/javascripts/webshims/shims/range-ui.js +1 -1
  66. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +38 -3
  67. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +42 -13
  68. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  69. data/vendor/assets/javascripts/webshims/shims/swfmini.js +1 -1
  70. data/vendor/assets/javascripts/webshims/shims/track-ui.js +4 -6
  71. metadata +3 -2
@@ -12,14 +12,14 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
12
12
  webshims.error("Webshims needs jQuery 1.8+ to work properly. Please update your jQuery version or downgrade webshims.");
13
13
  }
14
14
 
15
- if(webshims.cfg.extendNative == 1){
15
+ if(webshims.cfg.extendNative === 1){
16
16
  webshims.warn("extendNative configuration will be set to false by default with next release. In case you rely on it set it to 'true' otherwise to 'false'. See http://bit.ly/16OOTQO");
17
17
  }
18
18
 
19
19
  if (!webshims.cfg.no$Switch) {
20
20
  var switch$ = function(){
21
21
  if (window.jQuery && (!window.$ || window.jQuery == window.$) && !window.jQuery.webshims) {
22
- webshims.error("jQuery was included more than once. Make sure to include it only once or try the $.noConflict(extreme) feature! Webshims and other Plugins might not work properly..");
22
+ webshims.error("jQuery was included more than once. Make sure to include it only once or try the $.noConflict(extreme) feature! Webshims and other Plugins might not work properly. Or set webshims.cfg.no$Switch to 'true'.");
23
23
  if (window.$) {
24
24
  window.$ = webshims.$;
25
25
  }
@@ -561,6 +561,7 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
561
561
  setInterval(this.test, 600);
562
562
  $(this.test);
563
563
  webshims.ready('WINDOWLOAD', this.test);
564
+ $(document).on('updatelayout', this.handler);
564
565
  $(window).bind('resize', this.handler);
565
566
  (function(){
566
567
  var oldAnimate = $.fn.animate;
@@ -608,7 +609,9 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
608
609
 
609
610
  $(nativeElem).on('remove', function(e){
610
611
  if (!e.originalEvent) {
611
- $(shadowElem).remove();
612
+ setTimeout(function(){
613
+ $(shadowElem).remove();
614
+ }, 4);
612
615
  }
613
616
  });
614
617
 
@@ -1086,4 +1089,4 @@ webshims.register('dom-extend', function($, webshims, window, document, undefine
1086
1089
  }
1087
1090
  });
1088
1091
 
1089
- })(jQuery, document);
1092
+ })(webshims.$, document);
@@ -707,11 +707,11 @@ if((!advancedObjectProperties || !Object.create || !Object.defineProperties || !
707
707
  }
708
708
 
709
709
  if(opts){
710
- o.options = jQuery.extend(true, {}, o.options || {}, opts);
710
+ o.options = $.extend(true, {}, o.options || {}, opts);
711
711
  opts = o.options;
712
712
  }
713
713
 
714
- if(o._create && jQuery.isFunction(o._create)){
714
+ if(o._create && $.isFunction(o._create)){
715
715
  o._create(opts);
716
716
  }
717
717
  return o;
@@ -797,6 +797,6 @@ if((!advancedObjectProperties || !Object.create || !Object.defineProperties || !
797
797
  };
798
798
 
799
799
  }
800
- })(jQuery, jQuery.webshims);
800
+ })(webshims.$, webshims);
801
801
 
802
802
 
@@ -75,6 +75,7 @@ webshims.register('form-core', function($, webshims, window, document, undefined
75
75
  $.expr[":"][name] = $.expr.filters[name+"-element"];
76
76
  });
77
77
 
78
+ //bug was partially fixed in 1.10.0 for IE9, but not IE8 (move to es5 as soon as 1.10.2 is used)
78
79
  var pseudoFocus = $.expr[":"].focus;
79
80
  $.expr[":"].focus = function(){
80
81
  try {
@@ -97,10 +98,18 @@ webshims.register('form-core', function($, webshims, window, document, undefined
97
98
  };
98
99
 
99
100
  var transClass = ('transitionDelay' in document.documentElement.style) ? '' : ' no-transition';
101
+ var poCFG = webshims.cfg.wspopover;
102
+ if(!poCFG.position && poCFG.position !== false){
103
+ poCFG.position = {
104
+ at: 'left bottom',
105
+ my: 'left top',
106
+ collision: 'fit flip'
107
+ };
108
+ }
100
109
  webshims.wsPopover = {
101
110
  id: 0,
102
111
  _create: function(){
103
- this.options = $.extend({}, webshims.cfg.wspopover, this.options);
112
+ this.options = $.extend(true, {}, poCFG, this.options);
104
113
  this.id = webshims.wsPopover.id++;
105
114
  this.eventns = '.wsoverlay' + this.id;
106
115
  this.timers = {};
@@ -147,6 +156,11 @@ webshims.register('form-core', function($, webshims, window, document, undefined
147
156
  var message = $(elem).data('errormessage') || elem.getAttribute('x-moz-errormessage') || '';
148
157
  if(key && message[key]){
149
158
  message = message[key];
159
+ } else if(message) {
160
+ validity = validity || $.prop(elem, 'validity') || {valid: 1};
161
+ if(validity.valid){
162
+ message = '';
163
+ }
150
164
  }
151
165
  if(typeof message == 'object'){
152
166
  validity = validity || $.prop(elem, 'validity') || {valid: 1};
@@ -176,6 +176,10 @@ webshims.register('form-message', function($, webshims, window, document, undefi
176
176
  });
177
177
 
178
178
  implementProperties.forEach(function(messageProp){
179
+ var skipNames = {
180
+ valid: 1,
181
+ badInput: 1
182
+ };
179
183
  webshims.defineNodeNamesProperty(['fieldset', 'output', 'button'], messageProp, {
180
184
  prop: {
181
185
  value: '',
@@ -204,13 +208,16 @@ webshims.register('form-message', function($, webshims, window, document, undefi
204
208
  if(message){return message;}
205
209
  }
206
210
  $.each(validity, function(name, prop){
207
- if(name == 'valid' || !prop){return;}
211
+ if(skipNames[name] || !prop){return;}
208
212
 
209
213
  message = webshims.createValidationMessage(elem, name);
210
214
  if(message){
211
215
  return false;
212
216
  }
213
217
  });
218
+ if(!message && validity.badInput){
219
+ message = webshims.createValidationMessage(elem, 'typeMismatch') || webshims.createValidationMessage(elem, 'valueMissing');
220
+ }
214
221
  return message || '';
215
222
  },
216
223
  writeable: false
@@ -62,7 +62,7 @@ webshims.register('form-number-date-api', function($, webshims, window, document
62
62
  if(!('type' in cache)){
63
63
  cache.type = getType(input[0]);
64
64
  }
65
-
65
+ if(cache.type == 'week'){return false;}
66
66
  var ret = (validityState || {}).stepMismatch || false, base;
67
67
  if(typeModels[cache.type] && typeModels[cache.type].step){
68
68
  if( !('step' in cache) ){
@@ -250,6 +250,29 @@ webshims.register('form-number-date-api', function($, webshims, window, document
250
250
  });
251
251
  });
252
252
 
253
+ /*
254
+ * ToDO: WEEK
255
+ */
256
+ // var getWeek = function(date){
257
+ // var time;
258
+ // var checkDate = new Date(date.getTime());
259
+ //
260
+ // checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
261
+ //
262
+ // time = checkDate.getTime();
263
+ // checkDate.setMonth(0);
264
+ // checkDate.setDate(1);
265
+ // return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
266
+ // };
267
+ //
268
+ // var setWeek = function(year, week){
269
+ // var date = new Date(year, 0, 1);
270
+ //
271
+ // week = (week - 1) * 86400000 * 7;
272
+ // date = new Date(date.getTime() + week);
273
+ // date.setDate(date.getDate() + 1 - (date.getDay() || 7));
274
+ // return date;
275
+ // };
253
276
 
254
277
  var typeProtos = {
255
278
 
@@ -326,6 +349,56 @@ webshims.register('form-number-date-api', function($, webshims, window, document
326
349
  return (date && date.getFullYear) ? addleadingZero(date.getUTCFullYear(), 4) +'-'+ addleadingZero(date.getUTCMonth()+1, 2) +'-'+ addleadingZero(date.getUTCDate(), 2) : false;
327
350
  }
328
351
  },
352
+ /*
353
+ * ToDO: WEEK
354
+ */
355
+ // week: {
356
+ // mismatch: function(val){
357
+ // if(!val || !val.split){return true;}
358
+ // var valA = val.split('-W');
359
+ // var ret = true;
360
+ // if(valA.length == 2 && valA[0].length > 3 && valA.length == 2){
361
+ // ret = this.dateToString(setWeek(valA[0], valA[1])) != val;
362
+ // }
363
+ // return ret;
364
+ // },
365
+ // step: 1,
366
+ // stepScaleFactor: 604800000,
367
+ // stepBase: -259200000,
368
+ // asDate: function(str, _noMismatch){
369
+ // var ret = null;
370
+ // if(_noMismatch || !this.mismatch(str)){
371
+ // ret = str.split('-W');
372
+ // ret = setWeek(ret[0], ret[1]);
373
+ // }
374
+ // return ret;
375
+ // },
376
+ // asNumber: function(str, _noMismatch){
377
+ // var ret = nan;
378
+ // var date = this.asDate(str, _noMismatch);
379
+ // if(date && date.getUTCFullYear){
380
+ // ret = date.getTime();
381
+ // }
382
+ // return ret;
383
+ // },
384
+ // dateToString: function(date){
385
+ // var week, checkDate;
386
+ // var ret = false;
387
+ // if(date && date.getFullYear){
388
+ // week = getWeek(date);
389
+ // if(week == 1){
390
+ // checkDate = new Date(date.getTime());
391
+ // checkDate.setDate(checkDate.getDate() + 7);
392
+ // date.setUTCFullYear(checkDate.getUTCFullYear());
393
+ // }
394
+ // ret = addleadingZero(date.getUTCFullYear(), 4) +'-W'+addleadingZero(week, 2);
395
+ // }
396
+ // return ret;
397
+ // },
398
+ // numberToString: function(num){
399
+ // return (isNumber(num)) ? this.dateToString(new Date( num * 1)) : false;
400
+ // }
401
+ // },
329
402
  time: {
330
403
  mismatch: function(val, _getParsed){
331
404
  if(!val || !val.split || !(/\d$/.test(val))){return true;}
@@ -484,8 +557,6 @@ webshims.register('form-number-date-api', function($, webshims, window, document
484
557
  // typeProtos['datetime-local'] = $.extend({}, typeProtos.date, typeProtos.time, typeProtos['datetime-local']);
485
558
  }
486
559
 
487
-
488
-
489
560
  //'datetime-local'
490
561
  ['number', 'month', 'range', 'date', 'time', 'color'].forEach(function(type){
491
562
  if(typeBugs || !supportsType(type)){
@@ -4,7 +4,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
4
4
  var formcfg = webshims.formcfg;
5
5
 
6
6
  var stopPropagation = function(e){
7
- e.stopImmediatePropagation(e);
7
+ e.stopImmediatePropagation();
8
8
  };
9
9
  var createFormat = function(name){
10
10
  if(!curCfg.patterns[name+'Obj']){
@@ -75,6 +75,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
75
75
  number: {
76
76
  step: 1
77
77
  },
78
+ // week: {
79
+ // step: 1,
80
+ // start: new Date(nowDate)
81
+ // },
78
82
  time: {
79
83
  step: 60
80
84
  },
@@ -277,6 +281,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
277
281
  time: function(val){
278
282
  return val;
279
283
  },
284
+ week: function(val){
285
+ return val;
286
+ },
280
287
  //todo empty val for month/split
281
288
  month: function(val, options){
282
289
  var names;
@@ -326,6 +333,9 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
326
333
  number: function(val){
327
334
  return (val+'').replace(curCfg.numberFormat[','], '').replace(curCfg.numberFormat['.'], '.');
328
335
  },
336
+ // week: function(val){
337
+ // return val;
338
+ // },
329
339
  time: function(val){
330
340
  return val;
331
341
  },
@@ -462,6 +472,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
462
472
  steps[this.type].start = this.asNumber(steps[this.type].start);
463
473
  }
464
474
 
475
+ if(!webshims.picker[this.type]){
476
+ o.buttonOnly = false;
477
+ }
478
+
465
479
  for(i = 0; i < createOpts.length; i++){
466
480
  if(o[createOpts[i]] != null){
467
481
  this[createOpts[i]](o[createOpts[i]], o[createOpts[i]]);
@@ -473,6 +487,11 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
473
487
  this.addBindings();
474
488
  $(this.element).data('wsWidget'+o.type, this);
475
489
 
490
+
491
+ if(o.buttonOnly){
492
+ this.inputElements.prop({readOnly: true});
493
+ }
494
+
476
495
  this._init = true;
477
496
 
478
497
  if(o.mirrorValidity){
@@ -553,7 +572,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
553
572
  if(preventBlur.prevent){
554
573
  e.preventDefault();
555
574
  (isFocused || that.element.getShadowFocusElement()).focus();
556
- e.stopImmediatePropagation();
575
+ stopPropagation(e);
557
576
  return true;
558
577
  }
559
578
  };
@@ -925,12 +944,18 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
925
944
  ['readonly', 'disabled'].forEach(function(name){
926
945
  var isDisabled = name == 'disabled';
927
946
  wsWidgetProto[name] = function(val, boolVal){
928
- if(this.options[name] != boolVal || !this._init){
929
- this.options[name] = !!boolVal;
930
- this.inputElements.prop(name, this.options[name]);
931
- this.buttonWrapper[this.options[name] ? 'addClass' : 'removeClass']('ws-'+name);
947
+ var options = this.options;
948
+ if(options[name] != boolVal || !this._init){
949
+ options[name] = !!boolVal;
950
+
951
+ if(!isDisabled && options.buttonOnly){
952
+ this.inputElements.attr({'aria-readonly': options[name]});
953
+ } else {
954
+ this.inputElements.prop(name, options[name]);
955
+ }
956
+ this.buttonWrapper[options[name] ? 'addClass' : 'removeClass']('ws-'+name);
932
957
  if(isDisabled){
933
- $('button', this.buttonWrapper).prop('disabled', this.options[name]);
958
+ $('button', this.buttonWrapper).prop('disabled', options[name]);
934
959
  }
935
960
  }
936
961
  };
@@ -1217,9 +1242,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1217
1242
 
1218
1243
 
1219
1244
  picker._common = function(data){
1220
- var popover = webshims.objectCreate(webshims.wsPopover, {}, {prepareFor: data.element});
1221
- var opener = $('<button type="button" class="ws-popover-opener"><span /></button>').appendTo(data.buttonWrapper);
1222
1245
  var options = data.options;
1246
+ var popover = webshims.objectCreate(webshims.wsPopover, {}, {prepareFor: data.element, position: options.widgetPosition});
1247
+ var opener = $('<button type="button" class="ws-popover-opener"><span /></button>').appendTo(data.buttonWrapper);
1248
+
1223
1249
 
1224
1250
  var showPickerContent = function(){
1225
1251
  (picker[data.type].showPickerContent || picker.showPickerContent)(data, popover);
@@ -1308,8 +1334,8 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1308
1334
  };
1309
1335
  data.inputElements.on({
1310
1336
  focus: function(){
1311
- if(!popover.stopOpen && (data.options.openOnFocus || (mouseFocus && options.openOnMouseFocus))){
1312
- popover.openedByFocus = !options.noInput;
1337
+ if(!popover.stopOpen && (options.buttonOnly || options.openOnFocus || (mouseFocus && options.openOnMouseFocus))){
1338
+ popover.openedByFocus = options.buttonOnly ? false : !options.noInput;
1313
1339
  show();
1314
1340
  } else {
1315
1341
  popover.preventBlur();
@@ -1318,8 +1344,15 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1318
1344
  mousedown: function(){
1319
1345
  mouseFocus = true;
1320
1346
  setTimeout(resetMouseFocus, 9);
1347
+ if(options.buttonOnly && popover.isVisible && popover.activeElement){
1348
+ popover.openedByFocus = false;
1349
+ setTimeout(function(){
1350
+ popover.openedByFocus = false;
1351
+ popover.activeElement.focus();
1352
+ }, 4);
1353
+ }
1321
1354
  if(data.element.is(':focus')){
1322
- popover.openedByFocus = !options.noInput;
1355
+ popover.openedByFocus = options.buttonOnly ? false : !options.noInput;
1323
1356
  show();
1324
1357
  }
1325
1358
  popover.preventBlur();
@@ -1330,8 +1363,10 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1330
1363
  data.opener = opener;
1331
1364
  $(data.orig).on('remove', function(e){
1332
1365
  if(!e.originalEvent){
1333
- opener.remove();
1334
- popover.element.remove();
1366
+ setTimeout(function(){
1367
+ opener.remove();
1368
+ popover.element.remove();
1369
+ }, 4);
1335
1370
  }
1336
1371
  });
1337
1372
 
@@ -1340,6 +1375,7 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1340
1375
 
1341
1376
  picker.month = picker._common;
1342
1377
  picker.date = picker._common;
1378
+ // picker.week = picker._common;
1343
1379
  picker.color = function(data){
1344
1380
  var ret = picker._common.apply(this, arguments);
1345
1381
  var alpha = $(data.orig).data('alphacontrol');
@@ -1591,10 +1627,12 @@ webshims.register('form-number-date-ui', function($, webshims, window, document,
1591
1627
  data.shim.element.addClass('has-input-buttons');
1592
1628
  }
1593
1629
 
1630
+ data.shim.element.addClass($.prop(this, 'className'));
1631
+
1594
1632
  if(opts.calculateWidth){
1595
1633
  sizeInput(data.shim);
1596
1634
  } else {
1597
- $(this).css({display: 'none'});
1635
+ $(this).addClass('ws-important-hide');
1598
1636
  }
1599
1637
  }
1600
1638
 
@@ -257,8 +257,16 @@ $(window).on('invalid', $.noop);
257
257
  webshims.addInputType('email', {
258
258
  mismatch: (function(){
259
259
  //taken from http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
260
- var test = cfg.emailReg || /^[a-zA-Z0-9.!#$%&'*+-\/=?\^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
260
+ var test = cfg.emailReg || /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
261
261
  return function(val){
262
+ // optional punycode support: https://github.com/bestiejs/punycode.js
263
+ if(window.punycode && punycode.toASCII){
264
+ try {
265
+ if( test.test(punycode.toASCII(val)) ){
266
+ return false;
267
+ }
268
+ } catch(er){}
269
+ }
262
270
  return !test.test(val);
263
271
  };
264
272
  })()
@@ -1764,10 +1772,7 @@ try {
1764
1772
  });
1765
1773
  }
1766
1774
  ;
1767
- if($.event.customEvent){
1768
- $.event.customEvent.updateInput = true;
1769
- }
1770
-
1775
+
1771
1776
  $(doc)
1772
1777
  .on('focusin', function(e){
1773
1778
  if( e.target && !e.target.readOnly && !e.target.disabled && (e.target.nodeName || '').toLowerCase() == 'input' && !noInputTypes[e.target.type] && !(webshims.data(e.target, 'implemented') || {}).inputwidgets){
@@ -80,7 +80,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
80
80
  if(!e.target){return;}
81
81
  elem = $(e.target).getNativeElement()[0];
82
82
  shadowElem = $(elem).getShadowElement();
83
- if(elem.type == 'submit' || !$.prop(elem, 'willValidate') || (e.type == 'change' && !changeTypes[(shadowType = shadowElem.prop('type'))])){return;}
83
+ if(elem.type == 'submit' || !$.prop(elem, 'willValidate') || (e.type == 'change' && (shadowType = shadowElem.prop('type')) && !changeTypes[shadowType])){return;}
84
84
  timer = $.data(elem, 'webshimsswitchvalidityclass');
85
85
  var switchClass = function(){
86
86
  if(!shadowType){
@@ -155,7 +155,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
155
155
  }
156
156
  };
157
157
 
158
- $(document.body)
158
+ $(document.body || 'html')
159
159
  .on(options.validityUIEvents || 'focusout change refreshvalidityui invalid', switchValidityClass)
160
160
  .on('reset resetvalui', function(e){
161
161
  var elems = $(e.target);
@@ -187,18 +187,44 @@ webshims.register('form-validation', function($, webshims, window, document, und
187
187
  'width'
188
188
  ;
189
189
  var hasTransition = ('transitionDelay' in document.documentElement.style);
190
+ var resetPos = {display: 'inline-block', left: 0, top: 0, marginTop: 0, marginLeft: 0, marginRight: 0, marginBottom: 0};
191
+
190
192
  setRoot();
191
193
  webshims.ready('DOM', setRoot);
192
194
 
193
- webshims.getRelOffset = function(posElem, relElem){
195
+
196
+ webshims.getRelOffset = function(posElem, relElem, opts){
197
+ var offset, bodyOffset, dirs;
194
198
  posElem = $(posElem);
195
- var offset = $(relElem).offset();
196
- var bodyOffset;
197
- $.swap($(posElem)[0], {visibility: 'hidden', display: 'inline-block', left: 0, top: 0}, function(){
198
- bodyOffset = posElem.offset();
199
+ $.swap($(posElem)[0], resetPos, function(){
200
+ if($.position && opts && $.position.getScrollInfo){
201
+ if(!opts.of){
202
+ opts.of = relElem;
203
+ }
204
+
205
+ opts.using = function(calced, data){
206
+ posElem.attr({'data-horizontal': data.horizontal, 'data-vertical': data.vertical});
207
+ offset = calced;
208
+ };
209
+ posElem.attr({
210
+ 'data-horizontal': '',
211
+ 'data-vertical': '',
212
+ 'data-my': opts.my || 'center',
213
+ 'data-at': opts.at || 'center'
214
+ });
215
+ posElem.position(opts);
216
+
217
+ } else {
218
+ offset = $(relElem).offset();
219
+ bodyOffset = posElem.offset();
220
+ offset.top -= bodyOffset.top;
221
+ offset.left -= bodyOffset.left;
222
+
223
+ offset.top += relElem.outerHeight();
224
+ }
225
+
199
226
  });
200
- offset.top -= bodyOffset.top;
201
- offset.left -= bodyOffset.left;
227
+
202
228
  return offset;
203
229
  };
204
230
 
@@ -249,9 +275,10 @@ webshims.register('form-validation', function($, webshims, window, document, und
249
275
  },
250
276
  prepareFor: function(element, visual){
251
277
  var onBlur;
252
- var opts = $.extend({}, this.options, $(element.prop('form') || []).data('wspopover') || {}, element.data('wspopover'));
253
278
  var that = this;
254
279
  var css = {};
280
+ var opts = $.extend(true, {}, this.options, $(element.prop('form') || []).data('wspopover') || {}, element.data('wspopover'));
281
+ this.lastOpts = opts;
255
282
  this.lastElement = $(element).getShadowFocusElement();
256
283
  if(!this.prepared || !this.options.prepareFor){
257
284
  if(opts.appendTo == 'element'){
@@ -297,6 +324,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
297
324
  $(document).off(this.eventns);
298
325
  this.element.off('transitionend'+this.eventns);
299
326
  this.stopBlur = false;
327
+ this.lastOpts = false;
300
328
  $.each(this.timers, function(timerName, val){
301
329
  clearTimeout(val);
302
330
  });
@@ -324,9 +352,9 @@ webshims.register('form-validation', function($, webshims, window, document, und
324
352
  that.timers.forcehide = setTimeout(forceHide, hasTransition ? 600 : 40);
325
353
  },
326
354
  position: function(element){
327
- var offset = webshims.getRelOffset(this.element.css({marginTop: 0, marginLeft: 0, marginRight: 0, marginBottom: 0}).removeAttr('hidden'), element);
328
- offset.top += element.outerHeight();
329
- this.element.css({marginTop: '', marginLeft: '', marginRight: '', marginBottom: ''}).css(offset);
355
+ var offset = webshims.getRelOffset(this.element.removeAttr('hidden'), element, (this.lastOpts || this.options).position);
356
+
357
+ this.element.css(offset);
330
358
  }
331
359
  });
332
360
 
@@ -334,6 +362,12 @@ webshims.register('form-validation', function($, webshims, window, document, und
334
362
 
335
363
  /* some extra validation UI */
336
364
  webshims.validityAlert = (function(){
365
+
366
+ options.messagePopover.position = $.extend({}, {
367
+ at: 'left bottom',
368
+ my: 'left top',
369
+ collision: 'none'
370
+ }, options.messagePopover.position || {});
337
371
 
338
372
  var focusTimer = false;
339
373
 
@@ -565,6 +599,7 @@ webshims.register('form-validation', function($, webshims, window, document, und
565
599
  },
566
600
  submit: function(e){
567
601
  if(options.iVal.sel && $(e.target).is(options.iVal.sel) && $.prop(e.target, 'noValidate') && !$(e.target).checkValidity()){
602
+ e.stopImmediatePropagation();
568
603
  return false;
569
604
  }
570
605
  }