{"version":3,"file":"markdownItAnchor.mjs","sources":["../index.js"],"sourcesContent":["const slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\\s+/g, '-'))\n\nconst position = {\n false: 'push',\n true: 'unshift'\n}\n\nconst hasProp = Object.prototype.hasOwnProperty\n\nconst permalinkHref = slug => `#${slug}`\nconst permalinkAttrs = slug => ({})\n\nconst renderPermalink = (slug, opts, state, idx) => {\n const space = () => Object.assign(new state.Token('text', '', 0), { content: ' ' })\n\n const linkTokens = [\n Object.assign(new state.Token('link_open', 'a', 1), {\n attrs: [\n ['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 }),\n new state.Token('link_close', 'a', -1)\n ]\n\n // `push` or `unshift` according to position option.\n // Space is at the opposite side.\n if (opts.permalinkSpace) {\n linkTokens[position[!opts.permalinkBefore]](space())\n }\n state.tokens[idx + 1].children[position[opts.permalinkBefore]](...linkTokens)\n}\n\nconst uniqueSlug = (slug, slugs) => {\n let uniq = slug\n let i = 2\n while (hasProp.call(slugs, uniq)) uniq = `${slug}-${i++}`\n slugs[uniq] = true\n return uniq\n}\n\nconst isLevelSelectedNumber = selection => level => level >= selection\nconst isLevelSelectedArray = selection => level => selection.includes(level)\n\nconst 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 tokens\n .filter(token => token.type === 'heading_open')\n .filter(token => isLevelSelected(Number(token.tag.substr(1))))\n .forEach(token => {\n // Aggregate the next token children text.\n const title = tokens[tokens.indexOf(token) + 1]\n .children\n .filter(token => token.type === 'text' || token.type === 'code_inline')\n .reduce((acc, t) => acc + t.content, '')\n\n let slug = token.attrGet('id')\n\n if (slug == null) {\n slug = uniqueSlug(opts.slugify(title), slugs)\n token.attrPush(['id', slug])\n }\n\n if (opts.permalink) {\n opts.renderPermalink(slug, opts, state, tokens.indexOf(token))\n }\n\n if (opts.callback) {\n opts.callback(token, { slug, title })\n }\n })\n })\n}\n\nanchor.defaults = {\n level: 1,\n slugify,\n permalink: false,\n renderPermalink,\n permalinkClass: 'header-anchor',\n permalinkSpace: true,\n permalinkSymbol: 'ΒΆ',\n permalinkBefore: false,\n permalinkHref,\n permalinkAttrs\n}\n\nexport default anchor\n"],"names":["const","position","false","true","hasProp","Object","prototype","hasOwnProperty","anchor","md","opts","assign","defaults","core","ruler","push","state","selection","slugs","tokens","isLevelSelected","Array","isArray","level","includes","isLevelSelectedNumber","filter","token","type","Number","tag","substr","forEach","title","indexOf","children","reduce","acc","t","content","slug","attrGet","uniq","i","call","uniqueSlug","slugify","attrPush","permalink","renderPermalink","callback","s","encodeURIComponent","String","trim","toLowerCase","replace","idx","linkTokens","Token","attrs","permalinkClass","permalinkHref","entries","permalinkAttrs","permalinkSymbol","permalinkSpace","permalinkBefore","ref"],"mappings":"AAAAA,IAEMC,EAAW,CACfC,MAAO,OACPC,KAAM,WAGFC,EAAUC,OAAOC,UAAUC,eAuC3BC,WAAUC,EAAIC,GAClBA,EAAOL,OAAOM,OAAO,GAAIH,EAAOI,SAAUF,GAE1CD,EAAGI,KAAKC,MAAMC,KAAK,kBAAUC,OALFC,EAMnBC,EAAQ,GACRC,EAASH,EAAMG,OAEfC,EAAkBC,MAAMC,QAAQZ,EAAKa,QATlBN,EAUAP,EAAKa,eAVQA,UAASN,EAAUO,SAASD,cADxCN,mBAAaM,UAASA,GAASN,GAYrDQ,CAAsBf,EAAKa,OAE/BJ,EACGO,gBAAOC,SAAwB,iBAAfA,EAAMC,OACtBF,gBAAOC,UAASP,EAAgBS,OAAOF,EAAMG,IAAIC,OAAO,OACxDC,iBAAQL,OAEDM,EAAQd,EAAOA,EAAOe,QAAQP,GAAS,GAC1CQ,SACAT,gBAAOC,SAAwB,SAAfA,EAAMC,MAAkC,gBAAfD,EAAMC,OAC/CQ,gBAAQC,EAAKC,UAAMD,EAAMC,EAAEC,SAAS,IAEnCC,EAAOb,EAAMc,QAAQ,MAEb,MAARD,IACFA,WAnCUA,EAAMtB,WACpBwB,EAAOF,EACPG,EAAI,EACDvC,EAAQwC,KAAK1B,EAAOwB,IAAOA,EAAQF,MAAUG,WACpDzB,EAAMwB,IAAQ,EACPA,EA8BQG,CAAWnC,EAAKoC,QAAQb,GAAQf,GACvCS,EAAMoB,SAAS,CAAC,KAAMP,KAGpB9B,EAAKsC,WACPtC,EAAKuC,gBAAgBT,EAAM9B,EAAMM,EAAOG,EAAOe,QAAQP,IAGrDjB,EAAKwC,UACPxC,EAAKwC,SAASvB,EAAO,MAAEa,QAAMP,SAMvCzB,EAAOI,SAAW,CAChBW,MAAO,mBAtFQ4B,UAAMC,mBAAmBC,OAAOF,GAAGG,OAAOC,cAAcC,QAAQ,OAAQ,OAwFvFR,WAAW,2BA5EYR,EAAM9B,EAAMM,EAAOyC,SAGpCC,EAAa,CACjBrD,OAAOM,OAAO,IAAIK,EAAM2C,MAAM,YAAa,IAAK,GAAI,CAClDC,MAAO,CACL,CAAC,QAASlD,EAAKmD,gBACf,CAAC,OAAQnD,EAAKoD,cAActB,EAAMxB,YAC/BX,OAAO0D,QAAQrD,EAAKsD,eAAexB,EAAMxB,OAGhDX,OAAOM,OAAO,IAAIK,EAAM2C,MAAM,aAAc,GAAI,GAAI,CAAEpB,QAAS7B,EAAKuD,kBACpE,IAAIjD,EAAM2C,MAAM,aAAc,KAAM,IAKlCjD,EAAKwD,gBACPR,EAAWzD,GAAUS,EAAKyD,kBAjBR9D,OAAOM,OAAO,IAAIK,EAAM2C,MAAM,OAAQ,GAAI,GAAI,CAAEpB,QAAS,UAmB7EvB,EAAMG,OAAOsC,EAAM,GAAGtB,UAASlC,EAASS,EAAKyD,wBAAkBC,EAAGV,IA0DlEG,eAAgB,gBAChBK,gBAAgB,EAChBD,gBAAiB,IACjBE,iBAAiB,yBApFG3B,aAAYA,2BACXA"}