/* global hexo */
'use strict'
hexo.extend.filter.register(
'after_post_render',
function (data) {
const config = this.config
const url = new URL(config.url)
const siteHost = url.hostname || config.url
// Match 'a' tags that don't contain html children.
const regPureATag = /]*)href="([^"]*)"([^>]*)>([^<]*)<\/a>/gim
data.content = data.content.replace(
regPureATag,
function (match, attrBegin, href, attrEnd, html) {
// Exit if the href attribute doesn't exists.
if (!href) return match
let link = ''
try {
link = new URL(href)
} catch (e) {
// Invalid url, e.g. Anchor link.
return match
}
// Exit if the url has same host with `config.url`, which means isn't an external link.
if (!link.protocol || link.hostname === siteHost) return match
return `${html}`
}
)
},
0
)