/* global hexo */ 'use strict'; const { parse } = require('url'); const { unescapeHTML } = require('hexo-util'); hexo.extend.filter.register('after_post_render', data => { const { config } = hexo; const theme = hexo.theme.config; if (!theme.exturl && !theme.lazyload) return; if (theme.lazyload) { data.content = data.content.replace(/(]*) src=/img, '$1 data-src='); } if (theme.exturl) { const siteHost = parse(config.url).hostname || config.url; // External URL icon const exturlIcon = theme.exturl_icon ? '' : ''; data.content = data.content.replace(/]* href="([^"]+)"[^>]*>([^<]+)<\/a>/img, (match, href, html) => { // Exit if the href attribute doesn't exists. if (!href) return match; // Exit if the url has same host with `config.url`, which means it's an internal link. const link = parse(href); if (!link.protocol || link.hostname === siteHost) return match; // Return encrypted URL with title. const title = match.match(/title="([^"]+)"/); const encoded = Buffer.from(unescapeHTML(href)).toString('base64'); if (title) return `${html}${exturlIcon}`; return `${html}${exturlIcon}`; }); } }, 0);