webshims-rails 1.14.5 → 1.14.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -0
  3. data/lib/webshims-rails/version.rb +2 -2
  4. data/readme.textile +7 -0
  5. data/vendor/assets/javascripts/webshims/polyfiller.js +38 -6
  6. data/vendor/assets/javascripts/webshims/shims/combos/1.js +26 -20
  7. data/vendor/assets/javascripts/webshims/shims/combos/10.js +54 -19
  8. data/vendor/assets/javascripts/webshims/shims/combos/11.js +32 -15
  9. data/vendor/assets/javascripts/webshims/shims/combos/12.js +45 -21
  10. data/vendor/assets/javascripts/webshims/shims/combos/13.js +45 -21
  11. data/vendor/assets/javascripts/webshims/shims/combos/15.js +22 -4
  12. data/vendor/assets/javascripts/webshims/shims/combos/16.js +48 -24
  13. data/vendor/assets/javascripts/webshims/shims/combos/17.js +32 -15
  14. data/vendor/assets/javascripts/webshims/shims/combos/18.js +18 -81
  15. data/vendor/assets/javascripts/webshims/shims/combos/2.js +48 -24
  16. data/vendor/assets/javascripts/webshims/shims/combos/21.js +286 -179
  17. data/vendor/assets/javascripts/webshims/shims/combos/22.js +19 -1
  18. data/vendor/assets/javascripts/webshims/shims/combos/23.js +26 -20
  19. data/vendor/assets/javascripts/webshims/shims/combos/25.js +311 -199
  20. data/vendor/assets/javascripts/webshims/shims/combos/26.js +22 -17
  21. data/vendor/assets/javascripts/webshims/shims/combos/27.js +22 -17
  22. data/vendor/assets/javascripts/webshims/shims/combos/3.js +22 -4
  23. data/vendor/assets/javascripts/webshims/shims/combos/30.js +22 -4
  24. data/vendor/assets/javascripts/webshims/shims/combos/31.js +22 -4
  25. data/vendor/assets/javascripts/webshims/shims/combos/34.js +41 -5
  26. data/vendor/assets/javascripts/webshims/shims/combos/4.js +22 -4
  27. data/vendor/assets/javascripts/webshims/shims/combos/5.js +32 -15
  28. data/vendor/assets/javascripts/webshims/shims/combos/6.js +32 -15
  29. data/vendor/assets/javascripts/webshims/shims/combos/7.js +48 -24
  30. data/vendor/assets/javascripts/webshims/shims/combos/8.js +48 -24
  31. data/vendor/assets/javascripts/webshims/shims/combos/9.js +54 -19
  32. data/vendor/assets/javascripts/webshims/shims/combos/98.js +24 -7
  33. data/vendor/assets/javascripts/webshims/shims/combos/99.js +24 -7
  34. data/vendor/assets/javascripts/webshims/shims/dom-extend.js +22 -4
  35. data/vendor/assets/javascripts/webshims/shims/es5.js +3 -1
  36. data/vendor/assets/javascripts/webshims/shims/es6.js +1 -5
  37. data/vendor/assets/javascripts/webshims/shims/filereader.js +22 -17
  38. data/vendor/assets/javascripts/webshims/shims/form-number-date-ui.js +32 -15
  39. data/vendor/assets/javascripts/webshims/shims/forms-picker.js +18 -8
  40. data/vendor/assets/javascripts/webshims/shims/i18n/formcfg-fa.js +1 -1
  41. data/vendor/assets/javascripts/webshims/shims/jme/controls.css +11 -0
  42. data/vendor/assets/javascripts/webshims/shims/jme/controls.scss +16 -0
  43. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols-lazy.js +3 -20
  44. data/vendor/assets/javascripts/webshims/shims/jme/mediacontrols.js +24 -7
  45. data/vendor/assets/javascripts/webshims/shims/mediaelement-core.js +26 -20
  46. data/vendor/assets/javascripts/webshims/shims/mediaelement-debug.js +9 -1
  47. data/vendor/assets/javascripts/webshims/shims/mediaelement-jaris.js +267 -178
  48. data/vendor/assets/javascripts/webshims/shims/picture.js +18 -81
  49. data/vendor/assets/javascripts/webshims/shims/plugins/jquery.ui.position.js +1 -9
  50. data/vendor/assets/javascripts/webshims/shims/sizzle.js +1 -8
  51. data/vendor/assets/javascripts/webshims/shims/styles/forms-ext.css +4 -0
  52. data/vendor/assets/javascripts/webshims/shims/styles/scss/forms-ext.scss +5 -0
  53. data/vendor/assets/javascripts/webshims/shims/styles/shim-ext.css +4 -0
  54. data/vendor/assets/javascripts/webshims/shims/swf/JarisFLVPlayer.swf +0 -0
  55. data/vendor/assets/javascripts/webshims/shims/track.js +19 -1
  56. data/vendor/assets/javascripts/webshims/shims/url.js +316 -0
  57. data/vendor/assets/javascripts/webshims/shims/usermedia-core.js +28 -0
  58. data/vendor/assets/javascripts/webshims/shims/usermedia-shim.js +179 -0
  59. metadata +5 -3
  60. data/vendor/assets/javascripts/webshims/extras/modernizr-custom.js +0 -511
