From 3a4bc33d5313a18824e642931a312cd62f9ff3cc Mon Sep 17 00:00:00 2001 From: JianXu Date: Sat, 10 Nov 2018 14:47:47 +0800 Subject: [PATCH 1/2] Fixed duplicate TOC Title jump error --- browser/lib/markdown-toc-generator.js | 9 ++++++++- browser/lib/markdown.js | 9 +++++---- package.json | 8 ++++---- yarn.lock | 15 +++++---------- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/browser/lib/markdown-toc-generator.js b/browser/lib/markdown-toc-generator.js index 716be83a..eae448ec 100644 --- a/browser/lib/markdown-toc-generator.js +++ b/browser/lib/markdown-toc-generator.js @@ -5,6 +5,7 @@ import toc from 'markdown-toc' import diacritics from 'diacritics-map' import stripColor from 'strip-color' +import mdlink from 'markdown-link' const EOL = require('os').EOL @@ -42,6 +43,12 @@ function caseSensitiveSlugify (str) { return str } +function linkify (tok, text, slug, opts) { + var uniqeID = opts.num === 0 ? '' : '-' + opts.num + tok.content = mdlink(text, '#' + slug + uniqeID) + return tok +} + const TOC_MARKER_START = '' const TOC_MARKER_END = '' @@ -84,7 +91,7 @@ export function generateInEditor (editor) { * @returns generatedTOC String containing generated TOC */ export function generate (markdownText) { - const generatedToc = toc(markdownText, {slugify: caseSensitiveSlugify}) + const generatedToc = toc(markdownText, {slugify: caseSensitiveSlugify, linkify: linkify}) return TOC_MARKER_START + EOL + EOL + generatedToc.content + EOL + EOL + TOC_MARKER_END } diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index 13ef758a..2a7b66b0 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -7,7 +7,7 @@ import _ from 'lodash' import ConfigManager from 'browser/main/lib/ConfigManager' import katex from 'katex' import { lastFindInArray } from './utils' -import ee from 'browser/main/lib/eventEmitter' +import anchor from '@enyaxu/markdown-it-anchor' function createGutter (str, firstLineNumber) { if (Number.isNaN(firstLineNumber)) firstLineNumber = 1 @@ -118,12 +118,13 @@ class Markdown { this.md.use(require('markdown-it-imsize')) this.md.use(require('markdown-it-footnote')) this.md.use(require('markdown-it-multimd-table')) - this.md.use(require('markdown-it-named-headers'), { - slugify: (header) => { - return encodeURI(header.trim() + this.md.use(anchor, { + slugify: (title) => { + var slug = encodeURI(title.trim() .replace(/[\]\[\!\"\#\$\%\&\'\(\)\*\+\,\.\/\:\;\<\=\>\?\@\\\^\_\{\|\}\~]/g, '') .replace(/\s+/g, '-')) .replace(/\-+$/, '') + return slug } }) this.md.use(require('markdown-it-kbd')) diff --git a/package.json b/package.json index 47b6d2bd..d98bab36 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ }, "homepage": "https://boostnote.io", "dependencies": { + "@enyaxu/markdown-it-anchor": "^5.0.2", "@rokt33r/markdown-it-math": "^4.0.1", "@rokt33r/season": "^5.3.0", "@susisu/mte-kernel": "^2.0.0", @@ -80,7 +81,6 @@ "markdown-it-imsize": "^2.0.1", "markdown-it-kbd": "^1.1.1", "markdown-it-multimd-table": "^2.0.1", - "markdown-it-named-headers": "^0.0.4", "markdown-it-plantuml": "^1.1.0", "markdown-it-smartarrows": "^1.0.1", "markdown-it-sub": "^1.0.0", @@ -104,10 +104,10 @@ "sander": "^0.5.1", "sanitize-html": "^1.18.2", "striptags": "^2.2.1", + "turndown": "^4.0.2", + "turndown-plugin-gfm": "^1.0.2", "unique-slug": "2.0.0", - "uuid": "^3.2.1", - "turndown":"^4.0.2", - "turndown-plugin-gfm":"^1.0.2" + "uuid": "^3.2.1" }, "devDependencies": { "ava": "^0.25.0", diff --git a/yarn.lock b/yarn.lock index 35c7b9db..ff612883 100644 --- a/yarn.lock +++ b/yarn.lock @@ -58,6 +58,11 @@ dependencies: arrify "^1.0.1" +"@enyaxu/markdown-it-anchor@^5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@enyaxu/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz#d173f7b60b492aabc17dfba864c4d071f5595f72" + integrity sha512-HBQ+by3IFHh2i5nw8fzn9qrdA+6uwzre68EzHpBX/WrwgnKrfvckPzdi7MphKp2C617edfpeibucslHDNPYkvQ== + "@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" @@ -5878,12 +5883,6 @@ markdown-it-multimd-table@^2.0.1: dependencies: markdown-it "^5.0.3" -markdown-it-named-headers@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/markdown-it-named-headers/-/markdown-it-named-headers-0.0.4.tgz#82efc28324240a6b1e77b9aae501771d5f351c1f" - dependencies: - string "^3.0.1" - markdown-it-plantuml@^1.1.0: version "1.1.0" 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: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string@^3.0.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/string/-/string-3.3.3.tgz#5ea211cd92d228e184294990a6cc97b366a77cb0" - string_decoder@^0.10.25, string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" From 849104f530f4c23c4afe5c5946aed2030f6d4bb6 Mon Sep 17 00:00:00 2001 From: JianXu Date: Sat, 10 Nov 2018 16:19:42 +0800 Subject: [PATCH 2/2] Update Snapshots test --- tests/lib/snapshots/markdown-test.js.md | 22 +++++++++++----------- tests/lib/snapshots/markdown-test.js.snap | Bin 2331 -> 2294 bytes 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/lib/snapshots/markdown-test.js.md b/tests/lib/snapshots/markdown-test.js.md index eefb232c..30a146a0 100644 --- a/tests/lib/snapshots/markdown-test.js.md +++ b/tests/lib/snapshots/markdown-test.js.md @@ -37,7 +37,7 @@ Generated by [AVA](https://ava.li). > Snapshot 1 - `

abbr

␊ + `

abbr

The HTML specification
␊ is maintained by the W3C.

␊ ` @@ -67,8 +67,8 @@ Generated by [AVA](https://ava.li). > Snapshot 1 - `

definition list

␊ -

list 1

␊ + `

definition list

␊ +

list 1

Term 1
Definition 1
␊ @@ -78,7 +78,7 @@ Generated by [AVA](https://ava.li).

Term 3
␊ ~

␊ -

list 2

␊ +

list 2

Term 1
␊ @@ -98,10 +98,10 @@ Generated by [AVA](https://ava.li). > Snapshot 1 - `

Welcome to Boostnote!

␊ -

Click here to edit markdown 👋

␊ + `

Welcome to Boostnote!

␊ +

Click here to edit markdown 👋

␊ -

Docs 📝

␊ +

Docs 📝


␊ -

Article Archive 📚

␊ +

Article Archive 📚


␊ -

Community 🍻

␊ +

Community 🍻

  • GitHub
  • Twitter
  • ␊ @@ -132,7 +132,7 @@ Generated by [AVA](https://ava.li). > Snapshot 1 - `

    sub

    ␊ + `

    sub

    H20

    ␊ ` @@ -140,7 +140,7 @@ Generated by [AVA](https://ava.li). > Snapshot 1 - `

    sup

    ␊ + `

    sup

    29th

    ␊ ` diff --git a/tests/lib/snapshots/markdown-test.js.snap b/tests/lib/snapshots/markdown-test.js.snap index b60aae57e400e557ecbf573e25c25e317f2fedd0..f9badcc2d1b0f9955ed74dcc36ee965417be88fb 100644 GIT binary patch literal 2294 zcmV-;Kw& zcL`~u02LCXDC$2IQ4kU!#HXkg5)vw+A1eMys1a0!52+vmsi;B)KD0st!JAp{AA8q# z=}F}iD|vVJ{rSB&Z{ECl<9bPwZj)Y_-2KA!-(L7y_4ylW^6!;hK!nfCq$GI{eE-tN zpPsmO`R#8$`q=!3A1Vpz*$+z6oj+;5(Y*fj#h1VMrH{V-__4c6g8JP%Bx&WH$+vc} zn=gL**Jppa_udr#`hyl3K4mdE>@Y z_0G?y!^!Xc=Jf|lg8C*r|9s^~_+xv1wO*cmwfP-G6hy!^Y@ z{%C*p&tH{Gg1Yk~lJveeq!)ki(m$Sg0{`pE)vJFO<{A!&nHg&;YBfs~D#3xg%3(jG4l+%bdg%?h8xDPpWZ}(g zwsLwSu-sr-_{!brHY z5Sp$>6bMc%8*^cY=U)s8-Jo&X2n#KgYKee#wGh`TbhcXAmbXXOcv8TIGiJj8#;of^ zi-tbZV@AVZ+33mWYD&m#!{RlpR=4HSr^tpGVhZc%gp^qcgHZKos81`ls%_V*kE2*| z1LY_bgpewJXcJ+X(~%pXE*)`tvGv+^lZN4SWe%!~$14mZ=^#G{<2eF+m z`6o}DN&xYGV)L?kG+6fB*eMRzxIM;8DHZx6WOPuh9wxEc$37k5U^8rO+>Y1;+X@EQ zvkos_#mlUXOYKdtSE2#-2@H;B!N;xHZ0P$*07Wu;dQI`2nsQ*BuKc)oowVuVbvm@P zbiRE=Htu!VTw)f_Gk=r}L7ZKwFc{q-nvIUzF&BE7$OKC{+eZvlve)JfE-cxEpH4WgPm5tu0yaEM< zixg;Z!21$7(&>;fWjWy!hw_w>9TMPbfl!kTEj2J=M@%8rT>-E)O!=9)LM(=w=?W@KHl-8k~_M$S#a8%Kk-i8;OpEIt4M;^P47Lkt8O zcHrAJEM0|f-4Bf>j6y++QkrY{{ZZT>t@cN>KVs>qiy9}9pyHGo@R0dDU@0p!_NK;q zqGo}p+J#JiZ~)i^|ARjK7eTe3_s*y;+}%xBnb{Em2!2aUauD#Fmass z*@qq$@!7kub**tqLV_k9>AM6C_A;EUG@YNeKl5o6n)fMzRBXP-MusO8Z7JbzDG_fa zQQ&c5htv6A+rI)NoV$6DPmI8Pz4(!A@F>`ur&<-$#jiu6Y)LY#eLNOJE zzWIPsD_5&E;N{~pH6))JipFk2t-QZ@*SY8UJ%Yk9&J_4VrV;-*f|+SJwB`$QBu7{y&5M7a6qmPqx?kz0~h3Q%4w%+w&0A1`xqy2ectq;o!E zF5^374i=B1MY7J&0;cUGLi0FSPVh4H8gq*a^U!vIw1MJ?SZ*tA)Y2G$t3Gz&LJa6O zGBv^mpxL-R+C%)kZoG0E@^RxlVc)RscyY+0Sx_0^XQCvR_gf5_%zhLM8_Mr$~GjE|G3Je@mpp2I(jvS6KlzUovc(!7ZGTY?DNWs$ErftkJ>gg&UrB3Hh QgE2z?1-`Re(4H9p06T1g_5c6? literal 2331 zcmV+$3FP)cRzVbgLDC2{HDGO7Ydm)gOxp00000000y1 zSZ|EnMiuuRNE~SeYMV&#sZ*m%1&Psj=J}@S!-}< zUw`@eU*G%l9XG$TcT7^R+^Q&N9=kV*om(#da_v8F-1NxTJ~u9@|IEGzZc~(Rp1Ax# z`QrW0+!wrfW_8y~-ngVbnSI}Z@1BS5dFJLn{`ujZfBD;k^{+euwhHR2I~Aq=`V-f# zJy~h~Vwz6;@HcPWKPIWS?^2Y1y!I1(`|e+@7iM3ty@21nI3}rU@O}T)vu{-vKl{q> z-uQ$2`_I3cv8Ug}PV;Q^(+gz#m#db;J^u zeeR{UG+$~ua$N6d*PDLB*JlHoy4uN&$nm3PY4;&mb{dQL!wkx1&~6;Y2T*G+$+cl- zTQ&$C+MGZ+=r9VtoFhqt(^#5wjM{!cG;mI$S_`x(k}&~+meYi8gryY9q@=@IQb+cN13WW%PIK^#5G zxRY{lRhx!7w0y0`cD05$PBcH#4nuXIObe+?q-H@!euP?dBHH|*GO-H zIjCCMEXrm@t@&Plttk!eR9LU=^Fpwp8{zSzCsHUz_YhYU+{4jw;3rg^bYpP7)P678>60F9~a z+@oQbMxq#Jp{veK9ulWqn+`#H^r!hjGp6%{c5rFwYy-}jyL`To+WCtfJY;$x&Q=ed zKKdoqI@R%|*~d&E0&Sr>)Y%BmW7TSp3M)`*1WS&D0K7Yelb`h{)0R`Qa41}T zygdv;ERtfXWn>D5^vES-vMT_#hM71`SBS$=4c*zvs5=jUI|OrE*3`ifR-bb|KhbAO z19P&jxqcD{cw@j!IX8+1%@y~;0H(wM7)XdCC>9A27;VDSw;WT4rx{YK1|uqIaYpm4 zuro?Jqt(ucbw)fJwNR5ZmQM2r0VOMbcF-%j>BY?@pJf$f%YK#jBy@vu_G>G*L8;8a!(f3VK;gloQN>< zvF7=%OQM>}SxN?64u@^Zq2=To0iNX6QRtfY5A@s=FnmK@1e961&j%Tv{snXB7HFxm@cTUyEU zI7Y;KvlPH1abPDVsXZXK2E75-_(&=nMZM9jAq6v5=&1K=G6rgIJckZB~IWfXEDJJMO%%)mMD0e(JM?hkzObKmwORaDjwRmm0^ zWdA>d{uddv^-q7V^`_G4D>FklP8y5g)FYgPgUy!dM=_j5d?SYcjz^q^P1jqkZ2O;P zsL=4D(~%?)x7#p|z(*OA+W$@{Pfy0(udgii&Gu;<>M6(ensKiVxJ8`ue7FrJ2&3y4 zzW>G3$4?!;e&JcT1jhrC#wL=xS5wLlNa5CSg#2QzJogBy`z+x|OchL9UKM(06XMXw z&8CNt=Wi7G#xcjQDuZ{;R(P>(!`2he>^9P;x-3)^WQuvjeJ*y$0tAntQ)Hc^W0*D4 z7%k#xImOG+Yb=~Pwg_z(a9b#eiR0I^MlJIJm>OaquF8P!B6~v`-iN+KS>U229~$c= zVnfRwB^0`zG*qpn@@$4Z!eyo+;w?pukCd;4IB_Kh_^m*leg;G{lQP|4j7nOjs44keg0WR-l zpMsDQ777-Zi&?k-wWc-K)hT$~A%tp%V2nhV=|eDZ8={X%ybSB*vNJAS8XOP4E|TiX zSq?oU{W;)-(sYj(jLZv0z86Z>P2C{gMhw_t6bD@sOM{2~W3(+c5ZtdlWRlSGBQYmm zX^XT0%4ofnVZD`pSGDwt>!ZAWS_qv(iFhe5{_RCEW*pHv>J>rf+t<(5y>n1QRTdaH zra%}kGaP#Yp(po@Lhov2kovaC(V>E6Hf-0L