webshims-rails 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. data/lib/webshims-rails.rb +1 -1
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/readme.textile +5 -3
  4. data/vendor/assets/javascripts/webshims/dev/extras/custom-validity.js +261 -0
  5. data/vendor/assets/javascripts/webshims/dev/extras/modernizr-custom.js +535 -0
  6. data/vendor/assets/javascripts/webshims/dev/extras/mousepress.js +60 -0
  7. data/vendor/assets/javascripts/webshims/dev/polyfiller.js +1171 -0
  8. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/README +62 -0
  9. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/canvas2png.js +42 -0
  10. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/flashcanvas.js +28 -0
  11. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/flashcanvas.swf +0 -0
  12. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/proxy.php +73 -0
  13. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvas/save.php +49 -0
  14. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/README +82 -0
  15. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/canvas2png.js +42 -0
  16. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  17. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  18. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/flashcanvas.js +31 -0
  19. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/proxy.php +73 -0
  20. data/vendor/assets/javascripts/webshims/dev/shims/FlashCanvasPro/save.php +49 -0
  21. data/vendor/assets/javascripts/webshims/dev/shims/combos/1.js +1710 -0
  22. data/vendor/assets/javascripts/webshims/dev/shims/combos/10.js +3317 -0
  23. data/vendor/assets/javascripts/webshims/dev/shims/combos/11.js +1585 -0
  24. data/vendor/assets/javascripts/webshims/dev/shims/combos/12.js +1587 -0
  25. data/vendor/assets/javascripts/webshims/dev/shims/combos/13.js +1054 -0
  26. data/vendor/assets/javascripts/webshims/dev/shims/combos/14.js +476 -0
  27. data/vendor/assets/javascripts/webshims/dev/shims/combos/15.js +314 -0
  28. data/vendor/assets/javascripts/webshims/dev/shims/combos/16.js +2101 -0
  29. data/vendor/assets/javascripts/webshims/dev/shims/combos/17.js +2264 -0
  30. data/vendor/assets/javascripts/webshims/dev/shims/combos/18.js +2161 -0
  31. data/vendor/assets/javascripts/webshims/dev/shims/combos/19.js +2244 -0
  32. data/vendor/assets/javascripts/webshims/dev/shims/combos/2.js +2294 -0
  33. data/vendor/assets/javascripts/webshims/dev/shims/combos/20.js +1607 -0
  34. data/vendor/assets/javascripts/webshims/dev/shims/combos/21.js +1635 -0
  35. data/vendor/assets/javascripts/webshims/dev/shims/combos/22.js +2409 -0
  36. data/vendor/assets/javascripts/webshims/dev/shims/combos/23.js +2168 -0
  37. data/vendor/assets/javascripts/webshims/dev/shims/combos/24.js +2777 -0
  38. data/vendor/assets/javascripts/webshims/dev/shims/combos/25.js +2204 -0
  39. data/vendor/assets/javascripts/webshims/dev/shims/combos/26.js +2863 -0
  40. data/vendor/assets/javascripts/webshims/dev/shims/combos/27.js +4079 -0
  41. data/vendor/assets/javascripts/webshims/dev/shims/combos/3.js +2971 -0
  42. data/vendor/assets/javascripts/webshims/dev/shims/combos/4.js +823 -0
  43. data/vendor/assets/javascripts/webshims/dev/shims/combos/5.js +1078 -0
  44. data/vendor/assets/javascripts/webshims/dev/shims/combos/59.js +1754 -0
  45. data/vendor/assets/javascripts/webshims/dev/shims/combos/6.js +1230 -0
  46. data/vendor/assets/javascripts/webshims/dev/shims/combos/7.js +1485 -0
  47. data/vendor/assets/javascripts/webshims/dev/shims/combos/8.js +1442 -0
  48. data/vendor/assets/javascripts/webshims/dev/shims/combos/9.js +2515 -0
  49. data/vendor/assets/javascripts/webshims/dev/shims/details.js +146 -0
  50. data/vendor/assets/javascripts/webshims/dev/shims/dom-extend.js +908 -0
  51. data/vendor/assets/javascripts/webshims/dev/shims/es5.js +802 -0
  52. data/vendor/assets/javascripts/webshims/dev/shims/excanvas.js +924 -0
  53. data/vendor/assets/javascripts/webshims/dev/shims/form-core.js +660 -0
  54. data/vendor/assets/javascripts/webshims/dev/shims/form-datalist.js +677 -0
  55. data/vendor/assets/javascripts/webshims/dev/shims/form-message.js +164 -0
  56. data/vendor/assets/javascripts/webshims/dev/shims/form-native-extend.js +256 -0
  57. data/vendor/assets/javascripts/webshims/dev/shims/form-native-fix.js +261 -0
  58. data/vendor/assets/javascripts/webshims/dev/shims/form-number-date-api.js +384 -0
  59. data/vendor/assets/javascripts/webshims/dev/shims/form-number-date-ui.js +847 -0
  60. data/vendor/assets/javascripts/webshims/dev/shims/form-shim-extend.js +1472 -0
  61. data/vendor/assets/javascripts/webshims/dev/shims/geolocation.js +168 -0
  62. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ar.js +32 -0
  63. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ch-ZN.js +32 -0
  64. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-de.txt +33 -0
  65. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-el.js +32 -0
  66. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-en.txt +34 -0
  67. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-es.js +32 -0
  68. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-fr.js +32 -0
  69. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-he.js +32 -0
  70. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-hi.js +32 -0
  71. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-hu.js +32 -0
  72. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-it.js +32 -0
  73. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ja.js +32 -0
  74. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-nl.js +32 -0
  75. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-pt-PT.js +32 -0
  76. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-ru.js +32 -0
  77. data/vendor/assets/javascripts/webshims/dev/shims/i18n/errormessages-sv.js +32 -0
  78. data/vendor/assets/javascripts/webshims/dev/shims/json-storage.js +308 -0
  79. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/license.txt +1 -0
  80. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/player.swf +0 -0
  81. data/vendor/assets/javascripts/webshims/dev/shims/jwplayer/readme.html +87 -0
  82. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-core.js +534 -0
  83. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-native-fix.js +99 -0
  84. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-swf.js +1074 -0
  85. data/vendor/assets/javascripts/webshims/dev/shims/mediaelement-yt.js +543 -0
  86. data/vendor/assets/javascripts/webshims/dev/shims/styles/details-arrows.png +0 -0
  87. data/vendor/assets/javascripts/webshims/dev/shims/styles/forms.png +0 -0
  88. data/vendor/assets/javascripts/webshims/dev/shims/styles/polyfill-loader.gif +0 -0
  89. data/vendor/assets/javascripts/webshims/dev/shims/styles/shim.css +677 -0
  90. data/vendor/assets/javascripts/webshims/dev/shims/swf/jwwebshims.swf +0 -0
  91. data/vendor/assets/javascripts/webshims/dev/shims/swf/localStorage.swf +0 -0
  92. data/vendor/assets/javascripts/webshims/dev/shims/track-ui.js +292 -0
  93. data/vendor/assets/javascripts/webshims/dev/shims/track.js +763 -0
  94. data/vendor/assets/javascripts/webshims/minified/extras/modernizr-custom.js +20 -20
  95. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +29 -29
  96. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +37 -33
  97. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +83 -76
  98. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +44 -42
  99. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +43 -38
  100. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +27 -25
  101. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +60 -55
  102. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +68 -64
  103. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +60 -59
  104. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +66 -64
  105. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +74 -69
  106. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +46 -43
  107. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +52 -47
  108. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +61 -57
  109. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +68 -60
  110. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +82 -77
  111. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +58 -0
  112. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +80 -0
  113. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +103 -0
  114. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +96 -91
  115. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +30 -31
  116. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +37 -39
  117. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +59 -61
  118. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +31 -29
  119. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +38 -37
  120. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +38 -33
  121. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +68 -63
  122. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +22 -20
  123. data/vendor/assets/javascripts/webshims/minified/shims/es5.js +15 -14
  124. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +22 -22
  125. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +22 -22
  126. data/vendor/assets/javascripts/webshims/minified/shims/form-message.js +8 -9
  127. data/vendor/assets/javascripts/webshims/minified/shims/form-native-extend.js +7 -8
  128. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +23 -21
  129. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +44 -33
  130. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-sv.js +3 -0
  131. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/player.swf +0 -0
  132. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/readme.html +86 -86
  133. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +16 -13
  134. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +30 -30
  135. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +14 -0
  136. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +71 -10
  137. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +9 -0
  138. data/vendor/assets/javascripts/webshims/minified/shims/track.js +20 -0
  139. metadata +101 -5
  140. data/vendor/assets/javascripts/webshims/minified/shims/form-output.js +0 -5
