76 lines · 2.0 KB · Text
RawDownload
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