2020-06-18 22:39:25 +00:00
|
|
|
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}`)
|
2020-10-14 15:16:27 +00:00
|
|
|
element.removeClass('prefetch-candidate')
|
2020-06-18 22:39:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
async init($) {
|
|
|
|
const promises = $('img.prefetch-candidate').map((index, element) => {
|
|
|
|
return prefetch($(element))
|
|
|
|
}).toArray()
|
|
|
|
await Promise.all(promises)
|
|
|
|
}
|
|
|
|
}
|