@kangc/v-md-editor
Version:
A markdown editor built on Vue
47 lines (37 loc) • 1.35 kB
JavaScript
;
exports.__esModule = true;
exports.default = _default;
// Modified from https://github.com/vuejs/vuepress/blob/master/packages/%40vuepress/markdown/lib/link.js
function _default(md, _ref) {
var externalAttrs = _ref.externalAttrs,
openLinkIcon = _ref.openLinkIcon,
openLinkIconClass = _ref.openLinkIconClass;
var hasOpenExternalLink = false;
md.renderer.rules.link_open = function (tokens, idx, options, env, self) {
var token = tokens[idx];
var hrefIndex = token.attrIndex('href');
if (hrefIndex >= 0) {
var link = token.attrs[hrefIndex];
var href = link[1];
var isExternal = /^https?:/.test(href);
if (isExternal) {
Object.keys(externalAttrs).forEach(function (key) {
token.attrSet(key, externalAttrs[key]);
});
if (/_blank/i.test(externalAttrs.target)) {
hasOpenExternalLink = true;
}
}
}
return self.renderToken(tokens, idx, options);
};
md.renderer.rules.link_close = function (tokens, idx, options, env, self) {
if (hasOpenExternalLink) {
hasOpenExternalLink = false;
if (openLinkIcon && openLinkIconClass) {
return "<i class=\"" + openLinkIconClass + "\"></i>" + self.renderToken(tokens, idx, options);
}
}
return self.renderToken(tokens, idx, options);
};
}