|
|
/*! Respond.js: min/max-width media query polyfill. Remote proxy (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */
|
|
|
(function(win, doc, undefined){
|
|
|
var docElem = doc.documentElement,
|
|
|
proxyURL = doc.getElementById("respond-proxy").href,
|
|
|
redirectURL = (doc.getElementById("respond-redirect") || location).href,
|
|
|
baseElem = doc.getElementsByTagName("base")[0],
|
|
|
urls = [],
|
|
|
refNode;
|
|
|
|
|
|
function encode(url){
|
|
|
return win.encodeURIComponent(url);
|
|
|
}
|
|
|
|
|
|
function fakejax( url, callback ){
|
|
|
|
|
|
var iframe,
|
|
|
AXO;
|
|
|
|
|
|
// All hail Google http://j.mp/iKMI19
|
|
|
// Behold, an iframe proxy without annoying clicky noises.
|
|
|
if ( "ActiveXObject" in win ) {
|
|
|
AXO = new ActiveXObject( "htmlfile" );
|
|
|
AXO.open();
|
|
|
AXO.write( '<iframe id="x"></iframe>' );
|
|
|
AXO.close();
|
|
|
iframe = AXO.getElementById( "x" );
|
|
|
} else {
|
|
|
iframe = doc.createElement( "iframe" );
|
|
|
iframe.style.cssText = "position:absolute;top:-99em";
|
|
|
docElem.insertBefore(iframe, docElem.firstElementChild || docElem.firstChild );
|
|
|
}
|
|
|
|
|
|
iframe.src = checkBaseURL(proxyURL) + "?url=" + encode(redirectURL) + "&css=" + encode(checkBaseURL(url));
|
|
|
|
|
|
function checkFrameName() {
|
|
|
var cssText;
|
|
|
|
|
|
try {
|
|
|
cssText = iframe.contentWindow.name;
|
|
|
}
|
|
|
catch (e) { }
|
|
|
|
|
|
if (cssText) {
|
|
|
// We've got what we need. Stop the iframe from loading further content.
|
|
|
iframe.src = "about:blank";
|
|
|
iframe.parentNode.removeChild(iframe);
|
|
|
iframe = null;
|
|
|
|
|
|
|
|
|
// Per http://j.mp/kn9EPh, not taking any chances. Flushing the ActiveXObject
|
|
|
if (AXO) {
|
|
|
AXO = null;
|
|
|
|
|
|
if (win.CollectGarbage) {
|
|
|
win.CollectGarbage();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(cssText);
|
|
|
}
|
|
|
else{
|
|
|
win.setTimeout(checkFrameName, 100);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
win.setTimeout(checkFrameName, 500);
|
|
|
}
|
|
|
|
|
|
// http://stackoverflow.com/a/472729
|
|
|
function checkBaseURL(href) {
|
|
|
var el = document.createElement('div'),
|
|
|
escapedURL = href.split('&').join('&').
|
|
|
split('<').join('<').
|
|
|
split('"').join('"');
|
|
|
|
|
|
el.innerHTML = '<a href="' + escapedURL + '">x</a>';
|
|
|
return el.firstChild.href;
|
|
|
}
|
|
|
|
|
|
function checkRedirectURL() {
|
|
|
// IE6 & IE7 don't build out absolute urls in <link /> attributes.
|
|
|
// So respond.proxy.gif remains relative instead of http://example.com/respond.proxy.gif.
|
|
|
// This trickery resolves that issue.
|
|
|
if (~ !redirectURL.indexOf(location.host)) {
|
|
|
|
|
|
var fakeLink = doc.createElement("div");
|
|
|
|
|
|
fakeLink.innerHTML = '<a href="' + redirectURL + '"></a>';
|
|
|
docElem.insertBefore(fakeLink, docElem.firstElementChild || docElem.firstChild );
|
|
|
|
|
|
// Grab the parsed URL from that dummy object
|
|
|
redirectURL = fakeLink.firstChild.href;
|
|
|
|
|
|
// Clean up
|
|
|
fakeLink.parentNode.removeChild(fakeLink);
|
|
|
fakeLink = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function buildUrls(){
|
|
|
var links = doc.getElementsByTagName( "link" );
|
|
|
|
|
|
for( var i = 0, linkl = links.length; i < linkl; i++ ){
|
|
|
|
|
|
var thislink = links[i],
|
|
|
href = links[i].href,
|
|
|
extreg = (/^([a-zA-Z:]*\/\/(www\.)?)/).test( href ),
|
|
|
ext = (baseElem && !extreg) || extreg;
|
|
|
|
|
|
//make sure it's an external stylesheet
|
|
|
if( thislink.rel.indexOf( "stylesheet" ) >= 0 && ext ){
|
|
|
(function( link ){
|
|
|
fakejax( href, function( css ){
|
|
|
link.styleSheet.rawCssText = css;
|
|
|
respond.update();
|
|
|
} );
|
|
|
})( thislink );
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
if( !respond.mediaQueriesSupported ){
|
|
|
checkRedirectURL();
|
|
|
buildUrls();
|
|
|
}
|
|
|
|
|
|
})( window, document ); |
...
|
...
|
|