webshims-rails 1.14.5 → 1.14.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
-