mirror of
https://github.com/docsifyjs/docsify.git
synced 2025-12-08 19:55:52 +00:00
bump 1.0.0
This commit is contained in:
parent
864935bfc1
commit
41be8176a6
143
lib/docsify.js
143
lib/docsify.js
@ -76,6 +76,29 @@ function isNil (o) {
|
||||
return o === null || o === undefined
|
||||
}
|
||||
|
||||
var cacheRoute$1 = null;
|
||||
var cacheHash = null;
|
||||
|
||||
/**
|
||||
* hash route
|
||||
*/
|
||||
function getRoute () {
|
||||
var loc = window.location;
|
||||
if (cacheHash === loc.hash && !isNil(cacheRoute$1)) { return cacheRoute$1 }
|
||||
|
||||
var route = loc.hash.match(/^#\/([^#]+)/);
|
||||
|
||||
if (route && route.length === 2) {
|
||||
route = route[1];
|
||||
} else {
|
||||
route = /^#\//.test(loc.hash) ? '' : loc.pathname;
|
||||
}
|
||||
cacheRoute$1 = route;
|
||||
cacheHash = loc.hash;
|
||||
|
||||
return route
|
||||
}
|
||||
|
||||
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
||||
|
||||
|
||||
@ -2231,9 +2254,11 @@ function scrollActiveSidebar () {
|
||||
|
||||
for (var i = 0, len = lis.length; i < len; i += 1) {
|
||||
var li = lis[i];
|
||||
var a = li.querySelector('a');
|
||||
var href = li.querySelector('a').getAttribute('href');
|
||||
|
||||
nav[a.getAttribute('href').slice(1)] = li;
|
||||
if (href !== '/') { href = href.match(/#([^#]+)$/g)[0].slice(1); }
|
||||
|
||||
nav[href] = li;
|
||||
}
|
||||
|
||||
function highlight () {
|
||||
@ -2244,8 +2269,7 @@ function scrollActiveSidebar () {
|
||||
if (bcr.top < 10 && bcr.bottom > 10) {
|
||||
var li = nav[node.id];
|
||||
|
||||
if (!li) { return }
|
||||
if (li === active) { return }
|
||||
if (!li || li === active) { return }
|
||||
if (active) { active.setAttribute('class', ''); }
|
||||
|
||||
li.setAttribute('class', 'active');
|
||||
@ -2260,9 +2284,9 @@ function scrollActiveSidebar () {
|
||||
highlight();
|
||||
|
||||
function scrollIntoView () {
|
||||
var id = window.location.hash.slice(1);
|
||||
if (!id) { return }
|
||||
var section = document.querySelector('#' + id);
|
||||
var id = window.location.hash.match(/#[^#\/]+$/g);
|
||||
if (!id || !id.length) { return }
|
||||
var section = document.querySelector(id[0]);
|
||||
|
||||
if (section) { section.scrollIntoView(); }
|
||||
}
|
||||
@ -2275,7 +2299,7 @@ function scrollActiveSidebar () {
|
||||
* Acitve link
|
||||
*/
|
||||
function activeLink (dom, activeParent) {
|
||||
var host = document.location.origin + document.location.pathname;
|
||||
var host = window.location.href;
|
||||
|
||||
dom = typeof dom === 'object' ? dom : document.querySelector(dom);
|
||||
if (!dom) { return
|
||||
@ -2285,6 +2309,10 @@ function activeLink (dom, activeParent) {
|
||||
activeParent
|
||||
? node.parentNode.setAttribute('class', 'active')
|
||||
: node.setAttribute('class', 'active');
|
||||
} else {
|
||||
activeParent
|
||||
? node.parentNode.removeAttribute('class')
|
||||
: node.removeAttribute('class');
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -2305,6 +2333,8 @@ function bindToggle (dom) {
|
||||
});
|
||||
}
|
||||
|
||||
var OPTIONS$1 = {};
|
||||
|
||||
var renderTo = function (dom, content) {
|
||||
dom = typeof dom === 'object' ? dom : document.querySelector(dom);
|
||||
dom.innerHTML = content;
|
||||
@ -2319,11 +2349,16 @@ var renderer = new marked.Renderer();
|
||||
* @link https://github.com/chjj/marked#overriding-renderer-methods
|
||||
*/
|
||||
renderer.heading = function (text, level) {
|
||||
var slug = text.toLowerCase().replace(/<(?:.|\n)*?>/gm, '').replace(/[\s\n\t]+/g, '-');
|
||||
var slug = text.toLowerCase().replace(/<(?:.|\n)*?>/gm, '').replace(/[^\w|\u4e00-\u9fa5]+/g, '-');
|
||||
var route = '';
|
||||
|
||||
toc.push({ level: level, slug: '#' + slug, title: text });
|
||||
if (OPTIONS$1.router) {
|
||||
route = "#/" + (getRoute());
|
||||
}
|
||||
|
||||
return ("<h" + level + " id=\"" + slug + "\"><a href=\"#" + slug + "\" class=\"anchor\"></a>" + text + "</h" + level + ">")
|
||||
toc.push({ level: level, slug: (route + "#" + slug), title: text });
|
||||
|
||||
return ("<h" + level + " id=\"" + slug + "\"><a href=\"" + route + "#" + slug + "\" class=\"anchor\"></a>" + text + "</h" + level + ">")
|
||||
};
|
||||
// highlight code
|
||||
renderer.code = function (code, lang) {
|
||||
@ -2333,15 +2368,22 @@ renderer.code = function (code, lang) {
|
||||
|
||||
return ("<pre data-lang=\"" + lang + "\"><code class=\"lang-" + lang + "\">" + hl + "</code></pre>")
|
||||
};
|
||||
renderer.link = function (href, title, text) {
|
||||
if (OPTIONS$1.router && !/^(?:\w+:)?\/\/([^\s\.]+\.\S{2}|localhost[\:?\d]*)\S*$/.test(href)) {
|
||||
href = !/^\/#/.test(href) ? ("#" + href) : href;
|
||||
}
|
||||
|
||||
return ("<a href=\"" + href + "\" title=\"" + (title || '') + "\">" + text + "</a>")
|
||||
};
|
||||
marked.setOptions({ renderer: renderer });
|
||||
|
||||
/**
|
||||
* App
|
||||
*/
|
||||
function renderApp (dom, replace, opts) {
|
||||
function renderApp (dom, replace) {
|
||||
var nav = document.querySelector('nav') || document.createElement('nav');
|
||||
|
||||
dom[replace ? 'outerHTML' : 'innerHTML'] = toggle(opts.sidebarToggle) + corner(opts.repo) + main();
|
||||
dom[replace ? 'outerHTML' : 'innerHTML'] = toggle(OPTIONS$1.sidebarToggle) + corner(OPTIONS$1.repo) + main();
|
||||
document.body.insertBefore(nav, document.body.children[0]);
|
||||
|
||||
// bind toggle
|
||||
@ -2351,18 +2393,18 @@ function renderApp (dom, replace, opts) {
|
||||
/**
|
||||
* article
|
||||
*/
|
||||
function renderArticle (content, OPTIONS) {
|
||||
function renderArticle (content) {
|
||||
renderTo('article', content ? marked(content) : 'not found');
|
||||
if (!renderSidebar.rendered) { renderSidebar(null, OPTIONS); }
|
||||
if (!renderNavbar.rendered) { renderNavbar(null, OPTIONS); }
|
||||
if (!renderSidebar.rendered) { renderSidebar(null, OPTIONS$1); }
|
||||
if (!renderNavbar.rendered) { renderNavbar(null, OPTIONS$1); }
|
||||
renderSidebar.rendered = false;
|
||||
renderNavbar.rendered = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* navbar
|
||||
*/
|
||||
function renderNavbar (content, OPTIONS) {
|
||||
if ( OPTIONS === void 0 ) OPTIONS = {};
|
||||
|
||||
function renderNavbar (content) {
|
||||
renderNavbar.rendered = true;
|
||||
|
||||
if (content) { renderTo('nav', marked(content)); }
|
||||
@ -2372,24 +2414,27 @@ function renderNavbar (content, OPTIONS) {
|
||||
/**
|
||||
* sidebar
|
||||
*/
|
||||
function renderSidebar (content, OPTIONS) {
|
||||
if ( OPTIONS === void 0 ) OPTIONS = {};
|
||||
|
||||
function renderSidebar (content) {
|
||||
renderSidebar.rendered = true;
|
||||
|
||||
var isToc = false;
|
||||
|
||||
if (content) {
|
||||
content = marked(content);
|
||||
} else if (OPTIONS.sidebar) {
|
||||
content = tree(OPTIONS.sidebar, '<ul>');
|
||||
} else if (OPTIONS$1.sidebar) {
|
||||
content = tree(OPTIONS$1.sidebar, '<ul>');
|
||||
} else {
|
||||
content = tree(genTree(toc, OPTIONS.maxLevel), '<ul>');
|
||||
content = tree(genTree(toc, OPTIONS$1.maxLevel), '<ul>');
|
||||
isToc = true;
|
||||
}
|
||||
|
||||
renderTo('aside.sidebar', content);
|
||||
isToc ? scrollActiveSidebar() : activeLink('aside.sidebar', true);
|
||||
toc = [];
|
||||
}
|
||||
|
||||
function config (options) {
|
||||
OPTIONS$1 = options;
|
||||
}
|
||||
|
||||
var OPTIONS = {
|
||||
@ -2399,7 +2444,8 @@ var OPTIONS = {
|
||||
sidebar: '',
|
||||
sidebarToggle: false,
|
||||
loadSidebar: null,
|
||||
loadNavbar: null
|
||||
loadNavbar: null,
|
||||
router: false
|
||||
};
|
||||
var script = document.currentScript || [].slice.call(document.getElementsByTagName('script')).pop();
|
||||
|
||||
@ -2414,31 +2460,48 @@ if (script) {
|
||||
if (OPTIONS.sidebar) { OPTIONS.sidebar = window[OPTIONS.sidebar]; }
|
||||
}
|
||||
|
||||
var Docsify = function () {
|
||||
var dom = document.querySelector(OPTIONS.el) || document.body;
|
||||
var replace = dom !== document.body;
|
||||
var loc = document.location.pathname;
|
||||
// load options
|
||||
config(OPTIONS);
|
||||
|
||||
if (/\/$/.test(loc)) { loc += 'README'; }
|
||||
var cacheRoute = null;
|
||||
|
||||
// Render app
|
||||
renderApp(dom, replace, OPTIONS);
|
||||
var mainRender = function () {
|
||||
var route = getRoute();
|
||||
if (cacheRoute === route) { return }
|
||||
|
||||
var basePath = cacheRoute = route;
|
||||
|
||||
if (!/\//.test(basePath)) {
|
||||
basePath = '';
|
||||
} else if (basePath && !/\/$/.test(basePath)) {
|
||||
basePath = basePath.match(/(\S+\/)[^\/]+$/)[1];
|
||||
}
|
||||
|
||||
// Render markdown file
|
||||
load((loc + ".md"))
|
||||
.then(function (content) { return renderArticle(content, OPTIONS); },
|
||||
function (_) { return renderArticle(null, OPTIONS); });
|
||||
load((!route || /\/$/.test(route)) ? (route + "README.md") : (route + ".md"))
|
||||
.then(renderArticle, function (_) { return renderArticle(null); });
|
||||
|
||||
// Render sidebar
|
||||
if (OPTIONS.loadSidebar) {
|
||||
load(OPTIONS.loadSidebar)
|
||||
.then(function (content) { return renderSidebar(content, OPTIONS); });
|
||||
load(basePath + OPTIONS.loadSidebar).then(renderSidebar);
|
||||
}
|
||||
|
||||
// Render navbar
|
||||
if (OPTIONS.loadNavbar) {
|
||||
load(OPTIONS.loadNavbar)
|
||||
.then(function (content) { return renderNavbar(content, OPTIONS); });
|
||||
load(basePath + OPTIONS.loadNavbar).then(renderNavbar);
|
||||
}
|
||||
};
|
||||
|
||||
var Docsify = function () {
|
||||
var dom = document.querySelector(OPTIONS.el) || document.body;
|
||||
var replace = dom !== document.body;
|
||||
|
||||
// Render app
|
||||
renderApp(dom, replace);
|
||||
mainRender();
|
||||
if (OPTIONS.router) {
|
||||
if (!/^#\//.test(window.location.hash)) { window.location.hash = '#/'; }
|
||||
window.addEventListener('hashchange', mainRender);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
3
lib/docsify.min.js
vendored
3
lib/docsify.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user