renderer.js 780 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
const request = require('request-promise')

const prefetch = async (element) => {
  const url = element.attr(`src`)
  let response
  try {
    response = await request({
      method: `GET`,
      url,
      resolveWithFullResponse: true
    })
  } catch (err) {
    WIKI.logger.warn(`Failed to prefetch ${url}`)
    WIKI.logger.warn(err)
    return
  }
  const contentType = response.headers[`content-type`]
  const image = Buffer.from(response.body).toString('base64')
  element.attr('src', `data:${contentType};base64,${image}`)
20
  element.removeClass('prefetch-candidate')
21 22 23 24 25 26 27 28 29 30
}

module.exports = {
  async init($) {
    const promises = $('img.prefetch-candidate').map((index, element) => {
      return prefetch($(element))
    }).toArray()
    await Promise.all(promises)
  }
}