modernizr_rails 2.5.3 → 2.6.2

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d3cc6c147b9d0b325b94df848ddd32e26bd0e686
4
+ data.tar.gz: c40cb299fd482f4ff745470e2589ebb5831aec5e
5
+ SHA512:
6
+ metadata.gz: 5cec9ac7074027a29da0db745016b5eed8a64b16353008e33e744eae94de26fbf1d4bc80c218fbbd5628a10cac403fcd209536fc528019b0c13ebec7b0d509bc
7
+ data.tar.gz: 2de2147295a721012de3e25aa8faeed88e074535d6fd3c7a420e93c28e19865c72be860c830016a50baa0d3c0c4d291992718ca8afe0a7249ba40c947eae2b2c
data/README.md CHANGED
@@ -8,7 +8,7 @@ The `modernizr_rails` gem integrates the `Modernizr` with the Rails asset pipeli
8
8
 
9
9
  Add this line to your application's Gemfile:
10
10
 
11
- gem 'modernizr_rails', :require => 'modernizr-rails'
11
+ gem 'modernizr_rails'
12
12
 
13
13
  And then execute:
14
14
 
@@ -20,10 +20,18 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- Add to your `app/assets/stylesheets/application.js`
23
+ Add this line to your `app/assets/stylesheets/application.js` to compile as a part of application.js
24
24
 
25
25
  //= require modernizr
26
26
 
27
+ Or add this line to your `config/environments/production.rb` to compile as a standalone javascript file
28
+
29
+ config.assets.precompile += %w( modernizr.js )
30
+
31
+ And include it in your layout like `app/views/layouts/application.html.erb`
32
+
33
+ <%= javascript_include_tag 'modernizr' %>
34
+
27
35
  ## Contributing
28
36
 
29
37
  1. Fork it
@@ -6,12 +6,12 @@ class SourceFile < Thor
6
6
  desc 'fetch source files', 'fetch source files from GitHub'
7
7
  def fetch
8
8
  self.destination_root = 'vendor/assets'
9
- remote = 'https://raw.github.com/Modernizr/Modernizr'
10
- get "#{remote}/master/modernizr.js", 'javascripts/modernizr.js'
9
+ remote = 'http://modernizr.com/downloads/'
10
+ get "#{remote}/modernizr-latest.js", 'javascripts/modernizr.js'
11
11
  inside destination_root do
12
12
  version = File.read('javascripts/modernizr.js').match(/version\s=\s'([\d|\.]+)'/)[1]
13
- gsub_file '../../lib/modernizr-rails/version.rb', /VERSION\s=\s'(\d|\.)+'$/ do |match|
14
- %Q{VERSION = '#{version}'}
13
+ gsub_file '../../lib/modernizr-rails/version.rb', /MODERNIZR_VERSION\s=\s'(\d|\.)+'$/ do |match|
14
+ %Q{MODERNIZR_VERSION = '#{version}'}
15
15
  end
16
16
  end
17
17
  end
@@ -1,6 +1,6 @@
1
1
  module Modernizr
2
2
  module Rails
3
- VERSION = '2.5.3'
4
- MODERNIZR_VERSION = '2.5.3'
3
+ VERSION = '2.6.2'
4
+ MODERNIZR_VERSION = '2.6.2'
5
5
  end
6
6
  end
@@ -0,0 +1 @@
1
+ require 'modernizr-rails'
@@ -15,9 +15,6 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ['lib']
16
16
  gem.version = Modernizr::Rails::VERSION
17
17
 
18
- gem.add_dependency 'railties', '~> 3.0'
19
- gem.add_dependency 'thor', '~> 0.14'
20
- gem.add_development_dependency 'bundler', '~> 1.0'
21
- gem.add_development_dependency 'rails', '~> 3.0'
22
- gem.add_development_dependency 'sass', '~> 3.1'
18
+ gem.add_dependency 'railties', '>= 3.0'
19
+ gem.add_dependency 'thor', '~> 0.14'
23
20
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Modernizr v2.5.3
2
+ * Modernizr v2.6.2
3
3
  * www.modernizr.com
4
4
  *
5
5
  * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
@@ -24,7 +24,7 @@
24
24
 
