defaultUrl = nullcurrentSlug = null imageCache = {}urlCache = {} withImage = (url, action) -> if imageCache[url] action(imageCache[url]) else img = new Image() img.crossOrigin = 'anonymous' img.src = url img.onload = () => imageCache[url] = img action(img) @setFaviconForDoc = (doc) -> return if currentSlug == doc.slug favicon = $('link[rel="icon"]') if defaultUrl == null defaultUrl = favicon.href if urlCache[doc.slug] favicon.href = urlCache[doc.slug] currentSlug = doc.slug return iconEl = $("._icon-#{doc.slug.split('~')[0]}") return if iconEl == null styles = window.getComputedStyle(iconEl, ':before') backgroundPositionX = styles['background-position-x'] backgroundPositionY = styles['background-position-y'] return if backgroundPositionX == undefined || backgroundPositionY == undefined bgUrl = app.config.favicon_spritesheet sourceSize = 16 sourceX = Math.abs(parseInt(backgroundPositionX.slice(0, -2))) sourceY = Math.abs(parseInt(backgroundPositionY.slice(0, -2))) withImage(bgUrl, (docImg) -> withImage(defaultUrl, (defaultImg) -> size = defaultImg.width canvas = document.createElement('canvas') ctx = canvas.getContext('2d') canvas.width = size canvas.height = size ctx.drawImage(defaultImg, 0, 0) docIconPercentage = 65 destinationCoords = size / 100 * (100 - docIconPercentage) destinationSize = size / 100 * docIconPercentage ctx.drawImage(docImg, sourceX, sourceY, sourceSize, sourceSize, destinationCoords, destinationCoords, destinationSize, destinationSize) try urlCache[doc.slug] = canvas.toDataURL() favicon.href = urlCache[doc.slug] currentSlug = doc.slug catch error Raven.captureException error, { level: 'info' } @resetFavicon() ) ) @resetFavicon = () -> if defaultUrl != null and currentSlug != null $('link[rel="icon"]').href = defaultUrl currentSlug = null
defaultUrl = null
currentSlug = null
imageCache = {}
urlCache = {}
withImage = (url, action) ->
if imageCache[url]
action(imageCache[url])
else
img = new Image()
img.crossOrigin = 'anonymous'
img.src = url
img.onload = () =>
imageCache[url] = img
action(img)
@setFaviconForDoc = (doc) ->
return if currentSlug == doc.slug
favicon = $('link[rel="icon"]')
if defaultUrl == null
defaultUrl = favicon.href
if urlCache[doc.slug]
favicon.href = urlCache[doc.slug]
currentSlug = doc.slug
return
iconEl = $("._icon-#{doc.slug.split('~')[0]}")
return if iconEl == null
styles = window.getComputedStyle(iconEl, ':before')
backgroundPositionX = styles['background-position-x']
backgroundPositionY = styles['background-position-y']
return if backgroundPositionX == undefined || backgroundPositionY == undefined
bgUrl = app.config.favicon_spritesheet
sourceSize = 16
sourceX = Math.abs(parseInt(backgroundPositionX.slice(0, -2)))
sourceY = Math.abs(parseInt(backgroundPositionY.slice(0, -2)))
withImage(bgUrl, (docImg) ->
withImage(defaultUrl, (defaultImg) ->
size = defaultImg.width
canvas = document.createElement('canvas')
ctx = canvas.getContext('2d')
canvas.width = size
canvas.height = size
ctx.drawImage(defaultImg, 0, 0)
docIconPercentage = 65
destinationCoords = size / 100 * (100 - docIconPercentage)
destinationSize = size / 100 * docIconPercentage
ctx.drawImage(docImg, sourceX, sourceY, sourceSize, sourceSize, destinationCoords, destinationCoords, destinationSize, destinationSize)
try
urlCache[doc.slug] = canvas.toDataURL()
favicon.href = urlCache[doc.slug]
currentSlug = doc.slug
catch error
Raven.captureException error, { level: 'info' }
@resetFavicon()
)
)
@resetFavicon = () ->
if defaultUrl != null and currentSlug != null
$('link[rel="icon"]').href = defaultUrl
currentSlug = null