Skip to content

Commit a6eddb5

Browse files
authored
Merge pull request #2592 from enyaxu/bug-2581
Fixed duplicate TOC Title jump error
2 parents c7bae93 + 78ae7b8 commit a6eddb5

File tree

6 files changed

+33
-30
lines changed

6 files changed

+33
-30
lines changed

browser/lib/markdown-toc-generator.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import toc from 'markdown-toc'
66
import diacritics from 'diacritics-map'
77
import stripColor from 'strip-color'
8+
import mdlink from 'markdown-link'
89

910
const EOL = require('os').EOL
1011

@@ -42,6 +43,12 @@ function caseSensitiveSlugify (str) {
4243
return str
4344
}
4445

46+
function linkify (tok, text, slug, opts) {
47+
var uniqeID = opts.num === 0 ? '' : '-' + opts.num
48+
tok.content = mdlink(text, '#' + slug + uniqeID)
49+
return tok
50+
}
51+
4552
const TOC_MARKER_START = '<!-- toc -->'
4653
const TOC_MARKER_END = '<!-- tocstop -->'
4754

@@ -84,7 +91,7 @@ export function generateInEditor (editor) {
8491
* @returns generatedTOC String containing generated TOC
8592
*/
8693
export function generate (markdownText) {
87-
const generatedToc = toc(markdownText, {slugify: caseSensitiveSlugify})
94+
const generatedToc = toc(markdownText, {slugify: caseSensitiveSlugify, linkify: linkify})
8895
return TOC_MARKER_START + EOL + EOL + generatedToc.content + EOL + EOL + TOC_MARKER_END
8996
}
9097

browser/lib/markdown.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import _ from 'lodash'
77
import ConfigManager from 'browser/main/lib/ConfigManager'
88
import katex from 'katex'
99
import { lastFindInArray } from './utils'
10-
import ee from 'browser/main/lib/eventEmitter'
10+
import anchor from '@enyaxu/markdown-it-anchor'
1111

1212
function createGutter (str, firstLineNumber) {
1313
if (Number.isNaN(firstLineNumber)) firstLineNumber = 1
@@ -118,12 +118,13 @@ class Markdown {
118118
this.md.use(require('markdown-it-imsize'))
119119
this.md.use(require('markdown-it-footnote'))
120120
this.md.use(require('markdown-it-multimd-table'))
121-
this.md.use(require('markdown-it-named-headers'), {
122-
slugify: (header) => {
123-
return encodeURI(header.trim()
121+
this.md.use(anchor, {
122+
slugify: (title) => {
123+
var slug = encodeURI(title.trim()
124124
.replace(/[\]\[\!\"\#\$\%\&\'\(\)\*\+\,\.\/\:\;\<\=\>\?\@\\\^\_\{\|\}\~]/g, '')
125125
.replace(/\s+/g, '-'))
126126
.replace(/\-+$/, '')
127+
return slug
127128
}
128129
})
129130
this.md.use(require('markdown-it-kbd'))

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
},
4949
"homepage": "https://boostnote.io",
5050
"dependencies": {
51+
"@enyaxu/markdown-it-anchor": "^5.0.2",
5152
"@rokt33r/markdown-it-math": "^4.0.1",
5253
"@rokt33r/season": "^5.3.0",
5354
"@susisu/mte-kernel": "^2.0.0",
@@ -81,7 +82,6 @@
8182
"markdown-it-imsize": "^2.0.1",
8283
"markdown-it-kbd": "^1.1.1",
8384
"markdown-it-multimd-table": "^2.0.1",
84-
"markdown-it-named-headers": "^0.0.4",
8585
"markdown-it-plantuml": "^1.1.0",
8686
"markdown-it-smartarrows": "^1.0.1",
8787
"markdown-it-sub": "^1.0.0",
@@ -105,11 +105,11 @@
105105
"sander": "^0.5.1",
106106
"sanitize-html": "^1.18.2",
107107
"striptags": "^2.2.1",
108+
"turndown": "^4.0.2",
109+
"turndown-plugin-gfm": "^1.0.2",
108110
"typo-js": "^1.0.3",
109111
"unique-slug": "2.0.0",
110-
"uuid": "^3.2.1",
111-
"turndown":"^4.0.2",
112-
"turndown-plugin-gfm":"^1.0.2"
112+
"uuid": "^3.2.1"
113113
},
114114
"devDependencies": {
115115
"ava": "^0.25.0",

tests/lib/snapshots/markdown-test.js.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Generated by [AVA](https://ava.li).
3737

3838
> Snapshot 1
3939
40-
`<h2 data-line="1" id="abbr">abbr</h2>␊
40+
`<h2 id="abbr" data-line="1">abbr</h2>␊
4141
<p data-line="3">The <abbr title="Hyper Text Markup Language">HTML</abbr> specification<br />␊
4242
is maintained by the <abbr title="World Wide Web Consortium">W3C</abbr>.</p>␊
4343
`
@@ -67,8 +67,8 @@ Generated by [AVA](https://ava.li).
6767

6868
> Snapshot 1
6969
70-
`<h2 data-line="1" id="definition-list">definition list</h2>␊
71-
<h3 data-line="3" id="list-1">list 1</h3>␊
70+
`<h2 id="definition-list" data-line="1">definition list</h2>␊
71+
<h3 id="list-1" data-line="3">list 1</h3>␊
7272
<dl>␊
7373
<dt data-line="5">Term 1</dt>␊
7474
<dd data-line="6">Definition 1</dd>␊
@@ -78,7 +78,7 @@ Generated by [AVA](https://ava.li).
7878
</dl>␊
7979
<p data-line="12">Term 3<br />␊
8080
~</p>␊
81-
<h3 data-line="16" id="list-2">list 2</h3>␊
81+
<h3 id="list-2" data-line="16">list 2</h3>␊
8282
<dl>␊
8383
<dt data-line="18">Term 1</dt>␊
8484
<dd data-line="20">␊
@@ -98,10 +98,10 @@ Generated by [AVA](https://ava.li).
9898

9999
> Snapshot 1
100100
101-
`<h1 data-line="1" id="Welcome-to-Boostnote">Welcome to Boostnote!</h1>␊
102-
<h2 data-line="2" id="Click-here-to-edit-markdown-%F0%9F%91%8B">Click here to edit markdown 👋</h2>␊
101+
`<h1 id="Welcome-to-Boostnote" data-line="1">Welcome to Boostnote!</h1>␊
102+
<h2 id="Click-here-to-edit-markdown" data-line="2">Click here to edit markdown 👋</h2>␊
103103
<iframe width="560" height="315" src="https://www.youtube.com/embed/L0qNPLsvmyM" frameborder="0" allowfullscreen></iframe>␊
104-
<h2 data-line="6" id="Docs-%F0%9F%93%9D">Docs 📝</h2>␊
104+
<h2 id="Docs" data-line="6">Docs 📝</h2>␊
105105
<ul>␊
106106
<li data-line="7"><a href="https://hackernoon.com/boostnote-boost-your-happiness-productivity-and-creativity-315034efeebe">Boostnote | Boost your happiness, productivity and creativity.</a></li>␊
107107
<li data-line="8"><a href="https://github.com/BoostIO/Boostnote/wiki/Cloud-Syncing-and-Backup">Cloud Syncing &amp; Backups</a></li>␊
@@ -112,15 +112,15 @@ Generated by [AVA](https://ava.li).
112112
<li data-line="13"><a href="https://github.com/BoostIO/Boostnote/wiki/Syntax-Highlighting">How to set syntax highlight in Snippet note</a></li>␊
113113
</ul>␊
114114
<hr />␊
115-
<h2 data-line="17" id="Article-Archive-%F0%9F%93%9A">Article Archive 📚</h2>␊
115+
<h2 id="Article-Archive" data-line="17">Article Archive 📚</h2>␊
116116
<ul>␊
117117
<li data-line="18"><a href="http://bit.ly/2mOJPu7">Reddit English</a></li>␊
118118
<li data-line="19"><a href="https://www.reddit.com/r/boostnote_es/">Reddit Spanish</a></li>␊
119119
<li data-line="20"><a href="https://www.reddit.com/r/boostnote_cn/">Reddit Chinese</a></li>␊
120120
<li data-line="21"><a href="https://www.reddit.com/r/boostnote_jp/">Reddit Japanese</a></li>␊
121121
</ul>␊
122122
<hr />␊
123-
<h2 data-line="25" id="Community-%F0%9F%8D%BB">Community 🍻</h2>␊
123+
<h2 id="Community" data-line="25">Community 🍻</h2>␊
124124
<ul>␊
125125
<li data-line="26"><a href="http://bit.ly/2AWWzkD">GitHub</a></li>␊
126126
<li data-line="27"><a href="http://bit.ly/2z8BUJZ">Twitter</a></li>␊
@@ -132,15 +132,15 @@ Generated by [AVA](https://ava.li).
132132

133133
> Snapshot 1
134134
135-
`<h2 data-line="1" id="sub">sub</h2>␊
135+
`<h2 id="sub" data-line="1">sub</h2>␊
136136
<p data-line="3">H<sub>2</sub>0</p>␊
137137
`
138138

139139
## Markdown.render() should renders sup correctly
140140

141141
> Snapshot 1
142142
143-
`<h2 data-line="1" id="sup">sup</h2>␊
143+
`<h2 id="sup" data-line="1">sup</h2>␊
144144
<p data-line="3">29<sup>th</sup></p>␊
145145
`
146146

-37 Bytes
Binary file not shown.

yarn.lock

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@
5858
dependencies:
5959
arrify "^1.0.1"
6060

61+
"@enyaxu/markdown-it-anchor@^5.0.2":
62+
version "5.0.2"
63+
resolved "https://registry.yarnpkg.com/@enyaxu/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz#d173f7b60b492aabc17dfba864c4d071f5595f72"
64+
integrity sha512-HBQ+by3IFHh2i5nw8fzn9qrdA+6uwzre68EzHpBX/WrwgnKrfvckPzdi7MphKp2C617edfpeibucslHDNPYkvQ==
65+
6166
"@ladjs/time-require@^0.1.4":
6267
version "0.1.4"
6368
resolved "https://registry.yarnpkg.com/@ladjs/time-require/-/time-require-0.1.4.tgz#5c615d75fd647ddd5de9cf6922649558856b21a1"
@@ -5878,12 +5883,6 @@ markdown-it-multimd-table@^2.0.1:
58785883
dependencies:
58795884
markdown-it "^5.0.3"
58805885

5881-
markdown-it-named-headers@^0.0.4:
5882-
version "0.0.4"
5883-
resolved "https://registry.yarnpkg.com/markdown-it-named-headers/-/markdown-it-named-headers-0.0.4.tgz#82efc28324240a6b1e77b9aae501771d5f351c1f"
5884-
dependencies:
5885-
string "^3.0.1"
5886-
58875886
markdown-it-plantuml@^1.1.0:
58885887
version "1.1.0"
58895888
resolved "https://registry.yarnpkg.com/markdown-it-plantuml/-/markdown-it-plantuml-1.1.0.tgz#9ab8bfa09a02d80845e16e60f87a488edb50fdde"
@@ -8454,10 +8453,6 @@ string-width@^1.0.1, string-width@^1.0.2:
84548453
is-fullwidth-code-point "^2.0.0"
84558454
strip-ansi "^4.0.0"
84568455

8457-
string@^3.0.1:
8458-
version "3.3.3"
8459-
resolved "https://registry.yarnpkg.com/string/-/string-3.3.3.tgz#5ea211cd92d228e184294990a6cc97b366a77cb0"
8460-
84618456
string_decoder@^0.10.25, string_decoder@~0.10.x:
84628457
version "0.10.31"
84638458
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"

0 commit comments

Comments
 (0)