diff --git a/README.md b/README.md index 2d9bd4f..e9e69e9 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,8 @@ const md = require('markdown-it')() .use(require('markdown-it-anchor'), { slugify: s => slugify(s) }) ``` +### Custimizing the slugify input + Additionally, if you want to further customize the title that gets passed to the `slugify` function, you can do so by customizing the `getTokensText` function, that gets the plain text from a list of @@ -144,6 +146,18 @@ the previous approach with a stock markdown-it, but would also include custom tokens added by any of your markdown-it plugins, which might or might not be desirable for you. Now you have the option! +### Slugifying with state + +If you need access to the markdown-it state from the slugify function, +e.g. to access `state.env`, you can use `slugifyWithState` instead. + +```js +const md = require('markdown-it')() + .use(require('markdown-it-anchor'), { + slugifyWithState: (title, state) => `${state.env.id}-${slugify(title)}` + }) +``` + ## Manually setting the `id` attribute You might want to explicitly set the `id` attribute of your headings diff --git a/dist/markdownItAnchor.js b/dist/markdownItAnchor.js index f2a530e..a77fafb 100644 --- a/dist/markdownItAnchor.js +++ b/dist/markdownItAnchor.js @@ -1,2 +1,2 @@ -var e=!1,n={false:"push",true:"unshift",after:"push",before:"unshift"},t={isPermalinkSymbol:!0};function r(r,a,i,l){var o;if(!e){var c="Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";"object"==typeof process&&process&&process.emitWarning?process.emitWarning(c):console.warn(c),e=!0}var s=[Object.assign(new i.Token("link_open","a",1),{attrs:[].concat(a.permalinkClass?[["class",a.permalinkClass]]:[],[["href",a.permalinkHref(r,i)]],Object.entries(a.permalinkAttrs(r,i)))}),Object.assign(new i.Token("html_block","",0),{content:a.permalinkSymbol,meta:t}),new i.Token("link_close","a",-1)];a.permalinkSpace&&i.tokens[l+1].children[n[a.permalinkBefore]](Object.assign(new i.Token("text","",0),{content:" "})),(o=i.tokens[l+1].children)[n[a.permalinkBefore]].apply(o,s)}function a(e){return"#"+e}function i(e){return{}}var l={class:"header-anchor",symbol:"#",renderHref:a,renderAttrs:i};function o(e){function n(t){return t=Object.assign({},n.defaults,t),function(n,r,a,i){return e(n,t,r,a,i)}}return n.defaults=Object.assign({},l),n.renderPermalinkImpl=e,n}function c(e){var n=[],t=e.filter(function(e){if("class"!==e[0])return!0;n.push(e[1])});return n.length>0&&t.unshift(["class",n.join(" ")]),t}var s=o(function(e,r,a,i,l){var o,s=[Object.assign(new i.Token("link_open","a",1),{attrs:c([].concat(r.class?[["class",r.class]]:[],[["href",r.renderHref(e,i)]],r.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(r.renderAttrs(e,i))))}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("link_close","a",-1)];if(r.space){var u="string"==typeof r.space?r.space:" ";i.tokens[l+1].children[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:u}))}(o=i.tokens[l+1].children)[n[r.placement]].apply(o,s)});Object.assign(s.defaults,{space:!0,placement:"after",ariaHidden:!1});var u=o(s.renderPermalinkImpl);u.defaults=Object.assign({},s.defaults,{ariaHidden:!0});var d=o(function(e,n,t,r,a){var i=[Object.assign(new r.Token("link_open","a",1),{attrs:c([].concat(n.class?[["class",n.class]]:[],[["href",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r))))})].concat(n.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[a+1].children,n.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[a+1]=Object.assign(new r.Token("inline","",0),{children:i})});Object.assign(d.defaults,{safariReaderFix:!1});var f=o(function(e,r,a,i,l){var o;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(r.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+r.style+"`");if(!["aria-describedby","aria-labelledby"].includes(r.style)&&!r.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+r.style+"` style");if("visually-hidden"===r.style&&!r.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var s=i.tokens[l+1].children.filter(function(e){return"text"===e.type||"code_inline"===e.type}).reduce(function(e,n){return e+n.content},""),u=[],d=[];if(r.class&&d.push(["class",r.class]),d.push(["href",r.renderHref(e,i)]),d.push.apply(d,Object.entries(r.renderAttrs(e,i))),"visually-hidden"===r.style){if(u.push(Object.assign(new i.Token("span_open","span",1),{attrs:[["class",r.visuallyHiddenClass]]}),Object.assign(new i.Token("text","",0),{content:r.assistiveText(s)}),new i.Token("span_close","span",-1)),r.space){var f="string"==typeof r.space?r.space:" ";u[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:f}))}u[n[r.placement]](Object.assign(new i.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("span_close","span",-1))}else u.push(Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}));"aria-label"===r.style?d.push(["aria-label",r.assistiveText(s)]):["aria-describedby","aria-labelledby"].includes(r.style)&&d.push([r.style,e]);var b=[Object.assign(new i.Token("link_open","a",1),{attrs:c(d)})].concat(u,[new i.Token("link_close","a",-1)]);(o=i.tokens).splice.apply(o,[l+3,0].concat(b)),r.wrapper&&(i.tokens.splice(l,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[0]+"\n"})),i.tokens.splice(l+3+b.length+1,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[1]+"\n"})))});function b(e,n,t,r){var a=e,i=r;if(t&&Object.prototype.hasOwnProperty.call(n,a))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(n,a);)a=e+"-"+i,i+=1;return n[a]=!0,a}function p(e,n){n=Object.assign({},p.defaults,n),e.core.ruler.push("anchor",function(e){for(var t,a={},i=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o0&&t.unshift(["class",n.join(" ")]),t}var s=o(function(e,r,a,i,l){var o,s=[Object.assign(new i.Token("link_open","a",1),{attrs:c([].concat(r.class?[["class",r.class]]:[],[["href",r.renderHref(e,i)]],r.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(r.renderAttrs(e,i))))}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("link_close","a",-1)];if(r.space){var u="string"==typeof r.space?r.space:" ";i.tokens[l+1].children[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:u}))}(o=i.tokens[l+1].children)[n[r.placement]].apply(o,s)});Object.assign(s.defaults,{space:!0,placement:"after",ariaHidden:!1});var u=o(s.renderPermalinkImpl);u.defaults=Object.assign({},s.defaults,{ariaHidden:!0});var d=o(function(e,n,t,r,a){var i=[Object.assign(new r.Token("link_open","a",1),{attrs:c([].concat(n.class?[["class",n.class]]:[],[["href",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r))))})].concat(n.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[a+1].children,n.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[a+1]=Object.assign(new r.Token("inline","",0),{children:i})});Object.assign(d.defaults,{safariReaderFix:!1});var f=o(function(e,r,a,i,l){var o;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(r.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+r.style+"`");if(!["aria-describedby","aria-labelledby"].includes(r.style)&&!r.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+r.style+"` style");if("visually-hidden"===r.style&&!r.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var s=i.tokens[l+1].children.filter(function(e){return"text"===e.type||"code_inline"===e.type}).reduce(function(e,n){return e+n.content},""),u=[],d=[];if(r.class&&d.push(["class",r.class]),d.push(["href",r.renderHref(e,i)]),d.push.apply(d,Object.entries(r.renderAttrs(e,i))),"visually-hidden"===r.style){if(u.push(Object.assign(new i.Token("span_open","span",1),{attrs:[["class",r.visuallyHiddenClass]]}),Object.assign(new i.Token("text","",0),{content:r.assistiveText(s)}),new i.Token("span_close","span",-1)),r.space){var f="string"==typeof r.space?r.space:" ";u[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:f}))}u[n[r.placement]](Object.assign(new i.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("span_close","span",-1))}else u.push(Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}));"aria-label"===r.style?d.push(["aria-label",r.assistiveText(s)]):["aria-describedby","aria-labelledby"].includes(r.style)&&d.push([r.style,e]);var b=[Object.assign(new i.Token("link_open","a",1),{attrs:c(d)})].concat(u,[new i.Token("link_close","a",-1)]);(o=i.tokens).splice.apply(o,[l+3,0].concat(b)),r.wrapper&&(i.tokens.splice(l,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[0]+"\n"})),i.tokens.splice(l+3+b.length+1,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[1]+"\n"})))});function b(e,n,t,r){var a=e,i=r;if(t&&Object.prototype.hasOwnProperty.call(n,a))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(n,a);)a=e+"-"+i,i+=1;return n[a]=!0,a}function p(e,n){n=Object.assign({},p.defaults,n),e.core.ruler.push("anchor",function(e){for(var t,a={},i=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o {\n return renderPermalinkImpl(slug, opts, anchorOpts, state, idx)\n }\n }\n\n renderPermalink.defaults = Object.assign({}, commonDefaults)\n renderPermalink.renderPermalinkImpl = renderPermalinkImpl\n\n return renderPermalink\n}\n\nfunction mergeDuplicateClassAttrs(attrs) {\n const classValues = [];\n const mergedAttrs = attrs.filter(([key, value]) => {\n if (key !== 'class') {\n return true;\n }\n classValues.push(value);\n });\n\n if (classValues.length > 0) {\n mergedAttrs.unshift(['class', classValues.join(' ')]);\n }\n\n return mergedAttrs;\n}\n\nexport const linkInsideHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...(opts.ariaHidden ? [['aria-hidden', 'true']] : []),\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n Object.assign(new state.Token('html_inline', '', 0), { content: opts.symbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n state.tokens[idx + 1].children[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n state.tokens[idx + 1].children[position[opts.placement]](...linkTokens)\n})\n\nObject.assign(linkInsideHeader.defaults, {\n space: true,\n placement: 'after',\n ariaHidden: false\n})\n\nexport const ariaHidden = makePermalink(linkInsideHeader.renderPermalinkImpl)\n\nariaHidden.defaults = Object.assign({}, linkInsideHeader.defaults, {\n ariaHidden: true\n})\n\nexport const headerLink = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n ...(opts.safariReaderFix ? [new state.Token('span_open', 'span', 1)] : []),\n ...state.tokens[idx + 1].children,\n ...(opts.safariReaderFix ? [new state.Token('span_close', 'span', -1)] : []),\n new state.Token('link_close', 'a', -1)\n ]\n\n state.tokens[idx + 1] = Object.assign(new state.Token('inline', '', 0), {\n children: linkTokens\n })\n})\n\nObject.assign(headerLink.defaults, {\n safariReaderFix: false\n})\n\nexport const linkAfterHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n if (!['visually-hidden', 'aria-label', 'aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called with unknown style option \\`${opts.style}\\``)\n }\n\n if (!['aria-describedby', 'aria-labelledby'].includes(opts.style) && !opts.assistiveText) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called without the \\`assistiveText\\` option in \\`${opts.style}\\` style`)\n }\n\n if (opts.style === 'visually-hidden' && !opts.visuallyHiddenClass) {\n throw new Error('`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style')\n }\n\n const title = state.tokens[idx + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n const subLinkTokens = []\n const linkAttrs = []\n\n if (opts.class) {\n linkAttrs.push(['class', opts.class])\n }\n\n linkAttrs.push(['href', opts.renderHref(slug, state)])\n linkAttrs.push(...Object.entries(opts.renderAttrs(slug, state)))\n\n if (opts.style === 'visually-hidden') {\n subLinkTokens.push(\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['class', opts.visuallyHiddenClass]],\n }),\n Object.assign(new state.Token('text', '', 0), {\n content: opts.assistiveText(title)\n }),\n new state.Token('span_close', 'span', -1)\n )\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n subLinkTokens[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n subLinkTokens[position[opts.placement]](\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['aria-hidden', 'true']],\n }),\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n }),\n new state.Token('span_close', 'span', -1)\n )\n } else {\n subLinkTokens.push(\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n })\n )\n }\n\n if (opts.style === 'aria-label') {\n linkAttrs.push(['aria-label', opts.assistiveText(title)])\n } else if (['aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n linkAttrs.push([opts.style, slug])\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs(linkAttrs)\n }),\n ...subLinkTokens,\n new state.Token('link_close', 'a', -1),\n ]\n\n state.tokens.splice(idx + 3, 0, ...linkTokens)\n\n if (opts.wrapper) {\n state.tokens.splice(idx, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[0] + '\\n'\n }))\n\n state.tokens.splice(idx + 3 + linkTokens.length + 1, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[1] + '\\n'\n }))\n }\n})\n\nObject.assign(linkAfterHeader.defaults, {\n style: 'visually-hidden',\n space: true,\n placement: 'after',\n wrapper: null\n})\n","import * as permalink from './permalink'\n\nconst slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nfunction getTokensText (tokens) {\n return tokens\n .filter(t => ['text', 'code_inline'].includes(t.type))\n .map(t => t.content)\n .join('')\n}\n\nfunction uniqueSlug (slug, slugs, failOnNonUnique, startIndex) {\n let uniq = slug\n let i = startIndex\n\n if (failOnNonUnique && Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n throw new Error(`User defined \\`id\\` attribute \\`${slug}\\` is not unique. Please fix it in your Markdown to continue.`)\n } else {\n while (Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n uniq = `${slug}-${i}`\n i += 1\n }\n }\n\n slugs[uniq] = true\n\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nfunction anchor (md, opts) {\n opts = Object.assign({}, anchor.defaults, opts)\n\n md.core.ruler.push('anchor', state => {\n const slugs = {}\n const tokens = state.tokens\n\n const isLevelSelected = Array.isArray(opts.level)\n ? isLevelSelectedArray(opts.level)\n : isLevelSelectedNumber(opts.level)\n\n for (let idx = 0; idx < tokens.length; idx++) {\n const token = tokens[idx]\n\n if (token.type !== 'heading_open') {\n continue\n }\n\n if (!isLevelSelected(Number(token.tag.substr(1)))) {\n continue\n }\n\n // Aggregate the next token children text.\n const title = opts.getTokensText(tokens[idx + 1].children)\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n slug = uniqueSlug(opts.slugify(title), slugs, false, opts.uniqueSlugStartIndex)\n } else {\n slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex)\n }\n\n token.attrSet('id', slug)\n\n if (opts.tabIndex !== false) {\n token.attrSet('tabindex', `${opts.tabIndex}`)\n }\n\n if (typeof opts.permalink === 'function') {\n opts.permalink(slug, opts, state, idx)\n } else if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, idx)\n } else if (opts.renderPermalink && opts.renderPermalink !== permalink.legacy) {\n opts.renderPermalink(slug, opts, state, idx)\n }\n\n // A permalink renderer could modify the `tokens` array so\n // make sure to get the up-to-date index on each iteration.\n idx = tokens.indexOf(token)\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n }\n })\n}\n\nanchor.permalink = permalink\n\nanchor.defaults = {\n level: 1,\n slugify,\n uniqueSlugStartIndex: 1,\n tabIndex: '-1',\n getTokensText,\n\n // Legacy options.\n permalink: false,\n renderPermalink: permalink.legacy,\n permalinkClass: permalink.ariaHidden.defaults.class,\n permalinkSpace: permalink.ariaHidden.defaults.space,\n permalinkSymbol: '¶',\n permalinkBefore: permalink.ariaHidden.defaults.placement === 'before',\n permalinkHref: permalink.ariaHidden.defaults.renderHref,\n permalinkAttrs: permalink.ariaHidden.defaults.renderAttrs\n}\n\n// Dirty hack to make `import anchor from 'markdown-it-anchor'` work with\n// TypeScript which doesn't support the `module` field of `package.json` and\n// will always get the CommonJS version which otherwise wouldn't have a\n// `default` key, resulting in markdown-it-anchor being undefined when being\n// imported that way.\nanchor.default = anchor\n\nexport default anchor\n"],"names":["emittedWarning","position","false","true","after","before","permalinkSymbolMeta","isPermalinkSymbol","legacy","slug","opts","state","idx","_state$tokens$childre","warningText","process","emitWarning","console","warn","linkTokens","Object","assign","Token","attrs","concat","permalinkClass","permalinkHref","entries","permalinkAttrs","content","permalinkSymbol","meta","permalinkSpace","tokens","children","permalinkBefore","apply","renderHref","renderAttrs","commonDefaults","class","symbol","makePermalink","renderPermalinkImpl","renderPermalink","defaults","anchorOpts","mergeDuplicateClassAttrs","classValues","mergedAttrs","filter","_ref","push","length","unshift","join","linkInsideHeader","_state$tokens$childre2","ariaHidden","space","placement","headerLink","safariReaderFix","linkAfterHeader","_state$tokens","includes","style","Error","assistiveText","visuallyHiddenClass","title","token","type","reduce","acc","t","subLinkTokens","linkAttrs","splice","wrapper","uniqueSlug","slugs","failOnNonUnique","startIndex","uniq","i","prototype","hasOwnProperty","call","anchor","md","core","ruler","selection","isLevelSelected","Array","isArray","level","isLevelSelectedNumber","Number","tag","substr","getTokensText","attrGet","slugify","uniqueSlugStartIndex","attrSet","tabIndex","permalink","indexOf","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","map"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"markdownItAnchor.js","sources":["../permalink.js","../index.js"],"sourcesContent":["let emittedWarning = false\n\nconst position = {\n false: 'push',\n true: 'unshift',\n after: 'push',\n before: 'unshift'\n}\n\nconst permalinkSymbolMeta = {\n isPermalinkSymbol: true\n}\n\nexport function legacy (slug, opts, state, idx) {\n if (!emittedWarning) {\n const warningText = 'Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks'\n\n if (typeof process === 'object' && process && process.emitWarning) {\n process.emitWarning(warningText)\n } else {\n console.warn(warningText)\n }\n\n emittedWarning = true\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: [\n ...(opts.permalinkClass ? [['class', opts.permalinkClass]] : []),\n ['href', opts.permalinkHref(slug, state)],\n ...Object.entries(opts.permalinkAttrs(slug, state))\n ]\n }),\n Object.assign(new state.Token('html_block', '', 0), { content: opts.permalinkSymbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.permalinkSpace) {\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](Object.assign(new state.Token('text', '', 0), { content: ' ' }))\n }\n\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](...linkTokens)\n}\n\nexport function renderHref (slug) {\n return `#${slug}`\n}\n\nexport function renderAttrs (slug) {\n return {}\n}\n\nconst commonDefaults = {\n class: 'header-anchor',\n symbol: '#',\n renderHref,\n renderAttrs\n}\n\nexport function makePermalink (renderPermalinkImpl) {\n function renderPermalink (opts) {\n opts = Object.assign({}, renderPermalink.defaults, opts)\n\n return (slug, anchorOpts, state, idx) => {\n return renderPermalinkImpl(slug, opts, anchorOpts, state, idx)\n }\n }\n\n renderPermalink.defaults = Object.assign({}, commonDefaults)\n renderPermalink.renderPermalinkImpl = renderPermalinkImpl\n\n return renderPermalink\n}\n\nfunction mergeDuplicateClassAttrs(attrs) {\n const classValues = [];\n const mergedAttrs = attrs.filter(([key, value]) => {\n if (key !== 'class') {\n return true;\n }\n classValues.push(value);\n });\n\n if (classValues.length > 0) {\n mergedAttrs.unshift(['class', classValues.join(' ')]);\n }\n\n return mergedAttrs;\n}\n\nexport const linkInsideHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...(opts.ariaHidden ? [['aria-hidden', 'true']] : []),\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n Object.assign(new state.Token('html_inline', '', 0), { content: opts.symbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n state.tokens[idx + 1].children[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n state.tokens[idx + 1].children[position[opts.placement]](...linkTokens)\n})\n\nObject.assign(linkInsideHeader.defaults, {\n space: true,\n placement: 'after',\n ariaHidden: false\n})\n\nexport const ariaHidden = makePermalink(linkInsideHeader.renderPermalinkImpl)\n\nariaHidden.defaults = Object.assign({}, linkInsideHeader.defaults, {\n ariaHidden: true\n})\n\nexport const headerLink = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n ...(opts.safariReaderFix ? [new state.Token('span_open', 'span', 1)] : []),\n ...state.tokens[idx + 1].children,\n ...(opts.safariReaderFix ? [new state.Token('span_close', 'span', -1)] : []),\n new state.Token('link_close', 'a', -1)\n ]\n\n state.tokens[idx + 1] = Object.assign(new state.Token('inline', '', 0), {\n children: linkTokens\n })\n})\n\nObject.assign(headerLink.defaults, {\n safariReaderFix: false\n})\n\nexport const linkAfterHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n if (!['visually-hidden', 'aria-label', 'aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called with unknown style option \\`${opts.style}\\``)\n }\n\n if (!['aria-describedby', 'aria-labelledby'].includes(opts.style) && !opts.assistiveText) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called without the \\`assistiveText\\` option in \\`${opts.style}\\` style`)\n }\n\n if (opts.style === 'visually-hidden' && !opts.visuallyHiddenClass) {\n throw new Error('`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style')\n }\n\n const title = state.tokens[idx + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n const subLinkTokens = []\n const linkAttrs = []\n\n if (opts.class) {\n linkAttrs.push(['class', opts.class])\n }\n\n linkAttrs.push(['href', opts.renderHref(slug, state)])\n linkAttrs.push(...Object.entries(opts.renderAttrs(slug, state)))\n\n if (opts.style === 'visually-hidden') {\n subLinkTokens.push(\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['class', opts.visuallyHiddenClass]],\n }),\n Object.assign(new state.Token('text', '', 0), {\n content: opts.assistiveText(title)\n }),\n new state.Token('span_close', 'span', -1)\n )\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n subLinkTokens[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n subLinkTokens[position[opts.placement]](\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['aria-hidden', 'true']],\n }),\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n }),\n new state.Token('span_close', 'span', -1)\n )\n } else {\n subLinkTokens.push(\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n })\n )\n }\n\n if (opts.style === 'aria-label') {\n linkAttrs.push(['aria-label', opts.assistiveText(title)])\n } else if (['aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n linkAttrs.push([opts.style, slug])\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs(linkAttrs)\n }),\n ...subLinkTokens,\n new state.Token('link_close', 'a', -1),\n ]\n\n state.tokens.splice(idx + 3, 0, ...linkTokens)\n\n if (opts.wrapper) {\n state.tokens.splice(idx, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[0] + '\\n'\n }))\n\n state.tokens.splice(idx + 3 + linkTokens.length + 1, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[1] + '\\n'\n }))\n }\n})\n\nObject.assign(linkAfterHeader.defaults, {\n style: 'visually-hidden',\n space: true,\n placement: 'after',\n wrapper: null\n})\n","import * as permalink from './permalink'\n\nconst slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nfunction getTokensText (tokens) {\n return tokens\n .filter(t => ['text', 'code_inline'].includes(t.type))\n .map(t => t.content)\n .join('')\n}\n\nfunction uniqueSlug (slug, slugs, failOnNonUnique, startIndex) {\n let uniq = slug\n let i = startIndex\n\n if (failOnNonUnique && Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n throw new Error(`User defined \\`id\\` attribute \\`${slug}\\` is not unique. Please fix it in your Markdown to continue.`)\n } else {\n while (Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n uniq = `${slug}-${i}`\n i += 1\n }\n }\n\n slugs[uniq] = true\n\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nfunction anchor (md, opts) {\n opts = Object.assign({}, anchor.defaults, opts)\n\n md.core.ruler.push('anchor', state => {\n const slugs = {}\n const tokens = state.tokens\n\n const isLevelSelected = Array.isArray(opts.level)\n ? isLevelSelectedArray(opts.level)\n : isLevelSelectedNumber(opts.level)\n\n for (let idx = 0; idx < tokens.length; idx++) {\n const token = tokens[idx]\n\n if (token.type !== 'heading_open') {\n continue\n }\n\n if (!isLevelSelected(Number(token.tag.substr(1)))) {\n continue\n }\n\n // Aggregate the next token children text.\n const title = opts.getTokensText(tokens[idx + 1].children)\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n if (opts.slugifyWithState) {\n slug = opts.slugifyWithState(title, state)\n } else {\n slug = opts.slugify(title)\n }\n\n slug = uniqueSlug(slug, slugs, false, opts.uniqueSlugStartIndex)\n } else {\n slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex)\n }\n\n token.attrSet('id', slug)\n\n if (opts.tabIndex !== false) {\n token.attrSet('tabindex', `${opts.tabIndex}`)\n }\n\n if (typeof opts.permalink === 'function') {\n opts.permalink(slug, opts, state, idx)\n } else if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, idx)\n } else if (opts.renderPermalink && opts.renderPermalink !== permalink.legacy) {\n opts.renderPermalink(slug, opts, state, idx)\n }\n\n // A permalink renderer could modify the `tokens` array so\n // make sure to get the up-to-date index on each iteration.\n idx = tokens.indexOf(token)\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n }\n })\n}\n\nanchor.permalink = permalink\n\nanchor.defaults = {\n level: 1,\n slugify,\n uniqueSlugStartIndex: 1,\n tabIndex: '-1',\n getTokensText,\n\n // Legacy options.\n permalink: false,\n renderPermalink: permalink.legacy,\n permalinkClass: permalink.ariaHidden.defaults.class,\n permalinkSpace: permalink.ariaHidden.defaults.space,\n permalinkSymbol: '¶',\n permalinkBefore: permalink.ariaHidden.defaults.placement === 'before',\n permalinkHref: permalink.ariaHidden.defaults.renderHref,\n permalinkAttrs: permalink.ariaHidden.defaults.renderAttrs\n}\n\n// Dirty hack to make `import anchor from 'markdown-it-anchor'` work with\n// TypeScript which doesn't support the `module` field of `package.json` and\n// will always get the CommonJS version which otherwise wouldn't have a\n// `default` key, resulting in markdown-it-anchor being undefined when being\n// imported that way.\nanchor.default = anchor\n\nexport default anchor\n"],"names":["emittedWarning","position","false","true","after","before","permalinkSymbolMeta","isPermalinkSymbol","legacy","slug","opts","state","idx","_state$tokens$childre","warningText","process","emitWarning","console","warn","linkTokens","Object","assign","Token","attrs","concat","permalinkClass","permalinkHref","entries","permalinkAttrs","content","permalinkSymbol","meta","permalinkSpace","tokens","children","permalinkBefore","apply","renderHref","renderAttrs","commonDefaults","class","symbol","makePermalink","renderPermalinkImpl","renderPermalink","defaults","anchorOpts","mergeDuplicateClassAttrs","classValues","mergedAttrs","filter","_ref","push","length","unshift","join","linkInsideHeader","_state$tokens$childre2","ariaHidden","space","placement","headerLink","safariReaderFix","linkAfterHeader","_state$tokens","includes","style","Error","assistiveText","visuallyHiddenClass","title","token","type","reduce","acc","t","subLinkTokens","linkAttrs","splice","wrapper","uniqueSlug","slugs","failOnNonUnique","startIndex","uniq","i","prototype","hasOwnProperty","call","anchor","md","core","ruler","selection","isLevelSelected","Array","isArray","level","isLevelSelectedNumber","Number","tag","substr","getTokensText","attrGet","slugifyWithState","slugify","uniqueSlugStartIndex","attrSet","tabIndex","permalink","indexOf","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","map"],"mappings":"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"} \ No newline at end of file diff --git a/dist/markdownItAnchor.mjs b/dist/markdownItAnchor.mjs index b95b9d7..f0bef20 100644 --- a/dist/markdownItAnchor.mjs +++ b/dist/markdownItAnchor.mjs @@ -1,2 +1,2 @@ -var e=!1,n={false:"push",true:"unshift",after:"push",before:"unshift"},t={isPermalinkSymbol:!0};function r(r,a,i,l){var o;if(!e){var c="Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";"object"==typeof process&&process&&process.emitWarning?process.emitWarning(c):console.warn(c),e=!0}var s=[Object.assign(new i.Token("link_open","a",1),{attrs:[].concat(a.permalinkClass?[["class",a.permalinkClass]]:[],[["href",a.permalinkHref(r,i)]],Object.entries(a.permalinkAttrs(r,i)))}),Object.assign(new i.Token("html_block","",0),{content:a.permalinkSymbol,meta:t}),new i.Token("link_close","a",-1)];a.permalinkSpace&&i.tokens[l+1].children[n[a.permalinkBefore]](Object.assign(new i.Token("text","",0),{content:" "})),(o=i.tokens[l+1].children)[n[a.permalinkBefore]].apply(o,s)}function a(e){return"#"+e}function i(e){return{}}var l={class:"header-anchor",symbol:"#",renderHref:a,renderAttrs:i};function o(e){function n(t){return t=Object.assign({},n.defaults,t),function(n,r,a,i){return e(n,t,r,a,i)}}return n.defaults=Object.assign({},l),n.renderPermalinkImpl=e,n}function c(e){var n=[],t=e.filter(function(e){if("class"!==e[0])return!0;n.push(e[1])});return n.length>0&&t.unshift(["class",n.join(" ")]),t}var s=o(function(e,r,a,i,l){var o,s=[Object.assign(new i.Token("link_open","a",1),{attrs:c([].concat(r.class?[["class",r.class]]:[],[["href",r.renderHref(e,i)]],r.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(r.renderAttrs(e,i))))}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("link_close","a",-1)];if(r.space){var u="string"==typeof r.space?r.space:" ";i.tokens[l+1].children[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:u}))}(o=i.tokens[l+1].children)[n[r.placement]].apply(o,s)});Object.assign(s.defaults,{space:!0,placement:"after",ariaHidden:!1});var u=o(s.renderPermalinkImpl);u.defaults=Object.assign({},s.defaults,{ariaHidden:!0});var d=o(function(e,n,t,r,a){var i=[Object.assign(new r.Token("link_open","a",1),{attrs:c([].concat(n.class?[["class",n.class]]:[],[["href",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r))))})].concat(n.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[a+1].children,n.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[a+1]=Object.assign(new r.Token("inline","",0),{children:i})});Object.assign(d.defaults,{safariReaderFix:!1});var f=o(function(e,r,a,i,l){var o;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(r.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+r.style+"`");if(!["aria-describedby","aria-labelledby"].includes(r.style)&&!r.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+r.style+"` style");if("visually-hidden"===r.style&&!r.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var s=i.tokens[l+1].children.filter(function(e){return"text"===e.type||"code_inline"===e.type}).reduce(function(e,n){return e+n.content},""),u=[],d=[];if(r.class&&d.push(["class",r.class]),d.push(["href",r.renderHref(e,i)]),d.push.apply(d,Object.entries(r.renderAttrs(e,i))),"visually-hidden"===r.style){if(u.push(Object.assign(new i.Token("span_open","span",1),{attrs:[["class",r.visuallyHiddenClass]]}),Object.assign(new i.Token("text","",0),{content:r.assistiveText(s)}),new i.Token("span_close","span",-1)),r.space){var f="string"==typeof r.space?r.space:" ";u[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:f}))}u[n[r.placement]](Object.assign(new i.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("span_close","span",-1))}else u.push(Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}));"aria-label"===r.style?d.push(["aria-label",r.assistiveText(s)]):["aria-describedby","aria-labelledby"].includes(r.style)&&d.push([r.style,e]);var p=[Object.assign(new i.Token("link_open","a",1),{attrs:c(d)})].concat(u,[new i.Token("link_close","a",-1)]);(o=i.tokens).splice.apply(o,[l+3,0].concat(p)),r.wrapper&&(i.tokens.splice(l,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[0]+"\n"})),i.tokens.splice(l+3+p.length+1,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[1]+"\n"})))});function p(e,n,t,r){var a=e,i=r;if(t&&Object.prototype.hasOwnProperty.call(n,a))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(n,a);)a=e+"-"+i,i+=1;return n[a]=!0,a}function b(e,n){n=Object.assign({},b.defaults,n),e.core.ruler.push("anchor",function(e){for(var t,a={},i=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o0&&t.unshift(["class",n.join(" ")]),t}var s=o(function(e,r,a,i,l){var o,s=[Object.assign(new i.Token("link_open","a",1),{attrs:c([].concat(r.class?[["class",r.class]]:[],[["href",r.renderHref(e,i)]],r.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(r.renderAttrs(e,i))))}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("link_close","a",-1)];if(r.space){var u="string"==typeof r.space?r.space:" ";i.tokens[l+1].children[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:u}))}(o=i.tokens[l+1].children)[n[r.placement]].apply(o,s)});Object.assign(s.defaults,{space:!0,placement:"after",ariaHidden:!1});var u=o(s.renderPermalinkImpl);u.defaults=Object.assign({},s.defaults,{ariaHidden:!0});var d=o(function(e,n,t,r,a){var i=[Object.assign(new r.Token("link_open","a",1),{attrs:c([].concat(n.class?[["class",n.class]]:[],[["href",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r))))})].concat(n.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[a+1].children,n.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[a+1]=Object.assign(new r.Token("inline","",0),{children:i})});Object.assign(d.defaults,{safariReaderFix:!1});var f=o(function(e,r,a,i,l){var o;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(r.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+r.style+"`");if(!["aria-describedby","aria-labelledby"].includes(r.style)&&!r.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+r.style+"` style");if("visually-hidden"===r.style&&!r.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var s=i.tokens[l+1].children.filter(function(e){return"text"===e.type||"code_inline"===e.type}).reduce(function(e,n){return e+n.content},""),u=[],d=[];if(r.class&&d.push(["class",r.class]),d.push(["href",r.renderHref(e,i)]),d.push.apply(d,Object.entries(r.renderAttrs(e,i))),"visually-hidden"===r.style){if(u.push(Object.assign(new i.Token("span_open","span",1),{attrs:[["class",r.visuallyHiddenClass]]}),Object.assign(new i.Token("text","",0),{content:r.assistiveText(s)}),new i.Token("span_close","span",-1)),r.space){var f="string"==typeof r.space?r.space:" ";u[n[r.placement]](Object.assign(new i.Token("string"==typeof r.space?"html_inline":"text","",0),{content:f}))}u[n[r.placement]](Object.assign(new i.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}),new i.Token("span_close","span",-1))}else u.push(Object.assign(new i.Token("html_inline","",0),{content:r.symbol,meta:t}));"aria-label"===r.style?d.push(["aria-label",r.assistiveText(s)]):["aria-describedby","aria-labelledby"].includes(r.style)&&d.push([r.style,e]);var p=[Object.assign(new i.Token("link_open","a",1),{attrs:c(d)})].concat(u,[new i.Token("link_close","a",-1)]);(o=i.tokens).splice.apply(o,[l+3,0].concat(p)),r.wrapper&&(i.tokens.splice(l,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[0]+"\n"})),i.tokens.splice(l+3+p.length+1,0,Object.assign(new i.Token("html_block","",0),{content:r.wrapper[1]+"\n"})))});function p(e,n,t,r){var a=e,i=r;if(t&&Object.prototype.hasOwnProperty.call(n,a))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(n,a);)a=e+"-"+i,i+=1;return n[a]=!0,a}function b(e,n){n=Object.assign({},b.defaults,n),e.core.ruler.push("anchor",function(e){for(var t,a={},i=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o {\n return renderPermalinkImpl(slug, opts, anchorOpts, state, idx)\n }\n }\n\n renderPermalink.defaults = Object.assign({}, commonDefaults)\n renderPermalink.renderPermalinkImpl = renderPermalinkImpl\n\n return renderPermalink\n}\n\nfunction mergeDuplicateClassAttrs(attrs) {\n const classValues = [];\n const mergedAttrs = attrs.filter(([key, value]) => {\n if (key !== 'class') {\n return true;\n }\n classValues.push(value);\n });\n\n if (classValues.length > 0) {\n mergedAttrs.unshift(['class', classValues.join(' ')]);\n }\n\n return mergedAttrs;\n}\n\nexport const linkInsideHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...(opts.ariaHidden ? [['aria-hidden', 'true']] : []),\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n Object.assign(new state.Token('html_inline', '', 0), { content: opts.symbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n state.tokens[idx + 1].children[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n state.tokens[idx + 1].children[position[opts.placement]](...linkTokens)\n})\n\nObject.assign(linkInsideHeader.defaults, {\n space: true,\n placement: 'after',\n ariaHidden: false\n})\n\nexport const ariaHidden = makePermalink(linkInsideHeader.renderPermalinkImpl)\n\nariaHidden.defaults = Object.assign({}, linkInsideHeader.defaults, {\n ariaHidden: true\n})\n\nexport const headerLink = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n ...(opts.safariReaderFix ? [new state.Token('span_open', 'span', 1)] : []),\n ...state.tokens[idx + 1].children,\n ...(opts.safariReaderFix ? [new state.Token('span_close', 'span', -1)] : []),\n new state.Token('link_close', 'a', -1)\n ]\n\n state.tokens[idx + 1] = Object.assign(new state.Token('inline', '', 0), {\n children: linkTokens\n })\n})\n\nObject.assign(headerLink.defaults, {\n safariReaderFix: false\n})\n\nexport const linkAfterHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n if (!['visually-hidden', 'aria-label', 'aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called with unknown style option \\`${opts.style}\\``)\n }\n\n if (!['aria-describedby', 'aria-labelledby'].includes(opts.style) && !opts.assistiveText) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called without the \\`assistiveText\\` option in \\`${opts.style}\\` style`)\n }\n\n if (opts.style === 'visually-hidden' && !opts.visuallyHiddenClass) {\n throw new Error('`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style')\n }\n\n const title = state.tokens[idx + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n const subLinkTokens = []\n const linkAttrs = []\n\n if (opts.class) {\n linkAttrs.push(['class', opts.class])\n }\n\n linkAttrs.push(['href', opts.renderHref(slug, state)])\n linkAttrs.push(...Object.entries(opts.renderAttrs(slug, state)))\n\n if (opts.style === 'visually-hidden') {\n subLinkTokens.push(\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['class', opts.visuallyHiddenClass]],\n }),\n Object.assign(new state.Token('text', '', 0), {\n content: opts.assistiveText(title)\n }),\n new state.Token('span_close', 'span', -1)\n )\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n subLinkTokens[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n subLinkTokens[position[opts.placement]](\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['aria-hidden', 'true']],\n }),\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n }),\n new state.Token('span_close', 'span', -1)\n )\n } else {\n subLinkTokens.push(\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n })\n )\n }\n\n if (opts.style === 'aria-label') {\n linkAttrs.push(['aria-label', opts.assistiveText(title)])\n } else if (['aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n linkAttrs.push([opts.style, slug])\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs(linkAttrs)\n }),\n ...subLinkTokens,\n new state.Token('link_close', 'a', -1),\n ]\n\n state.tokens.splice(idx + 3, 0, ...linkTokens)\n\n if (opts.wrapper) {\n state.tokens.splice(idx, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[0] + '\\n'\n }))\n\n state.tokens.splice(idx + 3 + linkTokens.length + 1, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[1] + '\\n'\n }))\n }\n})\n\nObject.assign(linkAfterHeader.defaults, {\n style: 'visually-hidden',\n space: true,\n placement: 'after',\n wrapper: null\n})\n","import * as permalink from './permalink'\n\nconst slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nfunction getTokensText (tokens) {\n return tokens\n .filter(t => ['text', 'code_inline'].includes(t.type))\n .map(t => t.content)\n .join('')\n}\n\nfunction uniqueSlug (slug, slugs, failOnNonUnique, startIndex) {\n let uniq = slug\n let i = startIndex\n\n if (failOnNonUnique && Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n throw new Error(`User defined \\`id\\` attribute \\`${slug}\\` is not unique. Please fix it in your Markdown to continue.`)\n } else {\n while (Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n uniq = `${slug}-${i}`\n i += 1\n }\n }\n\n slugs[uniq] = true\n\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nfunction anchor (md, opts) {\n opts = Object.assign({}, anchor.defaults, opts)\n\n md.core.ruler.push('anchor', state => {\n const slugs = {}\n const tokens = state.tokens\n\n const isLevelSelected = Array.isArray(opts.level)\n ? isLevelSelectedArray(opts.level)\n : isLevelSelectedNumber(opts.level)\n\n for (let idx = 0; idx < tokens.length; idx++) {\n const token = tokens[idx]\n\n if (token.type !== 'heading_open') {\n continue\n }\n\n if (!isLevelSelected(Number(token.tag.substr(1)))) {\n continue\n }\n\n // Aggregate the next token children text.\n const title = opts.getTokensText(tokens[idx + 1].children)\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n slug = uniqueSlug(opts.slugify(title), slugs, false, opts.uniqueSlugStartIndex)\n } else {\n slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex)\n }\n\n token.attrSet('id', slug)\n\n if (opts.tabIndex !== false) {\n token.attrSet('tabindex', `${opts.tabIndex}`)\n }\n\n if (typeof opts.permalink === 'function') {\n opts.permalink(slug, opts, state, idx)\n } else if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, idx)\n } else if (opts.renderPermalink && opts.renderPermalink !== permalink.legacy) {\n opts.renderPermalink(slug, opts, state, idx)\n }\n\n // A permalink renderer could modify the `tokens` array so\n // make sure to get the up-to-date index on each iteration.\n idx = tokens.indexOf(token)\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n }\n })\n}\n\nanchor.permalink = permalink\n\nanchor.defaults = {\n level: 1,\n slugify,\n uniqueSlugStartIndex: 1,\n tabIndex: '-1',\n getTokensText,\n\n // Legacy options.\n permalink: false,\n renderPermalink: permalink.legacy,\n permalinkClass: permalink.ariaHidden.defaults.class,\n permalinkSpace: permalink.ariaHidden.defaults.space,\n permalinkSymbol: '¶',\n permalinkBefore: permalink.ariaHidden.defaults.placement === 'before',\n permalinkHref: permalink.ariaHidden.defaults.renderHref,\n permalinkAttrs: permalink.ariaHidden.defaults.renderAttrs\n}\n\n// Dirty hack to make `import anchor from 'markdown-it-anchor'` work with\n// TypeScript which doesn't support the `module` field of `package.json` and\n// will always get the CommonJS version which otherwise wouldn't have a\n// `default` key, resulting in markdown-it-anchor being undefined when being\n// imported that way.\nanchor.default = anchor\n\nexport default anchor\n"],"names":["emittedWarning","position","false","true","after","before","permalinkSymbolMeta","isPermalinkSymbol","legacy","slug","opts","state","idx","_state$tokens$childre","warningText","process","emitWarning","console","warn","linkTokens","Object","assign","Token","attrs","concat","permalinkClass","permalinkHref","entries","permalinkAttrs","content","permalinkSymbol","meta","permalinkSpace","tokens","children","permalinkBefore","apply","renderHref","renderAttrs","commonDefaults","class","symbol","makePermalink","renderPermalinkImpl","renderPermalink","defaults","anchorOpts","mergeDuplicateClassAttrs","classValues","mergedAttrs","filter","_ref","push","length","unshift","join","linkInsideHeader","_state$tokens$childre2","ariaHidden","space","placement","headerLink","safariReaderFix","linkAfterHeader","_state$tokens","includes","style","Error","assistiveText","visuallyHiddenClass","title","token","type","reduce","acc","t","subLinkTokens","linkAttrs","splice","wrapper","uniqueSlug","slugs","failOnNonUnique","startIndex","uniq","i","prototype","hasOwnProperty","call","anchor","md","core","ruler","selection","isLevelSelected","Array","isArray","level","isLevelSelectedNumber","Number","tag","substr","getTokensText","attrGet","slugify","uniqueSlugStartIndex","attrSet","tabIndex","permalink","indexOf","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","map"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"markdownItAnchor.mjs","sources":["../permalink.js","../index.js"],"sourcesContent":["let emittedWarning = false\n\nconst position = {\n false: 'push',\n true: 'unshift',\n after: 'push',\n before: 'unshift'\n}\n\nconst permalinkSymbolMeta = {\n isPermalinkSymbol: true\n}\n\nexport function legacy (slug, opts, state, idx) {\n if (!emittedWarning) {\n const warningText = 'Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks'\n\n if (typeof process === 'object' && process && process.emitWarning) {\n process.emitWarning(warningText)\n } else {\n console.warn(warningText)\n }\n\n emittedWarning = true\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: [\n ...(opts.permalinkClass ? [['class', opts.permalinkClass]] : []),\n ['href', opts.permalinkHref(slug, state)],\n ...Object.entries(opts.permalinkAttrs(slug, state))\n ]\n }),\n Object.assign(new state.Token('html_block', '', 0), { content: opts.permalinkSymbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.permalinkSpace) {\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](Object.assign(new state.Token('text', '', 0), { content: ' ' }))\n }\n\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](...linkTokens)\n}\n\nexport function renderHref (slug) {\n return `#${slug}`\n}\n\nexport function renderAttrs (slug) {\n return {}\n}\n\nconst commonDefaults = {\n class: 'header-anchor',\n symbol: '#',\n renderHref,\n renderAttrs\n}\n\nexport function makePermalink (renderPermalinkImpl) {\n function renderPermalink (opts) {\n opts = Object.assign({}, renderPermalink.defaults, opts)\n\n return (slug, anchorOpts, state, idx) => {\n return renderPermalinkImpl(slug, opts, anchorOpts, state, idx)\n }\n }\n\n renderPermalink.defaults = Object.assign({}, commonDefaults)\n renderPermalink.renderPermalinkImpl = renderPermalinkImpl\n\n return renderPermalink\n}\n\nfunction mergeDuplicateClassAttrs(attrs) {\n const classValues = [];\n const mergedAttrs = attrs.filter(([key, value]) => {\n if (key !== 'class') {\n return true;\n }\n classValues.push(value);\n });\n\n if (classValues.length > 0) {\n mergedAttrs.unshift(['class', classValues.join(' ')]);\n }\n\n return mergedAttrs;\n}\n\nexport const linkInsideHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...(opts.ariaHidden ? [['aria-hidden', 'true']] : []),\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n Object.assign(new state.Token('html_inline', '', 0), { content: opts.symbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n state.tokens[idx + 1].children[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n state.tokens[idx + 1].children[position[opts.placement]](...linkTokens)\n})\n\nObject.assign(linkInsideHeader.defaults, {\n space: true,\n placement: 'after',\n ariaHidden: false\n})\n\nexport const ariaHidden = makePermalink(linkInsideHeader.renderPermalinkImpl)\n\nariaHidden.defaults = Object.assign({}, linkInsideHeader.defaults, {\n ariaHidden: true\n})\n\nexport const headerLink = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n ...(opts.safariReaderFix ? [new state.Token('span_open', 'span', 1)] : []),\n ...state.tokens[idx + 1].children,\n ...(opts.safariReaderFix ? [new state.Token('span_close', 'span', -1)] : []),\n new state.Token('link_close', 'a', -1)\n ]\n\n state.tokens[idx + 1] = Object.assign(new state.Token('inline', '', 0), {\n children: linkTokens\n })\n})\n\nObject.assign(headerLink.defaults, {\n safariReaderFix: false\n})\n\nexport const linkAfterHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n if (!['visually-hidden', 'aria-label', 'aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called with unknown style option \\`${opts.style}\\``)\n }\n\n if (!['aria-describedby', 'aria-labelledby'].includes(opts.style) && !opts.assistiveText) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called without the \\`assistiveText\\` option in \\`${opts.style}\\` style`)\n }\n\n if (opts.style === 'visually-hidden' && !opts.visuallyHiddenClass) {\n throw new Error('`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style')\n }\n\n const title = state.tokens[idx + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n const subLinkTokens = []\n const linkAttrs = []\n\n if (opts.class) {\n linkAttrs.push(['class', opts.class])\n }\n\n linkAttrs.push(['href', opts.renderHref(slug, state)])\n linkAttrs.push(...Object.entries(opts.renderAttrs(slug, state)))\n\n if (opts.style === 'visually-hidden') {\n subLinkTokens.push(\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['class', opts.visuallyHiddenClass]],\n }),\n Object.assign(new state.Token('text', '', 0), {\n content: opts.assistiveText(title)\n }),\n new state.Token('span_close', 'span', -1)\n )\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n subLinkTokens[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n subLinkTokens[position[opts.placement]](\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['aria-hidden', 'true']],\n }),\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n }),\n new state.Token('span_close', 'span', -1)\n )\n } else {\n subLinkTokens.push(\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n })\n )\n }\n\n if (opts.style === 'aria-label') {\n linkAttrs.push(['aria-label', opts.assistiveText(title)])\n } else if (['aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n linkAttrs.push([opts.style, slug])\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs(linkAttrs)\n }),\n ...subLinkTokens,\n new state.Token('link_close', 'a', -1),\n ]\n\n state.tokens.splice(idx + 3, 0, ...linkTokens)\n\n if (opts.wrapper) {\n state.tokens.splice(idx, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[0] + '\\n'\n }))\n\n state.tokens.splice(idx + 3 + linkTokens.length + 1, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[1] + '\\n'\n }))\n }\n})\n\nObject.assign(linkAfterHeader.defaults, {\n style: 'visually-hidden',\n space: true,\n placement: 'after',\n wrapper: null\n})\n","import * as permalink from './permalink'\n\nconst slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nfunction getTokensText (tokens) {\n return tokens\n .filter(t => ['text', 'code_inline'].includes(t.type))\n .map(t => t.content)\n .join('')\n}\n\nfunction uniqueSlug (slug, slugs, failOnNonUnique, startIndex) {\n let uniq = slug\n let i = startIndex\n\n if (failOnNonUnique && Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n throw new Error(`User defined \\`id\\` attribute \\`${slug}\\` is not unique. Please fix it in your Markdown to continue.`)\n } else {\n while (Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n uniq = `${slug}-${i}`\n i += 1\n }\n }\n\n slugs[uniq] = true\n\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nfunction anchor (md, opts) {\n opts = Object.assign({}, anchor.defaults, opts)\n\n md.core.ruler.push('anchor', state => {\n const slugs = {}\n const tokens = state.tokens\n\n const isLevelSelected = Array.isArray(opts.level)\n ? isLevelSelectedArray(opts.level)\n : isLevelSelectedNumber(opts.level)\n\n for (let idx = 0; idx < tokens.length; idx++) {\n const token = tokens[idx]\n\n if (token.type !== 'heading_open') {\n continue\n }\n\n if (!isLevelSelected(Number(token.tag.substr(1)))) {\n continue\n }\n\n // Aggregate the next token children text.\n const title = opts.getTokensText(tokens[idx + 1].children)\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n if (opts.slugifyWithState) {\n slug = opts.slugifyWithState(title, state)\n } else {\n slug = opts.slugify(title)\n }\n\n slug = uniqueSlug(slug, slugs, false, opts.uniqueSlugStartIndex)\n } else {\n slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex)\n }\n\n token.attrSet('id', slug)\n\n if (opts.tabIndex !== false) {\n token.attrSet('tabindex', `${opts.tabIndex}`)\n }\n\n if (typeof opts.permalink === 'function') {\n opts.permalink(slug, opts, state, idx)\n } else if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, idx)\n } else if (opts.renderPermalink && opts.renderPermalink !== permalink.legacy) {\n opts.renderPermalink(slug, opts, state, idx)\n }\n\n // A permalink renderer could modify the `tokens` array so\n // make sure to get the up-to-date index on each iteration.\n idx = tokens.indexOf(token)\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n }\n })\n}\n\nanchor.permalink = permalink\n\nanchor.defaults = {\n level: 1,\n slugify,\n uniqueSlugStartIndex: 1,\n tabIndex: '-1',\n getTokensText,\n\n // Legacy options.\n permalink: false,\n renderPermalink: permalink.legacy,\n permalinkClass: permalink.ariaHidden.defaults.class,\n permalinkSpace: permalink.ariaHidden.defaults.space,\n permalinkSymbol: '¶',\n permalinkBefore: permalink.ariaHidden.defaults.placement === 'before',\n permalinkHref: permalink.ariaHidden.defaults.renderHref,\n permalinkAttrs: permalink.ariaHidden.defaults.renderAttrs\n}\n\n// Dirty hack to make `import anchor from 'markdown-it-anchor'` work with\n// TypeScript which doesn't support the `module` field of `package.json` and\n// will always get the CommonJS version which otherwise wouldn't have a\n// `default` key, resulting in markdown-it-anchor being undefined when being\n// imported that way.\nanchor.default = anchor\n\nexport default anchor\n"],"names":["emittedWarning","position","false","true","after","before","permalinkSymbolMeta","isPermalinkSymbol","legacy","slug","opts","state","idx","_state$tokens$childre","warningText","process","emitWarning","console","warn","linkTokens","Object","assign","Token","attrs","concat","permalinkClass","permalinkHref","entries","permalinkAttrs","content","permalinkSymbol","meta","permalinkSpace","tokens","children","permalinkBefore","apply","renderHref","renderAttrs","commonDefaults","class","symbol","makePermalink","renderPermalinkImpl","renderPermalink","defaults","anchorOpts","mergeDuplicateClassAttrs","classValues","mergedAttrs","filter","_ref","push","length","unshift","join","linkInsideHeader","_state$tokens$childre2","ariaHidden","space","placement","headerLink","safariReaderFix","linkAfterHeader","_state$tokens","includes","style","Error","assistiveText","visuallyHiddenClass","title","token","type","reduce","acc","t","subLinkTokens","linkAttrs","splice","wrapper","uniqueSlug","slugs","failOnNonUnique","startIndex","uniq","i","prototype","hasOwnProperty","call","anchor","md","core","ruler","selection","isLevelSelected","Array","isArray","level","isLevelSelectedNumber","Number","tag","substr","getTokensText","attrGet","slugifyWithState","slugify","uniqueSlugStartIndex","attrSet","tabIndex","permalink","indexOf","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","map"],"mappings":"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"} \ No newline at end of file diff --git a/dist/markdownItAnchor.modern.mjs b/dist/markdownItAnchor.modern.mjs index 9fe2db1..6b487b2 100644 --- a/dist/markdownItAnchor.modern.mjs +++ b/dist/markdownItAnchor.modern.mjs @@ -1,2 +1,2 @@ -let e=!1;const n={false:"push",true:"unshift",after:"push",before:"unshift"},t={isPermalinkSymbol:!0};function i(i,r,a,l){if(!e){const n="Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";"object"==typeof process&&process&&process.emitWarning?process.emitWarning(n):console.warn(n),e=!0}const o=[Object.assign(new a.Token("link_open","a",1),{attrs:[...r.permalinkClass?[["class",r.permalinkClass]]:[],["href",r.permalinkHref(i,a)],...Object.entries(r.permalinkAttrs(i,a))]}),Object.assign(new a.Token("html_block","",0),{content:r.permalinkSymbol,meta:t}),new a.Token("link_close","a",-1)];r.permalinkSpace&&a.tokens[l+1].children[n[r.permalinkBefore]](Object.assign(new a.Token("text","",0),{content:" "})),a.tokens[l+1].children[n[r.permalinkBefore]](...o)}function r(e){return`#${e}`}function a(e){return{}}const l={class:"header-anchor",symbol:"#",renderHref:r,renderAttrs:a};function o(e){function n(t){return t=Object.assign({},n.defaults,t),(n,i,r,a)=>e(n,t,i,r,a)}return n.defaults=Object.assign({},l),n.renderPermalinkImpl=e,n}function s(e){const n=[],t=e.filter(([e,t])=>{if("class"!==e)return!0;n.push(t)});return n.length>0&&t.unshift(["class",n.join(" ")]),t}const c=o((e,i,r,a,l)=>{const o=[Object.assign(new a.Token("link_open","a",1),{attrs:s([...i.class?[["class",i.class]]:[],["href",i.renderHref(e,a)],...i.ariaHidden?[["aria-hidden","true"]]:[],...Object.entries(i.renderAttrs(e,a))])}),Object.assign(new a.Token("html_inline","",0),{content:i.symbol,meta:t}),new a.Token("link_close","a",-1)];if(i.space){const e="string"==typeof i.space?i.space:" ";a.tokens[l+1].children[n[i.placement]](Object.assign(new a.Token("string"==typeof i.space?"html_inline":"text","",0),{content:e}))}a.tokens[l+1].children[n[i.placement]](...o)});Object.assign(c.defaults,{space:!0,placement:"after",ariaHidden:!1});const d=o(c.renderPermalinkImpl);d.defaults=Object.assign({},c.defaults,{ariaHidden:!0});const p=o((e,n,t,i,r)=>{const a=[Object.assign(new i.Token("link_open","a",1),{attrs:s([...n.class?[["class",n.class]]:[],["href",n.renderHref(e,i)],...Object.entries(n.renderAttrs(e,i))])}),...n.safariReaderFix?[new i.Token("span_open","span",1)]:[],...i.tokens[r+1].children,...n.safariReaderFix?[new i.Token("span_close","span",-1)]:[],new i.Token("link_close","a",-1)];i.tokens[r+1]=Object.assign(new i.Token("inline","",0),{children:a})});Object.assign(p.defaults,{safariReaderFix:!1});const b=o((e,i,r,a,l)=>{if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(i.style))throw new Error(`\`permalink.linkAfterHeader\` called with unknown style option \`${i.style}\``);if(!["aria-describedby","aria-labelledby"].includes(i.style)&&!i.assistiveText)throw new Error(`\`permalink.linkAfterHeader\` called without the \`assistiveText\` option in \`${i.style}\` style`);if("visually-hidden"===i.style&&!i.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");const o=a.tokens[l+1].children.filter(e=>"text"===e.type||"code_inline"===e.type).reduce((e,n)=>e+n.content,""),c=[],d=[];if(i.class&&d.push(["class",i.class]),d.push(["href",i.renderHref(e,a)]),d.push(...Object.entries(i.renderAttrs(e,a))),"visually-hidden"===i.style){if(c.push(Object.assign(new a.Token("span_open","span",1),{attrs:[["class",i.visuallyHiddenClass]]}),Object.assign(new a.Token("text","",0),{content:i.assistiveText(o)}),new a.Token("span_close","span",-1)),i.space){const e="string"==typeof i.space?i.space:" ";c[n[i.placement]](Object.assign(new a.Token("string"==typeof i.space?"html_inline":"text","",0),{content:e}))}c[n[i.placement]](Object.assign(new a.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new a.Token("html_inline","",0),{content:i.symbol,meta:t}),new a.Token("span_close","span",-1))}else c.push(Object.assign(new a.Token("html_inline","",0),{content:i.symbol,meta:t}));"aria-label"===i.style?d.push(["aria-label",i.assistiveText(o)]):["aria-describedby","aria-labelledby"].includes(i.style)&&d.push([i.style,e]);const p=[Object.assign(new a.Token("link_open","a",1),{attrs:s(d)}),...c,new a.Token("link_close","a",-1)];a.tokens.splice(l+3,0,...p),i.wrapper&&(a.tokens.splice(l,0,Object.assign(new a.Token("html_block","",0),{content:i.wrapper[0]+"\n"})),a.tokens.splice(l+3+p.length+1,0,Object.assign(new a.Token("html_block","",0),{content:i.wrapper[1]+"\n"})))});function f(e,n,t,i){let r=e,a=i;if(t&&Object.prototype.hasOwnProperty.call(n,r))throw new Error(`User defined \`id\` attribute \`${e}\` is not unique. Please fix it in your Markdown to continue.`);for(;Object.prototype.hasOwnProperty.call(n,r);)r=`${e}-${a}`,a+=1;return n[r]=!0,r}function u(e,n){n=Object.assign({},u.defaults,n),e.core.ruler.push("anchor",e=>{const t={},r=e.tokens,a=Array.isArray(n.level)?(l=n.level,e=>l.includes(e)):(e=>n=>n>=e)(n.level);var l;for(let l=0;lencodeURIComponent(String(e).trim().toLowerCase().replace(/\s+/g,"-")),uniqueSlugStartIndex:1,tabIndex:"-1",getTokensText:function(e){return e.filter(e=>["text","code_inline"].includes(e.type)).map(e=>e.content).join("")},permalink:!1,renderPermalink:i,permalinkClass:d.defaults.class,permalinkSpace:d.defaults.space,permalinkSymbol:"¶",permalinkBefore:"before"===d.defaults.placement,permalinkHref:d.defaults.renderHref,permalinkAttrs:d.defaults.renderAttrs},u.default=u;export{u as default}; +let e=!1;const n={false:"push",true:"unshift",after:"push",before:"unshift"},t={isPermalinkSymbol:!0};function i(i,r,a,l){if(!e){const n="Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";"object"==typeof process&&process&&process.emitWarning?process.emitWarning(n):console.warn(n),e=!0}const o=[Object.assign(new a.Token("link_open","a",1),{attrs:[...r.permalinkClass?[["class",r.permalinkClass]]:[],["href",r.permalinkHref(i,a)],...Object.entries(r.permalinkAttrs(i,a))]}),Object.assign(new a.Token("html_block","",0),{content:r.permalinkSymbol,meta:t}),new a.Token("link_close","a",-1)];r.permalinkSpace&&a.tokens[l+1].children[n[r.permalinkBefore]](Object.assign(new a.Token("text","",0),{content:" "})),a.tokens[l+1].children[n[r.permalinkBefore]](...o)}function r(e){return`#${e}`}function a(e){return{}}const l={class:"header-anchor",symbol:"#",renderHref:r,renderAttrs:a};function o(e){function n(t){return t=Object.assign({},n.defaults,t),(n,i,r,a)=>e(n,t,i,r,a)}return n.defaults=Object.assign({},l),n.renderPermalinkImpl=e,n}function s(e){const n=[],t=e.filter(([e,t])=>{if("class"!==e)return!0;n.push(t)});return n.length>0&&t.unshift(["class",n.join(" ")]),t}const c=o((e,i,r,a,l)=>{const o=[Object.assign(new a.Token("link_open","a",1),{attrs:s([...i.class?[["class",i.class]]:[],["href",i.renderHref(e,a)],...i.ariaHidden?[["aria-hidden","true"]]:[],...Object.entries(i.renderAttrs(e,a))])}),Object.assign(new a.Token("html_inline","",0),{content:i.symbol,meta:t}),new a.Token("link_close","a",-1)];if(i.space){const e="string"==typeof i.space?i.space:" ";a.tokens[l+1].children[n[i.placement]](Object.assign(new a.Token("string"==typeof i.space?"html_inline":"text","",0),{content:e}))}a.tokens[l+1].children[n[i.placement]](...o)});Object.assign(c.defaults,{space:!0,placement:"after",ariaHidden:!1});const d=o(c.renderPermalinkImpl);d.defaults=Object.assign({},c.defaults,{ariaHidden:!0});const p=o((e,n,t,i,r)=>{const a=[Object.assign(new i.Token("link_open","a",1),{attrs:s([...n.class?[["class",n.class]]:[],["href",n.renderHref(e,i)],...Object.entries(n.renderAttrs(e,i))])}),...n.safariReaderFix?[new i.Token("span_open","span",1)]:[],...i.tokens[r+1].children,...n.safariReaderFix?[new i.Token("span_close","span",-1)]:[],new i.Token("link_close","a",-1)];i.tokens[r+1]=Object.assign(new i.Token("inline","",0),{children:a})});Object.assign(p.defaults,{safariReaderFix:!1});const b=o((e,i,r,a,l)=>{if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(i.style))throw new Error(`\`permalink.linkAfterHeader\` called with unknown style option \`${i.style}\``);if(!["aria-describedby","aria-labelledby"].includes(i.style)&&!i.assistiveText)throw new Error(`\`permalink.linkAfterHeader\` called without the \`assistiveText\` option in \`${i.style}\` style`);if("visually-hidden"===i.style&&!i.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");const o=a.tokens[l+1].children.filter(e=>"text"===e.type||"code_inline"===e.type).reduce((e,n)=>e+n.content,""),c=[],d=[];if(i.class&&d.push(["class",i.class]),d.push(["href",i.renderHref(e,a)]),d.push(...Object.entries(i.renderAttrs(e,a))),"visually-hidden"===i.style){if(c.push(Object.assign(new a.Token("span_open","span",1),{attrs:[["class",i.visuallyHiddenClass]]}),Object.assign(new a.Token("text","",0),{content:i.assistiveText(o)}),new a.Token("span_close","span",-1)),i.space){const e="string"==typeof i.space?i.space:" ";c[n[i.placement]](Object.assign(new a.Token("string"==typeof i.space?"html_inline":"text","",0),{content:e}))}c[n[i.placement]](Object.assign(new a.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new a.Token("html_inline","",0),{content:i.symbol,meta:t}),new a.Token("span_close","span",-1))}else c.push(Object.assign(new a.Token("html_inline","",0),{content:i.symbol,meta:t}));"aria-label"===i.style?d.push(["aria-label",i.assistiveText(o)]):["aria-describedby","aria-labelledby"].includes(i.style)&&d.push([i.style,e]);const p=[Object.assign(new a.Token("link_open","a",1),{attrs:s(d)}),...c,new a.Token("link_close","a",-1)];a.tokens.splice(l+3,0,...p),i.wrapper&&(a.tokens.splice(l,0,Object.assign(new a.Token("html_block","",0),{content:i.wrapper[0]+"\n"})),a.tokens.splice(l+3+p.length+1,0,Object.assign(new a.Token("html_block","",0),{content:i.wrapper[1]+"\n"})))});function f(e,n,t,i){let r=e,a=i;if(t&&Object.prototype.hasOwnProperty.call(n,r))throw new Error(`User defined \`id\` attribute \`${e}\` is not unique. Please fix it in your Markdown to continue.`);for(;Object.prototype.hasOwnProperty.call(n,r);)r=`${e}-${a}`,a+=1;return n[r]=!0,r}function u(e,n){n=Object.assign({},u.defaults,n),e.core.ruler.push("anchor",e=>{const t={},r=e.tokens,a=Array.isArray(n.level)?(l=n.level,e=>l.includes(e)):(e=>n=>n>=e)(n.level);var l;for(let l=0;lencodeURIComponent(String(e).trim().toLowerCase().replace(/\s+/g,"-")),uniqueSlugStartIndex:1,tabIndex:"-1",getTokensText:function(e){return e.filter(e=>["text","code_inline"].includes(e.type)).map(e=>e.content).join("")},permalink:!1,renderPermalink:i,permalinkClass:d.defaults.class,permalinkSpace:d.defaults.space,permalinkSymbol:"¶",permalinkBefore:"before"===d.defaults.placement,permalinkHref:d.defaults.renderHref,permalinkAttrs:d.defaults.renderAttrs},u.default=u;export{u as default}; //# sourceMappingURL=markdownItAnchor.modern.mjs.map diff --git a/dist/markdownItAnchor.modern.mjs.map b/dist/markdownItAnchor.modern.mjs.map index dbb2661..f5c45d9 100644 --- a/dist/markdownItAnchor.modern.mjs.map +++ b/dist/markdownItAnchor.modern.mjs.map @@ -1 +1 @@ -{"version":3,"file":"markdownItAnchor.modern.mjs","sources":["../permalink.js","../index.js"],"sourcesContent":["let emittedWarning = false\n\nconst position = {\n false: 'push',\n true: 'unshift',\n after: 'push',\n before: 'unshift'\n}\n\nconst permalinkSymbolMeta = {\n isPermalinkSymbol: true\n}\n\nexport function legacy (slug, opts, state, idx) {\n if (!emittedWarning) {\n const warningText = 'Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks'\n\n if (typeof process === 'object' && process && process.emitWarning) {\n process.emitWarning(warningText)\n } else {\n console.warn(warningText)\n }\n\n emittedWarning = true\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: [\n ...(opts.permalinkClass ? [['class', opts.permalinkClass]] : []),\n ['href', opts.permalinkHref(slug, state)],\n ...Object.entries(opts.permalinkAttrs(slug, state))\n ]\n }),\n Object.assign(new state.Token('html_block', '', 0), { content: opts.permalinkSymbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.permalinkSpace) {\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](Object.assign(new state.Token('text', '', 0), { content: ' ' }))\n }\n\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](...linkTokens)\n}\n\nexport function renderHref (slug) {\n return `#${slug}`\n}\n\nexport function renderAttrs (slug) {\n return {}\n}\n\nconst commonDefaults = {\n class: 'header-anchor',\n symbol: '#',\n renderHref,\n renderAttrs\n}\n\nexport function makePermalink (renderPermalinkImpl) {\n function renderPermalink (opts) {\n opts = Object.assign({}, renderPermalink.defaults, opts)\n\n return (slug, anchorOpts, state, idx) => {\n return renderPermalinkImpl(slug, opts, anchorOpts, state, idx)\n }\n }\n\n renderPermalink.defaults = Object.assign({}, commonDefaults)\n renderPermalink.renderPermalinkImpl = renderPermalinkImpl\n\n return renderPermalink\n}\n\nfunction mergeDuplicateClassAttrs(attrs) {\n const classValues = [];\n const mergedAttrs = attrs.filter(([key, value]) => {\n if (key !== 'class') {\n return true;\n }\n classValues.push(value);\n });\n\n if (classValues.length > 0) {\n mergedAttrs.unshift(['class', classValues.join(' ')]);\n }\n\n return mergedAttrs;\n}\n\nexport const linkInsideHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...(opts.ariaHidden ? [['aria-hidden', 'true']] : []),\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n Object.assign(new state.Token('html_inline', '', 0), { content: opts.symbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n state.tokens[idx + 1].children[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n state.tokens[idx + 1].children[position[opts.placement]](...linkTokens)\n})\n\nObject.assign(linkInsideHeader.defaults, {\n space: true,\n placement: 'after',\n ariaHidden: false\n})\n\nexport const ariaHidden = makePermalink(linkInsideHeader.renderPermalinkImpl)\n\nariaHidden.defaults = Object.assign({}, linkInsideHeader.defaults, {\n ariaHidden: true\n})\n\nexport const headerLink = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n ...(opts.safariReaderFix ? [new state.Token('span_open', 'span', 1)] : []),\n ...state.tokens[idx + 1].children,\n ...(opts.safariReaderFix ? [new state.Token('span_close', 'span', -1)] : []),\n new state.Token('link_close', 'a', -1)\n ]\n\n state.tokens[idx + 1] = Object.assign(new state.Token('inline', '', 0), {\n children: linkTokens\n })\n})\n\nObject.assign(headerLink.defaults, {\n safariReaderFix: false\n})\n\nexport const linkAfterHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n if (!['visually-hidden', 'aria-label', 'aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called with unknown style option \\`${opts.style}\\``)\n }\n\n if (!['aria-describedby', 'aria-labelledby'].includes(opts.style) && !opts.assistiveText) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called without the \\`assistiveText\\` option in \\`${opts.style}\\` style`)\n }\n\n if (opts.style === 'visually-hidden' && !opts.visuallyHiddenClass) {\n throw new Error('`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style')\n }\n\n const title = state.tokens[idx + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n const subLinkTokens = []\n const linkAttrs = []\n\n if (opts.class) {\n linkAttrs.push(['class', opts.class])\n }\n\n linkAttrs.push(['href', opts.renderHref(slug, state)])\n linkAttrs.push(...Object.entries(opts.renderAttrs(slug, state)))\n\n if (opts.style === 'visually-hidden') {\n subLinkTokens.push(\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['class', opts.visuallyHiddenClass]],\n }),\n Object.assign(new state.Token('text', '', 0), {\n content: opts.assistiveText(title)\n }),\n new state.Token('span_close', 'span', -1)\n )\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n subLinkTokens[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n subLinkTokens[position[opts.placement]](\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['aria-hidden', 'true']],\n }),\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n }),\n new state.Token('span_close', 'span', -1)\n )\n } else {\n subLinkTokens.push(\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n })\n )\n }\n\n if (opts.style === 'aria-label') {\n linkAttrs.push(['aria-label', opts.assistiveText(title)])\n } else if (['aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n linkAttrs.push([opts.style, slug])\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs(linkAttrs)\n }),\n ...subLinkTokens,\n new state.Token('link_close', 'a', -1),\n ]\n\n state.tokens.splice(idx + 3, 0, ...linkTokens)\n\n if (opts.wrapper) {\n state.tokens.splice(idx, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[0] + '\\n'\n }))\n\n state.tokens.splice(idx + 3 + linkTokens.length + 1, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[1] + '\\n'\n }))\n }\n})\n\nObject.assign(linkAfterHeader.defaults, {\n style: 'visually-hidden',\n space: true,\n placement: 'after',\n wrapper: null\n})\n","import * as permalink from './permalink'\n\nconst slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nfunction getTokensText (tokens) {\n return tokens\n .filter(t => ['text', 'code_inline'].includes(t.type))\n .map(t => t.content)\n .join('')\n}\n\nfunction uniqueSlug (slug, slugs, failOnNonUnique, startIndex) {\n let uniq = slug\n let i = startIndex\n\n if (failOnNonUnique && Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n throw new Error(`User defined \\`id\\` attribute \\`${slug}\\` is not unique. Please fix it in your Markdown to continue.`)\n } else {\n while (Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n uniq = `${slug}-${i}`\n i += 1\n }\n }\n\n slugs[uniq] = true\n\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nfunction anchor (md, opts) {\n opts = Object.assign({}, anchor.defaults, opts)\n\n md.core.ruler.push('anchor', state => {\n const slugs = {}\n const tokens = state.tokens\n\n const isLevelSelected = Array.isArray(opts.level)\n ? isLevelSelectedArray(opts.level)\n : isLevelSelectedNumber(opts.level)\n\n for (let idx = 0; idx < tokens.length; idx++) {\n const token = tokens[idx]\n\n if (token.type !== 'heading_open') {\n continue\n }\n\n if (!isLevelSelected(Number(token.tag.substr(1)))) {\n continue\n }\n\n // Aggregate the next token children text.\n const title = opts.getTokensText(tokens[idx + 1].children)\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n slug = uniqueSlug(opts.slugify(title), slugs, false, opts.uniqueSlugStartIndex)\n } else {\n slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex)\n }\n\n token.attrSet('id', slug)\n\n if (opts.tabIndex !== false) {\n token.attrSet('tabindex', `${opts.tabIndex}`)\n }\n\n if (typeof opts.permalink === 'function') {\n opts.permalink(slug, opts, state, idx)\n } else if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, idx)\n } else if (opts.renderPermalink && opts.renderPermalink !== permalink.legacy) {\n opts.renderPermalink(slug, opts, state, idx)\n }\n\n // A permalink renderer could modify the `tokens` array so\n // make sure to get the up-to-date index on each iteration.\n idx = tokens.indexOf(token)\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n }\n })\n}\n\nanchor.permalink = permalink\n\nanchor.defaults = {\n level: 1,\n slugify,\n uniqueSlugStartIndex: 1,\n tabIndex: '-1',\n getTokensText,\n\n // Legacy options.\n permalink: false,\n renderPermalink: permalink.legacy,\n permalinkClass: permalink.ariaHidden.defaults.class,\n permalinkSpace: permalink.ariaHidden.defaults.space,\n permalinkSymbol: '¶',\n permalinkBefore: permalink.ariaHidden.defaults.placement === 'before',\n permalinkHref: permalink.ariaHidden.defaults.renderHref,\n permalinkAttrs: permalink.ariaHidden.defaults.renderAttrs\n}\n\n// Dirty hack to make `import anchor from 'markdown-it-anchor'` work with\n// TypeScript which doesn't support the `module` field of `package.json` and\n// will always get the CommonJS version which otherwise wouldn't have a\n// `default` key, resulting in markdown-it-anchor being undefined when being\n// imported that way.\nanchor.default = anchor\n\nexport default anchor\n"],"names":["emittedWarning","position","false","true","after","before","permalinkSymbolMeta","isPermalinkSymbol","legacy","slug","opts","state","idx","warningText","process","emitWarning","console","warn","linkTokens","Object","assign","Token","attrs","permalinkClass","permalinkHref","entries","permalinkAttrs","content","permalinkSymbol","meta","permalinkSpace","tokens","children","permalinkBefore","renderHref","renderAttrs","commonDefaults","class","symbol","makePermalink","renderPermalinkImpl","renderPermalink","defaults","anchorOpts","mergeDuplicateClassAttrs","classValues","mergedAttrs","filter","key","value","push","length","unshift","join","linkInsideHeader","ariaHidden","space","placement","headerLink","safariReaderFix","linkAfterHeader","includes","style","Error","assistiveText","visuallyHiddenClass","title","token","type","reduce","acc","t","subLinkTokens","linkAttrs","splice","wrapper","uniqueSlug","slugs","failOnNonUnique","startIndex","uniq","i","prototype","hasOwnProperty","call","anchor","md","core","ruler","isLevelSelected","Array","isArray","level","selection","isLevelSelectedNumber","Number","tag","substr","getTokensText","attrGet","slugify","uniqueSlugStartIndex","attrSet","tabIndex","permalink","indexOf","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","map","default"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"markdownItAnchor.modern.mjs","sources":["../permalink.js","../index.js"],"sourcesContent":["let emittedWarning = false\n\nconst position = {\n false: 'push',\n true: 'unshift',\n after: 'push',\n before: 'unshift'\n}\n\nconst permalinkSymbolMeta = {\n isPermalinkSymbol: true\n}\n\nexport function legacy (slug, opts, state, idx) {\n if (!emittedWarning) {\n const warningText = 'Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks'\n\n if (typeof process === 'object' && process && process.emitWarning) {\n process.emitWarning(warningText)\n } else {\n console.warn(warningText)\n }\n\n emittedWarning = true\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: [\n ...(opts.permalinkClass ? [['class', opts.permalinkClass]] : []),\n ['href', opts.permalinkHref(slug, state)],\n ...Object.entries(opts.permalinkAttrs(slug, state))\n ]\n }),\n Object.assign(new state.Token('html_block', '', 0), { content: opts.permalinkSymbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.permalinkSpace) {\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](Object.assign(new state.Token('text', '', 0), { content: ' ' }))\n }\n\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](...linkTokens)\n}\n\nexport function renderHref (slug) {\n return `#${slug}`\n}\n\nexport function renderAttrs (slug) {\n return {}\n}\n\nconst commonDefaults = {\n class: 'header-anchor',\n symbol: '#',\n renderHref,\n renderAttrs\n}\n\nexport function makePermalink (renderPermalinkImpl) {\n function renderPermalink (opts) {\n opts = Object.assign({}, renderPermalink.defaults, opts)\n\n return (slug, anchorOpts, state, idx) => {\n return renderPermalinkImpl(slug, opts, anchorOpts, state, idx)\n }\n }\n\n renderPermalink.defaults = Object.assign({}, commonDefaults)\n renderPermalink.renderPermalinkImpl = renderPermalinkImpl\n\n return renderPermalink\n}\n\nfunction mergeDuplicateClassAttrs(attrs) {\n const classValues = [];\n const mergedAttrs = attrs.filter(([key, value]) => {\n if (key !== 'class') {\n return true;\n }\n classValues.push(value);\n });\n\n if (classValues.length > 0) {\n mergedAttrs.unshift(['class', classValues.join(' ')]);\n }\n\n return mergedAttrs;\n}\n\nexport const linkInsideHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...(opts.ariaHidden ? [['aria-hidden', 'true']] : []),\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n Object.assign(new state.Token('html_inline', '', 0), { content: opts.symbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n state.tokens[idx + 1].children[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n state.tokens[idx + 1].children[position[opts.placement]](...linkTokens)\n})\n\nObject.assign(linkInsideHeader.defaults, {\n space: true,\n placement: 'after',\n ariaHidden: false\n})\n\nexport const ariaHidden = makePermalink(linkInsideHeader.renderPermalinkImpl)\n\nariaHidden.defaults = Object.assign({}, linkInsideHeader.defaults, {\n ariaHidden: true\n})\n\nexport const headerLink = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n ...(opts.safariReaderFix ? [new state.Token('span_open', 'span', 1)] : []),\n ...state.tokens[idx + 1].children,\n ...(opts.safariReaderFix ? [new state.Token('span_close', 'span', -1)] : []),\n new state.Token('link_close', 'a', -1)\n ]\n\n state.tokens[idx + 1] = Object.assign(new state.Token('inline', '', 0), {\n children: linkTokens\n })\n})\n\nObject.assign(headerLink.defaults, {\n safariReaderFix: false\n})\n\nexport const linkAfterHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n if (!['visually-hidden', 'aria-label', 'aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called with unknown style option \\`${opts.style}\\``)\n }\n\n if (!['aria-describedby', 'aria-labelledby'].includes(opts.style) && !opts.assistiveText) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called without the \\`assistiveText\\` option in \\`${opts.style}\\` style`)\n }\n\n if (opts.style === 'visually-hidden' && !opts.visuallyHiddenClass) {\n throw new Error('`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style')\n }\n\n const title = state.tokens[idx + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n const subLinkTokens = []\n const linkAttrs = []\n\n if (opts.class) {\n linkAttrs.push(['class', opts.class])\n }\n\n linkAttrs.push(['href', opts.renderHref(slug, state)])\n linkAttrs.push(...Object.entries(opts.renderAttrs(slug, state)))\n\n if (opts.style === 'visually-hidden') {\n subLinkTokens.push(\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['class', opts.visuallyHiddenClass]],\n }),\n Object.assign(new state.Token('text', '', 0), {\n content: opts.assistiveText(title)\n }),\n new state.Token('span_close', 'span', -1)\n )\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n subLinkTokens[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n subLinkTokens[position[opts.placement]](\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['aria-hidden', 'true']],\n }),\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n }),\n new state.Token('span_close', 'span', -1)\n )\n } else {\n subLinkTokens.push(\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n })\n )\n }\n\n if (opts.style === 'aria-label') {\n linkAttrs.push(['aria-label', opts.assistiveText(title)])\n } else if (['aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n linkAttrs.push([opts.style, slug])\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs(linkAttrs)\n }),\n ...subLinkTokens,\n new state.Token('link_close', 'a', -1),\n ]\n\n state.tokens.splice(idx + 3, 0, ...linkTokens)\n\n if (opts.wrapper) {\n state.tokens.splice(idx, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[0] + '\\n'\n }))\n\n state.tokens.splice(idx + 3 + linkTokens.length + 1, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[1] + '\\n'\n }))\n }\n})\n\nObject.assign(linkAfterHeader.defaults, {\n style: 'visually-hidden',\n space: true,\n placement: 'after',\n wrapper: null\n})\n","import * as permalink from './permalink'\n\nconst slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nfunction getTokensText (tokens) {\n return tokens\n .filter(t => ['text', 'code_inline'].includes(t.type))\n .map(t => t.content)\n .join('')\n}\n\nfunction uniqueSlug (slug, slugs, failOnNonUnique, startIndex) {\n let uniq = slug\n let i = startIndex\n\n if (failOnNonUnique && Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n throw new Error(`User defined \\`id\\` attribute \\`${slug}\\` is not unique. Please fix it in your Markdown to continue.`)\n } else {\n while (Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n uniq = `${slug}-${i}`\n i += 1\n }\n }\n\n slugs[uniq] = true\n\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nfunction anchor (md, opts) {\n opts = Object.assign({}, anchor.defaults, opts)\n\n md.core.ruler.push('anchor', state => {\n const slugs = {}\n const tokens = state.tokens\n\n const isLevelSelected = Array.isArray(opts.level)\n ? isLevelSelectedArray(opts.level)\n : isLevelSelectedNumber(opts.level)\n\n for (let idx = 0; idx < tokens.length; idx++) {\n const token = tokens[idx]\n\n if (token.type !== 'heading_open') {\n continue\n }\n\n if (!isLevelSelected(Number(token.tag.substr(1)))) {\n continue\n }\n\n // Aggregate the next token children text.\n const title = opts.getTokensText(tokens[idx + 1].children)\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n if (opts.slugifyWithState) {\n slug = opts.slugifyWithState(title, state)\n } else {\n slug = opts.slugify(title)\n }\n\n slug = uniqueSlug(slug, slugs, false, opts.uniqueSlugStartIndex)\n } else {\n slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex)\n }\n\n token.attrSet('id', slug)\n\n if (opts.tabIndex !== false) {\n token.attrSet('tabindex', `${opts.tabIndex}`)\n }\n\n if (typeof opts.permalink === 'function') {\n opts.permalink(slug, opts, state, idx)\n } else if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, idx)\n } else if (opts.renderPermalink && opts.renderPermalink !== permalink.legacy) {\n opts.renderPermalink(slug, opts, state, idx)\n }\n\n // A permalink renderer could modify the `tokens` array so\n // make sure to get the up-to-date index on each iteration.\n idx = tokens.indexOf(token)\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n }\n })\n}\n\nanchor.permalink = permalink\n\nanchor.defaults = {\n level: 1,\n slugify,\n uniqueSlugStartIndex: 1,\n tabIndex: '-1',\n getTokensText,\n\n // Legacy options.\n permalink: false,\n renderPermalink: permalink.legacy,\n permalinkClass: permalink.ariaHidden.defaults.class,\n permalinkSpace: permalink.ariaHidden.defaults.space,\n permalinkSymbol: '¶',\n permalinkBefore: permalink.ariaHidden.defaults.placement === 'before',\n permalinkHref: permalink.ariaHidden.defaults.renderHref,\n permalinkAttrs: permalink.ariaHidden.defaults.renderAttrs\n}\n\n// Dirty hack to make `import anchor from 'markdown-it-anchor'` work with\n// TypeScript which doesn't support the `module` field of `package.json` and\n// will always get the CommonJS version which otherwise wouldn't have a\n// `default` key, resulting in markdown-it-anchor being undefined when being\n// imported that way.\nanchor.default = anchor\n\nexport default anchor\n"],"names":["emittedWarning","position","false","true","after","before","permalinkSymbolMeta","isPermalinkSymbol","legacy","slug","opts","state","idx","warningText","process","emitWarning","console","warn","linkTokens","Object","assign","Token","attrs","permalinkClass","permalinkHref","entries","permalinkAttrs","content","permalinkSymbol","meta","permalinkSpace","tokens","children","permalinkBefore","renderHref","renderAttrs","commonDefaults","class","symbol","makePermalink","renderPermalinkImpl","renderPermalink","defaults","anchorOpts","mergeDuplicateClassAttrs","classValues","mergedAttrs","filter","key","value","push","length","unshift","join","linkInsideHeader","ariaHidden","space","placement","headerLink","safariReaderFix","linkAfterHeader","includes","style","Error","assistiveText","visuallyHiddenClass","title","token","type","reduce","acc","t","subLinkTokens","linkAttrs","splice","wrapper","uniqueSlug","slugs","failOnNonUnique","startIndex","uniq","i","prototype","hasOwnProperty","call","anchor","md","core","ruler","isLevelSelected","Array","isArray","level","selection","isLevelSelectedNumber","Number","tag","substr","getTokensText","attrGet","slugifyWithState","slugify","uniqueSlugStartIndex","attrSet","tabIndex","permalink","indexOf","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","map","default"],"mappings":"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"} \ No newline at end of file diff --git a/dist/markdownItAnchor.umd.js b/dist/markdownItAnchor.umd.js index 77371ef..e53df55 100644 --- a/dist/markdownItAnchor.umd.js +++ b/dist/markdownItAnchor.umd.js @@ -1,2 +1,2 @@ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e||self).markdownItAnchor=n()}(this,function(){var e=!1,n={false:"push",true:"unshift",after:"push",before:"unshift"},t={isPermalinkSymbol:!0};function r(r,i,a,l){var o;if(!e){var c="Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks";"object"==typeof process&&process&&process.emitWarning?process.emitWarning(c):console.warn(c),e=!0}var s=[Object.assign(new a.Token("link_open","a",1),{attrs:[].concat(i.permalinkClass?[["class",i.permalinkClass]]:[],[["href",i.permalinkHref(r,a)]],Object.entries(i.permalinkAttrs(r,a)))}),Object.assign(new a.Token("html_block","",0),{content:i.permalinkSymbol,meta:t}),new a.Token("link_close","a",-1)];i.permalinkSpace&&a.tokens[l+1].children[n[i.permalinkBefore]](Object.assign(new a.Token("text","",0),{content:" "})),(o=a.tokens[l+1].children)[n[i.permalinkBefore]].apply(o,s)}function i(e){return"#"+e}function a(e){return{}}var l={class:"header-anchor",symbol:"#",renderHref:i,renderAttrs:a};function o(e){function n(t){return t=Object.assign({},n.defaults,t),function(n,r,i,a){return e(n,t,r,i,a)}}return n.defaults=Object.assign({},l),n.renderPermalinkImpl=e,n}function c(e){var n=[],t=e.filter(function(e){if("class"!==e[0])return!0;n.push(e[1])});return n.length>0&&t.unshift(["class",n.join(" ")]),t}var s=o(function(e,r,i,a,l){var o,s=[Object.assign(new a.Token("link_open","a",1),{attrs:c([].concat(r.class?[["class",r.class]]:[],[["href",r.renderHref(e,a)]],r.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(r.renderAttrs(e,a))))}),Object.assign(new a.Token("html_inline","",0),{content:r.symbol,meta:t}),new a.Token("link_close","a",-1)];if(r.space){var u="string"==typeof r.space?r.space:" ";a.tokens[l+1].children[n[r.placement]](Object.assign(new a.Token("string"==typeof r.space?"html_inline":"text","",0),{content:u}))}(o=a.tokens[l+1].children)[n[r.placement]].apply(o,s)});Object.assign(s.defaults,{space:!0,placement:"after",ariaHidden:!1});var u=o(s.renderPermalinkImpl);u.defaults=Object.assign({},s.defaults,{ariaHidden:!0});var f=o(function(e,n,t,r,i){var a=[Object.assign(new r.Token("link_open","a",1),{attrs:c([].concat(n.class?[["class",n.class]]:[],[["href",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r))))})].concat(n.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[i+1].children,n.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[i+1]=Object.assign(new r.Token("inline","",0),{children:a})});Object.assign(f.defaults,{safariReaderFix:!1});var d=o(function(e,r,i,a,l){var o;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(r.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+r.style+"`");if(!["aria-describedby","aria-labelledby"].includes(r.style)&&!r.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+r.style+"` style");if("visually-hidden"===r.style&&!r.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var s=a.tokens[l+1].children.filter(function(e){return"text"===e.type||"code_inline"===e.type}).reduce(function(e,n){return e+n.content},""),u=[],f=[];if(r.class&&f.push(["class",r.class]),f.push(["href",r.renderHref(e,a)]),f.push.apply(f,Object.entries(r.renderAttrs(e,a))),"visually-hidden"===r.style){if(u.push(Object.assign(new a.Token("span_open","span",1),{attrs:[["class",r.visuallyHiddenClass]]}),Object.assign(new a.Token("text","",0),{content:r.assistiveText(s)}),new a.Token("span_close","span",-1)),r.space){var d="string"==typeof r.space?r.space:" ";u[n[r.placement]](Object.assign(new a.Token("string"==typeof r.space?"html_inline":"text","",0),{content:d}))}u[n[r.placement]](Object.assign(new a.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new a.Token("html_inline","",0),{content:r.symbol,meta:t}),new a.Token("span_close","span",-1))}else u.push(Object.assign(new a.Token("html_inline","",0),{content:r.symbol,meta:t}));"aria-label"===r.style?f.push(["aria-label",r.assistiveText(s)]):["aria-describedby","aria-labelledby"].includes(r.style)&&f.push([r.style,e]);var p=[Object.assign(new a.Token("link_open","a",1),{attrs:c(f)})].concat(u,[new a.Token("link_close","a",-1)]);(o=a.tokens).splice.apply(o,[l+3,0].concat(p)),r.wrapper&&(a.tokens.splice(l,0,Object.assign(new a.Token("html_block","",0),{content:r.wrapper[0]+"\n"})),a.tokens.splice(l+3+p.length+1,0,Object.assign(new a.Token("html_block","",0),{content:r.wrapper[1]+"\n"})))});function p(e,n,t,r){var i=e,a=r;if(t&&Object.prototype.hasOwnProperty.call(n,i))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(n,i);)i=e+"-"+a,a+=1;return n[i]=!0,i}function b(e,n){n=Object.assign({},b.defaults,n),e.core.ruler.push("anchor",function(e){for(var t,i={},a=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o0&&t.unshift(["class",n.join(" ")]),t}var s=o(function(e,r,i,a,l){var o,s=[Object.assign(new a.Token("link_open","a",1),{attrs:c([].concat(r.class?[["class",r.class]]:[],[["href",r.renderHref(e,a)]],r.ariaHidden?[["aria-hidden","true"]]:[],Object.entries(r.renderAttrs(e,a))))}),Object.assign(new a.Token("html_inline","",0),{content:r.symbol,meta:t}),new a.Token("link_close","a",-1)];if(r.space){var u="string"==typeof r.space?r.space:" ";a.tokens[l+1].children[n[r.placement]](Object.assign(new a.Token("string"==typeof r.space?"html_inline":"text","",0),{content:u}))}(o=a.tokens[l+1].children)[n[r.placement]].apply(o,s)});Object.assign(s.defaults,{space:!0,placement:"after",ariaHidden:!1});var u=o(s.renderPermalinkImpl);u.defaults=Object.assign({},s.defaults,{ariaHidden:!0});var f=o(function(e,n,t,r,i){var a=[Object.assign(new r.Token("link_open","a",1),{attrs:c([].concat(n.class?[["class",n.class]]:[],[["href",n.renderHref(e,r)]],Object.entries(n.renderAttrs(e,r))))})].concat(n.safariReaderFix?[new r.Token("span_open","span",1)]:[],r.tokens[i+1].children,n.safariReaderFix?[new r.Token("span_close","span",-1)]:[],[new r.Token("link_close","a",-1)]);r.tokens[i+1]=Object.assign(new r.Token("inline","",0),{children:a})});Object.assign(f.defaults,{safariReaderFix:!1});var d=o(function(e,r,i,a,l){var o;if(!["visually-hidden","aria-label","aria-describedby","aria-labelledby"].includes(r.style))throw new Error("`permalink.linkAfterHeader` called with unknown style option `"+r.style+"`");if(!["aria-describedby","aria-labelledby"].includes(r.style)&&!r.assistiveText)throw new Error("`permalink.linkAfterHeader` called without the `assistiveText` option in `"+r.style+"` style");if("visually-hidden"===r.style&&!r.visuallyHiddenClass)throw new Error("`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style");var s=a.tokens[l+1].children.filter(function(e){return"text"===e.type||"code_inline"===e.type}).reduce(function(e,n){return e+n.content},""),u=[],f=[];if(r.class&&f.push(["class",r.class]),f.push(["href",r.renderHref(e,a)]),f.push.apply(f,Object.entries(r.renderAttrs(e,a))),"visually-hidden"===r.style){if(u.push(Object.assign(new a.Token("span_open","span",1),{attrs:[["class",r.visuallyHiddenClass]]}),Object.assign(new a.Token("text","",0),{content:r.assistiveText(s)}),new a.Token("span_close","span",-1)),r.space){var d="string"==typeof r.space?r.space:" ";u[n[r.placement]](Object.assign(new a.Token("string"==typeof r.space?"html_inline":"text","",0),{content:d}))}u[n[r.placement]](Object.assign(new a.Token("span_open","span",1),{attrs:[["aria-hidden","true"]]}),Object.assign(new a.Token("html_inline","",0),{content:r.symbol,meta:t}),new a.Token("span_close","span",-1))}else u.push(Object.assign(new a.Token("html_inline","",0),{content:r.symbol,meta:t}));"aria-label"===r.style?f.push(["aria-label",r.assistiveText(s)]):["aria-describedby","aria-labelledby"].includes(r.style)&&f.push([r.style,e]);var p=[Object.assign(new a.Token("link_open","a",1),{attrs:c(f)})].concat(u,[new a.Token("link_close","a",-1)]);(o=a.tokens).splice.apply(o,[l+3,0].concat(p)),r.wrapper&&(a.tokens.splice(l,0,Object.assign(new a.Token("html_block","",0),{content:r.wrapper[0]+"\n"})),a.tokens.splice(l+3+p.length+1,0,Object.assign(new a.Token("html_block","",0),{content:r.wrapper[1]+"\n"})))});function p(e,n,t,r){var i=e,a=r;if(t&&Object.prototype.hasOwnProperty.call(n,i))throw new Error("User defined `id` attribute `"+e+"` is not unique. Please fix it in your Markdown to continue.");for(;Object.prototype.hasOwnProperty.call(n,i);)i=e+"-"+a,a+=1;return n[i]=!0,i}function b(e,n){n=Object.assign({},b.defaults,n),e.core.ruler.push("anchor",function(e){for(var t,i={},a=e.tokens,l=Array.isArray(n.level)?(t=n.level,function(e){return t.includes(e)}):function(e){return function(n){return n>=e}}(n.level),o=0;o {\n return renderPermalinkImpl(slug, opts, anchorOpts, state, idx)\n }\n }\n\n renderPermalink.defaults = Object.assign({}, commonDefaults)\n renderPermalink.renderPermalinkImpl = renderPermalinkImpl\n\n return renderPermalink\n}\n\nfunction mergeDuplicateClassAttrs(attrs) {\n const classValues = [];\n const mergedAttrs = attrs.filter(([key, value]) => {\n if (key !== 'class') {\n return true;\n }\n classValues.push(value);\n });\n\n if (classValues.length > 0) {\n mergedAttrs.unshift(['class', classValues.join(' ')]);\n }\n\n return mergedAttrs;\n}\n\nexport const linkInsideHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...(opts.ariaHidden ? [['aria-hidden', 'true']] : []),\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n Object.assign(new state.Token('html_inline', '', 0), { content: opts.symbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n state.tokens[idx + 1].children[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n state.tokens[idx + 1].children[position[opts.placement]](...linkTokens)\n})\n\nObject.assign(linkInsideHeader.defaults, {\n space: true,\n placement: 'after',\n ariaHidden: false\n})\n\nexport const ariaHidden = makePermalink(linkInsideHeader.renderPermalinkImpl)\n\nariaHidden.defaults = Object.assign({}, linkInsideHeader.defaults, {\n ariaHidden: true\n})\n\nexport const headerLink = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n ...(opts.safariReaderFix ? [new state.Token('span_open', 'span', 1)] : []),\n ...state.tokens[idx + 1].children,\n ...(opts.safariReaderFix ? [new state.Token('span_close', 'span', -1)] : []),\n new state.Token('link_close', 'a', -1)\n ]\n\n state.tokens[idx + 1] = Object.assign(new state.Token('inline', '', 0), {\n children: linkTokens\n })\n})\n\nObject.assign(headerLink.defaults, {\n safariReaderFix: false\n})\n\nexport const linkAfterHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n if (!['visually-hidden', 'aria-label', 'aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called with unknown style option \\`${opts.style}\\``)\n }\n\n if (!['aria-describedby', 'aria-labelledby'].includes(opts.style) && !opts.assistiveText) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called without the \\`assistiveText\\` option in \\`${opts.style}\\` style`)\n }\n\n if (opts.style === 'visually-hidden' && !opts.visuallyHiddenClass) {\n throw new Error('`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style')\n }\n\n const title = state.tokens[idx + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n const subLinkTokens = []\n const linkAttrs = []\n\n if (opts.class) {\n linkAttrs.push(['class', opts.class])\n }\n\n linkAttrs.push(['href', opts.renderHref(slug, state)])\n linkAttrs.push(...Object.entries(opts.renderAttrs(slug, state)))\n\n if (opts.style === 'visually-hidden') {\n subLinkTokens.push(\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['class', opts.visuallyHiddenClass]],\n }),\n Object.assign(new state.Token('text', '', 0), {\n content: opts.assistiveText(title)\n }),\n new state.Token('span_close', 'span', -1)\n )\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n subLinkTokens[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n subLinkTokens[position[opts.placement]](\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['aria-hidden', 'true']],\n }),\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n }),\n new state.Token('span_close', 'span', -1)\n )\n } else {\n subLinkTokens.push(\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n })\n )\n }\n\n if (opts.style === 'aria-label') {\n linkAttrs.push(['aria-label', opts.assistiveText(title)])\n } else if (['aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n linkAttrs.push([opts.style, slug])\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs(linkAttrs)\n }),\n ...subLinkTokens,\n new state.Token('link_close', 'a', -1),\n ]\n\n state.tokens.splice(idx + 3, 0, ...linkTokens)\n\n if (opts.wrapper) {\n state.tokens.splice(idx, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[0] + '\\n'\n }))\n\n state.tokens.splice(idx + 3 + linkTokens.length + 1, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[1] + '\\n'\n }))\n }\n})\n\nObject.assign(linkAfterHeader.defaults, {\n style: 'visually-hidden',\n space: true,\n placement: 'after',\n wrapper: null\n})\n","import * as permalink from './permalink'\n\nconst slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nfunction getTokensText (tokens) {\n return tokens\n .filter(t => ['text', 'code_inline'].includes(t.type))\n .map(t => t.content)\n .join('')\n}\n\nfunction uniqueSlug (slug, slugs, failOnNonUnique, startIndex) {\n let uniq = slug\n let i = startIndex\n\n if (failOnNonUnique && Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n throw new Error(`User defined \\`id\\` attribute \\`${slug}\\` is not unique. Please fix it in your Markdown to continue.`)\n } else {\n while (Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n uniq = `${slug}-${i}`\n i += 1\n }\n }\n\n slugs[uniq] = true\n\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nfunction anchor (md, opts) {\n opts = Object.assign({}, anchor.defaults, opts)\n\n md.core.ruler.push('anchor', state => {\n const slugs = {}\n const tokens = state.tokens\n\n const isLevelSelected = Array.isArray(opts.level)\n ? isLevelSelectedArray(opts.level)\n : isLevelSelectedNumber(opts.level)\n\n for (let idx = 0; idx < tokens.length; idx++) {\n const token = tokens[idx]\n\n if (token.type !== 'heading_open') {\n continue\n }\n\n if (!isLevelSelected(Number(token.tag.substr(1)))) {\n continue\n }\n\n // Aggregate the next token children text.\n const title = opts.getTokensText(tokens[idx + 1].children)\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n slug = uniqueSlug(opts.slugify(title), slugs, false, opts.uniqueSlugStartIndex)\n } else {\n slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex)\n }\n\n token.attrSet('id', slug)\n\n if (opts.tabIndex !== false) {\n token.attrSet('tabindex', `${opts.tabIndex}`)\n }\n\n if (typeof opts.permalink === 'function') {\n opts.permalink(slug, opts, state, idx)\n } else if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, idx)\n } else if (opts.renderPermalink && opts.renderPermalink !== permalink.legacy) {\n opts.renderPermalink(slug, opts, state, idx)\n }\n\n // A permalink renderer could modify the `tokens` array so\n // make sure to get the up-to-date index on each iteration.\n idx = tokens.indexOf(token)\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n }\n })\n}\n\nanchor.permalink = permalink\n\nanchor.defaults = {\n level: 1,\n slugify,\n uniqueSlugStartIndex: 1,\n tabIndex: '-1',\n getTokensText,\n\n // Legacy options.\n permalink: false,\n renderPermalink: permalink.legacy,\n permalinkClass: permalink.ariaHidden.defaults.class,\n permalinkSpace: permalink.ariaHidden.defaults.space,\n permalinkSymbol: '¶',\n permalinkBefore: permalink.ariaHidden.defaults.placement === 'before',\n permalinkHref: permalink.ariaHidden.defaults.renderHref,\n permalinkAttrs: permalink.ariaHidden.defaults.renderAttrs\n}\n\n// Dirty hack to make `import anchor from 'markdown-it-anchor'` work with\n// TypeScript which doesn't support the `module` field of `package.json` and\n// will always get the CommonJS version which otherwise wouldn't have a\n// `default` key, resulting in markdown-it-anchor being undefined when being\n// imported that way.\nanchor.default = anchor\n\nexport default anchor\n"],"names":["emittedWarning","position","false","true","after","before","permalinkSymbolMeta","isPermalinkSymbol","legacy","slug","opts","state","idx","_state$tokens$childre","warningText","process","emitWarning","console","warn","linkTokens","Object","assign","Token","attrs","concat","permalinkClass","permalinkHref","entries","permalinkAttrs","content","permalinkSymbol","meta","permalinkSpace","tokens","children","permalinkBefore","apply","renderHref","renderAttrs","commonDefaults","class","symbol","makePermalink","renderPermalinkImpl","renderPermalink","defaults","anchorOpts","mergeDuplicateClassAttrs","classValues","mergedAttrs","filter","_ref","push","length","unshift","join","linkInsideHeader","_state$tokens$childre2","ariaHidden","space","placement","headerLink","safariReaderFix","linkAfterHeader","_state$tokens","includes","style","Error","assistiveText","visuallyHiddenClass","title","token","type","reduce","acc","t","subLinkTokens","linkAttrs","splice","wrapper","uniqueSlug","slugs","failOnNonUnique","startIndex","uniq","i","prototype","hasOwnProperty","call","anchor","md","core","ruler","selection","isLevelSelected","Array","isArray","level","isLevelSelectedNumber","Number","tag","substr","getTokensText","attrGet","slugify","uniqueSlugStartIndex","attrSet","tabIndex","permalink","indexOf","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","map"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"markdownItAnchor.umd.js","sources":["../permalink.js","../index.js"],"sourcesContent":["let emittedWarning = false\n\nconst position = {\n false: 'push',\n true: 'unshift',\n after: 'push',\n before: 'unshift'\n}\n\nconst permalinkSymbolMeta = {\n isPermalinkSymbol: true\n}\n\nexport function legacy (slug, opts, state, idx) {\n if (!emittedWarning) {\n const warningText = 'Using deprecated markdown-it-anchor permalink option, see https://github.com/valeriangalliat/markdown-it-anchor#permalinks'\n\n if (typeof process === 'object' && process && process.emitWarning) {\n process.emitWarning(warningText)\n } else {\n console.warn(warningText)\n }\n\n emittedWarning = true\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: [\n ...(opts.permalinkClass ? [['class', opts.permalinkClass]] : []),\n ['href', opts.permalinkHref(slug, state)],\n ...Object.entries(opts.permalinkAttrs(slug, state))\n ]\n }),\n Object.assign(new state.Token('html_block', '', 0), { content: opts.permalinkSymbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.permalinkSpace) {\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](Object.assign(new state.Token('text', '', 0), { content: ' ' }))\n }\n\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](...linkTokens)\n}\n\nexport function renderHref (slug) {\n return `#${slug}`\n}\n\nexport function renderAttrs (slug) {\n return {}\n}\n\nconst commonDefaults = {\n class: 'header-anchor',\n symbol: '#',\n renderHref,\n renderAttrs\n}\n\nexport function makePermalink (renderPermalinkImpl) {\n function renderPermalink (opts) {\n opts = Object.assign({}, renderPermalink.defaults, opts)\n\n return (slug, anchorOpts, state, idx) => {\n return renderPermalinkImpl(slug, opts, anchorOpts, state, idx)\n }\n }\n\n renderPermalink.defaults = Object.assign({}, commonDefaults)\n renderPermalink.renderPermalinkImpl = renderPermalinkImpl\n\n return renderPermalink\n}\n\nfunction mergeDuplicateClassAttrs(attrs) {\n const classValues = [];\n const mergedAttrs = attrs.filter(([key, value]) => {\n if (key !== 'class') {\n return true;\n }\n classValues.push(value);\n });\n\n if (classValues.length > 0) {\n mergedAttrs.unshift(['class', classValues.join(' ')]);\n }\n\n return mergedAttrs;\n}\n\nexport const linkInsideHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...(opts.ariaHidden ? [['aria-hidden', 'true']] : []),\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n Object.assign(new state.Token('html_inline', '', 0), { content: opts.symbol, meta: permalinkSymbolMeta }),\n new state.Token('link_close', 'a', -1)\n ]\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n state.tokens[idx + 1].children[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n state.tokens[idx + 1].children[position[opts.placement]](...linkTokens)\n})\n\nObject.assign(linkInsideHeader.defaults, {\n space: true,\n placement: 'after',\n ariaHidden: false\n})\n\nexport const ariaHidden = makePermalink(linkInsideHeader.renderPermalinkImpl)\n\nariaHidden.defaults = Object.assign({}, linkInsideHeader.defaults, {\n ariaHidden: true\n})\n\nexport const headerLink = makePermalink((slug, opts, anchorOpts, state, idx) => {\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs([\n ...(opts.class ? [['class', opts.class]] : []),\n ['href', opts.renderHref(slug, state)],\n ...Object.entries(opts.renderAttrs(slug, state))\n ])\n }),\n ...(opts.safariReaderFix ? [new state.Token('span_open', 'span', 1)] : []),\n ...state.tokens[idx + 1].children,\n ...(opts.safariReaderFix ? [new state.Token('span_close', 'span', -1)] : []),\n new state.Token('link_close', 'a', -1)\n ]\n\n state.tokens[idx + 1] = Object.assign(new state.Token('inline', '', 0), {\n children: linkTokens\n })\n})\n\nObject.assign(headerLink.defaults, {\n safariReaderFix: false\n})\n\nexport const linkAfterHeader = makePermalink((slug, opts, anchorOpts, state, idx) => {\n if (!['visually-hidden', 'aria-label', 'aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called with unknown style option \\`${opts.style}\\``)\n }\n\n if (!['aria-describedby', 'aria-labelledby'].includes(opts.style) && !opts.assistiveText) {\n throw new Error(`\\`permalink.linkAfterHeader\\` called without the \\`assistiveText\\` option in \\`${opts.style}\\` style`)\n }\n\n if (opts.style === 'visually-hidden' && !opts.visuallyHiddenClass) {\n throw new Error('`permalink.linkAfterHeader` called without the `visuallyHiddenClass` option in `visually-hidden` style')\n }\n\n const title = state.tokens[idx + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n const subLinkTokens = []\n const linkAttrs = []\n\n if (opts.class) {\n linkAttrs.push(['class', opts.class])\n }\n\n linkAttrs.push(['href', opts.renderHref(slug, state)])\n linkAttrs.push(...Object.entries(opts.renderAttrs(slug, state)))\n\n if (opts.style === 'visually-hidden') {\n subLinkTokens.push(\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['class', opts.visuallyHiddenClass]],\n }),\n Object.assign(new state.Token('text', '', 0), {\n content: opts.assistiveText(title)\n }),\n new state.Token('span_close', 'span', -1)\n )\n\n if (opts.space) {\n const space = typeof opts.space === 'string' ? opts.space : ' '\n const type = typeof opts.space === 'string' ? 'html_inline' : 'text'\n subLinkTokens[position[opts.placement]](Object.assign(new state.Token(type, '', 0), { content: space }))\n }\n\n subLinkTokens[position[opts.placement]](\n Object.assign(new state.Token('span_open', 'span', 1), {\n attrs: [['aria-hidden', 'true']],\n }),\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n }),\n new state.Token('span_close', 'span', -1)\n )\n } else {\n subLinkTokens.push(\n Object.assign(new state.Token('html_inline', '', 0), {\n content: opts.symbol,\n meta: permalinkSymbolMeta\n })\n )\n }\n\n if (opts.style === 'aria-label') {\n linkAttrs.push(['aria-label', opts.assistiveText(title)])\n } else if (['aria-describedby', 'aria-labelledby'].includes(opts.style)) {\n linkAttrs.push([opts.style, slug])\n }\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: mergeDuplicateClassAttrs(linkAttrs)\n }),\n ...subLinkTokens,\n new state.Token('link_close', 'a', -1),\n ]\n\n state.tokens.splice(idx + 3, 0, ...linkTokens)\n\n if (opts.wrapper) {\n state.tokens.splice(idx, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[0] + '\\n'\n }))\n\n state.tokens.splice(idx + 3 + linkTokens.length + 1, 0, Object.assign(new state.Token('html_block', '', 0), {\n content: opts.wrapper[1] + '\\n'\n }))\n }\n})\n\nObject.assign(linkAfterHeader.defaults, {\n style: 'visually-hidden',\n space: true,\n placement: 'after',\n wrapper: null\n})\n","import * as permalink from './permalink'\n\nconst slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nfunction getTokensText (tokens) {\n return tokens\n .filter(t => ['text', 'code_inline'].includes(t.type))\n .map(t => t.content)\n .join('')\n}\n\nfunction uniqueSlug (slug, slugs, failOnNonUnique, startIndex) {\n let uniq = slug\n let i = startIndex\n\n if (failOnNonUnique && Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n throw new Error(`User defined \\`id\\` attribute \\`${slug}\\` is not unique. Please fix it in your Markdown to continue.`)\n } else {\n while (Object.prototype.hasOwnProperty.call(slugs, uniq)) {\n uniq = `${slug}-${i}`\n i += 1\n }\n }\n\n slugs[uniq] = true\n\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nfunction anchor (md, opts) {\n opts = Object.assign({}, anchor.defaults, opts)\n\n md.core.ruler.push('anchor', state => {\n const slugs = {}\n const tokens = state.tokens\n\n const isLevelSelected = Array.isArray(opts.level)\n ? isLevelSelectedArray(opts.level)\n : isLevelSelectedNumber(opts.level)\n\n for (let idx = 0; idx < tokens.length; idx++) {\n const token = tokens[idx]\n\n if (token.type !== 'heading_open') {\n continue\n }\n\n if (!isLevelSelected(Number(token.tag.substr(1)))) {\n continue\n }\n\n // Aggregate the next token children text.\n const title = opts.getTokensText(tokens[idx + 1].children)\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n if (opts.slugifyWithState) {\n slug = opts.slugifyWithState(title, state)\n } else {\n slug = opts.slugify(title)\n }\n\n slug = uniqueSlug(slug, slugs, false, opts.uniqueSlugStartIndex)\n } else {\n slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex)\n }\n\n token.attrSet('id', slug)\n\n if (opts.tabIndex !== false) {\n token.attrSet('tabindex', `${opts.tabIndex}`)\n }\n\n if (typeof opts.permalink === 'function') {\n opts.permalink(slug, opts, state, idx)\n } else if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, idx)\n } else if (opts.renderPermalink && opts.renderPermalink !== permalink.legacy) {\n opts.renderPermalink(slug, opts, state, idx)\n }\n\n // A permalink renderer could modify the `tokens` array so\n // make sure to get the up-to-date index on each iteration.\n idx = tokens.indexOf(token)\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n }\n })\n}\n\nanchor.permalink = permalink\n\nanchor.defaults = {\n level: 1,\n slugify,\n uniqueSlugStartIndex: 1,\n tabIndex: '-1',\n getTokensText,\n\n // Legacy options.\n permalink: false,\n renderPermalink: permalink.legacy,\n permalinkClass: permalink.ariaHidden.defaults.class,\n permalinkSpace: permalink.ariaHidden.defaults.space,\n permalinkSymbol: '¶',\n permalinkBefore: permalink.ariaHidden.defaults.placement === 'before',\n permalinkHref: permalink.ariaHidden.defaults.renderHref,\n permalinkAttrs: permalink.ariaHidden.defaults.renderAttrs\n}\n\n// Dirty hack to make `import anchor from 'markdown-it-anchor'` work with\n// TypeScript which doesn't support the `module` field of `package.json` and\n// will always get the CommonJS version which otherwise wouldn't have a\n// `default` key, resulting in markdown-it-anchor being undefined when being\n// imported that way.\nanchor.default = anchor\n\nexport default anchor\n"],"names":["emittedWarning","position","false","true","after","before","permalinkSymbolMeta","isPermalinkSymbol","legacy","slug","opts","state","idx","_state$tokens$childre","warningText","process","emitWarning","console","warn","linkTokens","Object","assign","Token","attrs","concat","permalinkClass","permalinkHref","entries","permalinkAttrs","content","permalinkSymbol","meta","permalinkSpace","tokens","children","permalinkBefore","apply","renderHref","renderAttrs","commonDefaults","class","symbol","makePermalink","renderPermalinkImpl","renderPermalink","defaults","anchorOpts","mergeDuplicateClassAttrs","classValues","mergedAttrs","filter","_ref","push","length","unshift","join","linkInsideHeader","_state$tokens$childre2","ariaHidden","space","placement","headerLink","safariReaderFix","linkAfterHeader","_state$tokens","includes","style","Error","assistiveText","visuallyHiddenClass","title","token","type","reduce","acc","t","subLinkTokens","linkAttrs","splice","wrapper","uniqueSlug","slugs","failOnNonUnique","startIndex","uniq","i","prototype","hasOwnProperty","call","anchor","md","core","ruler","selection","isLevelSelected","Array","isArray","level","isLevelSelectedNumber","Number","tag","substr","getTokensText","attrGet","slugifyWithState","slugify","uniqueSlugStartIndex","attrSet","tabIndex","permalink","indexOf","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","map"],"mappings":"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"} \ No newline at end of file diff --git a/index.js b/index.js index a9bb6bc..f7928bb 100644 --- a/index.js +++ b/index.js @@ -58,7 +58,13 @@ function anchor (md, opts) { let slug = token.attrGet('id') if (slug == null) { - slug = uniqueSlug(opts.slugify(title, state.env), slugs, false, opts.uniqueSlugStartIndex) + if (opts.slugifyWithState) { + slug = opts.slugifyWithState(title, state) + } else { + slug = opts.slugify(title) + } + + slug = uniqueSlug(slug, slugs, false, opts.uniqueSlugStartIndex) } else { slug = uniqueSlug(slug, slugs, true, opts.uniqueSlugStartIndex) } diff --git a/package-lock.json b/package-lock.json index daf489f..d7b29c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "9.0.2", "license": "Unlicense", "devDependencies": { + "@sindresorhus/slugify": "^2.2.1", "ava": "^5.1.0", "markdown-it": "*", "markdown-it-attrs": "^4.1.6", @@ -2300,6 +2301,37 @@ "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, + "node_modules/@sindresorhus/slugify": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.1.tgz", + "integrity": "sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==", + "dev": true, + "dependencies": { + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@surma/rollup-plugin-off-main-thread": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", diff --git a/package.json b/package.json index a4a4227..51910c4 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "test": "npm run lint && ava test.js" }, "devDependencies": { + "@sindresorhus/slugify": "^2.2.1", "ava": "^5.1.0", "markdown-it": "*", "markdown-it-attrs": "^4.1.6", diff --git a/test.js b/test.js index 146122a..0693105 100644 --- a/test.js +++ b/test.js @@ -232,11 +232,20 @@ test('getTokensText', t => { ) }) -test('slugify', t => { - t.is( - md().use(anchor, { slugify: (title, env) => `${env.docId}-${title}` }).render('# bar', { docId: 'foo' }), - '

bar

\n' - ) +test('slugify', async t => { + const slugify = (await import('@sindresorhus/slugify')).default + + t.is( + md().use(anchor, { slugify }).render('# foo bar'), + '

foo bar

\n' + ) +}) + +test('slugify with state', t => { + t.is( + md().use(anchor, { slugifyWithState: (title, state) => `${state.env.docId}-${title}` }).render('# bar', { docId: 'foo' }), + '

bar

\n' + ) }) nest('permalink.linkInsideHeader', test => { diff --git a/types/index.d.ts b/types/index.d.ts index 1c51e10..bb6d58a 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -47,7 +47,8 @@ declare namespace anchor { export interface AnchorOptions { level?: number | number[]; - slugify?(str: string, env: any): string; + slugify?(str: string): string; + slugifyWithState?(str: string, state: State): string; getTokensText?(tokens: Token[]): string; uniqueSlugStartIndex?: number;