renderer.js 780 B

123456789101112131415161718192021222324252627282930
  1. const request = require('request-promise')
  2. const prefetch = async (element) => {
  3. const url = element.attr(`src`)
  4. let response
  5. try {
  6. response = await request({
  7. method: `GET`,
  8. url,
  9. resolveWithFullResponse: true
  10. })
  11. } catch (err) {
  12. WIKI.logger.warn(`Failed to prefetch ${url}`)
  13. WIKI.logger.warn(err)
  14. return
  15. }
  16. const contentType = response.headers[`content-type`]
  17. const image = Buffer.from(response.body).toString('base64')
  18. element.attr('src', `data:${contentType};base64,${image}`)
  19. element.removeClass('prefetch-candidate')
  20. }
  21. module.exports = {
  22. async init($) {
  23. const promises = $('img.prefetch-candidate').map((index, element) => {
  24. return prefetch($(element))
  25. }).toArray()
  26. await Promise.all(promises)
  27. }
  28. }