25
25
  window.Modernizr = (function( window, document, undefined ) {
26
26
 
27
- var version = '2.5.3',
27
+ var version = '2.6.2',
28
28
 
29
29
  Modernizr = {},
30
30
 
@@ -96,12 +96,12 @@ window.Modernizr = (function( window, document, undefined ) {
96
96
  // Inject element with style element and some CSS rules
97
97
  injectElementWithStyles = function( rule, callback, nodes, testnames ) {
98
98
 
99
- var style, ret, node,
99
+ var style, ret, node, docOverflow,
100
100
  div = document.createElement('div'),
101
101
  // After page load injecting a fake body doesn't work so check if body exists
102
- body = document.body,
102
+ body = document.body,
103
103
  // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.
104
- fakeBody = body ? body : document.createElement('body');
104
+ fakeBody = body || document.createElement('body');
105
105
 
106
106
  if ( parseInt(nodes, 10) ) {
107
107
  // In order not to give false positives we create a node for each test
@@ -118,21 +118,30 @@ window.Modernizr = (function( window, document, undefined ) {
118
118
  // with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
119
119
  // msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
120
120
  // Documents served as xml will throw if using &shy; so use xml friendly encoded version. See issue #277
121
- style = ['&#173;','<style>', rule, '</style>'].join('');
121
+ style = ['&#173;','<style id="s', mod, '">', rule, '</style>'].join('');
122
122
  div.id = mod;
123
123
  // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
124
124
  // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
125
125
  (body ? div : fakeBody).innerHTML += style;
126
126
  fakeBody.appendChild(div);
127
- if(!body){
127
+ if ( !body ) {
128
128
  //avoid crashing IE8, if background image is used
129
- fakeBody.style.background = "";
129
+ fakeBody.style.background = '';
130
+ //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
131
+ fakeBody.style.overflow = 'hidden';
132
+ docOverflow = docElement.style.overflow;
133
+ docElement.style.overflow = 'hidden';
130
134
  docElement.appendChild(fakeBody);
131
135
  }
132
136
 
133
137
  ret = callback(div, rule);
134
138
  // If this is done after page load we don't want to remove the body so check if body exists
135
- !body ? fakeBody.parentNode.removeChild(fakeBody) : div.parentNode.removeChild(div);
139
+ if ( !body ) {
140
+ fakeBody.parentNode.removeChild(fakeBody);
141
+ docElement.style.overflow = docOverflow;
142
+ } else {
143
+ div.parentNode.removeChild(div);
144
+ }
136
145
 
137
146
  return !!ret;
138
147
 
@@ -165,10 +174,14 @@ window.Modernizr = (function( window, document, undefined ) {
165
174
 
166
175
 
167
176
  /*>>hasevent*/
168
- /**
169
- * isEventSupported determines if a given element supports the given event
170
- * function from yura.thinkweb2.com/isEventSupported/
171
- */
177
+ //
178
+ // isEventSupported determines if a given element supports the given event
179
+ // kangax.github.com/iseventsupported/
180
+ //
181
+ // The following results are known incorrects:
182
+ // Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative
183
+ // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333
184
+ // ...
172
185
  isEventSupported = (function() {
173
186
 
174
187
  var TAGNAMES = {
@@ -212,23 +225,21 @@ window.Modernizr = (function( window, document, undefined ) {
212
225
  // TODO :: Add flag for hasownprop ? didn't last time
213
226
 
214
227
  // hasOwnProperty shim by kangax needed for Safari 2.0 support
215
- _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty;
228
+ _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
216
229
 
217
230
  if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
218
- hasOwnProperty = function (object, property) {
231
+ hasOwnProp = function (object, property) {
219
232
  return _hasOwnProperty.call(object, property);
220
233
  };
221
234
  }
222
235
  else {
223
- hasOwnProperty = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
236
+ hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
224
237
  return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
225
238
  };
226
239
  }
227
240
 
228
- // TODO :: Add function proto bind
229
- // Taken from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
230
- // ES-5 15.3.4.5
231
- // http://es5.github.com/#x15.3.4.5
241
+ // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
242
+ // es5.github.com/#x15.3.4.5
232
243
 
233
244
  if (!Function.prototype.bind) {
234
245
  Function.prototype.bind = function bind(that) {
@@ -246,7 +257,7 @@ window.Modernizr = (function( window, document, undefined ) {
246
257
 
247
258
  var F = function(){};
248
259
  F.prototype = target.prototype;
249
- var self = new F;
260
+ var self = new F();
250
261
 
251
262
  var result = target.apply(
252
263
  self,
@@ -301,15 +312,30 @@ window.Modernizr = (function( window, document, undefined ) {
301
312
  }
302
313
 
303
314
  /*>>testprop*/
304
- /**
305
- * testProps is a generic CSS / DOM property test; if a browser supports
306
- * a certain property, it won't return undefined for it.
307
- * A supported CSS property returns empty string when its not yet set.
308
- */
315
+
316
+ // testProps is a generic CSS / DOM property test.
317
+
318
+ // In testing support for a given CSS property, it's legit to test:
319
+ // `elem.style[styleName] !== undefined`
320
+ // If the property is supported it will return an empty string,
321
+ // if unsupported it will return undefined.
322
+
323
+ // We'll take advantage of this quick test and skip setting a style
324
+ // on our modernizr element, but instead just testing undefined vs
325
+ // empty string.
326
+
327
+ // Because the testing of the CSS property names (with "-", as
328
+ // opposed to the camelCase DOM properties) is non-portable and
329
+ // non-standard but works in WebKit and IE (but not Gecko or Opera),
330
+ // we explicitly reject properties with dashes so that authors
331
+ // developing in WebKit or IE first don't end up with
332
+ // browser-specific content by accident.
333
+
309
334
  function testProps( props, prefixed ) {
310
335
  for ( var i in props ) {
311
- if ( mStyle[ props[i] ] !== undefined ) {
312
- return prefixed == 'pfx' ? props[i] : true;
336
+ var prop = props[i];
337
+ if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
338
+ return prefixed == 'pfx' ? prop : true;
313
339
  }
314
340
  }
315
341
  return false;
@@ -351,7 +377,7 @@ window.Modernizr = (function( window, document, undefined ) {
351
377
  */
352
378
  function testPropsAll( prop, prefixed, elem ) {
353
379
 
354
- var ucProp = prop.charAt(0).toUpperCase() + prop.substr(1),
380
+ var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
355
381
  props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
356
382
 
357
383
  // did they call .prefixed('boxSizing') or are we just testing a prop?
@@ -366,54 +392,6 @@ window.Modernizr = (function( window, document, undefined ) {
366
392
  }
367
393
  /*>>testallprops*/
368
394
 
369
- /*>>testBundle*/
370
- /**
371
- * testBundle tests a list of CSS features that require element and style injection.
372
- * By bundling them together we can reduce the need to touch the DOM multiple times.
373
- */
374
- var testBundle = (function( styles, tests ) {
375
- var style = styles.join(''),
376
- len = tests.length;
377
-
378
- injectElementWithStyles(style, function( node, rule ) {
379
- var style = document.styleSheets[document.styleSheets.length - 1],
380
- // IE8 will bork if you create a custom build that excludes both fontface and generatedcontent tests.
381
- // So we check for cssRules and that there is a rule available
382
- // More here: github.com/Modernizr/Modernizr/issues/288 & github.com/Modernizr/Modernizr/issues/293
383
- cssText = style ? (style.cssRules && style.cssRules[0] ? style.cssRules[0].cssText : style.cssText || '') : '',
384
- children = node.childNodes, hash = {};
385
-
386
- while ( len-- ) {
387
- hash[children[len].id] = children[len];
388
- }
389
-
390
- /*>>touch*/ Modernizr['touch'] = ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch || (hash['touch'] && hash['touch'].offsetTop) === 9; /*>>touch*/
391
- /*>>csstransforms3d*/ Modernizr['csstransforms3d'] = (hash['csstransforms3d'] && hash['csstransforms3d'].offsetLeft) === 9 && hash['csstransforms3d'].offsetHeight === 3; /*>>csstransforms3d*/
392
- /*>>generatedcontent*/Modernizr['generatedcontent'] = (hash['generatedcontent'] && hash['generatedcontent'].offsetHeight) >= 1; /*>>generatedcontent*/
393
- /*>>fontface*/ Modernizr['fontface'] = /src/i.test(cssText) &&
394
- cssText.indexOf(rule.split(' ')[0]) === 0; /*>>fontface*/
395
- }, len, tests);
396
-
397
- })([
398
- // Pass in styles to be injected into document
399
- /*>>fontface*/ '@font-face {font-family:"font";src:url("https://")}' /*>>fontface*/
400
-
401
- /*>>touch*/ ,['@media (',prefixes.join('touch-enabled),('),mod,')',
402
- '{#touch{top:9px;position:absolute}}'].join('') /*>>touch*/
403
-
404
- /*>>csstransforms3d*/ ,['@media (',prefixes.join('transform-3d),('),mod,')',
405
- '{#csstransforms3d{left:9px;position:absolute;height:3px;}}'].join('')/*>>csstransforms3d*/
406
-
407
- /*>>generatedcontent*/,['#generatedcontent:after{content:"',smile,'";visibility:hidden}'].join('') /*>>generatedcontent*/
408
- ],
409
- [
410
- /*>>fontface*/ 'fontface' /*>>fontface*/
411
- /*>>touch*/ ,'touch' /*>>touch*/
412
- /*>>csstransforms3d*/ ,'csstransforms3d' /*>>csstransforms3d*/
413
- /*>>generatedcontent*/,'generatedcontent' /*>>generatedcontent*/
414
-
415
- ]);/*>>testBundle*/
416
-
417
395
 
418
396
  /**
419
397
  * Tests
@@ -424,13 +402,13 @@ window.Modernizr = (function( window, document, undefined ) {
424
402
  // dev.w3.org/csswg/css3-flexbox
425
403
 
426
404
  tests['flexbox'] = function() {
427
- return testPropsAll('flexOrder');
405
+ return testPropsAll('flexWrap');
428
406
  };
429
407
 
430
408
  // The *old* flexbox
431
409
  // www.w3.org/TR/2009/WD-css3-flexbox-20090723/
432
410
 
433
- tests['flexbox-legacy'] = function() {
411
+ tests['flexboxlegacy'] = function() {
434
412
  return testPropsAll('boxDirection');
435
413
  };
436
414
 
@@ -447,19 +425,13 @@ window.Modernizr = (function( window, document, undefined ) {
447
425
  return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
448
426
  };
449
427
 
450
- // this test initiates a new webgl context.
451
- // webk.it/70117 is tracking a legit feature detect proposal
428
+ // webk.it/70117 is tracking a legit WebGL feature detect proposal
429
+
430
+ // We do a soft detect which may false positive in order to avoid
431
+ // an expensive context creation: bugzil.la/732441
452
432
 
453
433
  tests['webgl'] = function() {
454
- try {
455
- var canvas = document.createElement('canvas'),
456
- ret;
457
- ret = !!(window.WebGLRenderingContext && (canvas.getContext('experimental-webgl') || canvas.getContext('webgl')));
458
- canvas = undefined;
459
- } catch (e){
460
- ret = false;
461
- }
462
- return ret;
434
+ return !!window.WebGLRenderingContext;
463
435
  };
464
436
 
465
437
  /*
@@ -477,32 +449,41 @@ window.Modernizr = (function( window, document, undefined ) {
477
449
  */
478
450
 
479
451
  tests['touch'] = function() {
480
- return Modernizr['touch'];
452
+ var bool;
453
+
454
+ if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
455
+ bool = true;
456
+ } else {
457
+ injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
458
+ bool = node.offsetTop === 9;
459
+ });
460
+ }
461
+
462
+ return bool;
481
463
  };
482
464
 
483
- /**
484
- * geolocation tests for the new Geolocation API specification.
485
- * This test is a standards compliant-only test; for more complete
486
- * testing, including a Google Gears fallback, please see:
487
- * code.google.com/p/geo-location-javascript/
488
- * or view a fallback solution using google's geo API:
489
- * gist.github.com/366184
490
- */
465
+
466
+ // geolocation is often considered a trivial feature detect...
467
+ // Turns out, it's quite tricky to get right:
468
+ //
469
+ // Using !!navigator.geolocation does two things we don't want. It:
470
+ // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
471
+ // 2. Disables page caching in WebKit: webk.it/43956
472
+ //
473
+ // Meanwhile, in Firefox < 8, an about:config setting could expose
474
+ // a false positive that would throw an exception: bugzil.la/688158
475
+
491
476
  tests['geolocation'] = function() {
492
- return !!navigator.geolocation;
477
+ return 'geolocation' in navigator;
493
478
  };
494
479
 
495
- // Per 1.6:
496
- // This used to be Modernizr.crosswindowmessaging but the longer
497
- // name has been deprecated in favor of a shorter and property-matching one.
498
- // The old API is still available in 1.6, but as of 2.0 will throw a warning,
499
- // and in the first release thereafter disappear entirely.
480
+
500
481
  tests['postmessage'] = function() {
501
482
  return !!window.postMessage;
502
483
  };
503
484
 
504
485
 
505
- // Chrome incognito mode used to throw an exception when using openDatabase
486
+ // Chrome incognito mode used to throw an exception when using openDatabase
506
487
  // It doesn't anymore.
507
488
  tests['websqldatabase'] = function() {
508
489
  return !!window.openDatabase;
@@ -513,7 +494,7 @@ window.Modernizr = (function( window, document, undefined ) {
513
494
  // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
514
495
  // For speed, we don't test the legacy (and beta-only) indexedDB
515
496
  tests['indexedDB'] = function() {
516
- return !!testPropsAll("indexedDB",window);
497
+ return !!testPropsAll("indexedDB", window);
517
498
  };
518
499
 
519
500
  // documentMode logic from YUI to filter out IE8 Compat Mode
@@ -536,15 +517,12 @@ window.Modernizr = (function( window, document, undefined ) {
536
517
  return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
537
518
  };
538
519
 
539
- // FIXME: Once FF10 is sunsetted, we can drop prefixed MozWebSocket
540
- // bugzil.la/695635
520
+ // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10
521
+ // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.
522
+ // FF10 still uses prefixes, so check for it until then.
523
+ // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/
541
524
  tests['websockets'] = function() {
542
- for ( var i = -1, len = cssomPrefixes.length; ++i < len; ){
543
- if ( window[cssomPrefixes[i] + 'WebSocket'] ){
544
- return true;
545
- }
546
- }
547
- return 'WebSocket' in window;
525
+ return 'WebSocket' in window || 'MozWebSocket' in window;
548
526
  };
549
527
 
550
528
 
@@ -576,19 +554,13 @@ window.Modernizr = (function( window, document, undefined ) {
576
554
  // If the UA supports multiple backgrounds, there should be three occurrences
577
555
  // of the string "url(" in the return value for elemStyle.background
578
556
 
579
- return /(url\s*\(.*?){3}/.test(mStyle.background);
557
+ return (/(url\s*\(.*?){3}/).test(mStyle.background);
580
558
  };
581
559
 
582
560
 
583
- // In testing support for a given CSS property, it's legit to test:
584
- // `elem.style[styleName] !== undefined`
585
- // If the property is supported it will return an empty string,
586
- // if unsupported it will return undefined.
587
-
588
- // We'll take advantage of this quick test and skip setting a style
589
- // on our modernizr element, but instead just testing undefined vs
590
- // empty string.
591
561
 
562
+ // this will false positive in Opera Mini
563
+ // github.com/Modernizr/Modernizr/issues/396
592
564
 
593
565
  tests['backgroundsize'] = function() {
594
566
  return testPropsAll('backgroundSize');
@@ -627,11 +599,11 @@ window.Modernizr = (function( window, document, undefined ) {
627
599
  // The non-literal . in this regex is intentional:
628
600
  // German Chrome returns this value as 0,55
629
601
  // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
630
- return /^0.55$/.test(mStyle.opacity);
602
+ return (/^0.55$/).test(mStyle.opacity);
631
603
  };
632
604
 
633
605
 
634
- // Note, Android < 4 will pass this test, but can only animate
606
+ // Note, Android < 4 will pass this test, but can only animate
635
607
  // a single property at a time
636
608
  // daneden.me/2011/12/putting-up-with-androids-bullshit/
637
609
  tests['cssanimations'] = function() {
@@ -659,9 +631,9 @@ window.Modernizr = (function( window, document, undefined ) {
659
631
 
660
632
  setCss(
661
633
  // legacy webkit syntax (FIXME: remove when syntax not in use anymore)
662
- (str1 + '-webkit- '.split(' ').join(str2 + str1)
663
- // standard syntax // trailing 'background-image:'
664
- + prefixes.join(str3 + str1)).slice(0, -str1.length)
634
+ (str1 + '-webkit- '.split(' ').join(str2 + str1) +
635
+ // standard syntax // trailing 'background-image:'
636
+ prefixes.join(str3 + str1)).slice(0, -str1.length)
665
637
  );
666
638
 
667
639
  return contains(mStyle.backgroundImage, 'gradient');
@@ -689,8 +661,10 @@ window.Modernizr = (function( window, document, undefined ) {
689
661
  if ( ret && 'webkitPerspective' in docElement.style ) {
690
662
 
691
663
  // Webkit allows this media query to succeed only if the feature is enabled.
692
- // `@media (transform-3d),(-o-transform-3d),(-moz-transform-3d),(-ms-transform-3d),(-webkit-transform-3d),(modernizr){ ... }`
693
- ret = Modernizr['csstransforms3d'];
664
+ // `@media (transform-3d),(-webkit-transform-3d){ ... }`
665
+ injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
666
+ ret = node.offsetLeft === 9 && node.offsetHeight === 3;
667
+ });
694
668
  }
695
669
  return ret;
696
670
  };
@@ -705,15 +679,33 @@ window.Modernizr = (function( window, document, undefined ) {
705
679
  // @font-face detection routine by Diego Perini
706
680
  // javascript.nwbox.com/CSSSupport/
707
681
 
708
- // false positives in WebOS: github.com/Modernizr/Modernizr/issues/342
682
+ // false positives:
683
+ // WebOS github.com/Modernizr/Modernizr/issues/342
684
+ // WP7 github.com/Modernizr/Modernizr/issues/538
709
685
  tests['fontface'] = function() {
710
- return Modernizr['fontface'];
686
+ var bool;
687
+
688
+ injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
689
+ var style = document.getElementById('smodernizr'),
690
+ sheet = style.sheet || style.styleSheet,
691
+ cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
692
+
693
+ bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
694
+ });
695
+
696
+ return bool;
711
697
  };
712
698
  /*>>fontface*/
713
699
 
714
700
  // CSS generated content detection
715
701
  tests['generatedcontent'] = function() {
716
- return Modernizr['generatedcontent'];
702
+ var bool;
703
+
704
+ injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
705
+ bool = node.offsetHeight >= 3;
706
+ });
707
+
708
+ return bool;
717
709
  };
718
710
 
719
711
 
@@ -742,6 +734,7 @@ window.Modernizr = (function( window, document, undefined ) {
742
734
  bool = new Boolean(bool);
743
735
  bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,'');
744
736
 
737
+ // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
745
738
  bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
746
739
 
747
740
  bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
@@ -756,7 +749,7 @@ window.Modernizr = (function( window, document, undefined ) {
756
749
  var elem = document.createElement('audio'),
757
750
  bool = false;
758
751
 
759
- try {
752
+ try {
760
753
  if ( bool = !!elem.canPlayType ) {
761
754
  bool = new Boolean(bool);
762
755
  bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
@@ -766,7 +759,7 @@ window.Modernizr = (function( window, document, undefined ) {
766
759
  // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
767
760
  // bit.ly/iphoneoscodecs
768
761
  bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,'');
769
- bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
762
+ bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
770
763
  elem.canPlayType('audio/aac;')) .replace(/^no$/,'');
771
764
  }
772
765
  } catch(e) { }
@@ -781,7 +774,7 @@ window.Modernizr = (function( window, document, undefined ) {
781
774
  // `('localStorage' in window) && ` test first because otherwise Firefox will
782
775
  // throw bugzil.la/365772 if cookies are disabled
783
776
 
784
- // Also in iOS5 Private Browsing mode, attepting to use localStorage.setItem
777
+ // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
785
778
  // will throw the exception:
786
779
  // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
787
780
  // Peculiarly, getItem and removeItem calls do not throw.
@@ -915,7 +908,7 @@ window.Modernizr = (function( window, document, undefined ) {
915
908
  docElement.removeChild(inputElem);
916
909
 
917
910
  } else if ( /^(search|tel)$/.test(inputElemType) ){
918
- // Spec doesnt define any special parsing or detectable UI
911
+ // Spec doesn't define any special parsing or detectable UI
919
912
  // behaviors so we pass these through as true
920
913
 
921
914
  // Interestingly, opera fails the earlier test, so it doesn't
@@ -925,14 +918,6 @@ window.Modernizr = (function( window, document, undefined ) {
925
918
  // Real url and email support comes with prebaked validation.
926
919
  bool = inputElem.checkValidity && inputElem.checkValidity() === false;
927
920
 
928
- } else if ( /^color$/.test(inputElemType) ) {
929
- // chuck into DOM and force reflow for Opera bug in 11.00
930
- // github.com/Modernizr/Modernizr/issues#issue/159
931
- docElement.appendChild(inputElem);
932
- docElement.offsetWidth;
933
- bool = inputElem.value != smile;
934
- docElement.removeChild(inputElem);
935
-
936
921
  } else {
937
922
  // If the upgraded input compontent rejects the :) text, we got a winner
938
923
  bool = inputElem.value != smile;
@@ -956,7 +941,7 @@ window.Modernizr = (function( window, document, undefined ) {
956
941
  // Run through all tests and detect their support in the current UA.
957
942
  // todo: hypothetically we could be doing an array of tests and use a basic loop here.
958
943
  for ( var feature in tests ) {
959
- if ( hasOwnProperty(tests, feature) ) {
944
+ if ( hasOwnProp(tests, feature) ) {
960
945
  // run the test, throw the return value into the Modernizr,
961
946
  // then based on that boolean, define an appropriate className
962
947
  // and push it into an array of classes we'll join later.
@@ -973,7 +958,6 @@ window.Modernizr = (function( window, document, undefined ) {
973
958
  /*>>webforms*/
974
959
 
975
960
 
976
- /*>>addtest*/
977
961
  /**
978
962
  * addTest allows the user to define their own feature tests
979
963
  * the result will be added onto the Modernizr object,
@@ -985,7 +969,7 @@ window.Modernizr = (function( window, document, undefined ) {
985
969
  Modernizr.addTest = function ( feature, test ) {
986
970
  if ( typeof feature == 'object' ) {
987
971
  for ( var key in feature ) {
988
- if ( hasOwnProperty( feature, key ) ) {
972
+ if ( hasOwnProp( feature, key ) ) {
989
973
  Modernizr.addTest( key, feature[ key ] );
990
974
  }
991
975
  }
@@ -1004,14 +988,15 @@ window.Modernizr = (function( window, document, undefined ) {
1004
988
 
1005
989
  test = typeof test == 'function' ? test() : test;
1006
990
 
1007
- docElement.className += ' ' + (test ? '' : 'no-') + feature;
991
+ if (typeof enableClasses !== "undefined" && enableClasses) {
992
+ docElement.className += ' ' + (test ? '' : 'no-') + feature;
993
+ }
1008
994
  Modernizr[feature] = test;
1009
995
 
1010
996
  }
1011
997
 
1012
998
  return Modernizr; // allow chaining.
1013
999
  };
1014
- /*>>addtest*/
1015
1000
 
1016
1001
 
1017
1002
  // Reset modElem.cssText to nothing to reduce memory footprint.
@@ -1019,42 +1004,54 @@ window.Modernizr = (function( window, document, undefined ) {
1019
1004
  modElem = inputElem = null;
1020
1005
 
1021
1006
  /*>>shiv*/
1022
- /*! HTML5 Shiv v3.4 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */
1007
+ /*! HTML5 Shiv v3.6.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */
1023
1008
  ;(function(window, document) {
1024
-
1009
+ /*jshint evil:true */
1025
1010
  /** Preset options */
1026
1011
  var options = window.html5 || {};
1027
1012
 
1028
1013
  /** Used to skip problem elements */
1029
- var reSkip = /^<|^(?:button|form|map|select|textarea)$/i;
1014
+ var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
1015
+
1016
+ /** Not all elements can be cloned in IE **/
1017
+ 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;
1030
1018
 
1031
1019
  /** Detect whether the browser supports default html5 styles */
1032
1020
  var supportsHtml5Styles;
1033
1021
 
1022
+ /** Name of the expando, to work with multiple documents or to re-shiv one document */
1023
+ var expando = '_html5shiv';
1024
+
1025
+ /** The id for the the documents expando */
1026
+ var expanID = 0;
1027
+
1028
+ /** Cached data for each document */
1029
+ var expandoData = {};
1030
+
1034
1031
  /** Detect whether the browser supports unknown elements */
1035
1032
  var supportsUnknownElements;
1036
1033
 
1037
1034
  (function() {
1038
- var a = document.createElement('a');
1039
-
1040
- a.innerHTML = '<xyz></xyz>';
1041
-
1042
- //if the hidden property is implemented we can assume, that the browser supports HTML5 Styles
1043
- supportsHtml5Styles = ('hidden' in a);
1044
- supportsUnknownElements = a.childNodes.length == 1 || (function() {
1045
- // assign a false positive if unable to shiv
1046
- try {
1047
- (document.createElement)('a');
1048
- } catch(e) {
1049
- return true;
1050
- }
1051
- var frag = document.createDocumentFragment();
1052
- return (
1053
- typeof frag.cloneNode == 'undefined' ||
1054
- typeof frag.createDocumentFragment == 'undefined' ||
1055
- typeof frag.createElement == 'undefined'
1056
- );
1057
- }());
1035
+ try {
1036
+ var a = document.createElement('a');
1037
+ a.innerHTML = '<xyz></xyz>';
1038
+ //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
1039
+ supportsHtml5Styles = ('hidden' in a);
1040
+
1041
+ supportsUnknownElements = a.childNodes.length == 1 || (function() {
1042
+ // assign a false positive if unable to shiv
1043
+ (document.createElement)('a');
1044
+ var frag = document.createDocumentFragment();
1045
+ return (
1046
+ typeof frag.cloneNode == 'undefined' ||
1047
+ typeof frag.createDocumentFragment == 'undefined' ||
1048
+ typeof frag.createElement == 'undefined'
1049
+ );
1050
+ }());
1051
+ } catch(e) {
1052
+ supportsHtml5Styles = true;
1053
+ supportsUnknownElements = true;
1054
+ }
1058
1055
 
1059
1056
  }());
1060
1057
 
@@ -1085,28 +1082,105 @@ window.Modernizr = (function( window, document, undefined ) {
1085
1082
  return typeof elements == 'string' ? elements.split(' ') : elements;
1086
1083
  }
1087
1084
 
1085
+ /**
1086
+ * Returns the data associated to the given document
1087
+ * @private
1088
+ * @param {Document} ownerDocument The document.
1089
+ * @returns {Object} An object of data.
1090
+ */
1091
+ function getExpandoData(ownerDocument) {
1092
+ var data = expandoData[ownerDocument[expando]];
1093
+ if (!data) {
1094
+ data = {};
1095
+ expanID++;
1096
+ ownerDocument[expando] = expanID;
1097
+ expandoData[expanID] = data;
1098
+ }
1099
+ return data;
1100
+ }
1101
+
1102
+ /**
1103
+ * returns a shived element for the given nodeName and document
1104
+ * @memberOf html5
1105
+ * @param {String} nodeName name of the element
1106
+ * @param {Document} ownerDocument The context document.
1107
+ * @returns {Object} The shived element.
1108
+ */
1109
+ function createElement(nodeName, ownerDocument, data){
1110
+ if (!ownerDocument) {
1111
+ ownerDocument = document;
1112
+ }
1113
+ if(supportsUnknownElements){
1114
+ return ownerDocument.createElement(nodeName);
1115
+ }
1116
+ if (!data) {
1117
+ data = getExpandoData(ownerDocument);
1118
+ }
1119
+ var node;
1120
+
1121
+ if (data.cache[nodeName]) {
1122
+ node = data.cache[nodeName].cloneNode();
1123
+ } else if (saveClones.test(nodeName)) {
1124
+ node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
1125
+ } else {
1126
+ node = data.createElem(nodeName);
1127
+ }
1128
+
1129
+ // Avoid adding some elements to fragments in IE < 9 because
1130
+ // * Attributes like `name` or `type` cannot be set/changed once an element
1131
+ // is inserted into a document/fragment
1132
+ // * Link elements with `src` attributes that are inaccessible, as with
1133
+ // a 403 response, will cause the tab/window to crash
1134
+ // * Script elements appended to fragments will execute when their `src`
1135
+ // or `text` property is set
1136
+ return node.canHaveChildren && !reSkip.test(nodeName) ? data.frag.appendChild(node) : node;
1137
+ }
1138
+
1139
+ /**
1140
+ * returns a shived DocumentFragment for the given document
1141
+ * @memberOf html5
1142
+ * @param {Document} ownerDocument The context document.
1143
+ * @returns {Object} The shived DocumentFragment.
1144
+ */
1145
+ function createDocumentFragment(ownerDocument, data){
1146
+ if (!ownerDocument) {
1147
+ ownerDocument = document;
1148
+ }
1149
+ if(supportsUnknownElements){
1150
+ return ownerDocument.createDocumentFragment();
1151
+ }
1152
+ data = data || getExpandoData(ownerDocument);
1153
+ var clone = data.frag.cloneNode(),
1154
+ i = 0,
1155
+ elems = getElements(),
1156
+ l = elems.length;
1157
+ for(;i<l;i++){
1158
+ clone.createElement(elems[i]);
1159
+ }
1160
+ return clone;
1161
+ }
1162
+
1088
1163
  /**
1089
1164
  * Shivs the `createElement` and `createDocumentFragment` methods of the document.
1090
1165
  * @private
1091
1166
  * @param {Document|DocumentFragment} ownerDocument The document.
1167
+ * @param {Object} data of the document.
1092
1168
  */
1093
- function shivMethods(ownerDocument) {
1094
- var cache = {},
1095
- docCreateElement = ownerDocument.createElement,
1096
- docCreateFragment = ownerDocument.createDocumentFragment,
1097
- frag = docCreateFragment();
1169
+ function shivMethods(ownerDocument, data) {
1170
+ if (!data.cache) {
1171
+ data.cache = {};
1172
+ data.createElem = ownerDocument.createElement;
1173
+ data.createFrag = ownerDocument.createDocumentFragment;
1174
+ data.frag = data.createFrag();
1175
+ }
1098
1176
 
1099
1177
 
1100
1178
  ownerDocument.createElement = function(nodeName) {
1101
- // Avoid adding some elements to fragments in IE < 9 because
1102
- // * Attributes like `name` or `type` cannot be set/changed once an element
1103
- // is inserted into a document/fragment
1104
- // * Link elements with `src` attributes that are inaccessible, as with
1105
- // a 403 response, will cause the tab/window to crash
1106
- // * Script elements appended to fragments will execute when their `src`
1107
- // or `text` property is set
1108
- var node = (cache[nodeName] || (cache[nodeName] = docCreateElement(nodeName))).cloneNode();
1109
- return html5.shivMethods && node.canHaveChildren && !reSkip.test(nodeName) ? frag.appendChild(node) : node;
1179
+ //abort shiv
1180
+ if (!html5.shivMethods) {
1181
+ return data.createElem(nodeName);
1182
+ }
1183
+ return createElement(nodeName, ownerDocument, data);
1110
1184
  };
1111
1185
 
1112
1186
  ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
@@ -1114,12 +1188,12 @@ window.Modernizr = (function( window, document, undefined ) {
1114
1188
  'h.shivMethods&&(' +
1115
1189
  // unroll the `createElement` calls
1116
1190
  getElements().join().replace(/\w+/g, function(nodeName) {
1117
- cache[nodeName] = docCreateElement(nodeName);
1118
- frag.createElement(nodeName);
1191
+ data.createElem(nodeName);
1192
+ data.frag.createElement(nodeName);
1119
1193
  return 'c("' + nodeName + '")';
1120
1194
  }) +
1121
1195
  ');return n}'
1122
- )(html5, frag);
1196
+ )(html5, data.frag);
1123
1197
  }
1124
1198
 
1125
1199
  /*--------------------------------------------------------------------------*/
@@ -1131,29 +1205,21 @@ window.Modernizr = (function( window, document, undefined ) {
1131
1205
  * @returns {Document} The shived document.
1132
1206
  */
1133
1207
  function shivDocument(ownerDocument) {
1134
- var shived;
1135
- if (ownerDocument.documentShived) {
1136
- return ownerDocument;
1208
+ if (!ownerDocument) {
1209
+ ownerDocument = document;
1137
1210
  }
1138
- if (html5.shivCSS && !supportsHtml5Styles) {
1139
- shived = !!addStyleSheet(ownerDocument,
1211
+ var data = getExpandoData(ownerDocument);
1212
+
1213
+ if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
1214
+ data.hasCSS = !!addStyleSheet(ownerDocument,
1140
1215
  // corrects block display not defined in IE6/7/8/9
1141
- 'article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}' +
1142
- // corrects audio display not defined in IE6/7/8/9
1143
- 'audio{display:none}' +
1144
- // corrects canvas and video display not defined in IE6/7/8/9
1145
- 'canvas,video{display:inline-block;*display:inline;*zoom:1}' +
1146
- // corrects 'hidden' attribute and audio[controls] display not present in IE7/8/9
1147
- '[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}' +
1216
+ 'article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}' +
1148
1217
  // adds styling not present in IE6/7/8/9
1149
1218
  'mark{background:#FF0;color:#000}'
1150
1219
  );
1151
1220
  }
1152
1221
  if (!supportsUnknownElements) {
1153
- shived = !shivMethods(ownerDocument);
1154
- }
1155
- if (shived) {
1156
- ownerDocument.documentShived = shived;
1222
+ shivMethods(ownerDocument, data);
1157
1223
  }
1158
1224
  return ownerDocument;
1159
1225
  }
@@ -1183,7 +1249,14 @@ window.Modernizr = (function( window, document, undefined ) {
1183
1249
  * @memberOf html5
1184
1250
  * @type Boolean
1185
1251
  */
1186
- 'shivCSS': !(options.shivCSS === false),
1252
+ 'shivCSS': (options.shivCSS !== false),
1253
+
1254
+ /**
1255
+ * Is equal to true if a browser supports creating unknown/HTML5 elements
1256
+ * @memberOf html5
1257
+ * @type boolean
1258
+ */
1259
+ 'supportsUnknownElements': supportsUnknownElements,
1187
1260
 
1188
1261
  /**
1189
1262
  * A flag to indicate that the document's `createElement` and `createDocumentFragment`
@@ -1191,7 +1264,7 @@ window.Modernizr = (function( window, document, undefined ) {
1191
1264
  * @memberOf html5
1192
1265
  * @type Boolean
1193
1266
  */
1194
- 'shivMethods': !(options.shivMethods === false),
1267
+ 'shivMethods': (options.shivMethods !== false),
1195
1268
 
1196
1269
  /**
1197
1270
  * A string to describe the type of `html5` object ("default" or "default print").
@@ -1199,8 +1272,15 @@ window.Modernizr = (function( window, document, undefined ) {
1199
1272
  * @type String
1200
1273
  */
1201
1274
  'type': 'default',
1275
+
1202
1276
  // shivs the document according to the specified `html5` object options
1203
- 'shivDocument': shivDocument
1277
+ 'shivDocument': shivDocument,
1278
+
1279
+ //creates a shived element
1280
+ createElement: createElement,
1281
+
1282
+ //creates a shived documentFragment
1283
+ createDocumentFragment: createDocumentFragment
1204
1284
  };
1205
1285
 
1206
1286
  /*--------------------------------------------------------------------------*/
@@ -1231,7 +1311,7 @@ window.Modernizr = (function( window, document, undefined ) {
1231
1311
  // A few important notes:
1232
1312
  // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
1233
1313
  // * A max-width or orientation query will be evaluated against the current state, which may change later.
1234
- // * You must specify values. Eg. If you are testing support for the min-width media query use:
1314
+ // * You must specify values. Eg. If you are testing support for the min-width media query use:
1235
1315
  // Modernizr.mq('(min-width:0)')
1236
1316
  // usage:
1237
1317
  // Modernizr.mq('only screen and (max-width:768)')
@@ -1284,7 +1364,7 @@ window.Modernizr = (function( window, document, undefined ) {
1284
1364
  // 'WebkitTransition' : 'webkitTransitionEnd',
1285
1365
  // 'MozTransition' : 'transitionend',
1286
1366
  // 'OTransition' : 'oTransitionEnd',
1287
- // 'msTransition' : 'MsTransitionEnd',
1367
+ // 'msTransition' : 'MSTransitionEnd',
1288
1368
  // 'transition' : 'transitionend'
1289
1369
  // },
1290
1370
  // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
metadata CHANGED
@@ -1,72 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: modernizr_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.3
5
- prerelease:
4
+ version: 2.6.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Tse-Ching Ho
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-02-29 00:00:00.000000000 +08:00
13
- default_executable:
11
+ date: 2013-05-04 00:00:00.000000000 Z
14
12
  dependencies:
15
13
  - !ruby/object:Gem::Dependency
16
14
  name: railties
17
- requirement: &70215073982140 !ruby/object:Gem::Requirement
18
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
19
16
  requirements:
20
- - - ~>
17
+ - - '>='
21
18
  - !ruby/object:Gem::Version
22
19
  version: '3.0'
23
20
  type: :runtime
24
21
  prerelease: false
25
- version_requirements: *70215073982140
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
26
27
  - !ruby/object:Gem::Dependency
27
28
  name: thor
28
- requirement: &70215073981640 !ruby/object:Gem::Requirement
29
- none: false
29
+ requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0.14'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70215073981640
37
- - !ruby/object:Gem::Dependency
38
- name: bundler
39
- requirement: &70215073981080 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ~>
43
- - !ruby/object:Gem::Version
44
- version: '1.0'
45
- type: :development
46
- prerelease: false
47
- version_requirements: *70215073981080
48
- - !ruby/object:Gem::Dependency
49
- name: rails
50
- requirement: &70215073980520 !ruby/object:Gem::Requirement
51
- none: false
36
+ version_requirements: !ruby/object:Gem::Requirement
52
37
  requirements:
53
38
  - - ~>
54
39
  - !ruby/object:Gem::Version
55
- version: '3.0'
56
- type: :development
57
- prerelease: false
58
- version_requirements: *70215073980520
59
- - !ruby/object:Gem::Dependency
60
- name: sass
61
- requirement: &70215073980060 !ruby/object:Gem::Requirement
62
- none: false
63
- requirements:
64
- - - ~>
65
- - !ruby/object:Gem::Version
66
- version: '3.1'
67
- type: :development
68
- prerelease: false
69
- version_requirements: *70215073980060
40
+ version: '0.14'
70
41
  description: Modernizr is a JavaScript library allowing you to use CSS3 & HTML5 while
71
42
  maintaining control over unsupported browsers. This gem integrates Modernizr with
72
43
  Rails asset pipeline for easy of use.
@@ -86,31 +57,30 @@ files:
86
57
  - lib/modernizr-rails/railtie.rb
87
58
  - lib/modernizr-rails/source_file.rb
88
59
  - lib/modernizr-rails/version.rb
60
+ - lib/modernizr_rails.rb
89
61
  - modernizr-rails.gemspec
90
62
  - vendor/assets/javascripts/modernizr.js
91
- has_rdoc: true
92
63
  homepage: https://github.com/tsechingho/modernizr-rails
93
64
  licenses: []
65
+ metadata: {}
94
66
  post_install_message:
95
67
  rdoc_options: []
96
68
  require_paths:
97
69
  - lib
98
70
  required_ruby_version: !ruby/object:Gem::Requirement
99
- none: false
100
71
  requirements:
101
- - - ! '>='
72
+ - - '>='
102
73
  - !ruby/object:Gem::Version
103
74
  version: '0'
104
75
  required_rubygems_version: !ruby/object:Gem::Requirement
105
- none: false
106
76
  requirements:
107
- - - ! '>='
77
+ - - '>='
108
78
  - !ruby/object:Gem::Version
109
79
  version: '0'
110
80
  requirements: []
111
81
  rubyforge_project:
112
- rubygems_version: 1.6.2
82
+ rubygems_version: 2.0.0
113
83
  signing_key:
114
- specification_version: 3
84
+ specification_version: 4
115
85
  summary: Integrate Modernizr javascript library with Rails asset pipeline
116
86
  test_files: []