-
Notifications
You must be signed in to change notification settings - Fork 52
Commit
- Loading branch information
There are no files selected for viewing
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
This file was deleted.
This file was deleted.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,273 @@ | ||
/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ | ||
/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ | ||
(function(w) { | ||
"use strict"; | ||
w.matchMedia = w.matchMedia || function(doc, undefined) { | ||
var bool, docElem = doc.documentElement, refNode = docElem.firstElementChild || docElem.firstChild, fakeBody = doc.createElement("body"), div = doc.createElement("div"); | ||
div.id = "mq-test-1"; | ||
div.style.cssText = "position:absolute;top:-100em"; | ||
fakeBody.style.background = "none"; | ||
fakeBody.appendChild(div); | ||
return function(q) { | ||
div.innerHTML = '­<style media="' + q + '"> #mq-test-1 { width: 42px; }</style>'; | ||
docElem.insertBefore(fakeBody, refNode); | ||
bool = div.offsetWidth === 42; | ||
docElem.removeChild(fakeBody); | ||
return { | ||
matches: bool, | ||
media: q | ||
}; | ||
}; | ||
}(w.document); | ||
})(this); | ||
|
||
/*! matchMedia() polyfill addListener/removeListener extension. Author & copyright (c) 2012: Scott Jehl. Dual MIT/BSD license */ | ||
(function(w) { | ||
"use strict"; | ||
if (w.matchMedia && w.matchMedia("all").addListener) { | ||
return false; | ||
} | ||
var localMatchMedia = w.matchMedia, hasMediaQueries = localMatchMedia("only all").matches, isListening = false, timeoutID = 0, queries = [], handleChange = function(evt) { | ||
w.clearTimeout(timeoutID); | ||
timeoutID = w.setTimeout(function() { | ||
for (var i = 0, il = queries.length; i < il; i++) { | ||
var mql = queries[i].mql, listeners = queries[i].listeners || [], matches = localMatchMedia(mql.media).matches; | ||
if (matches !== mql.matches) { | ||
mql.matches = matches; | ||
for (var j = 0, jl = listeners.length; j < jl; j++) { | ||
listeners[j].call(w, mql); | ||
} | ||
} | ||
} | ||
}, 30); | ||
}; | ||
w.matchMedia = function(media) { | ||
var mql = localMatchMedia(media), listeners = [], index = 0; | ||
mql.addListener = function(listener) { | ||
if (!hasMediaQueries) { | ||
return; | ||
} | ||
if (!isListening) { | ||
isListening = true; | ||
w.addEventListener("resize", handleChange, true); | ||
} | ||
if (index === 0) { | ||
index = queries.push({ | ||
mql: mql, | ||
listeners: listeners | ||
}); | ||
} | ||
listeners.push(listener); | ||
}; | ||
mql.removeListener = function(listener) { | ||
for (var i = 0, il = listeners.length; i < il; i++) { | ||
if (listeners[i] === listener) { | ||
listeners.splice(i, 1); | ||
} | ||
} | ||
}; | ||
return mql; | ||
}; | ||
})(this); | ||
|
||
/*! Respond.js v1.4.0: min/max-width media query polyfill. (c) Scott Jehl. MIT Lic. j.mp/respondjs */ | ||
(function(w) { | ||
"use strict"; | ||
var respond = {}; | ||
w.respond = respond; | ||
respond.update = function() {}; | ||
var requestQueue = [], xmlHttp = function() { | ||
var xmlhttpmethod = false; | ||
try { | ||
xmlhttpmethod = new w.XMLHttpRequest(); | ||
} catch (e) { | ||
xmlhttpmethod = new w.ActiveXObject("Microsoft.XMLHTTP"); | ||
} | ||
return function() { | ||
return xmlhttpmethod; | ||
}; | ||
}(), 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(null); | ||
}; | ||
respond.ajax = ajax; | ||
respond.queue = requestQueue; | ||
respond.regex = { | ||
media: /@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi, | ||
keyframes: /@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi, | ||
urls: /(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g, | ||
findStyles: /@media *([^\{]+)\{([\S\s]+?)$/, | ||
only: /(only\s+)?([a-zA-Z]+)\s?/, | ||
minw: /\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/, | ||
maxw: /\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/ | ||
}; | ||
respond.mediaQueriesSupported = w.matchMedia && w.matchMedia("only all") !== null && w.matchMedia("only all").matches; | ||
if (respond.mediaQueriesSupported) { | ||
return; | ||
} | ||
var doc = w.document, docElem = doc.documentElement, mediastyles = [], rules = [], appendedEls = [], parsedSheets = {}, resizeThrottle = 30, head = doc.getElementsByTagName("head")[0] || docElem, base = doc.getElementsByTagName("base")[0], links = head.getElementsByTagName("link"), lastCall, resizeDefer, eminpx, getEmValue = function() { | ||
var ret, div = doc.createElement("div"), body = doc.body, originalHTMLFontSize = docElem.style.fontSize, originalBodyFontSize = body && body.style.fontSize, fakeUsed = false; | ||
div.style.cssText = "position:absolute;font-size:1em;width:1em"; | ||
if (!body) { | ||
body = fakeUsed = doc.createElement("body"); | ||
body.style.background = "none"; | ||
} | ||
docElem.style.fontSize = "100%"; | ||
body.style.fontSize = "100%"; | ||
body.appendChild(div); | ||
if (fakeUsed) { | ||
docElem.insertBefore(body, docElem.firstChild); | ||
} | ||
ret = div.offsetWidth; | ||
if (fakeUsed) { | ||
docElem.removeChild(body); | ||
} else { | ||
body.removeChild(div); | ||
} | ||
docElem.style.fontSize = originalHTMLFontSize; | ||
if (originalBodyFontSize) { | ||
body.style.fontSize = originalBodyFontSize; | ||
} | ||
ret = eminpx = parseFloat(ret); | ||
return ret; | ||
}, applyMedia = function(fromResize) { | ||
var name = "clientWidth", docElemProp = docElem[name], currWidth = doc.compatMode === "CSS1Compat" && docElemProp || doc.body[name] || docElemProp, styleBlocks = {}, lastLink = links[links.length - 1], now = new Date().getTime(); | ||
if (fromResize && lastCall && now - lastCall < resizeThrottle) { | ||
w.clearTimeout(resizeDefer); | ||
resizeDefer = w.setTimeout(applyMedia, resizeThrottle); | ||
return; | ||
} else { | ||
lastCall = now; | ||
} | ||
for (var i in mediastyles) { | ||
if (mediastyles.hasOwnProperty(i)) { | ||
var thisstyle = mediastyles[i], min = thisstyle.minw, max = thisstyle.maxw, minnull = min === null, maxnull = max === null, em = "em"; | ||
if (!!min) { | ||
min = parseFloat(min) * (min.indexOf(em) > -1 ? eminpx || getEmValue() : 1); | ||
} | ||
if (!!max) { | ||
max = parseFloat(max) * (max.indexOf(em) > -1 ? eminpx || getEmValue() : 1); | ||
} | ||
if (!thisstyle.hasquery || (!minnull || !maxnull) && (minnull || currWidth >= min) && (maxnull || currWidth <= max)) { | ||
if (!styleBlocks[thisstyle.media]) { | ||
styleBlocks[thisstyle.media] = []; | ||
} | ||
styleBlocks[thisstyle.media].push(rules[thisstyle.rules]); | ||
} | ||
} | ||
} | ||
for (var j in appendedEls) { | ||
if (appendedEls.hasOwnProperty(j)) { | ||
if (appendedEls[j] && appendedEls[j].parentNode === head) { | ||
head.removeChild(appendedEls[j]); | ||
} | ||
} | ||
} | ||
appendedEls.length = 0; | ||
for (var k in styleBlocks) { | ||
if (styleBlocks.hasOwnProperty(k)) { | ||
var ss = doc.createElement("style"), css = styleBlocks[k].join("\n"); | ||
ss.type = "text/css"; | ||
ss.media = k; | ||
head.insertBefore(ss, lastLink.nextSibling); | ||
if (ss.styleSheet) { | ||
ss.styleSheet.cssText = css; | ||
} else { | ||
ss.appendChild(doc.createTextNode(css)); | ||
} | ||
appendedEls.push(ss); | ||
} | ||
} | ||
}, translate = function(styles, href, media) { | ||
var qs = styles.replace(respond.regex.keyframes, "").match(respond.regex.media), ql = qs && qs.length || 0; | ||
href = href.substring(0, href.lastIndexOf("/")); | ||
var repUrls = function(css) { | ||
return css.replace(respond.regex.urls, "$1" + href + "$2$3"); | ||
}, useMedia = !ql && media; | ||
if (href.length) { | ||
href += "/"; | ||
} | ||
if (useMedia) { | ||
ql = 1; | ||
} | ||
for (var i = 0; i < ql; i++) { | ||
var fullq, thisq, eachq, eql; | ||
if (useMedia) { | ||
fullq = media; | ||
rules.push(repUrls(styles)); | ||
} else { | ||
fullq = qs[i].match(respond.regex.findStyles) && RegExp.$1; | ||
rules.push(RegExp.$2 && repUrls(RegExp.$2)); | ||
} | ||
eachq = fullq.split(","); | ||
eql = eachq.length; | ||
for (var j = 0; j < eql; j++) { | ||
thisq = eachq[j]; | ||
mediastyles.push({ | ||
media: thisq.split("(")[0].match(respond.regex.only) && RegExp.$2 || "all", | ||
rules: rules.length - 1, | ||
hasquery: thisq.indexOf("(") > -1, | ||
minw: thisq.match(respond.regex.minw) && parseFloat(RegExp.$1) + (RegExp.$2 || ""), | ||
maxw: thisq.match(respond.regex.maxw) && parseFloat(RegExp.$1) + (RegExp.$2 || "") | ||
}); | ||
} | ||
} | ||
applyMedia(); | ||
}, makeRequests = function() { | ||
if (requestQueue.length) { | ||
var thisRequest = requestQueue.shift(); | ||
ajax(thisRequest.href, function(styles) { | ||
translate(styles, thisRequest.href, thisRequest.media); | ||
parsedSheets[thisRequest.href] = true; | ||
w.setTimeout(function() { | ||
makeRequests(); | ||
}, 0); | ||
}); | ||
} | ||
}, ripCSS = function() { | ||
for (var i = 0; i < links.length; i++) { | ||
var sheet = links[i], href = sheet.href, media = sheet.media, isCSS = sheet.rel && sheet.rel.toLowerCase() === "stylesheet"; | ||
if (!!href && isCSS && !parsedSheets[href]) { | ||
if (sheet.styleSheet && sheet.styleSheet.rawCssText) { | ||
translate(sheet.styleSheet.rawCssText, href, media); | ||
parsedSheets[href] = true; | ||
} else { | ||
if (!/^([a-zA-Z:]*\/\/)/.test(href) && !base || href.replace(RegExp.$1, "").split("/")[0] === w.location.host) { | ||
if (href.substring(0, 2) === "//") { | ||
href = w.location.protocol + href; | ||
} | ||
requestQueue.push({ | ||
href: href, | ||
media: media | ||
}); | ||
} | ||
} | ||
} | ||
} | ||
makeRequests(); | ||
}; | ||
ripCSS(); | ||
respond.update = ripCSS; | ||
respond.getEmValue = getEmValue; | ||
function callMedia() { | ||
applyMedia(true); | ||
} | ||
if (w.addEventListener) { | ||
w.addEventListener("resize", callMedia, false); | ||
} else if (w.attachEvent) { | ||
w.attachEvent("onresize", callMedia); | ||
} | ||
})(this); |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.