@@ -0,0 +1,164 @@
1
+ jQuery.webshims.register('form-message', function($, webshims, window, document, undefined, options){
2
+ var validityMessages = webshims.validityMessages;
3
+
4
+ var implementProperties = (options.overrideMessages || options.customMessages) ? ['customValidationMessage'] : [];
5
+
6
+ validityMessages['en'] = $.extend(true, {
7
+ typeMismatch: {
8
+ email: 'Please enter an email address.',
9
+ url: 'Please enter a URL.',
10
+ number: 'Please enter a number.',
11
+ date: 'Please enter a date.',
12
+ time: 'Please enter a time.',
13
+ range: 'Invalid input.',
14
+ "datetime-local": 'Please enter a datetime.'
15
+ },
16
+ rangeUnderflow: {
17
+ defaultMessage: 'Value must be greater than or equal to {%min}.'
18
+ },
19
+ rangeOverflow: {
20
+ defaultMessage: 'Value must be less than or equal to {%max}.'
21
+ },
22
+ stepMismatch: 'Invalid input.',
23
+ tooLong: 'Please enter at most {%maxlength} character(s). You entered {%valueLen}.',
24
+
25
+ patternMismatch: 'Invalid input. {%title}',
26
+ valueMissing: {
27
+ defaultMessage: 'Please fill out this field.',
28
+ checkbox: 'Please check this box if you want to proceed.'
29
+ }
30
+ }, (validityMessages['en'] || validityMessages['en-US'] || {}));
31
+
32
+
33
+ ['select', 'radio'].forEach(function(type){
34
+ validityMessages['en'].valueMissing[type] = 'Please select an option.';
35
+ });
36
+
37
+ ['date', 'time', 'datetime-local'].forEach(function(type){
38
+ validityMessages.en.rangeUnderflow[type] = 'Value must be at or after {%min}.';
39
+ });
40
+ ['date', 'time', 'datetime-local'].forEach(function(type){
41
+ validityMessages.en.rangeOverflow[type] = 'Value must be at or before {%max}.';
42
+ });
43
+
44
+ validityMessages['en-US'] = validityMessages['en-US'] || validityMessages['en'];
45
+ validityMessages[''] = validityMessages[''] || validityMessages['en-US'];
46
+
47
+ validityMessages['de'] = $.extend(true, {
48
+ typeMismatch: {
49
+ email: '{%value} ist keine zulässige E-Mail-Adresse',
50
+ url: '{%value} ist keine zulässige Webadresse',
51
+ number: '{%value} ist keine Nummer!',
52
+ date: '{%value} ist kein Datum',
53
+ time: '{%value} ist keine Uhrzeit',
54
+ range: '{%value} ist keine Nummer!',
55
+ "datetime-local": '{%value} ist kein Datum-Uhrzeit Format.'
56
+ },
57
+ rangeUnderflow: {
58
+ defaultMessage: '{%value} ist zu niedrig. {%min} ist der unterste Wert, den Sie benutzen können.'
59
+ },
60
+ rangeOverflow: {
61
+ defaultMessage: '{%value} ist zu hoch. {%max} ist der oberste Wert, den Sie benutzen können.'
62
+ },
63
+ stepMismatch: 'Der Wert {%value} ist in diesem Feld nicht zulässig. Hier sind nur bestimmte Werte zulässig. {%title}',
64
+ tooLong: 'Der eingegebene Text ist zu lang! Sie haben {%valueLen} Zeichen eingegeben, dabei sind {%maxlength} das Maximum.',
65
+ patternMismatch: '{%value} hat für dieses Eingabefeld ein falsches Format! {%title}',
66
+ valueMissing: {
67
+ defaultMessage: 'Bitte geben Sie einen Wert ein',
68
+ checkbox: 'Bitte aktivieren Sie das Kästchen'
69
+ }
70
+ }, (validityMessages['de'] || {}));
71
+
72
+ ['select', 'radio'].forEach(function(type){
73
+ validityMessages['de'].valueMissing[type] = 'Bitte wählen Sie eine Option aus';
74
+ });
75
+
76
+ ['date', 'time', 'datetime-local'].forEach(function(type){
77
+ validityMessages.de.rangeUnderflow[type] = '{%value} ist zu früh. {%min} ist die früheste Zeit, die Sie benutzen können.';
78
+ });
79
+ ['date', 'time', 'datetime-local'].forEach(function(type){
80
+ validityMessages.de.rangeOverflow[type] = '{%value} ist zu spät. {%max} ist die späteste Zeit, die Sie benutzen können.';
81
+ });
82
+
83
+ var currentValidationMessage = validityMessages[''];
84
+
85
+
86
+ webshims.createValidationMessage = function(elem, name){
87
+ var message = currentValidationMessage[name];
88
+ if(message && typeof message !== 'string'){
89
+ message = message[ $.prop(elem, 'type') ] || message[ (elem.nodeName || '').toLowerCase() ] || message[ 'defaultMessage' ];
90
+ }
91
+ if(message){
92
+ ['value', 'min', 'max', 'title', 'maxlength', 'label'].forEach(function(attr){
93
+ if(message.indexOf('{%'+attr) === -1){return;}
94
+ var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.attr(elem, attr)) || '';
95
+ if(name == 'patternMismatch' && attr == 'title' && !val){
96
+ webshims.error('no title for patternMismatch provided. Always add a title attribute.');
97
+ }
98
+ message = message.replace('{%'+ attr +'}', val);
99
+ if('value' == attr){
100
+ message = message.replace('{%valueLen}', val.length);
101
+ }
102
+ });
103
+ }
104
+ return message || '';
105
+ };
106
+
107
+
108
+ if(webshims.bugs.validationMessage || !Modernizr.formvalidation || webshims.bugs.bustedValidity){
109
+ implementProperties.push('validationMessage');
110
+ }
111
+
112
+ webshims.activeLang({
113
+ langObj: validityMessages,
114
+ module: 'form-core',
115
+ callback: function(langObj){
116
+ currentValidationMessage = langObj;
117
+ }
118
+ });
119
+
120
+ implementProperties.forEach(function(messageProp){
121
+ webshims.defineNodeNamesProperty(['fieldset', 'output', 'button'], messageProp, {
122
+ prop: {
123
+ value: '',
124
+ writeable: false
125
+ }
126
+ });
127
+ ['input', 'select', 'textarea'].forEach(function(nodeName){
128
+ var desc = webshims.defineNodeNameProperty(nodeName, messageProp, {
129
+ prop: {
130
+ get: function(){
131
+ var elem = this;
132
+ var message = '';
133
+ if(!$.prop(elem, 'willValidate')){
134
+ return message;
135
+ }
136
+
137
+ var validity = $.prop(elem, 'validity') || {valid: 1};
138
+
139
+ if(validity.valid){return message;}
140
+ message = webshims.getContentValidationMessage(elem, validity);
141
+
142
+ if(message){return message;}
143
+
144
+ if(validity.customError && elem.nodeName){
145
+ message = (Modernizr.formvalidation && !webshims.bugs.bustedValidity && desc.prop._supget) ? desc.prop._supget.call(elem) : webshims.data(elem, 'customvalidationMessage');
146
+ if(message){return message;}
147
+ }
148
+ $.each(validity, function(name, prop){
149
+ if(name == 'valid' || !prop){return;}
150
+
151
+ message = webshims.createValidationMessage(elem, name);
152
+ if(message){
153
+ return false;
154
+ }
155
+ });
156
+ return message || '';
157
+ },
158
+ writeable: false
159
+ }
160
+ });
161
+ });
162
+
163
+ });
164
+ });
@@ -0,0 +1,256 @@
1
+ jQuery.webshims.register('form-extend', function($, webshims, window, doc, undefined, options){
2
+ "use strict";
3
+ var Modernizr = window.Modernizr;
4
+ var modernizrInputTypes = Modernizr.inputtypes;
5
+ if(!Modernizr.formvalidation || webshims.bugs.bustedValidity){return;}
6
+ var typeModels = webshims.inputTypes;
7
+ var validityRules = {};
8
+
9
+ webshims.addInputType = function(type, obj){
10
+ typeModels[type] = obj;
11
+ };
12
+
13
+ webshims.addValidityRule = function(type, fn){
14
+ validityRules[type] = fn;
15
+ };
16
+
17
+ webshims.addValidityRule('typeMismatch',function (input, val, cache, validityState){
18
+ if(val === ''){return false;}
19
+ var ret = validityState.typeMismatch;
20
+ if(!('type' in cache)){
21
+ cache.type = (input[0].getAttribute('type') || '').toLowerCase();
22
+ }
23
+
24
+ if(typeModels[cache.type] && typeModels[cache.type].mismatch){
25
+ ret = typeModels[cache.type].mismatch(val, input);
26
+ }
27
+ return ret;
28
+ });
29
+
30
+ var overrideNativeMessages = options.overrideMessages;
31
+
32
+ var overrideValidity = (!modernizrInputTypes.number || !modernizrInputTypes.time || !modernizrInputTypes.range || overrideNativeMessages);
33
+ var validityProps = ['customError','typeMismatch','rangeUnderflow','rangeOverflow','stepMismatch','tooLong','patternMismatch','valueMissing','valid'];
34
+
35
+ var validityChanger = (overrideNativeMessages)? ['value', 'checked'] : ['value'];
36
+ var validityElements = [];
37
+ var testValidity = function(elem, init){
38
+ if(!elem){return;}
39
+ var type = (elem.getAttribute && elem.getAttribute('type') || elem.type || '').toLowerCase();
40
+
41
+ if(!overrideNativeMessages && !typeModels[type]){
42
+ return;
43
+ }
44
+
45
+ if(overrideNativeMessages && !init && type == 'radio' && elem.name){
46
+ $(doc.getElementsByName( elem.name )).each(function(){
47
+ $.prop(this, 'validity');
48
+ });
49
+ } else {
50
+ $.prop(elem, 'validity');
51
+ }
52
+ };
53
+
54
+ var oldSetCustomValidity = {};
55
+ ['input', 'textarea', 'select'].forEach(function(name){
56
+ var desc = webshims.defineNodeNameProperty(name, 'setCustomValidity', {
57
+ prop: {
58
+ value: function(error){
59
+ error = error+'';
60
+ var elem = (name == 'input') ? $(this).getNativeElement()[0] : this;
61
+ desc.prop._supvalue.call(elem, error);
62
+
63
+ if(webshims.bugs.validationMessage){
64
+ webshims.data(elem, 'customvalidationMessage', error);
65
+ }
66
+ if(overrideValidity){
67
+ webshims.data(elem, 'hasCustomError', !!(error));
68
+ testValidity(elem);
69
+ }
70
+ }
71
+ }
72
+ });
73
+ oldSetCustomValidity[name] = desc.prop._supvalue;
74
+ });
75
+
76
+
77
+ if(overrideValidity || overrideNativeMessages){
78
+ validityChanger.push('min');
79
+ validityChanger.push('max');
80
+ validityChanger.push('step');
81
+ validityElements.push('input');
82
+ }
83
+ if(overrideNativeMessages){
84
+ validityChanger.push('required');
85
+ validityChanger.push('pattern');
86
+ validityElements.push('select');
87
+ validityElements.push('textarea');
88
+ }
89
+
90
+ if(overrideValidity){
91
+ var stopValidity;
92
+ validityElements.forEach(function(nodeName){
93
+
94
+ var oldDesc = webshims.defineNodeNameProperty(nodeName, 'validity', {
95
+ prop: {
96
+ get: function(){
97
+ if(stopValidity){return;}
98
+ var elem = (nodeName == 'input') ? $(this).getNativeElement()[0] : this;
99
+
100
+ var validity = oldDesc.prop._supget.call(elem);
101
+
102
+ if(!validity){
103
+ return validity;
104
+ }
105
+ var validityState = {};
106
+ validityProps.forEach(function(prop){
107
+ validityState[prop] = validity[prop];
108
+ });
109
+
110
+ if( !$.prop(elem, 'willValidate') ){
111
+ return validityState;
112
+ }
113
+ stopValidity = true;
114
+ var jElm = $(elem),
115
+ cache = {type: (elem.getAttribute && elem.getAttribute('type') || '').toLowerCase(), nodeName: (elem.nodeName || '').toLowerCase()},
116
+ val = jElm.val(),
117
+ customError = !!(webshims.data(elem, 'hasCustomError')),
118
+ setCustomMessage
119
+ ;
120
+ stopValidity = false;
121
+ validityState.customError = customError;
122
+
123
+ if( validityState.valid && validityState.customError ){
124
+ validityState.valid = false;
125
+ } else if(!validityState.valid) {
126
+ var allFalse = true;
127
+ $.each(validityState, function(name, prop){
128
+ if(prop){
129
+ allFalse = false;
130
+ return false;
131
+ }
132
+ });
133
+
134
+ if(allFalse){
135
+ validityState.valid = true;
136
+ }
137
+
138
+ }
139
+
140
+ $.each(validityRules, function(rule, fn){
141
+ validityState[rule] = fn(jElm, val, cache, validityState);
142
+ if( validityState[rule] && (validityState.valid || !setCustomMessage) && (overrideNativeMessages || (typeModels[cache.type] && typeModels[cache.type].mismatch)) ) {
143
+ oldSetCustomValidity[nodeName].call(elem, webshims.createValidationMessage(elem, rule));
144
+ validityState.valid = false;
145
+ setCustomMessage = true;
146
+ }
147
+ });
148
+ if(validityState.valid){
149
+ oldSetCustomValidity[nodeName].call(elem, '');
150
+ webshims.data(elem, 'hasCustomError', false);
151
+ } else if(overrideNativeMessages && !setCustomMessage && !customError){
152
+ $.each(validityState, function(name, prop){
153
+ if(name !== 'valid' && prop){
154
+ oldSetCustomValidity[nodeName].call(elem, webshims.createValidationMessage(elem, name));
155
+ return false;
156
+ }
157
+ });
158
+ }
159
+ return validityState;
160
+ },
161
+ writeable: false
162
+
163
+ }
164
+ });
165
+ });
166
+
167
+ validityChanger.forEach(function(prop){
168
+ webshims.onNodeNamesPropertyModify(validityElements, prop, function(s){
169
+ testValidity(this);
170
+ });
171
+ });
172
+
173
+ if(doc.addEventListener){
174
+ var inputThrottle;
175
+ var testPassValidity = function(e){
176
+ if(!('form' in e.target)){return;}
177
+ var form = e.target.form;
178
+ clearTimeout(inputThrottle);
179
+ testValidity(e.target);
180
+ if(form && overrideNativeMessages){
181
+ $('input', form).each(function(){
182
+ if(this.type == 'password'){
183
+ testValidity(this);
184
+ }
185
+ });
186
+ }
187
+ };
188
+
189
+ doc.addEventListener('change', testPassValidity, true);
190
+
191
+ if(overrideNativeMessages){
192
+ doc.addEventListener('blur', testPassValidity, true);
193
+ doc.addEventListener('keydown', function(e){
194
+ if(e.keyCode != 13){return;}
195
+ testPassValidity(e);
196
+ }, true);
197
+ }
198
+
199
+ doc.addEventListener('input', function(e){
200
+ clearTimeout(inputThrottle);
201
+ inputThrottle = setTimeout(function(){
202
+ testValidity(e.target);
203
+ }, 290);
204
+ }, true);
205
+ }
206
+
207
+ var validityElementsSel = validityElements.join(',');
208
+
209
+ webshims.addReady(function(context, elem){
210
+ $(validityElementsSel, context).add(elem.filter(validityElementsSel)).each(function(){
211
+ $.prop(this, 'validity');
212
+ });
213
+ });
214
+
215
+
216
+ if(overrideNativeMessages){
217
+ webshims.ready('DOM form-message', function(){
218
+ webshims.activeLang({
219
+ register: 'form-core',
220
+ callback: function(){
221
+ $('input, select, textarea')
222
+ .getNativeElement()
223
+ .each(function(){
224
+ if(webshims.data(this, 'hasCustomError')){return;}
225
+ var elem = this;
226
+ var validity = $.prop(elem, 'validity') || {valid: true};
227
+ var nodeName;
228
+ if(validity.valid){return;}
229
+ nodeName = (elem.nodeName || '').toLowerCase();
230
+ $.each(validity, function(name, prop){
231
+ if(name !== 'valid' && prop){
232
+ oldSetCustomValidity[nodeName].call(elem, webshims.createValidationMessage(elem, name));
233
+ return false;
234
+ }
235
+ });
236
+ })
237
+ ;
238
+ }
239
+ });
240
+ });
241
+ }
242
+
243
+ } //end: overrideValidity
244
+
245
+ webshims.defineNodeNameProperty('input', 'type', {
246
+ prop: {
247
+ get: function(){
248
+ var elem = this;
249
+ var type = (elem.getAttribute('type') || '').toLowerCase();
250
+ return (webshims.inputTypes[type]) ? type : elem.type;
251
+ }
252
+ }
253
+ });
254
+
255
+
256
+ });
@@ -0,0 +1,261 @@
1
+ jQuery.webshims.register('form-native-fix', function($, webshims, window, doc, undefined){
2
+
3
+ if(!Modernizr.formvalidation || Modernizr.bugfreeformvalidation || webshims.bugs.bustedValidity){return;}
4
+
5
+ var badWebkit = ($.browser.webkit);
6
+ // var badValidity = badWebkit && webshims.browserVersion <= 534.4;
7
+ var invalidSelector = 'input:invalid, select:invalid, textarea:invalid';
8
+ var invalids = [],
9
+ firstInvalidEvent,
10
+ form
11
+ ;
12
+
13
+ var isChangeSubmit;
14
+
15
+
16
+ //opera/chrome fix (this will double all invalid events in opera, we have to stop them!)
17
+ //opera throws a submit-event and then the invalid events,
18
+ //chrome7/safari5.0.2 has disabled invalid events, this brings them back
19
+ //safari 5.0.2 reports false invalid events, if setCustomValidity was used
20
+ if(window.addEventListener){
21
+ var formnovalidate = {
22
+ timer: undefined,
23
+ prevented: false
24
+ };
25
+ window.addEventListener('submit', function(e){
26
+ if(!formnovalidate.prevented && e.target.checkValidity && $.attr(e.target, 'novalidate') == null){
27
+ isChangeSubmit = true;
28
+ if($(invalidSelector, e.target).length){
29
+ $(e.target)
30
+ .unbind('submit.preventInvalidSubmit')
31
+ .bind('submit.preventInvalidSubmit', function(submitEvent){
32
+ if( $.attr(e.target, 'novalidate') == null ){
33
+ submitEvent.stopImmediatePropagation();
34
+ if(badWebkit){
35
+ submitEvent.preventDefault();
36
+ }
37
+ }
38
+ if(e.target){
39
+ $(e.target).unbind('submit.preventInvalidSubmit');
40
+ }
41
+ })
42
+ ;
43
+ webshims.moveToFirstEvent(e.target, 'submit');
44
+ }
45
+ isChangeSubmit = false;
46
+ if(!window.opera){
47
+ webshims.fromSubmit = true;
48
+ $(e.target).checkValidity();
49
+ webshims.fromSubmit = false;
50
+ }
51
+
52
+ }
53
+ }, true);
54
+
55
+ var preventValidityTest = function(e){
56
+ if($.attr(e.target, 'formnovalidate') == null){return;}
57
+ if(formnovalidate.timer){
58
+ clearTimeout(formnovalidate.timer);
59
+ }
60
+ formnovalidate.prevented = true;
61
+ formnovalidate.timer = setTimeout(function(){
62
+ formnovalidate.prevented = false;
63
+ }, 20);
64
+ };
65
+ window.addEventListener('click', preventValidityTest, true);
66
+ window.addEventListener('touchstart', preventValidityTest, true);
67
+ window.addEventListener('touchend', preventValidityTest, true);
68
+ }
69
+
70
+ $(document)
71
+ .bind('firstinvalidsystem', function(e, data){
72
+ form = data.form;
73
+ if(!form){return;}
74
+ firstInvalidEvent = false;
75
+ invalids = [];
76
+
77
+
78
+ if(!webshims.fromSubmit){return;}
79
+ firstInvalidEvent = data;
80
+ })
81
+ .bind('invalid', function(e){
82
+ if(invalids.indexOf(e.target) == -1){
83
+ invalids.push(e.target);
84
+ } else {
85
+ e.stopImmediatePropagation();
86
+ }
87
+ })
88
+ .bind('lastinvalid', function(e, data){
89
+ var firstTarget = data.invalidlist[0];
90
+
91
+ if( firstTarget && (badWebkit || ($.nodeName(firstTarget, 'select'))) && $(firstTarget).not(':focus') && firstInvalidEvent && !firstInvalidEvent.isInvalidUIPrevented() ){
92
+ webshims.validityAlert.showFor(firstTarget);
93
+ }
94
+ firstInvalidEvent = false;
95
+ invalids = [];
96
+ //remove webkit/operafix
97
+ if(!form){return;}
98
+ $(form).unbind('submit.preventInvalidSubmit');
99
+
100
+ })
101
+ ;
102
+
103
+
104
+ if($.browser.webkit && Modernizr.inputtypes.date){
105
+ (function(){
106
+ var noInputTriggerEvts = {updateInput: 1, input: 1},
107
+ fixInputTypes = {
108
+ date: 1,
109
+ time: 1,
110
+ "datetime-local": 1
111
+ },
112
+ noFocusEvents = {
113
+ focusout: 1,
114
+ blur: 1
115
+ },
116
+ changeEvts = {
117
+ updateInput: 1,
118
+ change: 1
119
+ },
120
+ observe = function(input){
121
+ var timer,
122
+ focusedin = true,
123
+ lastInputVal = input.prop('value'),
124
+ lastChangeVal = lastInputVal,
125
+ trigger = function(e){
126
+ //input === null
127
+ if(!input){return;}
128
+ var newVal = input.prop('value');
129
+
130
+ if(newVal !== lastInputVal){
131
+ lastInputVal = newVal;
132
+ if(!e || !noInputTriggerEvts[e.type]){
133
+ input.trigger('input');
134
+ }
135
+ }
136
+ if(e && changeEvts[e.type]){
137
+ lastChangeVal = newVal;
138
+ }
139
+ if(!focusedin && newVal !== lastChangeVal){
140
+ input.trigger('change');
141
+ }
142
+ },
143
+ extraTimer,
144
+ extraTest = function(){
145
+ clearTimeout(extraTimer);
146
+ extraTimer = setTimeout(trigger, 9);
147
+ },
148
+ unbind = function(e){
149
+ clearInterval(timer);
150
+ setTimeout(function(){
151
+ if(e && noFocusEvents[e.type]){
152
+ focusedin = false;
153
+ }
154
+ if(input){
155
+ input.unbind('focusout blur', unbind).unbind('input change updateInput', trigger);
156
+ trigger();
157
+ }
158
+ input = null;
159
+ }, 1);
160
+
161
+ }
162
+ ;
163
+
164
+ clearInterval(timer);
165
+ timer = setInterval(trigger, 160);
166
+ extraTest();
167
+ input.unbind('focusout blur', unbind).unbind('input change updateInput', trigger);
168
+ input.bind('focusout blur', unbind).bind('input updateInput change', trigger);
169
+ }
170
+ ;
171
+ if($.event.customEvent){
172
+ $.event.customEvent.updateInput = true;
173
+ }
174
+
175
+ $(doc)
176
+ .bind('focusin', function(e){
177
+ if( e.target && fixInputTypes[e.target.type] && !e.target.readOnly && !e.target.disabled ){
178
+ observe($(e.target));
179
+ }
180
+ })
181
+ ;
182
+ })();
183
+
184
+ (function(){
185
+
186
+ var correctValue = function(elem){
187
+ var i = 1;
188
+ var len = 3;
189
+ var abort, val;
190
+ if(elem.type == 'date' && (isChangeSubmit || !$(elem).is(':focus'))){
191
+ val = elem.value;
192
+ if(val && val.length < 10 && (val = val.split('-')) && val.length == len){
193
+ for(; i < len; i++){
194
+ if(val[i].length == 1){
195
+ val[i] = '0'+val[i];
196
+ } else if(val[i].length != 2){
197
+ abort = true;
198
+ break;
199
+ }
200
+ }
201
+ if(!abort){
202
+ val = val.join('-');
203
+ $.prop(elem, 'value', val);
204
+ return val;
205
+ }
206
+ }
207
+ }
208
+ };
209
+ var inputCheckValidityDesc, formCheckValidityDesc, inputValueDesc, inputValidityDesc;
210
+
211
+ inputCheckValidityDesc = webshims.defineNodeNameProperty('input', 'checkValidity', {
212
+ prop: {
213
+ value: function(){
214
+ correctValue(this);
215
+ return inputCheckValidityDesc.prop._supvalue.apply(this, arguments);
216
+ }
217
+ }
218
+ });
219
+
220
+ formCheckValidityDesc = webshims.defineNodeNameProperty('form', 'checkValidity', {
221
+ prop: {
222
+ value: function(){
223
+ $('input', this).each(function(){
224
+ correctValue(this);
225
+ });
226
+ return formCheckValidityDesc.prop._supvalue.apply(this, arguments);
227
+ }
228
+ }
229
+ });
230
+
231
+ inputValueDesc = webshims.defineNodeNameProperty('input', 'value', {
232
+ prop: {
233
+ set: function(){
234
+ return inputValueDesc.prop._supset.apply(this, arguments);
235
+ },
236
+ get: function(){
237
+ return correctValue(this) || inputValueDesc.prop._supget.apply(this, arguments);
238
+ }
239
+ }
240
+ });
241
+
242
+ inputValidityDesc = webshims.defineNodeNameProperty('input', 'validity', {
243
+ prop: {
244
+ writeable: false,
245
+ get: function(){
246
+ correctValue(this);
247
+ return inputValidityDesc.prop._supget.apply(this, arguments);
248
+ }
249
+ }
250
+ });
251
+
252
+ $(document).bind('change', function(e){
253
+ isChangeSubmit = true;
254
+ correctValue(e.target);
255
+ isChangeSubmit = false;
256
+ });
257
+
258
+ })();
259
+ }
260
+
261
+ });