UNPKG

@leisn/markdown-it-toc

Version:

Markdown-it plugin to make table of contents, default parse tag [toc].

173 lines (134 loc) 4.02 kB
# @leisn/markdown-it-toc ![GitHub](https://img.shields.io/github/license/leisn/markdown-it-toc) ![npm (scoped)](https://img.shields.io/npm/v/@leisn/markdown-it-toc) Markdown-it plugin to make table of contents, default parse tag [toc]. ## Installaton ```bash $ npm install @leisn/markdown-it-toc or $ yarn add @leisn/markdown-it-toc ``` ## E.g. default ### Source markdown ```markdown [toc] # H1-1 ## H2-1 ### H3-1 # H1-2 ``` ### Result document ```html <p> <div id="toc" class="toc-wrapper"> <ul> <li> <a href="#toc.1"> <span class="toc-item-index">1</span> H1-1 </a> </li> <ul> <li> <a href="#toc.1-1"> <span class="toc-item-index">1.1</span> H2-1 </a> </li> <ul> <li> <a href="#toc.1-1-1"> <span class="toc-item-index">1.1.1</span> H3-1 </a> </li> </ul> </ul> <li> <a href="#toc.2"> <span class="toc-item-index">2</span> H1-2 </a> </li> </ul> </div> </p> <h1 id="toc.1" class="toc-heading"> <span class="toc-heading-prefix">1</span> <span class="toc-heading-content">H1-1</span> <a href="#toc" class="toc-heading-suffix">#</a> </h1> <h2 id="toc.1-1" class="toc-heading"> <span class="toc-heading-prefix">1.1</span> <span class="toc-heading-content">H2-1</span> <a href="#toc" class="toc-heading-suffix">#</a> </h2> <h3 id="toc.1-1-1" class="toc-heading"> <span class="toc-heading-prefix">1.1.1</span> <span class="toc-heading-content">H3-1</span> <a href="#toc" class="toc-heading-suffix">#</a> </h3> <h1 id="toc.2" class="toc-heading"> <span class="toc-heading-prefix">2</span> <span class="toc-heading-content">H1-2</span> <a href="#toc" class="toc-heading-suffix">#</a> </h1> ``` ## Usage ```javascript const md = require('markdown-it')(mkOpts) .use(require('@leisn/markdown-it-toc'),options); console.log(md.render('[toc]\n# h1\n## h2-1\n## h2-2')); ``` ## Options * **tocRegexp?: RegExp** Regular expression to detect TOC (default `/\[toc\]/im`). * **tocTag?: string** Tag for toc root element ( `div` by default ). * **tocAttrs?: string** Attributes for toc root element( `id="toc" class="toc-wrapper"` by default ). * **headingAttrs?: string** Attributes for headings `h1,h2,h3...` ( `class="toc-heading"` by default ) ```html -------------------------- # h1 title -------------------------- <h1 {headingAttrs}> <span>h1 title</span> </h1> ``` * **headingContentAttrs?: string** Attributes for headings content `span` ( `class="toc-heading-content"` by default ) ```html -------------------------- # headingContent -------------------------- <h1> <span {headingContentAttrs} > headingContent </span> </h1> ``` * **getToc?(toc: string): boolean** Get toc result, return false if you don't want it show in the result html document, else return true(default `null`). `toc` : the result html document * **getPathId?(info): string** Get id content for forwarding in page, (e.g. for `info.paths=[1,2]` default return `toc-no.1-2` ) * **getTocItemContent?(info): string** Content inside toc item `a` (html, include item heading text) * **getHeadingPrefix?(info): string** Content inside heading (html, before heading text) ```html -------------------------- # h1 title -------------------------- <h1> {getHeadingPrefix} <span>h1 title</span> </h1> ``` * **getHeadingSuffix?(info): string** Content inside heading (html, after heading text) ```html -------------------------- # h1 title -------------------------- <h1> <span>h1 title</span> {getHeadingSuffix} </h1> ``` ## Test ```bash $ npm run test or $ yarn test ``` ## LICENSE MIT