@@ -0,0 +1,28 @@
1
+ webshim.register('usermedia-core', function($, webshim, window, document, undefined, options){
2
+ "use strict";
3
+
4
+ var srcObjectName = webshim.prefixed('srcObject', document.createElement('video'));
5
+ var addUnPrefixed = function(){
6
+ navigator.getUserMedia = navigator[webshim.prefixed('getUserMedia', navigator)];
7
+ };
8
+ if(srcObjectName != 'srcObject'){
9
+ var hasURL = !!(window.URL && URL.createObjectURL);
10
+ webshim.defineNodeNamesProperty(['audio', 'video'], 'srcObject', {
11
+ prop: {
12
+ get: function(){
13
+ return this[srcObjectName] || null;
14
+ },
15
+ set: function(stream){
16
+ if(srcObjectName){
17
+ $.prop(this, srcObjectName, stream);
18
+ } else {
19
+ $.prop(this, 'src', hasURL ? URL.createObjectURL(stream) : stream);
20
+ }
21
+ }
22
+ }
23
+ });
24
+ }
25
+
26
+
27
+ webshim.ready(webshim.modules["usermedia-shim"].loaded ? 'usermedia-api' : 'usermedia-shim', addUnPrefixed);
28
+ });
@@ -0,0 +1,179 @@
1
+ webshim.register('usermedia-shim', function($, webshim, window, document, undefined, options){
2
+ "use strict";
3
+ var addMediaAPI;
4
+ var streamUrlPrefix = 'webshimstream';
5
+ var id = 0;
6
+ var streams = {};
7
+ var streamCb = {};
8
+ var hasSwf = swfmini.hasFlashPlayerVersion('11.3');
9
+ var mediaOptions = webshim.cfg.mediaelement;
10
+ var mediaelement = webshim.mediaelement;
11
+ var flashEvents = {
12
+ NOT_SUPPORTED_ERROR: 1,
13
+ PERMISSION_DENIED: 1,
14
+ //not implemented yet
15
+ MANDATORY_UNSATISFIED_ERROR: 1,
16
+ onUserSuccess: 1
17
+ };
18
+ var noSource = function(){
19
+ return !$.prop(this, 'currentSrc') && !mediaelement.srces(this).length;
20
+ };
21
+
22
+ function wsGetUserMedia(constraints, successCb, failCb){
23
+ if(hasSwf){
24
+ if(!webshim.mediaelement.createSWF){
25
+ webshim.loader.loadList(['swfmini-embed']);
26
+ webshim.mediaelement.loadSwf = true;
27
+ webshim.reTest(['mediaelement-jaris'], true);
28
+ webshim.ready('mediaelement-jaris', function(){
29
+ createMediaRequest(constraints, successCb, failCb);
30
+ });
31
+ } else {
32
+ createMediaRequest(constraints, successCb, failCb);
33
+ }
34
+ } else {
35
+ failCb({name: 'NOT_SUPPORTED_ERROR'});
36
+ }
37
+ }
38
+
39
+ function createMediaRequest(constraints, successCb, failCb){
40
+ var src;
41
+ var media = getMediaCandidate();
42
+ if(!media){return;}
43
+
44
+ id++;
45
+ src = 'webshimstream:stream'+id;
46
+
47
+ streamCb[src] = {
48
+ src: src,
49
+ success: successCb,
50
+ fail: failCb
51
+ };
52
+
53
+ addMediaAPI();
54
+ mediaelement.createSWF(media, {srcProp: src, streamrequest: true, type: 'jarisplayer/stream'});
55
+ }
56
+
57
+
58
+
59
+ function getMediaCandidate(){
60
+ var $media = $('video');
61
+ $media = $media.filter('.ws-usermedia');
62
+ if(!$media.length){
63
+ $media = $media.end();
64
+ }
65
+ if($media.length != 1){
66
+ $media = $media.filter(noSource);
67
+ }
68
+ if($media.length != 1){
69
+ webshim.error('for getUserMedia an empty video element has to be already in the DOM. If you provide multiple empty videos. please mark your suggested video using the "ws-usermedia" class.');
70
+ }
71
+ return $media[0];
72
+ }
73
+
74
+
75
+ function LocalMediaStream(data, api, id){
76
+ webshim.defineProperties(this, {
77
+ _swf: {
78
+ value: api,
79
+ enumerable: false
80
+ },
81
+ _data: {
82
+ value: data,
83
+ enumerable: false
84
+ },
85
+ _wsStreamId: {
86
+ value: id,
87
+ enumerable: false
88
+ }
89
+ });
90
+ }
91
+
92
+
93
+
94
+ LocalMediaStream.prototype = {
95
+ currentTime: 0,
96
+ stop: function(){
97
+ mediaelement.queueSwfMethod(this._data._elem, 'api_detach', [], this._data);
98
+ },
99
+ getAudioTracks: $.noop,
100
+ getVideoTracks: $.noop
101
+ };
102
+
103
+
104
+ webshim.usermedia = {
105
+ attach: function(elem, canPlaySrc, data){
106
+ if(data._usermedia == canPlaySrc.srcProp){
107
+ mediaelement.queueSwfMethod(data._elem, 'api_attach', [], data);
108
+ $(data._elem).trigger('loadstart');
109
+ } else {
110
+ webshim.error('something went wrong');
111
+ }
112
+ },
113
+ request: function(elem, canPlaySrc, data){
114
+ data._usermedia = canPlaySrc.srcProp;
115
+ if(!options.inline && !$(elem).hasClass('ws-inlineusermedia')){
116
+ $(data.api).css({position: 'fixed', top: 0, left: 0, width: '100%', height: 150, zIndex: '999999'});
117
+ } else {
118
+ $(data.api).css({position: 'relative', zIndex: '999999'});
119
+ }
120
+ }
121
+ };
122
+
123
+ URL._nativeCreateObjectURL = URL.createObjectURL;
124
+ URL._nativeRevokeObjectURL = URL.revokeObjectURL;
125
+
126
+ URL.createObjectURL = function(stream){
127
+
128
+ var url = '';
129
+ if(URL._nativeCreateObjectURL && !stream._wsStreamId){
130
+ url = URL._nativeCreateObjectURL(stream);
131
+ } else if(stream._wsStreamId) {
132
+ url = stream._wsStreamId;
133
+ streams[url] = stream;
134
+ }
135
+ return url;
136
+ };
137
+
138
+ URL.revokeObjectURL = function(url){
139
+ if(streams[url]){
140
+ delete streams[url];
141
+ }
142
+ if(URL._nativeRevokeObjectURL){
143
+ return URL._nativeRevokeObjectURL(url);
144
+ }
145
+ };
146
+ webshim.usermediastreams = streams;
147
+
148
+ addMediaAPI = function(){
149
+ if(!webshim.mediaelement.createSWF){return;}
150
+ addMediaAPI = $.noop;
151
+ var revert = function(data){
152
+ setTimeout(function(){
153
+ $(data.api).css({position: '', top: '', left: '', width: '', height: '', zIndex: ''});
154
+ if($.prop(data._elem, 'controls')){
155
+ $.prop(data._elem, 'controls', true);
156
+ }
157
+ }, 50);
158
+ };
159
+ var fail = function(jaris, data){
160
+ revert(data);
161
+ streamCb[data._usermedia].fail({name: jaris.type});
162
+ };
163
+ $.extend(mediaelement.onEvent, {
164
+ NOT_SUPPORTED_ERROR: fail,
165
+ PERMISSION_DENIED: fail,
166
+ //not implemented yet
167
+ MANDATORY_UNSATISFIED_ERROR: fail,
168
+ onUserSuccess: function(jaris, data){
169
+ revert(data);
170
+ streamCb[data._usermedia].success(new LocalMediaStream(data, data.api, data._usermedia));
171
+ }
172
+ });
173
+ };
174
+ webshim.ready('mediaelement-jaris', addMediaAPI);
175
+
176
+ webshim.getUserMedia = wsGetUserMedia;
177
+ navigator.wsGetUserMedia = wsGetUserMedia;
178
+ webshim.isReady('usermedia-api', true);
179
+ });
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webshims-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.5
4
+ version: 1.14.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Reese
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-19 00:00:00.000000000 Z
11
+ date: 2014-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -40,7 +40,6 @@ files:
40
40
  - lib/webshims-rails.rb
