mirror of
https://github.com/docsifyjs/docsify.git
synced 2025-12-08 19:55:52 +00:00
feat(markdown): supports mermaid #137
This commit is contained in:
parent
ac10de1c5b
commit
f4800e09f1
@ -28,3 +28,28 @@ window.$docsify = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Supports mermaid
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Import mermaid
|
||||||
|
// <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.css">
|
||||||
|
// <script src="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
||||||
|
|
||||||
|
window.$docsify = {
|
||||||
|
markdown: {
|
||||||
|
renderer: {
|
||||||
|
code: function(code, lang) {
|
||||||
|
if (lang === "mermaid") {
|
||||||
|
return (
|
||||||
|
'<div class="mermaid">' + mermaid.render(lang, code) + "</div>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return this.origin.code.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
@ -28,3 +28,26 @@ window.$docsify = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Supports mermaid
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Import mermaid
|
||||||
|
// <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.css">
|
||||||
|
// <script src="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
||||||
|
|
||||||
|
window.$docsify = {
|
||||||
|
markdown: {
|
||||||
|
renderer: {
|
||||||
|
code: function(code, lang) {
|
||||||
|
if (lang === "mermaid") {
|
||||||
|
return (
|
||||||
|
'<div class="mermaid">' + mermaid.render(lang, code) + "</div>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return this.origin.code.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
@ -28,3 +28,27 @@ window.$docsify = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Supports mermaid
|
||||||
|
|
||||||
|
```js
|
||||||
|
// Import mermaid
|
||||||
|
// <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.css">
|
||||||
|
// <script src="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
||||||
|
|
||||||
|
window.$docsify = {
|
||||||
|
markdown: {
|
||||||
|
renderer: {
|
||||||
|
code: function(code, lang) {
|
||||||
|
if (lang === "mermaid") {
|
||||||
|
return (
|
||||||
|
'<div class="mermaid">' + mermaid.render(lang, code) + "</div>"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return this.origin.code.apply(this, arguments);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
@ -61,11 +61,13 @@ export class Compiler {
|
|||||||
const renderer = new marked.Renderer()
|
const renderer = new marked.Renderer()
|
||||||
const { linkTarget, router, contentBase } = this
|
const { linkTarget, router, contentBase } = this
|
||||||
const _self = this
|
const _self = this
|
||||||
|
const origin = {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* render anchor tag
|
* render anchor tag
|
||||||
* @link https://github.com/chjj/marked#overriding-renderer-methods
|
* @link https://github.com/chjj/marked#overriding-renderer-methods
|
||||||
*/
|
*/
|
||||||
renderer.heading = function (text, level) {
|
origin.heading = renderer.heading = function (text, level) {
|
||||||
const nextToc = { level, title: text }
|
const nextToc = { level, title: text }
|
||||||
|
|
||||||
if (/{docsify-ignore}/g.test(text)) {
|
if (/{docsify-ignore}/g.test(text)) {
|
||||||
@ -88,12 +90,12 @@ export class Compiler {
|
|||||||
return `<h${level} id="${slug}"><a href="${url}" data-id="${slug}" class="anchor"><span>${text}</span></a></h${level}>`
|
return `<h${level} id="${slug}"><a href="${url}" data-id="${slug}" class="anchor"><span>${text}</span></a></h${level}>`
|
||||||
}
|
}
|
||||||
// highlight code
|
// highlight code
|
||||||
renderer.code = function (code, lang = '') {
|
origin.code = renderer.code = function (code, lang = '') {
|
||||||
const hl = Prism.highlight(code, Prism.languages[lang] || Prism.languages.markup)
|
const hl = Prism.highlight(code, Prism.languages[lang] || Prism.languages.markup)
|
||||||
|
|
||||||
return `<pre v-pre data-lang="${lang}"><code class="lang-${lang}">${hl}</code></pre>`
|
return `<pre v-pre data-lang="${lang}"><code class="lang-${lang}">${hl}</code></pre>`
|
||||||
}
|
}
|
||||||
renderer.link = function (href, title, text) {
|
origin.link = renderer.link = function (href, title, text) {
|
||||||
let blank = ''
|
let blank = ''
|
||||||
|
|
||||||
if (!/:|(\/{2})/.test(href) &&
|
if (!/:|(\/{2})/.test(href) &&
|
||||||
@ -117,7 +119,7 @@ export class Compiler {
|
|||||||
}
|
}
|
||||||
return `<a href="${href}"${title || ''}${blank}>${text}</a>`
|
return `<a href="${href}"${title || ''}${blank}>${text}</a>`
|
||||||
}
|
}
|
||||||
renderer.paragraph = function (text) {
|
origin.paragraph = renderer.paragraph = function (text) {
|
||||||
if (/^!>/.test(text)) {
|
if (/^!>/.test(text)) {
|
||||||
return helperTpl('tip', text)
|
return helperTpl('tip', text)
|
||||||
} else if (/^\?>/.test(text)) {
|
} else if (/^\?>/.test(text)) {
|
||||||
@ -125,7 +127,7 @@ export class Compiler {
|
|||||||
}
|
}
|
||||||
return `<p>${text}</p>`
|
return `<p>${text}</p>`
|
||||||
}
|
}
|
||||||
renderer.image = function (href, title, text) {
|
origin.image = renderer.image = function (href, title, text) {
|
||||||
let url = href
|
let url = href
|
||||||
const titleHTML = title ? ` title="${title}"` : ''
|
const titleHTML = title ? ` title="${title}"` : ''
|
||||||
|
|
||||||
@ -136,6 +138,8 @@ export class Compiler {
|
|||||||
return `<img src="${url}" data-origin="${href}" alt="${text}"${titleHTML}>`
|
return `<img src="${url}" data-origin="${href}" alt="${text}"${titleHTML}>`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
renderer.origin = origin
|
||||||
|
|
||||||
return renderer
|
return renderer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user