aboutsummaryrefslogtreecommitdiff
path: root/source/javascripts/libs/ie/respond.js
diff options
context:
space:
mode:
Diffstat (limited to 'source/javascripts/libs/ie/respond.js')
-rw-r--r--source/javascripts/libs/ie/respond.js292
1 files changed, 0 insertions, 292 deletions
diff --git a/source/javascripts/libs/ie/respond.js b/source/javascripts/libs/ie/respond.js
deleted file mode 100644
index e7a5bba3..00000000
--- a/source/javascripts/libs/ie/respond.js
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * respond.js - A small and fast polyfill for min/max-width CSS3 Media Queries
- * Copyright 2011, Scott Jehl, scottjehl.com
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * Usage: Check out the readme file or github.com/scottjehl/respond
-*/
-(function( win, mqSupported ){
- //exposed namespace
- win.respond = {};
-
- //define update even in native-mq-supporting browsers, to avoid errors
- respond.update = function(){};
-
- //expose media query support flag for external use
- respond.mediaQueriesSupported = mqSupported;
-
- //if media queries are supported, exit here
- if( mqSupported ){ return; }
-
- //define vars
- var doc = win.document,
- docElem = doc.documentElement,
- mediastyles = [],
- rules = [],
- appendedEls = [],
- parsedSheets = {},
- resizeThrottle = 30,
- head = doc.getElementsByTagName( "head" )[0] || docElem,
- links = head.getElementsByTagName( "link" ),
- requestQueue = [],
-
- //loop stylesheets, send text content to translate
- ripCSS = function(){
- var sheets = links,
- sl = sheets.length,
- i = 0,
- //vars for loop:
- sheet, href, media, isCSS;
-
- for( ; i < sl; i++ ){
- sheet = sheets[ i ],
- href = sheet.href,
- media = sheet.media,
- isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet";
-
- //only links plz and prevent re-parsing
- if( !!href && isCSS && !parsedSheets[ href ] ){
- if( !/^([a-zA-Z]+?:(\/\/)?(www\.)?)/.test( href )
- || href.replace( RegExp.$1, "" ).split( "/" )[0] === win.location.host ){
- requestQueue.push( {
- href: href,
- media: media
- } );
- }
- else{
- parsedSheets[ href ] = true;
- }
- }
- }
- makeRequests();
-
- },
-
- //recurse through request queue, get css text
- makeRequests = function(){
- if( requestQueue.length ){
- var thisRequest = requestQueue.shift();
-
- ajax( thisRequest.href, function( styles ){
- translate( styles, thisRequest.href, thisRequest.media );
- parsedSheets[ thisRequest.href ] = true;
- makeRequests();
- } );
- }
- },
-
- //find media blocks in css text, convert to style blocks
- translate = function( styles, href, media ){
- var qs = styles.match( /@media ([^\{]+)\{((?!@media)[\s\S])*(?=\}[\s]*\/\*\/mediaquery\*\/)/gmi ),
- ql = qs && qs.length || 0,
- //try to get CSS path
- href = href.substring( 0, href.lastIndexOf( "/" )),
- repUrls = function( css ){
- return css.replace( /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, "$1" + href + "$2$3" );
- },
- useMedia = !ql && media,
- //vars used in loop
- i = 0,
- j, fullq, thisq, eachq, eql;
-
- //if path exists, tack on trailing slash
- if( href.length ){ href += "/"; }
-
- //if no internal queries exist, but media attr does, use that
- //note: this currently lacks support for situations where a media attr is specified on a link AND
- //its associated stylesheet has internal CSS media queries.
- //In those cases, the media attribute will currently be ignored.
- if( useMedia ){
- ql = 1;
- }
-
-
- for( ; i < ql; i++ ){
- j = 0;
-
- //media attr
- if( useMedia ){
- fullq = media;
- rules.push( repUrls( styles ) );
- }
- //parse for styles
- else{
- fullq = qs[ i ].match( /@media ([^\{]+)\{([\S\s]+?)$/ ) && RegExp.$1;
- rules.push( RegExp.$2 && repUrls( RegExp.$2 ) );
- }
-
- eachq = fullq.split( "," );
- eql = eachq.length;
-
-
- for( ; j < eql; j++ ){
- thisq = eachq[ j ];
- mediastyles.push( {
- media : thisq.match( /(only\s+)?([a-zA-Z]+)(\sand)?/ ) && RegExp.$2,
- rules : rules.length - 1,
- minw : thisq.match( /\(min\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/ ) && parseFloat( RegExp.$1 ),
- maxw : thisq.match( /\(max\-width:[\s]*([\s]*[0-9]+)px[\s]*\)/ ) && parseFloat( RegExp.$1 )
- } );
- }
- }
-
- applyMedia();
- },
-
- lastCall,
-
- resizeDefer,
-
- //enable/disable styles
- applyMedia = function( fromResize ){
- var name = "clientWidth",
- docElemProp = docElem[ name ],
- currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[ name ] || docElemProp,
- styleBlocks = {},
- dFrag = doc.createDocumentFragment(),
- lastLink = links[ links.length-1 ],
- now = (new Date()).getTime();
-
- //throttle resize calls
- if( fromResize && lastCall && now - lastCall < resizeThrottle ){
- clearTimeout( resizeDefer );
- resizeDefer = setTimeout( applyMedia, resizeThrottle );
- return;
- }
- else {
- lastCall = now;
- }
-
- for( var i in mediastyles ){
- var thisstyle = mediastyles[ i ];
- if( !thisstyle.minw && !thisstyle.maxw ||
- ( !thisstyle.minw || thisstyle.minw && currWidth >= thisstyle.minw ) &&
- (!thisstyle.maxw || thisstyle.maxw && currWidth <= thisstyle.maxw ) ){
- if( !styleBlocks[ thisstyle.media ] ){
- styleBlocks[ thisstyle.media ] = [];
- }
- styleBlocks[ thisstyle.media ].push( rules[ thisstyle.rules ] );
- }
- }
-
- //remove any existing respond style element(s)
- for( var i in appendedEls ){
- if( appendedEls[ i ] && appendedEls[ i ].parentNode === head ){
- head.removeChild( appendedEls[ i ] );
- }
- }
-
- //inject active styles, grouped by media type
- for( var i in styleBlocks ){
- var ss = doc.createElement( "style" ),
- css = styleBlocks[ i ].join( "\n" );
-
- ss.type = "text/css";
- ss.media = i;
-
- if ( ss.styleSheet ){
- ss.styleSheet.cssText = css;
- }
- else {
- ss.appendChild( doc.createTextNode( css ) );
- }
- dFrag.appendChild( ss );
- appendedEls.push( ss );
- }
-
- //append to DOM at once
- head.insertBefore( dFrag, lastLink.nextSibling );
- },
- //tweaked Ajax functions from Quirksmode
- ajax = function( url, callback ) {
- var req = xmlHttp();
- if (!req){
- return;
- }
- req.open( "GET", url, true );
- req.onreadystatechange = function () {
- if ( req.readyState != 4 || req.status != 200 && req.status != 304 ){
- return;
- }
- callback( req.responseText );
- }
- if ( req.readyState == 4 ){
- return;
- }
- req.send();
- },
- //define ajax obj
- xmlHttp = (function() {
- var xmlhttpmethod = false,
- attempts = [
- function(){ return new ActiveXObject("Microsoft.XMLHTTP") },
- function(){ return new XMLHttpRequest() }
- ],
- al = attempts.length;
-
- while( al-- ){
- try {
- xmlhttpmethod = attempts[ al ]();
- }
- catch(e) {
- continue;
- }
- break;
- }
- return function(){
- return xmlhttpmethod;
- };
- })();
-
- //translate CSS
- ripCSS();
-
- //expose update for re-running respond later on
- respond.update = ripCSS;
-
- //adjust on resize
- function callMedia(){
- applyMedia( true );
- }
- if( win.addEventListener ){
- win.addEventListener( "resize", callMedia, false );
- }
- else if( win.attachEvent ){
- win.attachEvent( "onresize", callMedia );
- }
-})(
- this,
- (function( win ){
-
- //for speed, flag browsers with window.matchMedia support and IE 9 as supported
- if( win.matchMedia ){ return true; }
-
- var bool,
- doc = document,
- docElem = doc.documentElement,
- refNode = docElem.firstElementChild || docElem.firstChild,
- // fakeBody required for <FF4 when executed in <head>
- fakeUsed = !doc.body,
- fakeBody = doc.body || doc.createElement( "body" ),
- div = doc.createElement( "div" ),
- q = "only all";
-
- div.id = "mq-test-1";
- div.style.cssText = "position:absolute;top:-99em";
- fakeBody.appendChild( div );
-
- div.innerHTML = '_<style media="'+q+'"> #mq-test-1 { width: 9px; }</style>';
- if( fakeUsed ){
- docElem.insertBefore( fakeBody, refNode );
- }
- div.removeChild( div.firstChild );
- bool = div.offsetWidth == 9;
- if( fakeUsed ){
- docElem.removeChild( fakeBody );
- }
- else{
- fakeBody.removeChild( div );
- }
- return bool;
- })( this )
-);
-