hedgedoc/src/components/markdown-renderer/markdown-extension/table-of-contents-markdown-extension.ts
Tilman Vatteroth 8a8bacc0aa
Introduce Markdown extensions (#1614)
* Introduce markdown extensions

Signed-off-by: Tilman Vatteroth <git@tilmanvatteroth.de>
2021-11-15 17:04:49 +01:00

32 lines
915 B
TypeScript

/*
* SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { MarkdownExtension } from './markdown-extension'
import type MarkdownIt from 'markdown-it'
import type { TocAst } from 'markdown-it-toc-done-right'
import toc from 'markdown-it-toc-done-right'
import { tocSlugify } from '../../editor-page/table-of-contents/toc-slugify'
export class TableOfContentsMarkdownExtension extends MarkdownExtension {
constructor(private onTocChange?: (ast: TocAst) => void) {
super()
}
public configureMarkdownIt(markdownIt: MarkdownIt): void {
if (!this.onTocChange) {
return
}
toc(markdownIt, {
placeholder: '(\\[TOC\\]|\\[toc\\])',
listType: 'ul',
level: [1, 2, 3],
callback: (code: string, ast: TocAst): void => {
this.onTocChange?.(ast)
},
slugify: tocSlugify
})
}
}