| //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude); |
| //>>description: A workaround for browsers without window.matchMedia |
| //>>label: Match Media Polyfill |
| //>>group: Utilities |
| |
| |
| define( [ "jquery", "./jquery.mobile.core" ], function( jQuery ) { |
| //>>excludeEnd("jqmBuildExclude"); |
| (function( $, undefined ) { |
| |
| var $window = $.mobile.$window, |
| $html = $( "html" ); |
| |
| /* $.mobile.media method: pass a CSS media type or query and get a bool return |
| note: this feature relies on actual media query support for media queries, though types will work most anywhere |
| examples: |
| $.mobile.media('screen') // tests for screen media type |
| $.mobile.media('screen and (min-width: 480px)') // tests for screen media type with window width > 480px |
| $.mobile.media('@media screen and (-webkit-min-device-pixel-ratio: 2)') // tests for webkit 2x pixel ratio (iPhone 4) |
| */ |
| $.mobile.media = (function() { |
| // TODO: use window.matchMedia once at least one UA implements it |
| var cache = {}, |
| testDiv = $( "<div id='jquery-mediatest'></div>" ), |
| fakeBody = $( "<body>" ).append( testDiv ); |
| |
| return function( query ) { |
| if ( !( query in cache ) ) { |
| var styleBlock = document.createElement( "style" ), |
| cssrule = "@media " + query + " { #jquery-mediatest { position:absolute; } }"; |
| |
| //must set type for IE! |
| styleBlock.type = "text/css"; |
| |
| if ( styleBlock.styleSheet ) { |
| styleBlock.styleSheet.cssText = cssrule; |
| } else { |
| styleBlock.appendChild( document.createTextNode(cssrule) ); |
| } |
| |
| $html.prepend( fakeBody ).prepend( styleBlock ); |
| cache[ query ] = testDiv.css( "position" ) === "absolute"; |
| fakeBody.add( styleBlock ).remove(); |
| } |
| return cache[ query ]; |
| }; |
| })(); |
| |
| })(jQuery); |
| //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude); |
| }); |
| //>>excludeEnd("jqmBuildExclude"); |