Skip to content

Releases: cmaas/markdown-it-table-of-contents

v0.8.0

10 Sep 14:47
Compare
Choose a tag to compare
  • Added: Option getTokensText to override how text is extracted from tokens to build headlines and slugs (fixes #61), similar to the function in markdown-it-anchor.

v0.7.0

09 Sep 12:56
Compare
Choose a tag to compare
  • Added: Override the container element
  • ⚠️ BREAKING CHANGE: The plugin moved from inline mode to block mode (fixes #62)
  • Changed: Updated tests, readme etc.
  • Removed: Old forceFullToc attribute

Override the container element

Two new options that accept functions that return HTML to render custom containers (and more elements if necessary):

md.use(markdownItTOC, {
    transformContainerOpen: () => {
        return '<nav class="my-toc"><button>Toggle</button><h3>Table of Contents</h3>';
    },
    transformContainerClose: () => {
        return '</nav>';
    }
});

Inline mode is now block mode

Input:

[[toc]]

Output before:

<p><div class="table-of-contents"></div></p>

Output now:

<div class="table-of-contents"></div>

The TOC now is generated in block mode, which removes the wrapping p tag. Wrapping a div in a p is considered invalid HTML.

If you really need a wrapping p-element, you can emulate the old behavior with the new container override functions:

const md = new MarkdownIt();
md.use(markdownItTOC, {
    transformContainerOpen: () => {
        return '<p><div class="table-of-contents">';
    },
    transformContainerClose: () => {
        return '</div></p>';
    }
});

Be aware that the old tests/examples now behave differently when using soft breaks before the [[toc]] markup:

Input:

# Article
Text with soft line break (two spaces)  
[[toc]]

## Headline

Output before:

<h1>Article</h1>
<p>Text with soft line break (two spaces)<br>
<div class="table-of-contents">...</div></p>

Output now:

<h1>Article</h1>
<p>Text with soft line break (two spaces)</p>
<div class="table-of-contents">...</div>

v0.6.0

12 Nov 10:49
Compare
Choose a tag to compare

The TOC generator was rewritten, because the old on-the-fly generator couldn't deal with unexpected order of headings and double-indentations. It is now a three-step process:

  1. Gather all headings in a list.
  2. Turn that list into a nested tree.
  3. Generate HTML code based on the nested tree.

Although all tests pass, this release could introduce some breaking changes for you, if you relied on the old way of doing things. Check the test cases to get a better understanding how this plugin handles various cases.

  • Added: Support for markdown-it-attrs (fixes #54)
  • Changed: Respects unexpected nesting order (fixes #55)
  • Changed: Uses anchor targets from existing id attributes (for example, set by markdown-it-attrs or markdown-it-anchor)
  • Changed: Now nests list correctly if there is a jump (for example: h2, h2, h4 -> h4 is now double-indented)
  • Removed: unused tests

v0.5.2

27 Jan 21:57
Compare
Choose a tag to compare

Better handling of content "other than text" in headers. I.e links.

v0.5.1

23 Nov 13:55
Compare
Choose a tag to compare
  • Exposes link to formatting function
  • Adheres to platform EOL in tests
  • Security patch

v0.5.0

21 Nov 16:38
Compare
Choose a tag to compare
  • Code updated to use ES5 syntax for easier in-browser use
  • Updates the existing format option to render markdown by default
  • Removes support for forceFullToc option (potentially BREAKING)

For background see #41

v0.4.4

11 Apr 07:23
Compare
Choose a tag to compare

Adds an optional function for transforming the links created in the TOC.

v0.4.3

17 Aug 08:55
Compare
Choose a tag to compare

Fixes faulty parsing of certain [-chars (#35). Thanks to @GiridharanNarayanan for fixing.

v0.4.2

13 Aug 12:17
Compare
Choose a tag to compare

Adds the possibility to specify header and footer HTML to be injected into the TOC container.

v0.4.1

13 Aug 12:11
Compare
Choose a tag to compare

Rendering bug fixed. Thanks @GiridharanNarayanan