All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- 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.
- 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
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>';
}
});
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>
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:
- Gather all headings in a list.
- Turn that list into a nested tree.
- 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
ormarkdown-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