forked from ZwiiCMS-Team/ZwiiCMS
67 lines
1.5 KiB
JavaScript
Executable File
67 lines
1.5 KiB
JavaScript
Executable File
// FavIcon Switcher V1.2.2
|
|
;(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() {
|
|
var matched
|
|
|
|
links.forEach(function(link) {
|
|
if (window.matchMedia(link.media).matches) {
|
|
matched = link
|
|
}
|
|
})
|
|
|
|
if (! matched) {
|
|
return
|
|
}
|
|
|
|
if (matched.media !== prevMatch) {
|
|
prevMatch = matched.media
|
|
applyLink(matched, 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()
|
|
})()
|
|
|
|
|