diff --git a/docs/_coverpage.md b/docs/_coverpage.md index de2b7ebf..8088b43f 100644 --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -1,6 +1,6 @@ ![logo](_media/icon.svg) -# docsify 1.4.3 +# docsify 1.5.0 > A magical documentation site generator. diff --git a/lib/docsify.js b/lib/docsify.js index 1883f764..1fed88d0 100644 --- a/lib/docsify.js +++ b/lib/docsify.js @@ -118,6 +118,7 @@ function slugify (string) { var re = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@\[\]^`{|}~]/g; var maintainCase = false; var replacement = '-'; + slugify.occurrences = slugify.occurrences || {}; if (typeof string !== 'string') { return '' } @@ -143,6 +144,27 @@ function slugify (string) { return slug } +slugify.clear = function () { + slugify.occurrences = {}; +}; + +var hasOwnProperty = Object.prototype.hasOwnProperty; +var merge = Object.assign || function (to) { + var arguments$1 = arguments; + + for (var i = 1; i < arguments.length; i++) { + var from = Object(arguments$1[i]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + } + + return to +}; + /** * Active sidebar when scroll * @link https://buble.surge.sh/ @@ -2411,50 +2433,66 @@ function tree (toc, tpl) { } var OPTIONS$1 = {}; +var markdown = marked; +var toc = []; var CACHE = {}; var renderTo = function (dom, content) { dom = typeof dom === 'object' ? dom : document.querySelector(dom); dom.innerHTML = content; + slugify.clear(); return dom }; -var toc = []; -var renderer = new marked.Renderer(); /** - * render anchor tag - * @link https://github.com/chjj/marked#overriding-renderer-methods + * init render + * @param {Object} options */ -renderer.heading = function (text, level) { - var slug = slugify(text); - var route = ''; +function init (options) { + OPTIONS$1 = options; - if (OPTIONS$1.router) { - route = "#/" + (getRoute()); + var renderer = new marked.Renderer(); + /** + * render anchor tag + * @link https://github.com/chjj/marked#overriding-renderer-methods + */ + renderer.heading = function (text, level) { + var slug = slugify(text); + var route = ''; + + if (OPTIONS$1.router) { + route = "#/" + (getRoute()); + } + + toc.push({ level: level, slug: (route + "#" + (encodeURIComponent(slug))), title: text }); + + return ("" + text + "") + }; + // highlight code + renderer.code = function (code, lang) { + if ( lang === void 0 ) lang = ''; + + var hl = prism.highlight(code, prism.languages[lang] || prism.languages.markup) + .replace(/{{/g, '{{'); + + return ("
" + hl + "
") + }; + renderer.link = function (href, title, text) { + if (OPTIONS$1.router && !/:/.test(href)) { + href = ("#/" + href).replace(/\/\//g, '/'); + } + + return ("" + text + "") + }; + + if (typeof OPTIONS$1.markdown === 'function') { + markdown.setOptions({ renderer: renderer }); + markdown = OPTIONS$1.markdown.call(this, markdown); + } else { + markdown.setOptions(merge({ renderer: renderer }, OPTIONS$1.markdown)); } - - toc.push({ level: level, slug: (route + "#" + (encodeURIComponent(slug))), title: text }); - - return ("" + text + "") -}; -// highlight code -renderer.code = function (code, lang) { - if ( lang === void 0 ) lang = ''; - - var hl = prism.highlight(code, prism.languages[lang] || prism.languages.markup) - .replace(/{{/g, '{{'); - - return ("
" + hl + "
") -}; -renderer.link = function (href, title, text) { - if (OPTIONS$1.router && !/:/.test(href)) { - href = ("#/" + href).replace(/\/\//g, '/'); - } - - return ("" + text + "") -}; -marked.setOptions({ renderer: renderer }); +} /** * App @@ -2483,7 +2521,7 @@ function renderApp (dom, replace) { * article */ function renderArticle (content) { - renderTo('article', content ? marked(content) : 'not found'); + renderTo('article', content ? markdown(content) : 'not found'); if (!OPTIONS$1.sidebar && !OPTIONS$1.loadSidebar) { renderSidebar(); } if (content && typeof Vue !== 'undefined' && typeof Vuep !== 'undefined') { @@ -2500,7 +2538,7 @@ function renderNavbar (content) { if (CACHE.navbar && CACHE.navbar === content) { return } CACHE.navbar = content; - if (content) { renderTo('nav', marked(content)); } + if (content) { renderTo('nav', markdown(content)); } activeLink('nav'); } @@ -2511,7 +2549,7 @@ function renderSidebar (content) { var html; if (content) { - html = marked(content); + html = markdown(content); } else if (OPTIONS$1.sidebar) { html = tree(OPTIONS$1.sidebar, '