diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index 12955585..57f981db 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -4,6 +4,7 @@ import emoji from 'markdown-it-emoji' import math from '@rokt33r/markdown-it-math' import mdurl from 'mdurl' import smartArrows from 'markdown-it-smartarrows' +import markdownItTocAndAnchor from '@hikerpig/markdown-it-toc-and-anchor' import _ from 'lodash' import ConfigManager from 'browser/main/lib/ConfigManager' import katex from 'katex' @@ -127,6 +128,12 @@ class Markdown { this.md.use(require('markdown-it-abbr')) this.md.use(require('markdown-it-sub')) this.md.use(require('markdown-it-sup')) + this.md.use(markdownItTocAndAnchor, { + toc: true, + tocPattern: /\[TOC\]/i, + anchorLink: false, + appendIdToHeading: false + }) this.md.use(require('./markdown-it-deflist')) this.md.use(require('./markdown-it-frontmatter')) diff --git a/package.json b/package.json index c0709718..54eebe1f 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "homepage": "https://boostnote.io", "dependencies": { "@enyaxu/markdown-it-anchor": "^5.0.2", + "@hikerpig/markdown-it-toc-and-anchor": "^4.5.0", "@rokt33r/js-sequence-diagrams": "^2.0.6-2", "@rokt33r/markdown-it-math": "^4.0.1", "@rokt33r/season": "^5.3.0", diff --git a/tests/fixtures/markdowns.js b/tests/fixtures/markdowns.js index ca67c396..f2f5b493 100644 --- a/tests/fixtures/markdowns.js +++ b/tests/fixtures/markdowns.js @@ -109,6 +109,14 @@ const footnote = ` hello-world: https://github.com/BoostIO/Boostnote/ ` +const tocPlaceholder = ` +[TOC] +# H1 +## H2 +### H3 +###$ H4 +` + const plantUmlMindMap = ` @startmindmap * Debian @@ -192,6 +200,7 @@ export default { deflists, shortcuts, footnote, + tocPlaceholder, plantUmlMindMap, plantUmlGantt, plantUmlWbs, diff --git a/tests/lib/markdown-test.js b/tests/lib/markdown-test.js index 0934c27f..9aec244d 100644 --- a/tests/lib/markdown-test.js +++ b/tests/lib/markdown-test.js @@ -74,6 +74,11 @@ test('Markdown.render() should render footnote correctly', t => { t.snapshot(rendered) }) +test('Markdown.render() should renders [TOC] placholder correctly', t => { + const rendered = md.render(markdownFixtures.tocPlaceholder) + t.snapshot(rendered) +}) + test('Markdown.render() should render PlantUML MindMaps correctly', t => { const rendered = md.render(markdownFixtures.plantUmlMindMap) t.snapshot(rendered) diff --git a/tests/lib/snapshots/markdown-test.js.md b/tests/lib/snapshots/markdown-test.js.md index ac97f6c8..1ebc0275 100644 --- a/tests/lib/snapshots/markdown-test.js.md +++ b/tests/lib/snapshots/markdown-test.js.md @@ -83,6 +83,28 @@ Generated by [AVA](https://ava.li). `c=pmsqrta2+b2c = pmsqrt{a^2 + b^2}␊ ` +## Markdown.render() should renders [TOC] placholder correctly + +> Snapshot 1 + + `

␊ +

␊ +

H1

␊ +

H2

␊ +

H3

␊ +

###$ H4

␊ + ` + ## Markdown.render() should renders abbrevations correctly > Snapshot 1 @@ -204,4 +226,39 @@ Generated by [AVA](https://ava.li). > Snapshot 2 `

This is a "QUOTE".

␊ + + +## Markdown.render() should render PlantUML Ditaa correctly + +> Snapshot 1 + + `uml diagram␊ ` + +## Markdown.render() should render PlantUML Gantt correctly + +> Snapshot 1 + + `uml diagram␊ + ` + +## Markdown.render() should render PlantUML MindMaps correctly + +> Snapshot 1 + + `uml diagram␊ + ` + +## Markdown.render() should render PlantUML Umls correctly + +> Snapshot 1 + + `uml diagram␊ + ` + +## Markdown.render() should render PlantUML WBS correctly + +> Snapshot 1 + + `uml diagram␊ + ` \ No newline at end of file diff --git a/tests/lib/snapshots/markdown-test.js.snap b/tests/lib/snapshots/markdown-test.js.snap index 76bc8ccd..3e68ab1b 100644 Binary files a/tests/lib/snapshots/markdown-test.js.snap and b/tests/lib/snapshots/markdown-test.js.snap differ diff --git a/yarn.lock b/yarn.lock index ec82dd2a..6cac542e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -74,6 +74,14 @@ version "5.0.2" resolved "https://registry.yarnpkg.com/@enyaxu/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz#d173f7b60b492aabc17dfba864c4d071f5595f72" +"@hikerpig/markdown-it-toc-and-anchor@^4.5.0": + version "4.5.0" + resolved "https://registry.npmjs.org/@hikerpig/markdown-it-toc-and-anchor/-/markdown-it-toc-and-anchor-4.5.0.tgz#c1652bdebfd07d41c9738254891515d759b054f0" + integrity sha512-PaYl/v9/ViceXm+fC+WoQOD/8lvYf76SnA3s8b/BQ6s3NpZdk/W/aW0dg5YHquQNcdaLfz3lmQTt6iafbe5tbg== + dependencies: + clone "^2.1.0" + uslug "^1.0.4" + "@ladjs/time-require@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@ladjs/time-require/-/time-require-0.1.4.tgz#5c615d75fd647ddd5de9cf6922649558856b21a1" @@ -1814,6 +1822,11 @@ clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" +clone@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + co-with-promise@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co-with-promise/-/co-with-promise-4.6.0.tgz#413e7db6f5893a60b942cf492c4bec93db415ab7" @@ -9557,6 +9570,11 @@ universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" +"unorm@>= 1.0.0": + version "1.6.0" + resolved "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" + integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -9634,6 +9652,13 @@ user-home@^2.0.0: dependencies: os-homedir "^1.0.0" +uslug@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/uslug/-/uslug-1.0.4.tgz#b9a22f0914e0a86140633dacc302e5f4fa450677" + integrity sha1-uaIvCRTgqGFAYz2swwLl9PpFBnc= + dependencies: + unorm ">= 1.0.0" + utf8-byte-length@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"