41
41
  - lib/webshims-rails/version.rb
42
42
  - readme.textile
43
- - vendor/assets/javascripts/webshims/extras/modernizr-custom.js
44
43
  - vendor/assets/javascripts/webshims/polyfiller.js
45
44
  - vendor/assets/javascripts/webshims/shims/FlashCanvas/canvas2png.js
46
45
  - vendor/assets/javascripts/webshims/shims/FlashCanvas/flashcanvas.js
@@ -198,6 +197,9 @@ files:
198
197
  - vendor/assets/javascripts/webshims/shims/swfmini.js
199
198
  - vendor/assets/javascripts/webshims/shims/track-ui.js
200
199
  - vendor/assets/javascripts/webshims/shims/track.js
200
+ - vendor/assets/javascripts/webshims/shims/url.js
201
+ - vendor/assets/javascripts/webshims/shims/usermedia-core.js
202
+ - vendor/assets/javascripts/webshims/shims/usermedia-shim.js
201
203
  - webshims-rails.gemspec
202
204
  homepage: https://github.com/whatcould/webshims-rails
203
205
  licenses:
@@ -1,511 +0,0 @@
1
- /* Modernizr 2.7.1 (Custom Build) | MIT & BSD
2
- * Build: http://modernizr.com/download/#-canvas-audio-video-input-inputtypes-geolocation-shiv-addtest-prefixed-testprop-testallprops-prefixes-domprefixes
3
- */
4
- ;
5
-
6
-
7
-
8
- window.Modernizr = (function( window, document, undefined ) {
9
-
10
- var version = '2.7.1',
11
-
12
- Modernizr = {},
13
-
14
-
15
- docElement = document.documentElement,
16
-
17
- mod = 'modernizr',
18
- modElem = document.createElement(mod),
19
- mStyle = modElem.style,
20
-
21
- inputElem = document.createElement('input') ,
22
-
23
- smile = ':)',
24
-
25
- toString = {}.toString,
26
-
27
- prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
28
-
29
-
30
-
31
- omPrefixes = 'Webkit Moz O ms',
32
-
33
- cssomPrefixes = omPrefixes.split(' '),
34
-
35
- domPrefixes = omPrefixes.toLowerCase().split(' '),
36
-
37
-
38
- tests = {},
39
- inputs = {},
40
- attrs = {},
41
-
42
- classes = [],
43
-
44
- slice = classes.slice,
45
-
46
- featureName,
47
-
48
-
49
-
50
- _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
51
-
52
- if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
53
- hasOwnProp = function (object, property) {
54
- return _hasOwnProperty.call(object, property);
55
- };
56
- }
57
- else {
58
- hasOwnProp = function (object, property) {
59
- return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
60
- };
61
- }
62
-
63
-
64
- if (!Function.prototype.bind) {
65
- Function.prototype.bind = function bind(that) {
66
-
67
- var target = this;
68
-
69
- if (typeof target != "function") {
70
- throw new TypeError();
71
- }
72
-
73
- var args = slice.call(arguments, 1),
74
- bound = function () {
75
-
76
- if (this instanceof bound) {
77
-
78
- var F = function(){};
79
- F.prototype = target.prototype;
80
- var self = new F();
81
-
82
- var result = target.apply(
83
- self,
84
- args.concat(slice.call(arguments))
85
- );
86
- if (Object(result) === result) {
87
- return result;
88
- }
89
- return self;
90
-
91
- } else {
92
-
93
- return target.apply(
94
- that,
95
- args.concat(slice.call(arguments))
96
- );
97
-
98
- }
99
-
100
- };
101
-
102
- return bound;
103
- };
104
- }
105
-
106
- function setCss( str ) {
107
- mStyle.cssText = str;
108
- }
109
-
110
- function setCssAll( str1, str2 ) {
111
- return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
112
- }
113
-
114
- function is( obj, type ) {
115
- return typeof obj === type;
116
- }
117
-
118
- function contains( str, substr ) {
119
- return !!~('' + str).indexOf(substr);
120
- }
121
-
122
- function testProps( props, prefixed ) {
123
- for ( var i in props ) {
124
- var prop = props[i];
125
- if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
126
- return prefixed == 'pfx' ? prop : true;
127
- }
128
- }
129
- return false;
130
- }
131
-
132
- function testDOMProps( props, obj, elem ) {
133
- for ( var i in props ) {
134
- var item = obj[props[i]];
135
- if ( item !== undefined) {
136
-
137
- if (elem === false) return props[i];
138
-
139
- if (is(item, 'function')){
140
- return item.bind(elem || obj);
141
- }
142
-
143
- return item;
144
- }
145
- }
146
- return false;
147
- }
148
-
149
- function testPropsAll( prop, prefixed, elem ) {
150
-
151
- var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
152
- props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
153
-
154
- if(is(prefixed, "string") || is(prefixed, "undefined")) {
155
- return testProps(props, prefixed);
156
-
157
- } else {
158
- props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
159
- return testDOMProps(props, prefixed, elem);
160
- }
161
- }
162
-
163
-
164
-
165
- tests['canvas'] = function() {
166
- var elem = document.createElement('canvas');
167
- return !!(elem.getContext && elem.getContext('2d'));
168
- }; tests['geolocation'] = function() {
169
- return 'geolocation' in navigator;
170
- };
171
-
172
-
173
- tests['video'] = function() {
174
- var elem = document.createElement('video'),
175
- bool = false;
176
-
177
- try {
178
- if ( bool = !!elem.canPlayType ) {
179
- bool = new Boolean(bool);
180
- bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,'');
181
-
182
- bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
183
-
184
- bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
185
- }
186
-
187
- } catch(e) { }
188
-
189
- return bool;
190
- };
191
-
192
- tests['audio'] = function() {
193
- var elem = document.createElement('audio'),
194
- bool = false;
195
-
196
- try {
197
- if ( bool = !!elem.canPlayType ) {
198
- bool = new Boolean(bool);
199
- bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
200
- bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,'');
201
-
202
- bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,'');
203
- bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
204
- elem.canPlayType('audio/aac;')) .replace(/^no$/,'');
205
- }
206
- } catch(e) { }
207
-
208
- return bool;
209
- }; function webforms() {
210
- Modernizr['input'] = (function( props ) {
211
- for ( var i = 0, len = props.length; i < len; i++ ) {
212
- attrs[ props[i] ] = !!(props[i] in inputElem);
213
- }
214
- if (attrs.list){
215
- attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
216
- }
217
- return attrs;
218
- })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
219
- Modernizr['inputtypes'] = (function(props) {
220
-
221
- for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
222
-
223
- inputElem.setAttribute('type', inputElemType = props[i]);
224
- bool = inputElem.type !== 'text';
225
-
226
- if ( bool ) {
227
-
228
- inputElem.value = smile;
229
- inputElem.style.cssText = 'position:absolute;visibility:hidden;';
230
-
231
- if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
232
-
233
- docElement.appendChild(inputElem);
234
- defaultView = document.defaultView;
235
-
236
- bool = defaultView.getComputedStyle &&
237
- defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
238
- (inputElem.offsetHeight !== 0);
239
-
240
- docElement.removeChild(inputElem);
241
-
242
- } else if ( /^(search|tel)$/.test(inputElemType) ){
243
- } else if ( /^(url|email)$/.test(inputElemType) ) {
244
- bool = inputElem.checkValidity && inputElem.checkValidity() === false;
245
-
246
- } else {
247
- bool = inputElem.value != smile;
248
- }
249
- }
250
-
251
- inputs[ props[i] ] = !!bool;
252
- }
253
- return inputs;
254
- })('search tel url email datetime date month week time datetime-local number range color'.split(' '));
255
- }
256
- for ( var feature in tests ) {
257
- if ( hasOwnProp(tests, feature) ) {
258
- featureName = feature.toLowerCase();
259
- Modernizr[featureName] = tests[feature]();
260
-
261
- classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
262
- }
263
- }
264
-
265
- Modernizr.input || webforms();
266
-
267
-
268
- Modernizr.addTest = function ( feature, test ) {
269
- if ( typeof feature == 'object' ) {
270
- for ( var key in feature ) {
271
- if ( hasOwnProp( feature, key ) ) {
272
- Modernizr.addTest( key, feature[ key ] );
273
- }
274
- }
275
- } else {
276
-
277
- feature = feature.toLowerCase();
278
-
279
- if ( Modernizr[feature] !== undefined ) {
280
- return Modernizr;
281
- }
282
-
283
- test = typeof test == 'function' ? test() : test;
284
-
285
- if (typeof enableClasses !== "undefined" && enableClasses) {
286
- docElement.className += ' ' + (test ? '' : 'no-') + feature;
287
- }
288
- Modernizr[feature] = test;
289
-
290
- }
291
-
292
- return Modernizr;
293
- };
294
-
295
-
296
- setCss('');
297
- modElem = inputElem = null;
298
-
299
- ;(function(window, document) {
300
- var version = '3.7.0';
301
-
302
- var options = window.html5 || {};
303
-
304
- var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
305
-
306
- var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
307
-
308
- var supportsHtml5Styles;
309
-
310
- var expando = '_html5shiv';
311
-
312
- var expanID = 0;
313
-
314
- var expandoData = {};
315
-
316
- var supportsUnknownElements;
317
-
318
- (function() {
319
- try {
320
- var a = document.createElement('a');
321
- a.innerHTML = '<xyz></xyz>';
322
- supportsHtml5Styles = ('hidden' in a);
323
-
324
- supportsUnknownElements = a.childNodes.length == 1 || (function() {
325
- (document.createElement)('a');
326
- var frag = document.createDocumentFragment();
327
- return (
328
- typeof frag.cloneNode == 'undefined' ||
329
- typeof frag.createDocumentFragment == 'undefined' ||
330
- typeof frag.createElement == 'undefined'
331
- );
332
- }());
333
- } catch(e) {
334
- supportsHtml5Styles = true;
335
- supportsUnknownElements = true;
336
- }
337
-
338
- }());
339
-
340
- function addStyleSheet(ownerDocument, cssText) {
341
- var p = ownerDocument.createElement('p'),
342
- parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
343
-
344
- p.innerHTML = 'x<style>' + cssText + '</style>';
345
- return parent.insertBefore(p.lastChild, parent.firstChild);
346
- }
347
-
348
- function getElements() {
349
- var elements = html5.elements;
350
- return typeof elements == 'string' ? elements.split(' ') : elements;
351
- }
352
-
353
- function getExpandoData(ownerDocument) {
354
- var data = expandoData[ownerDocument[expando]];
355
- if (!data) {
356
- data = {};
357
- expanID++;
358
- ownerDocument[expando] = expanID;
359
- expandoData[expanID] = data;
360
- }
361
- return data;
362
- }
363
-
364
- function createElement(nodeName, ownerDocument, data){
365
- if (!ownerDocument) {
366
- ownerDocument = document;
367
- }
368
- if(supportsUnknownElements){
369
- return ownerDocument.createElement(nodeName);
370
- }
371
- if (!data) {
372
- data = getExpandoData(ownerDocument);
373
- }
374
- var node;
375
-
376
- if (data.cache[nodeName]) {
377
- node = data.cache[nodeName].cloneNode();
378
- } else if (saveClones.test(nodeName)) {
379
- node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
380
- } else {
381
- node = data.createElem(nodeName);
382
- }
383
-
384
- return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
385
- }
386
-
387
- function createDocumentFragment(ownerDocument, data){
388
- if (!ownerDocument) {
389
- ownerDocument = document;
390
- }
391
- if(supportsUnknownElements){
392
- return ownerDocument.createDocumentFragment();
393
- }
394
- data = data || getExpandoData(ownerDocument);
395
- var clone = data.frag.cloneNode(),
396
- i = 0,
397
- elems = getElements(),
398
- l = elems.length;
399
- for(;i<l;i++){
400
- clone.createElement(elems[i]);
401
- }
402
- return clone;
403
- }
404
-
405
- function shivMethods(ownerDocument, data) {
406
- if (!data.cache) {
407
- data.cache = {};
408
- data.createElem = ownerDocument.createElement;
409
- data.createFrag = ownerDocument.createDocumentFragment;
410
- data.frag = data.createFrag();
411
- }
412
-
413
-
414
- ownerDocument.createElement = function(nodeName) {
415
- if (!html5.shivMethods) {
416
- return data.createElem(nodeName);
417
- }
418
- return createElement(nodeName, ownerDocument, data);
419
- };
420
-
421
- ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
422
- 'var n=f.cloneNode(),c=n.createElement;' +
423
- 'h.shivMethods&&(' +
424
- getElements().join().replace(/[\w\-]+/g, function(nodeName) {
425
- data.createElem(nodeName);
426
- data.frag.createElement(nodeName);
427
- return 'c("' + nodeName + '")';
428
- }) +
429
- ');return n}'
430
- )(html5, data.frag);
431
- }
432
-
433
- function shivDocument(ownerDocument) {
434
- if (!ownerDocument) {
435
- ownerDocument = document;
436
- }
437
- var data = getExpandoData(ownerDocument);
438
-
439
- if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
440
- data.hasCSS = !!addStyleSheet(ownerDocument,
441
- 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
442
- 'mark{background:#FF0;color:#000}' +
443
- 'template{display:none}'
444
- );
445
- }
446
- if (!supportsUnknownElements) {
447
- shivMethods(ownerDocument, data);
448
- }
449
- return ownerDocument;
450
- }
451
-
452
- var html5 = {
453
-
454
- 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
455
-
456
- 'version': version,
457
-
458
- 'shivCSS': (options.shivCSS !== false),
459
-
460
- 'supportsUnknownElements': supportsUnknownElements,
461
-
462
- 'shivMethods': (options.shivMethods !== false),
463
-
464
- 'type': 'default',
465
-
466
- 'shivDocument': shivDocument,
467
-
468
- createElement: createElement,
469
-
470
- createDocumentFragment: createDocumentFragment
471
- };
472
-
473
- window.html5 = html5;
474
-
475
- shivDocument(document);
476
-
477
- }(this, document));
478
-
479
- Modernizr._version = version;
480
-
481
- Modernizr._prefixes = prefixes;
482
- Modernizr._domPrefixes = domPrefixes;
483
- Modernizr._cssomPrefixes = cssomPrefixes;
484
-
485
-
486
-
487
- Modernizr.testProp = function(prop){
488
- return testProps([prop]);
489
- };
490
-
491
- Modernizr.testAllProps = testPropsAll;
492
-
493
-
494
- Modernizr.prefixed = function(prop, obj, elem){
495
- if(!obj) {
496
- return testPropsAll(prop, 'pfx');
497
- } else {
498
- return testPropsAll(prop, obj, elem);
499
- }
500
- };
501
-
502
-
503
-
504
- return Modernizr;
505
-
506
- })(this, this.document);
507
- ;
508
- if(window.console){
509
- console.log('webshim no longer depends on Modernizr. You can still use for feature detection of course.');
510
- }
511
-