57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
|
;(function(mod){
|
||
|
function collectLinks() {
|
||
|
return Array.prototype.slice.apply(
|
||
|
document.head.querySelectorAll('link[rel*="icon"]')
|
||
|
)
|
||
|
}
|
||
|
|
||
|
function applyLink(source, target) {
|
||
|
target.setAttribute('type', source.getAttribute('type'))
|
||
|
target.setAttribute('href', source.getAttribute('href'))
|
||
|
}
|
||
|
|
||
|
// eslint-disable-next-line no-unused-vars
|
||
|
function initSwitcher(delay) {
|
||
|
// Exit if media queries aren't supported
|
||
|
if (typeof window.matchMedia !== 'function') {
|
||
|
return function noop() {}
|
||
|
}
|
||
|
|
||
|
var links = collectLinks()
|
||
|
var current = document.createElement('link')
|
||
|
var prevMatch
|
||
|
|
||
|
current.setAttribute('rel', 'shortcut icon')
|
||
|
document.head.appendChild(current)
|
||
|
|
||
|
function faviconApplyLoop() {
|
||
|
links.forEach(function(link) {
|
||
|
if (window.matchMedia(link.media).matches) {
|
||
|
if (link.media !== prevMatch) {
|
||
|
prevMatch = link.media
|
||
|
applyLink(link, current)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
var intervalId = setInterval(faviconApplyLoop, delay || 300)
|
||
|
|
||
|
function unsubscribe() {
|
||
|
clearInterval(intervalId)
|
||
|
links.forEach(function(link) {
|
||
|
document.head.appendChild(link)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
faviconApplyLoop()
|
||
|
links.forEach(function(link) {
|
||
|
document.head.removeChild(link)
|
||
|
})
|
||
|
|
||
|
return unsubscribe
|
||
|
}
|
||
|
|
||
|
initSwitcher()
|
||
|
})()
|