const GithubSlugger = require('github-slugger'); const OCTICON_LINK_ICON_SVG = [ // Basically copied from Github's HTML. Also see // . I wonder what other // attributes can be thrown out to make this image smaller? After all, it is // duplicated for each and every heading. '', ].join(''); function markdownItHeaderAnchors(md) { let slugger = new GithubSlugger(); let defaultRender = md.renderer.rules.heading_open || ((tokens, idx, options, _env, self) => self.renderToken(tokens, idx, options)); // eslint-disable-next-line camelcase md.renderer.rules.heading_open = (tokens, idx, opts, env, self) => { let renderedHeadingOpen = defaultRender(tokens, idx, opts, env, self); let innerText = ''; let headingContentToken = tokens[idx + 1]; headingContentToken.children.forEach((child) => { switch (child.type) { case 'html_block': case 'html_inline': break; case 'emoji': innerText += child.markup; break; default: innerText += child.content; } }); if (innerText.length > 0) { let id = md.utils.escapeHtml(slugger.slug(innerText)); renderedHeadingOpen += ``; } return renderedHeadingOpen; }; } module.exports = markdownItHeaderAnchors;