webshims-rails 0.4.7 → 1.10.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. checksums.yaml +15 -0
  2. data/lib/webshims-rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/webshims/extras/custom-validity.js +1 -1
  4. data/vendor/assets/javascripts/webshims/extras/mousepress.js +1 -1
  5. data/vendor/assets/javascripts/webshims/polyfiller.js +197 -166
  6. data/vendor/assets/javascripts/webshims/shims/combos/1.js +1711 -1609
  7. data/vendor/assets/javascripts/webshims/shims/combos/10.js +2575 -2253
  8. data/vendor/assets/javascripts/webshims/shims/combos/11.js +2452 -1476
  9. data/vendor/assets/javascripts/webshims/shims/combos/12.js +1405 -1159
  10. data/vendor/assets/javascripts/webshims/shims/combos/13.js +1316 -963
  11. data/vendor/assets/javascripts/webshims/shims/combos/14.js +1862 -179
  12. data/vendor/assets/javascripts/webshims/shims/combos/15.js +4327 -287
  13. data/vendor/assets/javascripts/webshims/shims/combos/16.js +3887 -586
  14. data/vendor/assets/javascripts/webshims/shims/combos/17.js +2911 -2159
  15. data/vendor/assets/javascripts/webshims/shims/combos/18.js +3425 -1730
  16. data/vendor/assets/javascripts/webshims/shims/combos/19.js +2854 -1203
  17. data/vendor/assets/javascripts/webshims/shims/combos/2.js +3351 -2130
  18. data/vendor/assets/javascripts/webshims/shims/combos/20.js +2426 -581
  19. data/vendor/assets/javascripts/webshims/shims/combos/21.js +1915 -1574
  20. data/vendor/assets/javascripts/webshims/shims/combos/22.js +864 -2275
  21. data/vendor/assets/javascripts/webshims/shims/combos/23.js +609 -1811
  22. data/vendor/assets/javascripts/webshims/shims/combos/3.js +1655 -2736
  23. data/vendor/assets/javascripts/webshims/shims/combos/4.js +1037 -603
  24. data/vendor/assets/javascripts/webshims/shims/combos/5.js +3100 -773
  25. data/vendor/assets/javascripts/webshims/shims/combos/6.js +3631 -840
  26. data/vendor/assets/javascripts/webshims/shims/combos/7.js +3596 -1354
  27. data/vendor/assets/javascripts/webshims/shims/combos/8.js +1731 -188
  28. data/vendor/assets/javascripts/webshims/shims/combos/9.js +3243 -1431
  29. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +107 -18
  30. data/vendor/assets/javascripts/webshims/shims/es5.js +1 -0
  31. data/vendor/assets/javascripts/webshims/shims/form-core.js +553 -464
  32. data/vendor/assets/javascripts/webshims/shims/form-datalist.js +160 -154
  33. data/vendor/assets/javascripts/webshims/shims/form-message.js +73 -49
  34. data/vendor/assets/javascripts/webshims/shims/form-native-extend.js +18 -1
  35. data/vendor/assets/javascripts/webshims/shims/form-number-date-api.js +161 -36
  36. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +2130 -813
  37. data/vendor/assets/javascripts/webshims/shims/form-shim-extend.js +206 -58
  38. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ar.js → formcfg-ar.js} +30 -0
  39. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ch-ZN.js → formcfg-ch-ZN.js} +31 -0
  40. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-de.txt → formcfg-de.txt} +50 -11
  41. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-el.js → formcfg-el.js} +31 -0
  42. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-en.txt → formcfg-en.txt} +44 -11
  43. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-es.js → formcfg-es.js} +31 -0
  44. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-fr.js → formcfg-fr.js} +31 -0
  45. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-he.js → formcfg-he.js} +31 -0
  46. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-hi.js → formcfg-hi.js} +31 -0
  47. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-hu.js → formcfg-hu.js} +31 -0
  48. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-it.js → formcfg-it.js} +31 -0
  49. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ja.js → formcfg-ja.js} +31 -0
  50. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-nl.js → formcfg-nl.js} +31 -0
  51. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-pt-PT.js → formcfg-pt-PT.js} +31 -0
  52. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-ru.js → formcfg-ru.js} +31 -0
  53. data/vendor/assets/javascripts/webshims/shims/i18n/{errormessages-sv.js → formcfg-sv.js} +32 -0
  54. data/vendor/assets/javascripts/webshims/shims/json-storage.js +16 -10
  55. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +155 -122
  56. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +76 -41
  57. data/vendor/assets/javascripts/webshims/shims/mediaelement-yt.js +8 -16
  58. data/vendor/assets/javascripts/webshims/shims/range-ui.js +388 -0
  59. data/vendor/assets/javascripts/webshims/shims/styles/config.rb +12 -0
  60. data/vendor/assets/javascripts/webshims/shims/styles/forms.png +0 -0
  61. data/vendor/assets/javascripts/webshims/shims/styles/scss/shim.scss +1186 -0
  62. data/vendor/assets/javascripts/webshims/shims/styles/shim.css +868 -548
  63. data/vendor/assets/javascripts/webshims/shims/styles/vertical-range.png +0 -0
  64. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  65. data/vendor/assets/javascripts/webshims/shims/swfmini.js +497 -0
  66. data/vendor/assets/javascripts/webshims/shims/track-ui.js +3 -0
  67. data/vendor/assets/javascripts/webshims/shims/track.js +29 -29
  68. metadata +26 -125
  69. data/vendor/assets/javascripts/webshims/minified/extras/custom-validity.js +0 -1
  70. data/vendor/assets/javascripts/webshims/minified/extras/modernizr-custom.js +0 -1
  71. data/vendor/assets/javascripts/webshims/minified/extras/mousepress.js +0 -1
  72. data/vendor/assets/javascripts/webshims/minified/polyfiller.js +0 -1
  73. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/canvas2png.js +0 -1
  74. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/flashcanvas.js +0 -1
  75. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/flashcanvas.swf +0 -0
  76. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/proxy.php +0 -73
  77. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvas/save.php +0 -49
  78. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/canvas2png.js +0 -1
  79. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flash10canvas.swf +0 -0
  80. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flash9canvas.swf +0 -0
  81. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/flashcanvas.js +0 -1
  82. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/proxy.php +0 -73
  83. data/vendor/assets/javascripts/webshims/minified/shims/FlashCanvasPro/save.php +0 -49
  84. data/vendor/assets/javascripts/webshims/minified/shims/combos/1.js +0 -1
  85. data/vendor/assets/javascripts/webshims/minified/shims/combos/10.js +0 -1
  86. data/vendor/assets/javascripts/webshims/minified/shims/combos/11.js +0 -1
  87. data/vendor/assets/javascripts/webshims/minified/shims/combos/12.js +0 -1
  88. data/vendor/assets/javascripts/webshims/minified/shims/combos/13.js +0 -1
  89. data/vendor/assets/javascripts/webshims/minified/shims/combos/14.js +0 -1
  90. data/vendor/assets/javascripts/webshims/minified/shims/combos/15.js +0 -1
  91. data/vendor/assets/javascripts/webshims/minified/shims/combos/16.js +0 -1
  92. data/vendor/assets/javascripts/webshims/minified/shims/combos/17.js +0 -1
  93. data/vendor/assets/javascripts/webshims/minified/shims/combos/18.js +0 -1
  94. data/vendor/assets/javascripts/webshims/minified/shims/combos/19.js +0 -1
  95. data/vendor/assets/javascripts/webshims/minified/shims/combos/2.js +0 -1
  96. data/vendor/assets/javascripts/webshims/minified/shims/combos/20.js +0 -1
  97. data/vendor/assets/javascripts/webshims/minified/shims/combos/21.js +0 -1
  98. data/vendor/assets/javascripts/webshims/minified/shims/combos/22.js +0 -1
  99. data/vendor/assets/javascripts/webshims/minified/shims/combos/23.js +0 -1
  100. data/vendor/assets/javascripts/webshims/minified/shims/combos/24.js +0 -1
  101. data/vendor/assets/javascripts/webshims/minified/shims/combos/25.js +0 -1
  102. data/vendor/assets/javascripts/webshims/minified/shims/combos/26.js +0 -1
  103. data/vendor/assets/javascripts/webshims/minified/shims/combos/27.js +0 -1
  104. data/vendor/assets/javascripts/webshims/minified/shims/combos/3.js +0 -1
  105. data/vendor/assets/javascripts/webshims/minified/shims/combos/4.js +0 -1
  106. data/vendor/assets/javascripts/webshims/minified/shims/combos/5.js +0 -1
  107. data/vendor/assets/javascripts/webshims/minified/shims/combos/59.js +0 -1
  108. data/vendor/assets/javascripts/webshims/minified/shims/combos/6.js +0 -1
  109. data/vendor/assets/javascripts/webshims/minified/shims/combos/7.js +0 -1
  110. data/vendor/assets/javascripts/webshims/minified/shims/combos/8.js +0 -1
  111. data/vendor/assets/javascripts/webshims/minified/shims/combos/9.js +0 -1
  112. data/vendor/assets/javascripts/webshims/minified/shims/details.js +0 -1
  113. data/vendor/assets/javascripts/webshims/minified/shims/dom-extend.js +0 -1
  114. data/vendor/assets/javascripts/webshims/minified/shims/es5.js +0 -1
  115. data/vendor/assets/javascripts/webshims/minified/shims/excanvas.js +0 -1
  116. data/vendor/assets/javascripts/webshims/minified/shims/form-core.js +0 -1
  117. data/vendor/assets/javascripts/webshims/minified/shims/form-datalist.js +0 -1
  118. data/vendor/assets/javascripts/webshims/minified/shims/form-message.js +0 -1
  119. data/vendor/assets/javascripts/webshims/minified/shims/form-native-extend.js +0 -1
  120. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-api.js +0 -1
  121. data/vendor/assets/javascripts/webshims/minified/shims/form-number-date-ui.js +0 -1
  122. data/vendor/assets/javascripts/webshims/minified/shims/form-shim-extend.js +0 -1
  123. data/vendor/assets/javascripts/webshims/minified/shims/geolocation.js +0 -1
  124. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ar.js +0 -1
  125. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ch-ZN.js +0 -1
  126. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-de.txt +0 -33
  127. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-el.js +0 -1
  128. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-en.txt +0 -34
  129. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-es.js +0 -1
  130. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-fr.js +0 -1
  131. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-he.js +0 -1
  132. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-hi.js +0 -1
  133. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-hu.js +0 -1
  134. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-it.js +0 -1
  135. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ja.js +0 -1
  136. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-nl.js +0 -1
  137. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-pt-PT.js +0 -1
  138. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-ru.js +0 -1
  139. data/vendor/assets/javascripts/webshims/minified/shims/i18n/errormessages-sv.js +0 -1
  140. data/vendor/assets/javascripts/webshims/minified/shims/json-storage.js +0 -1
  141. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/license.txt +0 -1
  142. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/player.swf +0 -0
  143. data/vendor/assets/javascripts/webshims/minified/shims/jwplayer/readme.html +0 -87
  144. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-core.js +0 -1
  145. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-jaris.js +0 -1
  146. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-native-fix.js +0 -1
  147. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-swf.js +0 -1
  148. data/vendor/assets/javascripts/webshims/minified/shims/mediaelement-yt.js +0 -1
  149. data/vendor/assets/javascripts/webshims/minified/shims/styles/details-arrows.png +0 -0
  150. data/vendor/assets/javascripts/webshims/minified/shims/styles/forms.png +0 -0
  151. data/vendor/assets/javascripts/webshims/minified/shims/styles/polyfill-loader.gif +0 -0
  152. data/vendor/assets/javascripts/webshims/minified/shims/styles/shim.css +0 -1
  153. data/vendor/assets/javascripts/webshims/minified/shims/swf/JarisFLVPlayer.swf +0 -0
  154. data/vendor/assets/javascripts/webshims/minified/shims/swf/jwwebshims.swf +0 -0
  155. data/vendor/assets/javascripts/webshims/minified/shims/swf/localStorage.swf +0 -0
  156. data/vendor/assets/javascripts/webshims/minified/shims/track-ui.js +0 -1
  157. data/vendor/assets/javascripts/webshims/minified/shims/track.js +0 -1
  158. data/vendor/assets/javascripts/webshims/shims/FlashCanvas/README +0 -62
  159. data/vendor/assets/javascripts/webshims/shims/FlashCanvasPro/README +0 -82
  160. data/vendor/assets/javascripts/webshims/shims/combos/24.js +0 -2872
  161. data/vendor/assets/javascripts/webshims/shims/combos/25.js +0 -2376
  162. data/vendor/assets/javascripts/webshims/shims/combos/26.js +0 -3009
  163. data/vendor/assets/javascripts/webshims/shims/combos/27.js +0 -4150
  164. data/vendor/assets/javascripts/webshims/shims/combos/59.js +0 -1747
  165. data/vendor/assets/javascripts/webshims/shims/jwplayer/license.txt +0 -1
  166. data/vendor/assets/javascripts/webshims/shims/jwplayer/player.swf +0 -0
  167. data/vendor/assets/javascripts/webshims/shims/jwplayer/readme.html +0 -87
  168. data/vendor/assets/javascripts/webshims/shims/mediaelement-swf.js +0 -972
