| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- "use strict";
- // markdown-it plugin for:
- // 1. adding target="_blank" to external links
- // 2. normalize internal links to end with `.html`
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.linkPlugin = void 0;
- const url_1 = require("url");
- const indexRE = /(^|.*\/)index.md(#?.*)$/i;
- exports.linkPlugin = (md, externalAttrs) => {
- md.renderer.rules.link_open = (tokens, idx, options, env, self) => {
- const token = tokens[idx];
- const hrefIndex = token.attrIndex('href');
- if (hrefIndex >= 0) {
- const hrefAttr = token.attrs[hrefIndex];
- const url = hrefAttr[1];
- const isExternal = /^https?:/.test(url);
- if (isExternal) {
- Object.entries(externalAttrs).forEach(([key, val]) => {
- token.attrSet(key, val);
- });
- }
- else if (!url.startsWith('#')) {
- normalizeHref(hrefAttr);
- }
- }
- return self.renderToken(tokens, idx, options);
- };
- function normalizeHref(hrefAttr) {
- let url = hrefAttr[1];
- const indexMatch = url.match(indexRE);
- if (indexMatch) {
- const [, path, hash] = indexMatch;
- url = path + hash;
- }
- else {
- let cleanUrl = url.replace(/\#.*$/, '').replace(/\?.*$/, '');
- // .md -> .html
- if (cleanUrl.endsWith('.md')) {
- cleanUrl = cleanUrl.replace(/\.md$/, '.html');
- }
- // ./foo -> ./foo.html
- if (!cleanUrl.endsWith('.html') && !cleanUrl.endsWith('/')) {
- cleanUrl += '.html';
- }
- const parsed = new url_1.URL(url, 'http://a.com');
- url = cleanUrl + parsed.search + parsed.hash;
- }
- // ensure leading . for relative paths
- if (!url.startsWith('/') && !/^\.\//.test(url)) {
- url = './' + url;
- }
- // export it for existence check
- const data = md.__data;
- const links = data.links || (data.links = []);
- links.push(url.replace(/\.html$/, ''));
- // markdown-it encodes the uri
- hrefAttr[1] = decodeURI(url);
- }
- };
- //# sourceMappingURL=link.js.map
|