| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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
|