}
};
- /*
- https://github.com/paulirish/matchMedia.js
- */
+ /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */
- window.matchMedia = window.matchMedia || (function ( doc ) {
+ window.matchMedia || (window.matchMedia = function() {
+ "use strict";
- 'use strict';
+ // For browsers that support matchMedium api such as IE 9 and webkit
+ var styleMedia = (window.styleMedia || window.media);
- var bool,
- docElem = doc.documentElement,
- refNode = docElem.firstElementChild || docElem.firstChild,
- // fakeBody required for <FF4 when executed in <head>
- fakeBody = doc.createElement( 'body' ),
- div = doc.createElement( 'div' );
+ // For those that don't support matchMedium
+ if (!styleMedia) {
+ var style = document.createElement('style'),
+ script = document.getElementsByTagName('script')[0],
+ info = null;
- div.id = 'mq-test-1';
- div.style.cssText = 'position:absolute;top:-100em';
- fakeBody.style.background = 'none';
- fakeBody.appendChild(div);
+ style.type = 'text/css';
+ style.id = 'matchmediajs-test';
- return function (q) {
+ script.parentNode.insertBefore(style, script);
- div.innerHTML = '­<style media="' + q + '"> #mq-test-1 { width: 42px; }</style>';
+ // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers
+ info = ('getComputedStyle' in window) && window.getComputedStyle(style, null) || style.currentStyle;
- docElem.insertBefore( fakeBody, refNode );
- bool = div.offsetWidth === 42;
- docElem.removeChild( fakeBody );
+ styleMedia = {
+ matchMedium: function(media) {
+ var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }';
- return {
- matches : bool,
- media : q
- };
+ // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers
+ if (style.styleSheet) {
+ style.styleSheet.cssText = text;
+ } else {
+ style.textContent = text;
+ }
- };
+ // Test if media query is true or false
+ return info.width === '1px';
+ }
+ };
+ }
- }( document ));
+ return function(media) {
+ return {
+ matches: styleMedia.matchMedium(media || 'all'),
+ media: media || 'all'
+ };
+ };
+ }());
/*
* jquery.requestAnimationFrame