@@ -1,1736 +1,501 @@
1
- if(!Modernizr.formvalidation || jQuery.webshims.bugs.bustedValidity){
2
- jQuery.webshims.register('form-shim-extend', function($, webshims, window, document){
3
- "use strict";
4
- webshims.inputTypes = webshims.inputTypes || {};
5
- //some helper-functions
6
- var cfg = webshims.cfg.forms;
7
- var isSubmit;
1
+ /*! SWFMini - a SWFObject 2.2 cut down version for webshims
2
+ *
3
+ * based on SWFObject v2.2 <http://code.google.com/p/swfobject/>
4
+ is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
5
+ */
8
6
 
9
- var isNumber = function(string){
10
- return (typeof string == 'number' || (string && string == string * 1));
11
- },
12
- typeModels = webshims.inputTypes,
13
- checkTypes = {
14
- radio: 1,
15
- checkbox: 1
16
- },
17
- getType = function(elem){
18
- return (elem.getAttribute('type') || elem.type || '').toLowerCase();
19
- }
20
- ;
21
-
22
- //API to add new input types
23
- webshims.addInputType = function(type, obj){
24
- typeModels[type] = obj;
25
- };
26
-
27
- //contsrain-validation-api
28
- var validityPrototype = {
29
- customError: false,
30
-
31
- typeMismatch: false,
32
- rangeUnderflow: false,
33
- rangeOverflow: false,
34
- stepMismatch: false,
35
- tooLong: false,
36
- patternMismatch: false,
37
- valueMissing: false,
38
-
39
- valid: true
40
- };
41
-
42
- var isPlaceholderOptionSelected = function(select){
43
- if(select.type == 'select-one' && select.size < 2){
44
- var option = $('> option:first-child', select);
45
- return !!option.prop('selected');
46
- }
47
- return false;
48
- };
49
-
50
- var validityRules = {
51
- valueMissing: function(input, val, cache){
52
- if(!input.prop('required')){return false;}
53
- var ret = false;
54
- if(!('type' in cache)){
55
- cache.type = getType(input[0]);
56
- }
57
- if(cache.nodeName == 'select'){
58
- ret = (!val && (input[0].selectedIndex < 0 || isPlaceholderOptionSelected(input[0]) ));
59
- } else if(checkTypes[cache.type]){
60
- ret = (cache.type == 'checkbox') ? !input.is(':checked') : !webshims.modules["form-core"].getGroupElements(input).filter(':checked')[0];
61
- } else {
62
- ret = !(val);
63
- }
64
- return ret;
65
- },
66
- tooLong: function(){
67
- return false;
68
- },
69
- typeMismatch: function (input, val, cache){
70
- if(val === '' || cache.nodeName == 'select'){return false;}
71
- var ret = false;
72
- if(!('type' in cache)){
73
- cache.type = getType(input[0]);
74
- }
75
-
76
- if(typeModels[cache.type] && typeModels[cache.type].mismatch){
77
- ret = typeModels[cache.type].mismatch(val, input);
78
- } else if('validity' in input[0]){
79
- ret = input[0].validity.typeMismatch;
80
- }
81
- return ret;
82
- },
83
- patternMismatch: function(input, val, cache) {
84
- if(val === '' || cache.nodeName == 'select'){return false;}
85
- var pattern = input.attr('pattern');
86
- if(!pattern){return false;}
87
- try {
88
- pattern = new RegExp('^(?:' + pattern + ')$');
89
- } catch(er){
90
- webshims.error('invalid pattern value: "'+ pattern +'" | '+ er);
91
- pattern = false;
92
- }
93
- if(!pattern){return false;}
94
- return !(pattern.test(val));
95
- }
96
- }
97
- ;
98
-
99
- webshims.addValidityRule = function(type, fn){
100
- validityRules[type] = fn;
101
- };
102
-
103
- $.event.special.invalid = {
104
- add: function(){
105
- $.event.special.invalid.setup.call(this.form || this);
106
- },
107
- setup: function(){
108
- var form = this.form || this;
109
- if( $.data(form, 'invalidEventShim') ){
110
- form = null;
111
- return;
112
- }
113
- $(form)
114
- .data('invalidEventShim', true)
115
- .on('submit', $.event.special.invalid.handler)
116
- ;
117
- webshims.moveToFirstEvent(form, 'submit');
118
- if(webshims.bugs.bustedValidity && $.nodeName(form, 'form')){
119
- (function(){
120
- var noValidate = form.getAttribute('novalidate');
121
- form.setAttribute('novalidate', 'novalidate');
122
- webshims.data(form, 'bustedNoValidate', (noValidate == null) ? null : noValidate);
123
- })();
124
- }
125
- form = null;
126
- },
127
- teardown: $.noop,
128
- handler: function(e, d){
129
-
130
- if( e.type != 'submit' || e.testedValidity || !e.originalEvent || !$.nodeName(e.target, 'form') || $.prop(e.target, 'noValidate') ){return;}
131
-
132
- isSubmit = true;
133
- e.testedValidity = true;
134
- var notValid = !($(e.target).checkValidity());
135
- if(notValid){
136
- e.stopImmediatePropagation();
137
- isSubmit = false;
138
- return false;
139
- }
140
- isSubmit = false;
141
- }
142
- };
143
-
144
- var addSubmitBubbles = function(form){
145
- if (!$.support.submitBubbles && form && typeof form == 'object' && !form._submit_attached ) {
146
-
147
- $.event.add( form, 'submit._submit', function( event ) {
148
- event._submit_bubble = true;
149
- });
150
-
151
- form._submit_attached = true;
152
- }
153
- };
154
- if(!$.support.submitBubbles && $.event.special.submit){
155
- $.event.special.submit.setup = function() {
156
- // Only need this for delegated form submit events
157
- if ( $.nodeName( this, "form" ) ) {
158
- return false;
159
- }
160
-
161
- // Lazy-add a submit handler when a descendant form may potentially be submitted
162
- $.event.add( this, "click._submit keypress._submit", function( e ) {
163
- // Node name check avoids a VML-related crash in IE (#9807)
164
- var elem = e.target,
165
- form = $.nodeName( elem, 'input' ) || $.nodeName( elem, 'button' ) ? $.prop(elem, 'form') : undefined;
166
- addSubmitBubbles(form);
167
-
168
- });
169
- // return undefined since we don't need an event listener
170
- };
171
- }
172
-
173
- $.event.special.submit = $.event.special.submit || {setup: function(){return false;}};
174
- var submitSetup = $.event.special.submit.setup;
175
- $.extend($.event.special.submit, {
176
- setup: function(){
177
- if($.nodeName(this, 'form')){
178
- $(this).on('invalid', $.noop);
179
- } else {
180
- $('form', this).on('invalid', $.noop);
181
- }
182
- return submitSetup.apply(this, arguments);
183
- }
184
- });
185
-
186
- $(window).on('invalid', $.noop);
187
-
188
-
189
- webshims.addInputType('email', {
190
- mismatch: (function(){
191
- //taken from http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address
192
- var test = cfg.emailReg || /^[a-zA-Z0-9.!#$%&'*+-\/=?\^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
193
- return function(val){
194
- return !test.test(val);
195
- };
196
- })()
197
- });
198
-
199
- webshims.addInputType('url', {
200
- mismatch: (function(){
201
- //taken from scott gonzales
202
- var test = cfg.urlReg || /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
203
- return function(val){
204
- return !test.test(val);
205
- };
206
- })()
207
- });
208
-
209
- webshims.defineNodeNameProperty('input', 'type', {
210
- prop: {
211
- get: function(){
212
- var elem = this;
213
- var type = (elem.getAttribute('type') || '').toLowerCase();
214
- return (webshims.inputTypes[type]) ? type : elem.type;
215
- }
216
- }
217
- });
218
-
219
- // IDLs for constrain validation API
220
- //ToDo: add object to this list
221
- webshims.defineNodeNamesProperties(['button', 'fieldset', 'output'], {
222
- checkValidity: {
223
- value: function(){return true;}
224
- },
225
- willValidate: {
226
- value: false
227
- },
228
- setCustomValidity: {
229
- value: $.noop
230
- },
231
- validity: {
232
- writeable: false,
233
- get: function(){
234
- return $.extend({}, validityPrototype);
235
- }
236
- }
237
- }, 'prop');
238
-
239
- var baseCheckValidity = function(elem){
240
- var e,
241
- v = $.prop(elem, 'validity')
242
- ;
243
- if(v){
244
- $.data(elem, 'cachedValidity', v);
245
- } else {
246
- return true;
247
- }
248
- if( !v.valid ){
249
- e = $.Event('invalid');
250
- var jElm = $(elem).trigger(e);
251
- if(isSubmit && !baseCheckValidity.unhandledInvalids && !e.isDefaultPrevented()){
252
- webshims.validityAlert.showFor(jElm);
253
- baseCheckValidity.unhandledInvalids = true;
254
- }
255
- }
256
- $.removeData(elem, 'cachedValidity');
257
- return v.valid;
258
- };
259
- var rsubmittable = /^(?:select|textarea|input)/i;
260
- webshims.defineNodeNameProperty('form', 'checkValidity', {
261
- prop: {
262
- value: function(){
263
-
264
- var ret = true,
265
- elems = $($.prop(this, 'elements')).filter(function(){
266
- if(!rsubmittable.test(this.nodeName)){return false;}
267
- var shadowData = webshims.data(this, 'shadowData');
268
- return !shadowData || !shadowData.nativeElement || shadowData.nativeElement === this;
269
- })
270
- ;
271
-
272
- baseCheckValidity.unhandledInvalids = false;
273
- for(var i = 0, len = elems.length; i < len; i++){
274
- if( !baseCheckValidity(elems[i]) ){
275
- ret = false;
276
- }
277
- }
278
- return ret;
279
- }
280
- }
281
- });
282
-
283
- webshims.defineNodeNamesProperties(['input', 'textarea', 'select'], {
284
- checkValidity: {
285
- value: function(){
286
- baseCheckValidity.unhandledInvalids = false;
287
- return baseCheckValidity($(this).getNativeElement()[0]);
288
- }
289
- },
290
- setCustomValidity: {
291
- value: function(error){
292
- $.removeData(this, 'cachedValidity');
293
- webshims.data(this, 'customvalidationMessage', ''+error);
294
- }
295
- },
296
- willValidate: {
297
- writeable: false,
298
- get: (function(){
299
- var types = {
300
- button: 1,
301
- reset: 1,
302
- hidden: 1,
303
- image: 1
304
- }
305
- ;
306
- return function(){
307
- var elem = $(this).getNativeElement()[0];
308
- //elem.name && <- we don't use to make it easier for developers
309
- return !!(!elem.disabled && !elem.readOnly && !types[elem.type] );
310
- };
311
- })()
312
- },
313
- validity: {
314
- writeable: false,
315
- get: function(){
316
- var jElm = $(this).getNativeElement();
317
- var elem = jElm[0];
318
- var validityState = $.data(elem, 'cachedValidity');
319
- if(validityState){
320
- return validityState;
321
- }
322
- validityState = $.extend({}, validityPrototype);
323
-
324
- if( !$.prop(elem, 'willValidate') || elem.type == 'submit' ){
325
- return validityState;
326
- }
327
- var val = jElm.val(),
328
- cache = {nodeName: elem.nodeName.toLowerCase()}
329
- ;
330
-
331
- validityState.customError = !!(webshims.data(elem, 'customvalidationMessage'));
332
- if( validityState.customError ){
333
- validityState.valid = false;
334
- }
335
-
336
- $.each(validityRules, function(rule, fn){
337
- if (fn(jElm, val, cache)) {
338
- validityState[rule] = true;
339
- validityState.valid = false;
340
- }
341
- });
342
- $(this).getShadowFocusElement().attr('aria-invalid', validityState.valid ? 'false' : 'true');
343
- jElm = null;
344
- elem = null;
345
- return validityState;
346
- }
347
- }
348
- }, 'prop');
349
-
350
- webshims.defineNodeNamesBooleanProperty(['input', 'textarea', 'select'], 'required', {
351
- set: function(value){
352
- $(this).getShadowFocusElement().attr('aria-required', !!(value)+'');
353
- },
354
- initAttr: (Modernizr.localstorage)//only if we have aria-support
355
- });
356
-
357
- webshims.reflectProperties(['input'], ['pattern']);
358
-
359
-
360
- if( !('maxLength' in document.createElement('textarea')) ){
361
- var constrainMaxLength = (function(){
362
- var timer;
363
- var curLength = 0;
364
- var lastElement = $([]);
365
- var max = 1e9;
366
- var constrainLength = function(){
367
- var nowValue = lastElement.prop('value');
368
- var nowLen = nowValue.length;
369
- if(nowLen > curLength && nowLen > max){
370
- nowLen = Math.max(curLength, max);
371
- lastElement.prop('value', nowValue.substr(0, nowLen ));
372
- }
373
- curLength = nowLen;
374
- };
375
- var remove = function(){
376
- clearTimeout(timer);
377
- lastElement.unbind('.maxlengthconstraint');
378
- };
379
- return function(element, maxLength){
380
- remove();
381
- if(maxLength > -1){
382
- max = maxLength;
383
- curLength = $.prop(element, 'value').length;
384
- lastElement = $(element);
385
- lastElement.on({
386
- 'keydown.maxlengthconstraint keypress.maxlengthconstraint paste.maxlengthconstraint cut.maxlengthconstraint': function(e){
387
- setTimeout(constrainLength, 0);
388
- },
389
- 'keyup.maxlengthconstraint': constrainLength,
390
- 'blur.maxlengthconstraint': remove
391
- });
392
- timer = setInterval(constrainLength, 200);
393
- }
394
- };
395
- })();
396
-
397
- constrainMaxLength.update = function(element, maxLength){
398
- if($(element).is(':focus')){
399
- if(!maxLength){
400
- maxLength = $.prop(element, 'maxlength');
401
- }
402
- constrainMaxLength(element, maxLength);
403
- }
404
- };
405
-
406
- $(document).on('focusin', function(e){
407
- var maxLength;
408
- if(e.target.nodeName == "TEXTAREA" && (maxLength = $.prop(e.target, 'maxlength')) > -1){
409
- constrainMaxLength(e.target, maxLength);
410
- }
411
- });
412
-
413
- webshims.defineNodeNameProperty('textarea', 'maxlength', {
414
- attr: {
415
- set: function(val){
416
- this.setAttribute('maxlength', ''+val);
417
- constrainMaxLength.update(this);
418
- },
419
- get: function(){
420
- var ret = this.getAttribute('maxlength');
421
- return ret == null ? undefined : ret;
422
- }
423
- },
424
- prop: {
425
- set: function(val){
426
- if(isNumber(val)){
427
- if(val < 0){
428
- throw('INDEX_SIZE_ERR');
429
- }
430
- val = parseInt(val, 10);
431
- this.setAttribute('maxlength', val);
432
- constrainMaxLength.update(this, val);
433
- return;
434
- }
435
- this.setAttribute('maxlength', '0');
436
- constrainMaxLength.update(this, 0);
437
- },
438
- get: function(){
439
- var val = this.getAttribute('maxlength');
440
- return (isNumber(val) && val >= 0) ? parseInt(val, 10) : -1;
441
-
442
- }
443
- }
444
- });
445
- webshims.defineNodeNameProperty('textarea', 'maxLength', {
446
- prop: {
447
- set: function(val){
448
- $.prop(this, 'maxlength', val);
449
- },
450
- get: function(){
451
- return $.prop(this, 'maxlength');
452
- }
453
- }
454
- });
455
- }
456
-
457
-
458
-
459
- var submitterTypes = {submit: 1, button: 1, image: 1};
460
- var formSubmitterDescriptors = {};
461
- [
462
- {
463
- name: "enctype",
464
- limitedTo: {
465
- "application/x-www-form-urlencoded": 1,
466
- "multipart/form-data": 1,
467
- "text/plain": 1
468
- },
469
- defaultProp: "application/x-www-form-urlencoded",
470
- proptype: "enum"
471
- },
472
- {
473
- name: "method",
474
- limitedTo: {
475
- "get": 1,
476
- "post": 1
477
- },
478
- defaultProp: "get",
479
- proptype: "enum"
480
- },
481
- {
482
- name: "action",
483
- proptype: "url"
484
- },
485
- {
486
- name: "target"
487
- },
488
- {
489
- name: "novalidate",
490
- propName: "noValidate",
491
- proptype: "boolean"
492
- }
493
- ].forEach(function(desc){
494
- var propName = 'form'+ (desc.propName || desc.name).replace(/^[a-z]/, function(f){
495
- return f.toUpperCase();
496
- });
497
- var attrName = 'form'+ desc.name;
498
- var formName = desc.name;
499
- var eventName = 'click.webshimssubmittermutate'+formName;
7
+ var swfmini = function() {
500
8
 
501
- var changeSubmitter = function(){
502
- var elem = this;
503
- if( !('form' in elem) || !submitterTypes[elem.type] ){return;}
504
- var form = $.prop(elem, 'form');
505
- if(!form){return;}
506
- var attr = $.attr(elem, attrName);
507
- if(attr != null && ( !desc.limitedTo || attr.toLowerCase() === $.prop(elem, propName))){
508
-
509
- var oldAttr = $.attr(form, formName);
510
-
511
- $.attr(form, formName, attr);
512
- setTimeout(function(){
513
- if(oldAttr != null){
514
- $.attr(form, formName, oldAttr);
515
- } else {
516
- try {
517
- $(form).removeAttr(formName);
518
- } catch(er){
519
- form.removeAttribute(formName);
520
- }
521
- }
522
- }, 9);
523
- }
524
- };
525
-
526
-
527
-
528
- switch(desc.proptype) {
529
- case "url":
530
- var urlForm = document.createElement('form');
531
- formSubmitterDescriptors[propName] = {
532
- prop: {
533
- set: function(value){
534
- $.attr(this, attrName, value);
535
- },
536
- get: function(){
537
- var value = $.attr(this, attrName);
538
- if(value == null){return '';}
539
- urlForm.setAttribute('action', value);
540
- return urlForm.action;
541
- }
542
- }
543
- };
544
- break;
545
- case "boolean":
546
- formSubmitterDescriptors[propName] = {
547
- prop: {
548
- set: function(val){
549
- val = !!val;
550
- if(val){
551
- $.attr(this, 'formnovalidate', 'formnovalidate');
552
- } else {
553
- $(this).removeAttr('formnovalidate');
554
- }
555
- },
556
- get: function(){
557
- return $.attr(this, 'formnovalidate') != null;
558
- }
559
- }
560
- };
561
- break;
562
- case "enum":
563
- formSubmitterDescriptors[propName] = {
564
- prop: {
565
- set: function(value){
566
- $.attr(this, attrName, value);
567
- },
568
- get: function(){
569
- var value = $.attr(this, attrName);
570
- return (!value || ( (value = value.toLowerCase()) && !desc.limitedTo[value] )) ? desc.defaultProp : value;
571
- }
572
- }
573
- };
574
- break;
575
- default:
576
- formSubmitterDescriptors[propName] = {
577
- prop: {
578
- set: function(value){
579
- $.attr(this, attrName, value);
580
- },
581
- get: function(){
582
- var value = $.attr(this, attrName);
583
- return (value != null) ? value : "";
584
- }
585
- }
586
- };
587
- }
588
-
589
-
590
- if(!formSubmitterDescriptors[attrName]){
591
- formSubmitterDescriptors[attrName] = {};
592
- }
593
- formSubmitterDescriptors[attrName].attr = {
594
- set: function(value){
595
- formSubmitterDescriptors[attrName].attr._supset.call(this, value);
596
- $(this).unbind(eventName).on(eventName, changeSubmitter);
597
- },
598
- get: function(){
599
- return formSubmitterDescriptors[attrName].attr._supget.call(this);
600
- }
601
- };
602
- formSubmitterDescriptors[attrName].initAttr = true;
603
- formSubmitterDescriptors[attrName].removeAttr = {
604
- value: function(){
605
- $(this).unbind(eventName);
606
- formSubmitterDescriptors[attrName].removeAttr._supvalue.call(this);
607
- }
608
- };
609
- });
610
-
611
- webshims.defineNodeNamesProperties(['input', 'button'], formSubmitterDescriptors);
612
-
613
-
614
- if(!$.support.getSetAttribute && $('<form novalidate></form>').attr('novalidate') == null){
615
- webshims.defineNodeNameProperty('form', 'novalidate', {
616
- attr: {
617
- set: function(val){
618
- this.setAttribute('novalidate', ''+val);
619
- },
620
- get: function(){
621
- var ret = this.getAttribute('novalidate');
622
- return ret == null ? undefined : ret;
623
- }
624
- }
625
- });
626
- } else if(webshims.bugs.bustedValidity){
627
-
628
- webshims.defineNodeNameProperty('form', 'novalidate', {
629
- attr: {
630
- set: function(val){
631
- webshims.data(this, 'bustedNoValidate', ''+val);
632
- },
633
- get: function(){
634
- var ret = webshims.data(this, 'bustedNoValidate');
635
- return ret == null ? undefined : ret;
636
- }
637
- },
638
- removeAttr: {
639
- value: function(){
640
- webshims.data(this, 'bustedNoValidate', null);
641
- }
642
- }
643
- });
644
-
645
- $.each(['rangeUnderflow', 'rangeOverflow', 'stepMismatch'], function(i, name){
646
- validityRules[name] = function(elem){
647
- return (elem[0].validity || {})[name] || false;
648
- };
649
- });
650
-
651
- }
652
-
653
- webshims.defineNodeNameProperty('form', 'noValidate', {
654
- prop: {
655
- set: function(val){
656
- val = !!val;
657
- if(val){
658
- $.attr(this, 'novalidate', 'novalidate');
659
- } else {
660
- $(this).removeAttr('novalidate');
661
- }
662
- },
663
- get: function(){
664
- return $.attr(this, 'novalidate') != null;
665
- }
666
- }
667
- });
668
-
669
- if(Modernizr.inputtypes.date && /webkit/i.test(navigator.userAgent)){
670
- (function(){
9
+ var UNDEF = "undefined",
10
+ OBJECT = "object",
11
+ webshims = jQuery.webshims,
12
+ SHOCKWAVE_FLASH = "Shockwave Flash",
13
+ SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
14
+ FLASH_MIME_TYPE = "application/x-shockwave-flash",
671
15
 
672
- var noInputTriggerEvts = {updateInput: 1, input: 1},
673
- fixInputTypes = {
674
- date: 1,
675
- time: 1
676
- },
677
- noFocusEvents = {
678
- focusout: 1,
679
- blur: 1
680
- },
681
- changeEvts = {
682
- updateInput: 1,
683
- change: 1
684
- },
685
- observe = function(input){
686
- var timer,
687
- focusedin = true,
688
- lastInputVal = input.prop('value'),
689
- lastChangeVal = lastInputVal,
690
- trigger = function(e){
691
- //input === null
692
- if(!input){return;}
693
- var newVal = input.prop('value');
694
-
695
- if(newVal !== lastInputVal){
696
- lastInputVal = newVal;
697
- if(!e || !noInputTriggerEvts[e.type]){
698
- input.trigger('input');
699
- }
700
- }
701
- if(e && changeEvts[e.type]){
702
- lastChangeVal = newVal;
703
- }
704
- if(!focusedin && newVal !== lastChangeVal){
705
- input.trigger('change');
706
- }
707
- },
708
- extraTimer,
709
- extraTest = function(){
710
- clearTimeout(extraTimer);
711
- extraTimer = setTimeout(trigger, 9);
712
- },
713
- unbind = function(e){
714
- clearInterval(timer);
715
- setTimeout(function(){
716
- if(e && noFocusEvents[e.type]){
717
- focusedin = false;
718
- }
719
- if(input){
720
- input.unbind('focusout blur', unbind).unbind('input change updateInput', trigger);
721
- trigger();
722
- }
723
- input = null;
724
- }, 1);
725
-
726
- }
727
- ;
728
-
729
- clearInterval(timer);
730
- timer = setInterval(trigger, 160);
731
- extraTest();
732
- input
733
- .off({
734
- 'focusout blur': unbind,
735
- 'input change updateInput': trigger
736
- })
737
- .on({
738
- 'focusout blur': unbind,
739
- 'input updateInput change': trigger
740
- })
741
- ;
742
- }
743
- ;
744
- if($.event.customEvent){
745
- $.event.customEvent.updateInput = true;
746
- }
747
-
748
- (function(){
749
-
750
- var correctValue = function(elem){
751
- var i = 1;
752
- var len = 3;
753
- var abort, val;
754
- if(elem.type == 'date' && (isSubmit || !$(elem).is(':focus'))){
755
- val = elem.value;
756
- if(val && val.length < 10 && (val = val.split('-')) && val.length == len){
757
- for(; i < len; i++){
758
- if(val[i].length == 1){
759
- val[i] = '0'+val[i];
760
- } else if(val[i].length != 2){
761
- abort = true;
762
- break;
763
- }
764
- }
765
- if(!abort){
766
- val = val.join('-');
767
- $.prop(elem, 'value', val);
768
- return val;
769
- }
770
- }
771
- }
772
- };
773
- var inputCheckValidityDesc, formCheckValidityDesc, inputValueDesc, inputValidityDesc;
774
-
775
- inputCheckValidityDesc = webshims.defineNodeNameProperty('input', 'checkValidity', {
776
- prop: {
777
- value: function(){
778
- correctValue(this);
779
- return inputCheckValidityDesc.prop._supvalue.apply(this, arguments);
780
- }
781
- }
782
- });
783
-
784
- formCheckValidityDesc = webshims.defineNodeNameProperty('form', 'checkValidity', {
785
- prop: {
786
- value: function(){
787
- $('input', this).each(function(){
788
- correctValue(this);
789
- });
790
- return formCheckValidityDesc.prop._supvalue.apply(this, arguments);
791
- }
792
- }
793
- });
794
-
795
- inputValueDesc = webshims.defineNodeNameProperty('input', 'value', {
796
- prop: {
797
- set: function(){
798
- return inputValueDesc.prop._supset.apply(this, arguments);
799
- },
800
- get: function(){
801
- return correctValue(this) || inputValueDesc.prop._supget.apply(this, arguments);
802
- }
803
- }
804
- });
805
-
806
- inputValidityDesc = webshims.defineNodeNameProperty('input', 'validity', {
807
- prop: {
808
- writeable: false,
809
- get: function(){
810
- correctValue(this);
811
- return inputValidityDesc.prop._supget.apply(this, arguments);
812
- }
813
- }
814
- });
815
-
816
- $(document).on('change', function(e){
817
- correctValue(e.target);
818
- });
819
-
820
- })();
821
-
822
- $(document)
823
- .on('focusin', function(e){
824
- if( e.target && fixInputTypes[e.target.type] && !e.target.readOnly && !e.target.disabled ){
825
- observe($(e.target));
826
- }
827
- })
828
- ;
829
-
830
-
831
- })();
832
- }
833
-
834
- webshims.addReady(function(context, contextElem){
835
- //start constrain-validation
836
- var focusElem;
837
- $('form', context)
838
- .add(contextElem.filter('form'))
839
- .bind('invalid', $.noop)
840
- ;
841
-
842
- try {
843
- if(context == document && !('form' in (document.activeElement || {}))) {
844
- focusElem = $('input[autofocus], select[autofocus], textarea[autofocus]', context).eq(0).getShadowFocusElement()[0];
845
- if (focusElem && focusElem.offsetHeight && focusElem.offsetWidth) {
846
- focusElem.focus();
847
- }
848
- }
849
- }
850
- catch (er) {}
851
-
852
- });
853
-
854
- if(!Modernizr.formattribute || !Modernizr.fieldsetdisabled){
855
- (function(){
856
- (function(prop, undefined){
857
- $.prop = function(elem, name, value){
858
- var ret;
859
- if(elem && elem.nodeType == 1 && value === undefined && $.nodeName(elem, 'form') && elem.id){
860
- ret = document.getElementsByName(name);
861
- if(!ret || !ret.length){
862
- ret = document.getElementById(name);
863
- }
864
- if(ret){
865
- ret = $(ret).filter(function(){
866
- return $.prop(this, 'form') == elem;
867
- }).get();
868
- if(ret.length){
869
- return ret.length == 1 ? ret[0] : ret;
870
- }
871
- }
872
- }
873
- return prop.apply(this, arguments);
874
- };
875
- })($.prop, undefined);
876
- var removeAddedElements = function(form){
877
- var elements = $.data(form, 'webshimsAddedElements');
878
- if(elements){
879
- elements.remove();
880
- $.removeData(form, 'webshimsAddedElements');
881
- }
882
- };
883
- var rCRLF = /\r?\n/g,
884
- rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
885
- rselectTextarea = /^(?:select|textarea)/i;
886
-
887
- if(!Modernizr.formattribute){
888
- webshims.defineNodeNamesProperty(['input', 'textarea', 'select', 'button', 'fieldset'], 'form', {
889
- prop: {
890
- get: function(){
891
- var form = webshims.contentAttr(this, 'form');
892
- if(form){
893
- form = document.getElementById(form);
894
- if(form && !$.nodeName(form, 'form')){
895
- form = null;
896
- }
897
- }
898
- return form || this.form;
899
- },
900
- writeable: false
901
- }
902
- });
903
-
904
-
905
- webshims.defineNodeNamesProperty(['form'], 'elements', {
906
- prop: {
907
- get: function(){
908
- var id = this.id;
909
- var elements = $.makeArray(this.elements);
910
- if(id){
911
- elements = $(elements).add('input[form="'+ id +'"], select[form="'+ id +'"], textarea[form="'+ id +'"], button[form="'+ id +'"], fieldset[form="'+ id +'"]').not('.webshims-visual-hide > *').get();
912
- }
913
- return elements;
914
- },
915
- writeable: false
916
- }
917
- });
918
-
919
-
920
-
921
- $(function(){
922
- var stopPropagation = function(e){
923
- e.stopPropagation();
924
- };
925
- $(document).on('submit', function(e){
926
-
927
- if(!e.isDefaultPrevented()){
928
- var form = e.target;
929
- var id = form.id;
930
- var elements;
931
-
932
-
933
- if(id){
934
- removeAddedElements(form);
935
-
936
- elements = $('input[form="'+ id +'"], select[form="'+ id +'"], textarea[form="'+ id +'"]')
937
- .filter(function(){
938
- return !this.disabled && this.name && this.form != form;
939
- })
940
- .clone()
941
- ;
942
- if(elements.length){
943
- $.data(form, 'webshimsAddedElements', $('<div class="webshims-visual-hide" />').append(elements).appendTo(form));
944
- setTimeout(function(){
945
- removeAddedElements(form);
946
- }, 9);
947
- }
948
- elements = null;
949
- }
950
- }
951
- });
952
-
953
- $(document).on('click', function(e){
954
- if(!e.isDefaultPrevented() && $(e.target).is('input[type="submit"][form], button[form], input[type="button"][form], input[type="image"][form], input[type="reset"][form]')){
955
- var trueForm = $.prop(e.target, 'form');
956
- var formIn = e.target.form;
957
- var clone;
958
- if(trueForm && trueForm != formIn){
959
- clone = $(e.target)
960
- .clone()
961
- .removeAttr('form')
962
- .addClass('webshims-visual-hide')
963
- .on('click', stopPropagation)
964
- .appendTo(trueForm)
965
- ;
966
- if(formIn){
967
- e.preventDefault();
968
- }
969
- addSubmitBubbles(trueForm);
970
- clone.trigger('click');
971
- setTimeout(function(){
972
- clone.remove();
973
- clone = null;
974
- }, 9);
975
- }
976
- }
977
- });
978
- });
979
- }
980
-
981
- if(!Modernizr.fieldsetdisabled){
982
- webshims.defineNodeNamesProperty(['fieldset'], 'elements', {
983
- prop: {
984
- get: function(){
985
- //add listed elements without keygen, object, output
986
- return $('input, select, textarea, button, fieldset', this).get() || [];
987
- },
988
- writeable: false
989
- }
990
- });
991
- }
992
-
993
- $.fn.serializeArray = function() {
994
- return this.map(function(){
995
- var elements = $.prop(this, 'elements');
996
- return elements ? $.makeArray( elements ) : this;
997
- })
998
- .filter(function(){
999
- return this.name && !this.disabled &&
1000
- ( this.checked || rselectTextarea.test( this.nodeName ) ||
1001
- rinput.test( this.type ) );
1002
- })
1003
- .map(function( i, elem ){
1004
- var val = $( this ).val();
1005
-
1006
- return val == null ?
1007
- null :
1008
- $.isArray( val ) ?
1009
- $.map( val, function( val, i ){
1010
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
1011
- }) :
1012
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
1013
- }).get();
1014
- };
1015
-
1016
- })();
1017
- }
1018
-
1019
- try {
1020
- document.querySelector(':checked');
1021
- } catch(er){
1022
- (function(){
1023
- var checkInputs = {
1024
- radio: 1,
1025
- checkbox: 1
1026
- };
1027
- var selectChange = function(){
1028
- var options = this.options || [];
1029
- var i, len, option;
1030
- for(i = 0, len = options.length; i < len; i++){
1031
- option = $(options[i]);
1032
- option[$.prop(options[i], 'selected') ? 'addClass' : 'removeClass']('prop-checked');
1033
- }
1034
- };
1035
- var checkChange = function(){
1036
- var fn = $.prop(this, 'checked') ? 'addClass' : 'removeClass';
1037
- var className = this.className || '';
1038
- var parent;
1039
-
1040
- //IE8- has problems to update styles, we help
1041
- if( (className.indexOf('prop-checked') == -1) == (fn == 'addClass')){
1042
- $(this)[fn]('prop-checked');
1043
- if((parent = this.parentNode)){
1044
- parent.className = parent.className;
1045
- }
1046
- }
1047
- };
1048
-
1049
-
1050
- webshims.onNodeNamesPropertyModify('select', 'value', selectChange);
1051
- webshims.onNodeNamesPropertyModify('select', 'selectedIndex', selectChange);
1052
- webshims.onNodeNamesPropertyModify('option', 'selected', function(){
1053
- $(this).closest('select').each(selectChange);
1054
- });
1055
- webshims.onNodeNamesPropertyModify('input', 'checked', function(value, boolVal){
1056
- var type = this.type;
1057
- if(type == 'radio' && boolVal){
1058
- webshims.modules["form-core"].getGroupElements(this).each(checkChange);
1059
- } else if(checkInputs[type]) {
1060
- $(this).each(checkChange);
1061
- }
1062
- });
1063
-
1064
- $(document).on('change', function(e){
1065
-
1066
- if(checkInputs[e.target.type]){
1067
- if(e.target.type == 'radio'){
1068
- webshims.modules["form-core"].getGroupElements(e.target).each(checkChange);
1069
- } else {
1070
- $(e.target)[$.prop(e.target, 'checked') ? 'addClass' : 'removeClass']('prop-checked');
1071
- }
1072
- } else if(e.target.nodeName.toLowerCase() == 'select'){
1073
- $(e.target).each(selectChange);
1074
- }
1075
- });
1076
-
1077
- webshims.addReady(function(context, contextElem){
1078
- $('option, input', context)
1079
- .add(contextElem.filter('option, input'))
1080
- .each(function(){
1081
- var prop;
1082
- if(checkInputs[this.type]){
1083
- prop = 'checked';
1084
- } else if(this.nodeName.toLowerCase() == 'option'){
1085
- prop = 'selected';
1086
- }
1087
- if(prop){
1088
- $(this)[$.prop(this, prop) ? 'addClass' : 'removeClass']('prop-checked');
1089
- }
1090
-
1091
- })
1092
- ;
1093
- });
1094
- })();
1095
- }
1096
-
1097
- (function(){
1098
- Modernizr.textareaPlaceholder = !!('placeholder' in $('<textarea />')[0]);
1099
- if(Modernizr.input.placeholder && Modernizr.textareaPlaceholder){return;}
1100
-
1101
- var isOver = (webshims.cfg.forms.placeholderType == 'over');
1102
- var isResponsive = (webshims.cfg.forms.responsivePlaceholder);
1103
- var polyfillElements = ['textarea'];
1104
- if(!Modernizr.input.placeholder){
1105
- polyfillElements.push('input');
1106
- }
1107
-
1108
- var setSelection = function(elem){
1109
- try {
1110
- if(elem.setSelectionRange){
1111
- elem.setSelectionRange(0, 0);
1112
- return true;
1113
- } else if(elem.createTextRange){
1114
- var range = elem.createTextRange();
1115
- range.collapse(true);
1116
- range.moveEnd('character', 0);
1117
- range.moveStart('character', 0);
1118
- range.select();
1119
- return true;
1120
- }
1121
- } catch(er){}
1122
- };
1123
-
1124
- var hidePlaceholder = function(elem, data, value, _onFocus){
1125
- if(value === false){
1126
- value = $.prop(elem, 'value');
1127
- }
1128
- if(!isOver && elem.type != 'password'){
1129
- if(!value && _onFocus && setSelection(elem)){
1130
- var selectTimer = setTimeout(function(){
1131
- setSelection(elem);
1132
- }, 9);
1133
- $(elem)
1134
- .off('.placeholderremove')
1135
- .on({
1136
- 'keydown.placeholderremove keypress.placeholderremove paste.placeholderremove input.placeholderremove': function(e){
1137
- if(e && (e.keyCode == 17 || e.keyCode == 16)){return;}
1138
- elem.value = $.prop(elem, 'value');
1139
- data.box.removeClass('placeholder-visible');
1140
- clearTimeout(selectTimer);
1141
- $(elem).unbind('.placeholderremove');
1142
- },
1143
- 'mousedown.placeholderremove drag.placeholderremove select.placeholderremove': function(e){
1144
- setSelection(elem);
1145
- clearTimeout(selectTimer);
1146
- selectTimer = setTimeout(function(){
1147
- setSelection(elem);
1148
- }, 9);
1149
- },
1150
- 'blur.placeholderremove': function(){
1151
- clearTimeout(selectTimer);
1152
- $(elem).unbind('.placeholderremove');
1153
- }
1154
- })
1155
- ;
1156
- return;
1157
- }
1158
- elem.value = value;
1159
- } else if(!value && _onFocus){
1160
- $(elem)
1161
- .off('.placeholderremove')
1162
- .on({
1163
- 'keydown.placeholderremove keypress.placeholderremove paste.placeholderremove input.placeholderremove': function(e){
1164
- if(e && (e.keyCode == 17 || e.keyCode == 16)){return;}
1165
- data.box.removeClass('placeholder-visible');
1166
- $(elem).unbind('.placeholderremove');
1167
- },
1168
- 'blur.placeholderremove': function(){
1169
- $(elem).unbind('.placeholderremove');
1170
- }
1171
- })
1172
- ;
1173
- return;
1174
- }
1175
- data.box.removeClass('placeholder-visible');
1176
- },
1177
- showPlaceholder = function(elem, data, placeholderTxt){
1178
- if(placeholderTxt === false){
1179
- placeholderTxt = $.prop(elem, 'placeholder');
1180
- }
1181
-
1182
- if(!isOver && elem.type != 'password'){
1183
- elem.value = placeholderTxt;
1184
- }
1185
- data.box.addClass('placeholder-visible');
1186
- },
1187
- changePlaceholderVisibility = function(elem, value, placeholderTxt, data, type){
1188
- if(!data){
1189
- data = $.data(elem, 'placeHolder');
1190
- if(!data){return;}
1191
- }
1192
- $(elem).unbind('.placeholderremove');
1193
- if(type == 'focus' || (!type && $(elem).is(':focus'))){
1194
- if(elem.type == 'password' || isOver || $(elem).hasClass('placeholder-visible')){
1195
- hidePlaceholder(elem, data, '', true);
1196
- }
1197
- return;
1198
- }
1199
- if(value === false){
1200
- value = $.prop(elem, 'value');
1201
- }
1202
- if(value){
1203
- hidePlaceholder(elem, data, value);
1204
- return;
1205
- }
1206
- if(placeholderTxt === false){
1207
- placeholderTxt = $.attr(elem, 'placeholder') || '';
1208
- }
1209
- if(placeholderTxt && !value){
1210
- showPlaceholder(elem, data, placeholderTxt);
1211
- } else {
1212
- hidePlaceholder(elem, data, value);
1213
- }
1214
- },
1215
- createPlaceholder = function(elem){
1216
- elem = $(elem);
1217
- var id = elem.prop('id'),
1218
- hasLabel = !!(elem.prop('title') || elem.attr('aria-labelledby'))
1219
- ;
1220
- if(!hasLabel && id){
1221
- hasLabel = !!( $('label[for="'+ id +'"]', elem[0].form)[0] );
1222
- }
1223
- if(!hasLabel){
1224
- if(!id){
1225
- id = $.webshims.getID(elem);
1226
- }
1227
- hasLabel = !!($('label #'+ id)[0]);
1228
- }
1229
- return $( hasLabel ? '<span class="placeholder-text"></span>' : '<label for="'+ id +'" class="placeholder-text"></label>');
1230
- },
1231
- pHolder = (function(){
1232
- var delReg = /\n|\r|\f|\t/g,
1233
- allowedPlaceholder = {
1234
- text: 1,
1235
- search: 1,
1236
- url: 1,
1237
- email: 1,
1238
- password: 1,
1239
- tel: 1,
1240
- number: 1
1241
- }
1242
- ;
1243
-
1244
- return {
1245
- create: function(elem){
1246
- var data = $.data(elem, 'placeHolder');
1247
- var form;
1248
- var responsiveElem;
1249
- if(data){return data;}
1250
- data = $.data(elem, 'placeHolder', {});
1251
-
1252
- $(elem).on('focus.placeholder blur.placeholder', function(e){
1253
- changePlaceholderVisibility(this, false, false, data, e.type );
1254
- data.box[e.type == 'focus' ? 'addClass' : 'removeClass']('placeholder-focused');
1255
- });
1256
-
1257
- if((form = $.prop(elem, 'form'))){
1258
- $(form).on('reset.placeholder', function(e){
1259
- setTimeout(function(){
1260
- changePlaceholderVisibility(elem, false, false, data, e.type );
1261
- }, 0);
1262
- });
1263
- }
1264
-
1265
- if(elem.type == 'password' || isOver){
1266
- data.text = createPlaceholder(elem);
1267
- if(isResponsive || $(elem).is('.responsive-width') || (elem.currentStyle || {width: ''}).width.indexOf('%') != -1){
1268
- responsiveElem = true;
1269
- data.box = data.text;
1270
- } else {
1271
- data.box = $(elem)
1272
- .wrap('<span class="placeholder-box placeholder-box-'+ (elem.nodeName || '').toLowerCase() +' placeholder-box-'+$.css(elem, 'float')+'" />')
1273
- .parent()
1274
- ;
1275
- }
1276
- data.text
1277
- .insertAfter(elem)
1278
- .on('mousedown.placeholder', function(){
1279
- changePlaceholderVisibility(this, false, false, data, 'focus');
1280
- try {
1281
- setTimeout(function(){
1282
- elem.focus();
1283
- }, 0);
1284
- } catch(e){}
1285
- return false;
1286
- })
1287
- ;
1288
-
1289
-
1290
- $.each(['lineHeight', 'fontSize', 'fontFamily', 'fontWeight'], function(i, style){
1291
- var prop = $.css(elem, style);
1292
- if(data.text.css(style) != prop){
1293
- data.text.css(style, prop);
1294
- }
1295
- });
1296
- $.each(['Left', 'Top'], function(i, side){
1297
- var size = (parseInt($.css(elem, 'padding'+ side), 10) || 0) + Math.max((parseInt($.css(elem, 'margin'+ side), 10) || 0), 0) + (parseInt($.css(elem, 'border'+ side +'Width'), 10) || 0);
1298
- data.text.css('padding'+ side, size);
1299
- });
1300
-
1301
- $(document)
1302
- .onTrigger('updateshadowdom', function(){
1303
- var height, width;
1304
- if((width = elem.offsetWidth) || (height = elem.offsetHeight)){
1305
- data.text
1306
- .css({
1307
- width: width,
1308
- height: height
1309
- })
1310
- .css($(elem).position())
1311
- ;
1312
- }
1313
- })
1314
- ;
1315
-
1316
- } else {
1317
- var reset = function(e){
1318
- if($(elem).hasClass('placeholder-visible')){
1319
- hidePlaceholder(elem, data, '');
1320
- if(e && e.type == 'submit'){
1321
- setTimeout(function(){
1322
- if(e.isDefaultPrevented()){
1323
- changePlaceholderVisibility(elem, false, false, data );
1324
- }
1325
- }, 9);
1326
- }
1327
- }
1328
- };
1329
-
1330
- $(window).on('beforeunload', reset);
1331
- data.box = $(elem);
1332
- if(form){
1333
- $(form).submit(reset);
1334
- }
1335
- }
1336
-
1337
- return data;
1338
- },
1339
- update: function(elem, val){
1340
- var type = ($.attr(elem, 'type') || $.prop(elem, 'type') || '').toLowerCase();
1341
- if(!allowedPlaceholder[type] && !$.nodeName(elem, 'textarea')){
1342
- webshims.error('placeholder not allowed on input[type="'+type+'"]');
1343
- if(type == 'date'){
1344
- webshims.error('but you can use data-placeholder for input[type="date"]');
1345
- }
1346
- return;
1347
- }
1348
-
1349
-
1350
- var data = pHolder.create(elem);
1351
- if(data.text){
1352
- data.text.text(val);
16
+ win = window,
17
+ doc = document,
18
+ nav = navigator,
19
+
20
+ plugin = false,
21
+ domLoadFnArr = [main],
22
+ objIdArr = [],
23
+ listenersArr = [],
24
+ storedAltContent,
25
+ storedAltContentId,
26
+ storedCallbackFn,
27
+ storedCallbackObj,
28
+ isDomLoaded = false,
29
+ dynamicStylesheet,
30
+ dynamicStylesheetMedia,
31
+ autoHideShow = true,
32
+
33
+ /* Centralized function for browser feature detection
34
+ - User agent string detection is only used when no good alternative is possible
35
+ - Is executed directly for optimal performance
36
+ */
37
+ ua = function() {
38
+ var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
39
+ u = nav.userAgent.toLowerCase(),
40
+ p = nav.platform.toLowerCase(),
41
+ windows = p ? /win/.test(p) : /win/.test(u),
42
+ mac = p ? /mac/.test(p) : /mac/.test(u),
43
+ webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
44
+ ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
45
+ playerVersion = [0,0,0],
46
+ d = null;
47
+ if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
48
+ d = nav.plugins[SHOCKWAVE_FLASH].description;
49
+ if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
50
+ plugin = true;
51
+ ie = false; // cascaded feature detection for Internet Explorer
52
+ d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
53
+ playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
54
+ playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
55
+ playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
56
+ }
57
+ }
58
+ else if (typeof win.ActiveXObject != UNDEF) {
59
+ try {
60
+ var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
61
+ if (a) { // a will return null when ActiveX is disabled
62
+ d = a.GetVariable("$version");
63
+ if (d) {
64
+ ie = true; // cascaded feature detection for Internet Explorer
65
+ d = d.split(" ")[1].split(",");
66
+ playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
1353
67
  }
1354
-
1355
- changePlaceholderVisibility(elem, false, val, data);
1356
68
  }
1357
- };
1358
- })()
1359
- ;
69
+ }
70
+ catch(e) {}
71
+ }
72
+ return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
73
+ }();
1360
74
 
1361
- $.webshims.publicMethods = {
1362
- pHolder: pHolder
1363
- };
1364
- polyfillElements.forEach(function(nodeName){
1365
- var desc = webshims.defineNodeNameProperty(nodeName, 'placeholder', {
1366
- attr: {
1367
- set: function(val){
1368
- var elem = this;
1369
- webshims.contentAttr(elem, 'placeholder', val);
1370
- pHolder.update(elem, val);
1371
- },
1372
- get: function(){
1373
- return webshims.contentAttr(this, 'placeholder');
1374
- }
1375
- },
1376
- reflect: true,
1377
- initAttr: true
1378
- });
1379
- });
1380
75
 
76
+ function callDomLoadFunctions() {
77
+ if (isDomLoaded) { return; }
78
+ try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
79
+ var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
80
+ t.parentNode.removeChild(t);
81
+ }
82
+ catch (e) { return; }
83
+ isDomLoaded = true;
84
+ var dl = domLoadFnArr.length;
85
+ for (var i = 0; i < dl; i++) {
86
+ domLoadFnArr[i]();
87
+ }
88
+ }
1381
89
 
1382
- polyfillElements.forEach(function(name){
1383
- var placeholderValueDesc = {};
1384
- var desc;
1385
- ['attr', 'prop'].forEach(function(propType){
1386
- placeholderValueDesc[propType] = {
1387
- set: function(val){
1388
- var elem = this;
1389
- var placeholder = webshims.contentAttr(elem, 'placeholder');
1390
-
1391
-
1392
- $.removeData(elem, 'cachedValidity');
1393
- var ret = desc[propType]._supset.call(elem, val);
1394
- if(placeholder && 'value' in elem){
1395
- changePlaceholderVisibility(elem, val, placeholder);
90
+ function addDomLoadEvent(fn) {
91
+ if (isDomLoaded) {
92
+ fn();
93
+ }
94
+ else {
95
+ domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
96
+ }
97
+ }
98
+
99
+ /* Cross-browser onload
100
+ - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
101
+ - Will fire an event as soon as a web page including all of its assets are loaded
102
+ */
103
+ function addLoadEvent(fn) {
104
+
105
+ }
106
+
107
+ /* Main function
108
+ - Will preferably execute onDomLoad, otherwise onload (as a fallback)
109
+ */
110
+ function main() {
111
+ if (plugin) {
112
+ testPlayerVersion();
113
+ }
114
+ }
115
+
116
+ /* Detect the Flash Player version for non-Internet Explorer browsers
117
+ - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
118
+ a. Both release and build numbers can be detected
119
+ b. Avoid wrong descriptions by corrupt installers provided by Adobe
120
+ c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
121
+ - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
122
+ */
123
+ function testPlayerVersion() {
124
+ var b = doc.getElementsByTagName("body")[0];
125
+ var o = createElement(OBJECT);
126
+ o.setAttribute("type", FLASH_MIME_TYPE);
127
+ var t = b.appendChild(o);
128
+ if (t) {
129
+ var counter = 0;
130
+ (function(){
131
+ if (typeof t.GetVariable != UNDEF) {
132
+ var d = t.GetVariable("$version");
133
+ if (d) {
134
+ d = d.split(" ")[1].split(",");
135
+ ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
1396
136
  }
1397
- return ret;
1398
- },
1399
- get: function(){
1400
- var elem = this;
1401
- return $(elem).hasClass('placeholder-visible') ? '' : desc[propType]._supget.call(elem);
1402
137
  }
1403
- };
1404
- });
1405
- desc = webshims.defineNodeNameProperty(name, 'value', placeholderValueDesc);
1406
- });
138
+ else if (counter < 10) {
139
+ counter++;
140
+ setTimeout(arguments.callee, 10);
141
+ return;
142
+ }
143
+ b.removeChild(o);
144
+ t = null;
145
+ })();
146
+ }
147
+ }
148
+
149
+
150
+ function getObjectById(objectIdStr) {
151
+ var r = null;
152
+ var o = getElementById(objectIdStr);
153
+ if (o && o.nodeName == "OBJECT") {
154
+ if (typeof o.SetVariable != UNDEF) {
155
+ r = o;
156
+ }
157
+ else {
158
+ var n = o.getElementsByTagName(OBJECT)[0];
159
+ if (n) {
160
+ r = n;
161
+ }
162
+ }
163
+ }
164
+ return r;
165
+ }
166
+
1407
167
 
1408
- })();
168
+ /* Functions to abstract and display alternative content
169
+ */
170
+ function displayAltContent(obj) {
171
+ if (ua.ie && ua.win && obj.readyState != 4) {
172
+ // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
173
+ // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
174
+ var el = createElement("div");
175
+ obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
176
+ el.parentNode.replaceChild(abstractAltContent(obj), el);
177
+ obj.style.display = "none";
178
+ (function(){
179
+ if (obj.readyState == 4) {
180
+ obj.parentNode.removeChild(obj);
181
+ }
182
+ else {
183
+ setTimeout(arguments.callee, 10);
184
+ }
185
+ })();
186
+ }
187
+ else {
188
+ obj.parentNode.replaceChild(abstractAltContent(obj), obj);
189
+ }
190
+ }
1409
191
 
1410
- (function(){
1411
- var doc = document;
1412
- if( 'value' in document.createElement('output') ){return;}
1413
-
1414
- webshims.defineNodeNameProperty('output', 'value', {
1415
- prop: {
1416
- set: function(value){
1417
- var setVal = $.data(this, 'outputShim');
1418
- if(!setVal){
1419
- setVal = outputCreate(this);
192
+ function abstractAltContent(obj) {
193
+ var ac = createElement("div");
194
+ if (ua.win && ua.ie) {
195
+ ac.innerHTML = obj.innerHTML;
196
+ }
197
+ else {
198
+ var nestedObj = obj.getElementsByTagName(OBJECT)[0];
199
+ if (nestedObj) {
200
+ var c = nestedObj.childNodes;
201
+ if (c) {
202
+ var cl = c.length;
203
+ for (var i = 0; i < cl; i++) {
204
+ if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
205
+ ac.appendChild(c[i].cloneNode(true));
206
+ }
1420
207
  }
1421
- setVal(value);
1422
- },
1423
- get: function(){
1424
- return webshims.contentAttr(this, 'value') || $(this).text() || '';
1425
208
  }
1426
209
  }
1427
- });
1428
-
1429
-
1430
- webshims.onNodeNamesPropertyModify('input', 'value', function(value, boolVal, type){
1431
- if(type == 'removeAttr'){return;}
1432
- var setVal = $.data(this, 'outputShim');
1433
- if(setVal){
1434
- setVal(value);
1435
- }
1436
- });
1437
-
1438
- var outputCreate = function(elem){
1439
- if(elem.getAttribute('aria-live')){return;}
1440
- elem = $(elem);
1441
- var value = (elem.text() || '').trim();
1442
- var id = elem.attr('id');
1443
- var htmlFor = elem.attr('for');
1444
- var shim = $('<input class="output-shim" type="text" disabled name="'+ (elem.attr('name') || '')+'" value="'+value+'" style="display: none !important;" />').insertAfter(elem);
1445
- var form = shim[0].form || doc;
1446
- var setValue = function(val){
1447
- shim[0].value = val;
1448
- val = shim[0].value;
1449
- elem.text(val);
1450
- webshims.contentAttr(elem[0], 'value', val);
1451
- };
1452
-
1453
- elem[0].defaultValue = value;
1454
- webshims.contentAttr(elem[0], 'value', value);
1455
-
1456
- elem.attr({'aria-live': 'polite'});
1457
- if(id){
1458
- shim.attr('id', id);
1459
- elem.attr('aria-labelledby', webshims.getID($('label[for="'+id+'"]', form)));
1460
- }
1461
- if(htmlFor){
1462
- id = webshims.getID(elem);
1463
- htmlFor.split(' ').forEach(function(control){
1464
- control = document.getElementById(control);
1465
- if(control){
1466
- control.setAttribute('aria-controls', id);
210
+ }
211
+ return ac;
212
+ }
213
+
214
+ /* Cross-browser dynamic SWF creation
215
+ */
216
+ function createSWF(attObj, parObj, id) {
217
+ var r, el = getElementById(id);
218
+ if (ua.wk && ua.wk < 312) { return r; }
219
+ if (el) {
220
+ if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
221
+ attObj.id = id;
222
+ }
223
+ if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
224
+ var att = "";
225
+ for (var i in attObj) {
226
+ if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
227
+ if (i.toLowerCase() == "data") {
228
+ parObj.movie = attObj[i];
229
+ }
230
+ else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
231
+ att += ' class="' + attObj[i] + '"';
232
+ }
233
+ else if (i.toLowerCase() != "classid") {
234
+ att += ' ' + i + '="' + attObj[i] + '"';
235
+ }
1467
236
  }
1468
- });
1469
- }
1470
- elem.data('outputShim', setValue );
1471
- shim.data('outputShim', setValue );
1472
- return setValue;
1473
- };
1474
-
1475
- webshims.addReady(function(context, contextElem){
1476
- $('output', context).add(contextElem.filter('output')).each(function(){
1477
- outputCreate(this);
1478
- });
1479
- });
1480
-
1481
- /*
1482
- * Implements input event in all browsers
1483
- */
1484
- (function(){
1485
- var noInputTriggerEvts = {updateInput: 1, input: 1},
1486
- noInputTypes = {
1487
- radio: 1,
1488
- checkbox: 1,
1489
- submit: 1,
1490
- button: 1,
1491
- image: 1,
1492
- reset: 1,
1493
- file: 1
1494
-
1495
- //pro forma
1496
- ,color: 1
1497
- //,range: 1
1498
- },
1499
- observe = function(input){
1500
- var timer,
1501
- lastVal = input.prop('value'),
1502
- trigger = function(e){
1503
- //input === null
1504
- if(!input){return;}
1505
- var newVal = input.prop('value');
1506
-
1507
- if(newVal !== lastVal){
1508
- lastVal = newVal;
1509
- if(!e || !noInputTriggerEvts[e.type]){
1510
- webshims.triggerInlineForm && webshims.triggerInlineForm(input[0], 'input');
1511
- }
1512
- }
1513
- },
1514
- extraTimer,
1515
- extraTest = function(){
1516
- clearTimeout(extraTimer);
1517
- extraTimer = setTimeout(trigger, 9);
1518
- },
1519
- unbind = function(){
1520
- input.unbind('focusout', unbind).unbind('keyup keypress keydown paste cut', extraTest).unbind('input change updateInput', trigger);
1521
- clearInterval(timer);
1522
- setTimeout(function(){
1523
- trigger();
1524
- input = null;
1525
- }, 1);
1526
-
237
+ }
238
+ var par = "";
239
+ for (var j in parObj) {
240
+ if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
241
+ par += '<param name="' + j + '" value="' + parObj[j] + '" />';
242
+ }
243
+ }
244
+ el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
245
+ objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
246
+ r = getElementById(attObj.id);
247
+ }
248
+ else { // well-behaving browsers
249
+ var o = createElement(OBJECT);
250
+ o.setAttribute("type", FLASH_MIME_TYPE);
251
+ for (var m in attObj) {
252
+ if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
253
+ if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
254
+ o.setAttribute("class", attObj[m]);
1527
255
  }
1528
- ;
1529
-
1530
- clearInterval(timer);
1531
- timer = setInterval(trigger, 99);
1532
- extraTest();
1533
- input.on({
1534
- 'keyup keypress keydown paste cut': extraTest,
1535
- focusout: unbind,
1536
- 'input updateInput change': trigger
1537
- });
256
+ else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
257
+ o.setAttribute(m, attObj[m]);
258
+ }
259
+ }
1538
260
  }
1539
- ;
1540
- if($.event.customEvent){
1541
- $.event.customEvent.updateInput = true;
1542
- }
1543
-
1544
- $(doc)
1545
- .on('focusin', function(e){
1546
- if( e.target && e.target.type && !e.target.readOnly && !e.target.disabled && (e.target.nodeName || '').toLowerCase() == 'input' && !noInputTypes[e.target.type] ){
1547
- observe($(e.target));
261
+ for (var n in parObj) {
262
+ if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
263
+ createObjParam(o, n, parObj[n]);
1548
264
  }
1549
- })
1550
- ;
1551
- })();
1552
- })();
1553
-
1554
- }); //webshims.ready end
1555
- }//end formvalidation
1556
-
1557
- jQuery.webshims.register('form-message', function($, webshims, window, document, undefined, options){
1558
- "use strict";
1559
- var validityMessages = webshims.validityMessages;
1560
-
1561
- var implementProperties = (options.overrideMessages || options.customMessages) ? ['customValidationMessage'] : [];
1562
-
1563
- validityMessages['en'] = $.extend(true, {
1564
- typeMismatch: {
1565
- email: 'Please enter an email address.',
1566
- url: 'Please enter a URL.',
1567
- number: 'Please enter a number.',
1568
- date: 'Please enter a date.',
1569
- time: 'Please enter a time.',
1570
- range: 'Invalid input.',
1571
- "datetime-local": 'Please enter a datetime.'
1572
- },
1573
- rangeUnderflow: {
1574
- defaultMessage: 'Value must be greater than or equal to {%min}.'
1575
- },
1576
- rangeOverflow: {
1577
- defaultMessage: 'Value must be less than or equal to {%max}.'
1578
- },
1579
- stepMismatch: 'Invalid input.',
1580
- tooLong: 'Please enter at most {%maxlength} character(s). You entered {%valueLen}.',
1581
-
1582
- patternMismatch: 'Invalid input. {%title}',
1583
- valueMissing: {
1584
- defaultMessage: 'Please fill out this field.',
1585
- checkbox: 'Please check this box if you want to proceed.'
265
+ }
266
+ el.parentNode.replaceChild(o, el);
267
+ r = o;
268
+ }
1586
269
  }
1587
- }, (validityMessages['en'] || validityMessages['en-US'] || {}));
270
+ return r;
271
+ }
1588
272
 
273
+ function createObjParam(el, pName, pValue) {
274
+ var p = createElement("param");
275
+ p.setAttribute("name", pName);
276
+ p.setAttribute("value", pValue);
277
+ el.appendChild(p);
278
+ }
1589
279
 
1590
- ['select', 'radio'].forEach(function(type){
1591
- if(typeof validityMessages['en'].valueMissing == 'object'){
1592
- validityMessages['en'].valueMissing[type] = 'Please select an option.';
280
+ /* Cross-browser SWF removal
281
+ - Especially needed to safely and completely remove a SWF in Internet Explorer
282
+ */
283
+ function removeSWF(id) {
284
+ var obj = getElementById(id);
285
+ if (obj && obj.nodeName == "OBJECT") {
286
+ if (ua.ie && ua.win) {
287
+ obj.style.display = "none";
288
+ (function(){
289
+ if (obj.readyState == 4) {
290
+ removeObjectInIE(id);
291
+ }
292
+ else {
293
+ setTimeout(arguments.callee, 10);
294
+ }
295
+ })();
296
+ }
297
+ else {
298
+ obj.parentNode.removeChild(obj);
299
+ }
1593
300
  }
1594
- });
301
+ }
1595
302
 
1596
- ['date', 'time', 'datetime-local'].forEach(function(type){
1597
- if(typeof validityMessages['en'].rangeUnderflow == 'object'){
1598
- validityMessages.en.rangeUnderflow[type] = 'Value must be at or after {%min}.';
1599
- }
1600
- });
1601
- ['date', 'time', 'datetime-local'].forEach(function(type){
1602
- if(typeof validityMessages['en'].rangeOverflow == 'object'){
1603
- validityMessages.en.rangeOverflow[type] = 'Value must be at or before {%max}.';
303
+ function removeObjectInIE(id) {
304
+ var obj = getElementById(id);
305
+ if (obj) {
306
+ for (var i in obj) {
307
+ if (typeof obj[i] == "function") {
308
+ obj[i] = null;
309
+ }
310
+ }
311
+ obj.parentNode.removeChild(obj);
1604
312
  }
1605
- });
1606
-
1607
- validityMessages['en-US'] = validityMessages['en-US'] || validityMessages['en'];
1608
- validityMessages[''] = validityMessages[''] || validityMessages['en-US'];
313
+ }
1609
314
 
1610
- validityMessages['de'] = $.extend(true, {
1611
- typeMismatch: {
1612
- email: '{%value} ist keine zulässige E-Mail-Adresse',
1613
- url: '{%value} ist keine zulässige Webadresse',
1614
- number: '{%value} ist keine Nummer!',
1615
- date: '{%value} ist kein Datum',
1616
- time: '{%value} ist keine Uhrzeit',
1617
- range: '{%value} ist keine Nummer!',
1618
- "datetime-local": '{%value} ist kein Datum-Uhrzeit Format.'
1619
- },
1620
- rangeUnderflow: {
1621
- defaultMessage: '{%value} ist zu niedrig. {%min} ist der unterste Wert, den Sie benutzen können.'
1622
- },
1623
- rangeOverflow: {
1624
- defaultMessage: '{%value} ist zu hoch. {%max} ist der oberste Wert, den Sie benutzen können.'
1625
- },
1626
- stepMismatch: 'Der Wert {%value} ist in diesem Feld nicht zulässig. Hier sind nur bestimmte Werte zulässig. {%title}',
1627
- tooLong: 'Der eingegebene Text ist zu lang! Sie haben {%valueLen} Zeichen eingegeben, dabei sind {%maxlength} das Maximum.',
1628
- patternMismatch: '{%value} hat für dieses Eingabefeld ein falsches Format! {%title}',
1629
- valueMissing: {
1630
- defaultMessage: 'Bitte geben Sie einen Wert ein',
1631
- checkbox: 'Bitte aktivieren Sie das Kästchen'
315
+ /* Functions to optimize JavaScript compression
316
+ */
317
+ function getElementById(id) {
318
+ var el = null;
319
+ try {
320
+ el = doc.getElementById(id);
1632
321
  }
1633
- }, (validityMessages['de'] || {}));
322
+ catch (e) {}
323
+ return el;
324
+ }
1634
325
 
1635
- ['select', 'radio'].forEach(function(type){
1636
- if(typeof validityMessages['de'].valueMissing == 'object'){
1637
- validityMessages['de'].valueMissing[type] = 'Bitte wählen Sie eine Option aus';
1638
- }
1639
- });
326
+ function createElement(el) {
327
+ return doc.createElement(el);
328
+ }
1640
329
 
1641
- ['date', 'time', 'datetime-local'].forEach(function(type){
1642
- if(typeof validityMessages['de'].rangeUnderflow == 'object'){
1643
- validityMessages.de.rangeUnderflow[type] = '{%value} ist zu früh. {%min} ist die früheste Zeit, die Sie benutzen können.';
1644
- }
1645
- });
1646
- ['date', 'time', 'datetime-local'].forEach(function(type){
1647
- if(typeof validityMessages['de'].rangeOverflow == 'object'){
1648
- validityMessages.de.rangeOverflow[type] = '{%value} ist zu spät. {%max} ist die späteste Zeit, die Sie benutzen können.';
1649
- }
1650
- });
330
+ /* Updated attachEvent function for Internet Explorer
331
+ - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
332
+ */
333
+ function addListener(target, eventType, fn) {
334
+ target.attachEvent(eventType, fn);
335
+ listenersArr[listenersArr.length] = [target, eventType, fn];
336
+ }
337
+
338
+ /* Flash Player and SWF content version matching
339
+ */
340
+ function hasPlayerVersion(rv) {
341
+ var pv = ua.pv, v = rv.split(".");
342
+ v[0] = parseInt(v[0], 10);
343
+ v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"
344
+ v[2] = parseInt(v[2], 10) || 0;
345
+ return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
346
+ }
1651
347
 
1652
- var currentValidationMessage = validityMessages[''];
1653
348
 
1654
349
 
1655
- webshims.createValidationMessage = function(elem, name){
1656
- var message = currentValidationMessage[name];
1657
- if(message && typeof message !== 'string'){
1658
- message = message[ $.prop(elem, 'type') ] || message[ (elem.nodeName || '').toLowerCase() ] || message[ 'defaultMessage' ];
350
+ function setVisibility(id, isVisible) {
351
+ if (!autoHideShow) { return; }
352
+ var elem;
353
+ var v = isVisible ? "visible" : "hidden";
354
+ if (isDomLoaded && (elem && getElementById(id))) {
355
+ getElementById(id).style.visibility = v;
1659
356
  }
1660
- if(message){
1661
- ['value', 'min', 'max', 'title', 'maxlength', 'label'].forEach(function(attr){
1662
- if(message.indexOf('{%'+attr) === -1){return;}
1663
- var val = ((attr == 'label') ? $.trim($('label[for="'+ elem.id +'"]', elem.form).text()).replace(/\*$|:$/, '') : $.attr(elem, attr)) || '';
1664
- if(name == 'patternMismatch' && attr == 'title' && !val){
1665
- webshims.error('no title for patternMismatch provided. Always add a title attribute.');
357
+ }
358
+
359
+ /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)
360
+ */
361
+ var cleanup = function() {
362
+ if (ua.ie && ua.win && window.attachEvent) {
363
+ window.attachEvent("onunload", function() {
364
+ // remove listeners to avoid memory leaks
365
+ var ll = listenersArr.length;
366
+ for (var i = 0; i < ll; i++) {
367
+ listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);
368
+ }
369
+ // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect
370
+ var il = objIdArr.length;
371
+ for (var j = 0; j < il; j++) {
372
+ removeSWF(objIdArr[j]);
373
+ }
374
+ // cleanup library's main closures to avoid memory leaks
375
+ for (var k in ua) {
376
+ ua[k] = null;
1666
377
  }
1667
- message = message.replace('{%'+ attr +'}', val);
1668
- if('value' == attr){
1669
- message = message.replace('{%valueLen}', val.length);
378
+ ua = null;
379
+ for (var l in swfmini) {
380
+ swfmini[l] = null;
1670
381
  }
382
+ swfmini = null;
1671
383
  });
1672
384
  }
1673
- return message || '';
1674
- };
1675
-
1676
-
1677
- if(webshims.bugs.validationMessage || !Modernizr.formvalidation || webshims.bugs.bustedValidity){
1678
- implementProperties.push('validationMessage');
1679
- }
385
+ }();
1680
386
 
1681
- webshims.activeLang({
1682
- langObj: validityMessages,
1683
- module: 'form-core',
1684
- callback: function(langObj){
1685
- currentValidationMessage = langObj;
1686
- }
1687
- });
387
+ webshims.ready('DOM', callDomLoadFunctions);
1688
388
 
1689
- implementProperties.forEach(function(messageProp){
1690
- webshims.defineNodeNamesProperty(['fieldset', 'output', 'button'], messageProp, {
1691
- prop: {
1692
- value: '',
1693
- writeable: false
389
+ return {
390
+ /* Public API
391
+ - Reference: http://code.google.com/p/swfobject/wiki/documentation
392
+ */
393
+ registerObject: function() {
394
+
395
+ },
396
+
397
+ getObjectById: function(objectIdStr) {
398
+ if (ua.w3) {
399
+ return getObjectById(objectIdStr);
1694
400
  }
1695
- });
1696
- ['input', 'select', 'textarea'].forEach(function(nodeName){
1697
- var desc = webshims.defineNodeNameProperty(nodeName, messageProp, {
1698
- prop: {
1699
- get: function(){
1700
- var elem = this;
1701
- var message = '';
1702
- if(!$.prop(elem, 'willValidate')){
1703
- return message;
401
+ },
402
+
403
+ embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {
404
+ var callbackObj = {success:false, id:replaceElemIdStr};
405
+ if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {
406
+ setVisibility(replaceElemIdStr, false);
407
+ addDomLoadEvent(function() {
408
+ widthStr += ""; // auto-convert to string
409
+ heightStr += "";
410
+ var att = {};
411
+ if (attObj && typeof attObj === OBJECT) {
412
+ for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs
413
+ att[i] = attObj[i];
1704
414
  }
1705
-
1706
- var validity = $.prop(elem, 'validity') || {valid: 1};
1707
-
1708
- if(validity.valid){return message;}
1709
- message = webshims.getContentValidationMessage(elem, validity);
1710
-
1711
- if(message){return message;}
1712
-
1713
- if(validity.customError && elem.nodeName){
1714
- message = (Modernizr.formvalidation && !webshims.bugs.bustedValidity && desc.prop._supget) ? desc.prop._supget.call(elem) : webshims.data(elem, 'customvalidationMessage');
1715
- if(message){return message;}
415
+ }
416
+ att.data = swfUrlStr;
417
+ att.width = widthStr;
418
+ att.height = heightStr;
419
+ var par = {};
420
+ if (parObj && typeof parObj === OBJECT) {
421
+ for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs
422
+ par[j] = parObj[j];
1716
423
  }
1717
- $.each(validity, function(name, prop){
1718
- if(name == 'valid' || !prop){return;}
1719
-
1720
- message = webshims.createValidationMessage(elem, name);
1721
- if(message){
1722
- return false;
424
+ }
425
+ if (flashvarsObj && typeof flashvarsObj === OBJECT) {
426
+ for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs
427
+ if (typeof par.flashvars != UNDEF) {
428
+ par.flashvars += "&" + k + "=" + flashvarsObj[k];
1723
429
  }
1724
- });
1725
- return message || '';
1726
- },
1727
- writeable: false
1728
- }
1729
- });
1730
- });
430
+ else {
431
+ par.flashvars = k + "=" + flashvarsObj[k];
432
+ }
433
+ }
434
+ }
435
+ if (hasPlayerVersion(swfVersionStr)) { // create SWF
436
+ var obj = createSWF(att, par, replaceElemIdStr);
437
+ if (att.id == replaceElemIdStr) {
438
+ setVisibility(replaceElemIdStr, true);
439
+ }
440
+ callbackObj.success = true;
441
+ callbackObj.ref = obj;
442
+ }
443
+ else { // show alternative content
444
+ setVisibility(replaceElemIdStr, true);
445
+ }
446
+ if (callbackFn) { callbackFn(callbackObj); }
447
+ });
448
+ }
449
+ else if (callbackFn) { callbackFn(callbackObj); }
450
+ },
1731
451
 
1732
- });
1733
- });
452
+ switchOffAutoHideShow: function() {
453
+ autoHideShow = false;
454
+ },
455
+
456
+ ua: ua,
457
+
458
+ getFlashPlayerVersion: function() {
459
+ return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
460
+ },
461
+
462
+ hasFlashPlayerVersion: hasPlayerVersion,
463
+
464
+ createSWF: function(attObj, parObj, replaceElemIdStr) {
465
+ if (ua.w3) {
466
+ return createSWF(attObj, parObj, replaceElemIdStr);
467
+ }
468
+ else {
469
+ return undefined;
470
+ }
471
+ },
472
+
473
+ showExpressInstall: function() {
474
+
475
+ },
476
+
477
+ removeSWF: function(objElemIdStr) {
478
+ if (ua.w3) {
479
+ removeSWF(objElemIdStr);
480
+ }
481
+ },
482
+
483
+ createCSS: function() {
484
+
485
+ },
486
+
487
+ addDomLoadEvent: addDomLoadEvent,
488
+
489
+ addLoadEvent: addLoadEvent,
490
+
491
+
492
+ // For internal usage only
493
+ expressInstallCallback: function() {
494
+
495
+ }
496
+ };
497
+ }();
498
+
1734
499
  (function($, Modernizr, webshims){
1735
500
  "use strict";
1736
501
  var hasNative = Modernizr.audio && Modernizr.video;
@@ -1746,7 +511,7 @@ jQuery.webshims.register('form-message', function($, webshims, window, document,
1746
511
  });
1747
512
  };
1748
513
  var options = webshims.cfg.mediaelement;
1749
- var swfType = options && options.player == 'jwplayer' ? 'mediaelement-swf' : 'mediaelement-jaris';
514
+ var swfType = 'mediaelement-jaris';
1750
515
  var hasSwf;
1751
516
  if(!options){
1752
517
  webshims.error("mediaelement wasn't implemented but loaded");
@@ -1771,34 +536,44 @@ jQuery.webshims.register('form-message', function($, webshims, window, document,
1771
536
  }
1772
537
 
1773
538
  if(hasNative && !options.preferFlash){
539
+ var noSwitch = {
540
+ 1: 1,
541
+ 2: 1
542
+ };
1774
543
  var switchOptions = function(e){
544
+ var media;
1775
545
  var parent = e.target.parentNode;
1776
- if(!options.preferFlash && ($(e.target).is('audio, video') || (parent && $('source:last', parent)[0] == e.target)) ){
1777
- webshims.ready('DOM mediaelement', function(){
1778
- if(hasSwf){
546
+ if(!options.preferFlash &&
547
+ ($(e.target).is('audio, video') || (parent && $('source:last', parent)[0] == e.target)) &&
548
+ (media = $(e.target).closest('audio, video')) && !noSwitch[media.prop('error')]
549
+ ){
550
+ $(function(){
551
+ if(hasSwf && !options.preferFlash){
1779
552
  loadSwf();
553
+ webshims.ready('WINDOWLOAD '+swfType, function(){
554
+ setTimeout(function(){
555
+ if(!options.preferFlash && webshims.mediaelement.createSWF && !media.is('.nonnative-api-active')){
556
+ options.preferFlash = true;
557
+ document.removeEventListener('error', switchOptions, true);
558
+ $('audio, video').each(function(){
559
+ webshims.mediaelement.selectSource(this);
560
+ });
561
+ webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src+" Mediaerror: "+ media.prop('error'));
562
+ }
563
+ }, 9);
564
+ });
565
+ } else{
566
+ document.removeEventListener('error', switchOptions, true);
1780
567
  }
1781
- webshims.ready('WINDOWLOAD '+swfType, function(){
1782
- setTimeout(function(){
1783
- if(hasSwf && !options.preferFlash && webshims.mediaelement.createSWF && !$(e.target).closest('audio, video').is('.nonnative-api-active')){
1784
- options.preferFlash = true;
1785
- document.removeEventListener('error', switchOptions, true);
1786
- $('audio, video').each(function(){
1787
- webshims.mediaelement.selectSource(this);
1788
- });
1789
- webshims.info("switching mediaelements option to 'preferFlash', due to an error with native player: "+e.target.src);
1790
- } else if(!hasSwf){
1791
- document.removeEventListener('error', switchOptions, true);
1792
- }
1793
- }, 20);
1794
- });
1795
568
  });
1796
569
  }
1797
570
  };
1798
571
  document.addEventListener('error', switchOptions, true);
1799
572
  $('audio, video').each(function(){
1800
- if(this.error){
573
+ var error = $.prop(this, 'error');
574
+ if(error && !noSwitch[error]){
1801
575
  switchOptions({target: this});
576
+ return false;
1802
577
  }
1803
578
  });
1804
579
  }
@@ -1833,6 +608,7 @@ jQuery.webshims.register('form-message', function($, webshims, window, document,
1833
608
  } else {
1834
609
  webshims.info("track support was overwritten. due to bad browser support");
1835
610
  }
611
+ return false;
1836
612
  }
1837
613
  };
1838
614
  var detectTrackError = function(){
@@ -1856,7 +632,7 @@ jQuery.webshims.register('form-message', function($, webshims, window, document,
1856
632
  }
1857
633
 
1858
634
  webshims.register('mediaelement-core', function($, webshims, window, document, undefined){
1859
- hasSwf = swfobject.hasFlashPlayerVersion('9.0.115');
635
+ hasSwf = swfmini.hasFlashPlayerVersion('9.0.115');
1860
636
  $('html').addClass(hasSwf ? 'swf' : 'no-swf');
1861
637
  var mediaelement = webshims.mediaelement;
1862
638
  mediaelement.parseRtmp = function(data){
@@ -1949,7 +725,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
1949
725
  loaded = true;
1950
726
  webshims.loader.loadScript("https://www.youtube.com/player_api");
1951
727
  $(function(){
1952
- webshims.polyfill("mediaelement-yt");
728
+ webshims._polyfill(["mediaelement-yt"]);
1953
729
  });
1954
730
  };
1955
731
  })();
@@ -2073,7 +849,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2073
849
  });
2074
850
  };
2075
851
 
2076
- mediaelement.swfMimeTypes = ['video/3gpp', 'video/x-msvideo', 'video/quicktime', 'video/x-m4v', 'video/mp4', 'video/m4p', 'video/x-flv', 'video/flv', 'audio/mpeg', 'audio/aac', 'audio/mp4', 'audio/x-m4a', 'audio/m4a', 'audio/mp3', 'audio/x-fla', 'audio/fla', 'youtube/flv', 'jwplayer/jwplayer', 'video/youtube', 'video/rtmp', 'audio/rtmp'];
852
+ mediaelement.swfMimeTypes = ['video/3gpp', 'video/x-msvideo', 'video/quicktime', 'video/x-m4v', 'video/mp4', 'video/m4p', 'video/x-flv', 'video/flv', 'audio/mpeg', 'audio/aac', 'audio/mp4', 'audio/x-m4a', 'audio/m4a', 'audio/mp3', 'audio/x-fla', 'audio/fla', 'youtube/flv', 'video/jarisplayer', 'jarisplayer/jarisplayer', 'video/youtube', 'video/rtmp', 'audio/rtmp'];
2077
853
 
2078
854
  mediaelement.canThirdPlaySrces = function(mediaElem, srces){
2079
855
  var ret = '';
@@ -2098,11 +874,12 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2098
874
  if(hasNative){
2099
875
  mediaElem = $(mediaElem);
2100
876
  var nodeName = (mediaElem[0].nodeName || '').toLowerCase();
2101
- if(!nativeCanPlayType[nodeName]){return ret;}
877
+ var nativeCanPlay = (nativeCanPlayType[nodeName] || {prop: {_supvalue: false}}).prop._supvalue || mediaElem[0].canPlayType;
878
+ if(!nativeCanPlay){return ret;}
2102
879
  srces = srces || mediaelement.srces(mediaElem);
2103
880
 
2104
881
  $.each(srces, function(i, src){
2105
- if(src.type && nativeCanPlayType[nodeName].prop._supvalue.call(mediaElem[0], src.type) ){
882
+ if(src.type && nativeCanPlay.call(mediaElem[0], src.type) ){
2106
883
  ret = src;
2107
884
  return false;
2108
885
  }
@@ -2117,7 +894,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2117
894
  }
2118
895
 
2119
896
  $(elem).pause().data('mediaerror', message);
2120
- webshims.warn('mediaelementError: '+ message);
897
+ webshims.error('mediaelementError: '+ message);
2121
898
  setTimeout(function(){
2122
899
  if($(elem).data('mediaerror')){
2123
900
  $(elem).trigger('mediaerror');
@@ -2191,6 +968,7 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2191
968
  };
2192
969
  mediaelement.selectSource = selectSource;
2193
970
 
971
+
2194
972
  $(document).on('ended', function(e){
2195
973
  var data = webshims.data(e.target, 'mediaelement');
2196
974
  if( supportsLoop && (!data || data.isActive == 'html5') && !$.prop(e.target, 'loop')){return;}
@@ -2200,121 +978,141 @@ webshims.register('mediaelement-core', function($, webshims, window, document, u
2200
978
  }, 1);
2201
979
 
2202
980
  });
2203
- if(!supportsLoop){
2204
- webshims.defineNodeNamesBooleanProperty(['audio', 'video'], 'loop');
2205
- }
2206
981
 
2207
- ['audio', 'video'].forEach(function(nodeName){
2208
- var supLoad = webshims.defineNodeNameProperty(nodeName, 'load', {
2209
- prop: {
2210
- value: function(){
2211
- var data = webshims.data(this, 'mediaelement');
2212
- selectSource(this, data);
2213
- if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
2214
- supLoad.prop._supvalue.apply(this, arguments);
982
+ webshims.ready('dom-support', function(){
983
+ if(!supportsLoop){
984
+ webshims.defineNodeNamesBooleanProperty(['audio', 'video'], 'loop');
985
+ }
986
+
987
+ ['audio', 'video'].forEach(function(nodeName){
988
+ var supLoad = webshims.defineNodeNameProperty(nodeName, 'load', {
989
+ prop: {
990
+ value: function(){
991
+ var data = webshims.data(this, 'mediaelement');
992
+ selectSource(this, data);
993
+ if(hasNative && (!data || data.isActive == 'html5') && supLoad.prop._supvalue){
994
+ supLoad.prop._supvalue.apply(this, arguments);
995
+ }
2215
996
  }
2216
997
  }
2217
- }
2218
- });
2219
- nativeCanPlayType[nodeName] = webshims.defineNodeNameProperty(nodeName, 'canPlayType', {
2220
- prop: {
2221
- value: function(type){
2222
- var ret = '';
2223
- if(hasNative && nativeCanPlayType[nodeName].prop._supvalue){
2224
- ret = nativeCanPlayType[nodeName].prop._supvalue.call(this, type);
2225
- if(ret == 'no'){
2226
- ret = '';
998
+ });
999
+ nativeCanPlayType[nodeName] = webshims.defineNodeNameProperty(nodeName, 'canPlayType', {
1000
+ prop: {
1001
+ value: function(type){
1002
+ var ret = '';
1003
+ if(hasNative && nativeCanPlayType[nodeName].prop._supvalue){
1004
+ ret = nativeCanPlayType[nodeName].prop._supvalue.call(this, type);
1005
+ if(ret == 'no'){
1006
+ ret = '';
1007
+ }
2227
1008
  }
2228
- }
2229
- if(!ret && hasSwf){
2230
- type = $.trim((type || '').split(';')[0]);
2231
- if(mediaelement.swfMimeTypes.indexOf(type) != -1){
2232
- ret = 'maybe';
1009
+ if(!ret && hasSwf){
1010
+ type = $.trim((type || '').split(';')[0]);
1011
+ if(mediaelement.swfMimeTypes.indexOf(type) != -1){
1012
+ ret = 'maybe';
1013
+ }
2233
1014
  }
1015
+ return ret;
2234
1016
  }
2235
- return ret;
2236
1017
  }
1018
+ });
1019
+ });
1020
+ webshims.onNodeNamesPropertyModify(['audio', 'video'], ['src', 'poster'], {
1021
+ set: function(){
1022
+ var elem = this;
1023
+ var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
1024
+ clearTimeout(baseData.loadTimer);
1025
+ baseData.loadTimer = setTimeout(function(){
1026
+ selectSource(elem);
1027
+ elem = null;
1028
+ }, 9);
2237
1029
  }
2238
1030
  });
2239
1031
  });
2240
- webshims.onNodeNamesPropertyModify(['audio', 'video'], ['src', 'poster'], {
2241
- set: function(){
2242
- var elem = this;
2243
- var baseData = webshims.data(elem, 'mediaelementBase') || webshims.data(elem, 'mediaelementBase', {});
2244
- clearTimeout(baseData.loadTimer);
2245
- baseData.loadTimer = setTimeout(function(){
2246
- selectSource(elem);
2247
- elem = null;
2248
- }, 9);
2249
- }
2250
- });
2251
1032
 
2252
1033
  var initMediaElements = function(){
2253
-
2254
- webshims.addReady(function(context, insertedElement){
2255
- var media = $('video, audio', context)
2256
- .add(insertedElement.filter('video, audio'))
2257
- .each(function(){
2258
- var data = webshims.data(this, 'mediaelement');
2259
-
2260
- if(hasNative && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay])') && (!data || data.isActive == 'html5')){
2261
- //IE controls not visible bug
2262
- $(this).prop('preload', 'metadata').mediaLoad();
2263
- } else {
2264
- selectSource(this, data);
2265
- }
1034
+ var testFixMedia = function(){
1035
+ if(webshims.implement(this, 'mediaelement')){
1036
+ selectSource(this);
1037
+
1038
+ if(hasNative){
1039
+ var bufferTimer;
1040
+ var lastBuffered;
1041
+ var elem = this;
1042
+ var getBufferedString = function(){
1043
+ var buffered = $.prop(elem, 'buffered');
1044
+ if(!buffered){return;}
1045
+ var bufferString = "";
1046
+ for(var i = 0, len = buffered.length; i < len;i++){
1047
+ bufferString += buffered.end(i);
1048
+ }
1049
+ return bufferString;
1050
+ };
1051
+ var testBuffer = function(){
1052
+ var buffered = getBufferedString();
1053
+ if(buffered != lastBuffered){
1054
+ lastBuffered = buffered;
1055
+ $(elem).triggerHandler('progress');
1056
+ }
1057
+ };
2266
1058
 
2267
- if(hasNative){
2268
-
2269
- //FF progress bug
2270
- (function(){
2271
- var bufferTimer;
2272
- var lastBuffered;
2273
- var elem = this;
2274
- var getBufferedString = function(){
2275
- var buffered = $.prop(elem, 'buffered');
2276
- if(!buffered){return;}
2277
- var bufferString = "";
2278
- for(var i = 0, len = buffered.length; i < len;i++){
2279
- bufferString += buffered.end(i);
1059
+ $(this)
1060
+ .on({
1061
+ 'play loadstart progress': function(e){
1062
+ if(e.type == 'progress'){
1063
+ lastBuffered = getBufferedString();
2280
1064
  }
2281
- return bufferString;
2282
- };
2283
- var testBuffer = function(){
2284
- var buffered = getBufferedString();
2285
- if(buffered != lastBuffered){
2286
- lastBuffered = buffered;
2287
- $(elem).triggerHandler('progress');
1065
+ clearTimeout(bufferTimer);
1066
+ bufferTimer = setTimeout(testBuffer, 999);
1067
+ },
1068
+ 'emptied stalled mediaerror abort suspend': function(e){
1069
+ if(e.type == 'emptied'){
1070
+ lastBuffered = false;
2288
1071
  }
2289
- };
2290
-
2291
- $(this)
2292
- .on({
2293
- 'play loadstart progress': function(e){
2294
- if(e.type == 'progress'){
2295
- lastBuffered = getBufferedString();
2296
- }
2297
- clearTimeout(bufferTimer);
2298
- bufferTimer = setTimeout(testBuffer, 999);
2299
- },
2300
- 'emptied stalled mediaerror abort suspend': function(e){
2301
- if(e.type == 'emptied'){
2302
- lastBuffered = false;
2303
- }
2304
- clearTimeout(bufferTimer);
2305
- }
2306
- })
2307
- ;
2308
- })();
1072
+ clearTimeout(bufferTimer);
1073
+ }
1074
+ })
1075
+ ;
1076
+ if('ActiveXObject' in window && $.prop(this, 'paused') && !$.prop(this, 'readyState') && $(this).is('audio[preload="none"][controls]:not([autoplay],.nonnative-api-active)')){
1077
+ $(this).prop('preload', 'metadata').mediaLoad();
2309
1078
  }
2310
-
2311
- })
2312
- ;
2313
- if(!loadTrackUi.loaded && $('track', media).length){
2314
- loadTrackUi();
1079
+ }
2315
1080
  }
2316
- media = null;
1081
+
1082
+ };
1083
+ var handleMedia = false;
1084
+
1085
+
1086
+ webshims.ready('dom-support', function(){
1087
+ handleMedia = true;
1088
+ webshims.addReady(function(context, insertedElement){
1089
+ var media = $('video, audio', context)
1090
+ .add(insertedElement.filter('video, audio'))
1091
+ .each(testFixMedia)
1092
+ ;
1093
+ if(!loadTrackUi.loaded && $('track', media).length){
1094
+ loadTrackUi();
1095
+ }
1096
+ media = null;
1097
+ });
2317
1098
  });
1099
+
1100
+ if(hasNative && !handleMedia){
1101
+ webshims.addReady(function(context, insertedElement){
1102
+ if(!handleMedia){
1103
+ $('video, audio', context)
1104
+ .add(insertedElement.filter('video, audio'))
1105
+ .each(function(){
1106
+ if(!mediaelement.canNativePlaySrces(this) || (!loadTrackUi.loaded && $('track', this).length)){
1107
+ loadThird();
1108
+ handleMedia = true;
1109
+ return false;
1110
+ }
1111
+ })
1112
+ ;
1113
+ }
1114
+ });
1115
+ }
2318
1116
  };
2319
1117
 
2320
1118
  if(Modernizr.track && !bugs.track){