bump 1.0.2
This commit is contained in:
parent
44a255103c
commit
2574778605
3 changed files with 127 additions and 105 deletions
226
lib/docsify.js
226
lib/docsify.js
|
|
@ -99,6 +99,98 @@ function getRoute () {
|
||||||
return route
|
return route
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active sidebar when scroll
|
||||||
|
* @link https://buble.surge.sh/
|
||||||
|
*/
|
||||||
|
function scrollActiveSidebar () {
|
||||||
|
if (/mobile/i.test(navigator.userAgent)) { return }
|
||||||
|
|
||||||
|
var anchors = document.querySelectorAll('.anchor');
|
||||||
|
var nav = {};
|
||||||
|
var lis = document.querySelectorAll('.sidebar li');
|
||||||
|
var active = null;
|
||||||
|
|
||||||
|
for (var i = 0, len = lis.length; i < len; i += 1) {
|
||||||
|
var li = lis[i];
|
||||||
|
var href = li.querySelector('a').getAttribute('href');
|
||||||
|
|
||||||
|
if (href !== '/') { href = href.match(/#([^#]+)$/g)[0].slice(1); }
|
||||||
|
|
||||||
|
nav[href] = li;
|
||||||
|
}
|
||||||
|
|
||||||
|
function highlight () {
|
||||||
|
for (var i = 0, len = anchors.length; i < len; i += 1) {
|
||||||
|
var node = anchors[i].parentNode;
|
||||||
|
var bcr = node.getBoundingClientRect();
|
||||||
|
|
||||||
|
if (bcr.top < 10 && bcr.bottom > 10) {
|
||||||
|
var li = nav[node.id];
|
||||||
|
|
||||||
|
if (!li || li === active) { return }
|
||||||
|
if (active) { active.setAttribute('class', ''); }
|
||||||
|
|
||||||
|
li.setAttribute('class', 'active');
|
||||||
|
active = li;
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var dom = document.querySelector('main .content');
|
||||||
|
dom.removeEventListener('scroll', highlight);
|
||||||
|
dom.addEventListener('scroll', highlight);
|
||||||
|
highlight();
|
||||||
|
}
|
||||||
|
|
||||||
|
function scrollIntoView () {
|
||||||
|
var id = window.location.hash.match(/#[^#\/]+$/g);
|
||||||
|
if (!id || !id.length) { return }
|
||||||
|
var section = document.querySelector(id[0]);
|
||||||
|
|
||||||
|
if (section) { section.scrollIntoView(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Acitve link
|
||||||
|
*/
|
||||||
|
function activeLink (dom, activeParent) {
|
||||||
|
var host = window.location.href;
|
||||||
|
|
||||||
|
dom = typeof dom === 'object' ? dom : document.querySelector(dom);
|
||||||
|
if (!dom) { return
|
||||||
|
|
||||||
|
; }[].slice.call(dom.querySelectorAll('a')).forEach(function (node) {
|
||||||
|
if (node.href === host) {
|
||||||
|
activeParent
|
||||||
|
? node.parentNode.setAttribute('class', 'active')
|
||||||
|
: node.setAttribute('class', 'active');
|
||||||
|
} else {
|
||||||
|
activeParent
|
||||||
|
? node.parentNode.removeAttribute('class')
|
||||||
|
: node.removeAttribute('class');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sidebar toggle
|
||||||
|
*/
|
||||||
|
function bindToggle (dom) {
|
||||||
|
dom = typeof dom === 'object' ? dom : document.querySelector(dom);
|
||||||
|
if (!dom) { return }
|
||||||
|
var body = document.body;
|
||||||
|
|
||||||
|
dom.addEventListener('click', function () { return body.classList.toggle('close'); });
|
||||||
|
|
||||||
|
if (!/mobile/i.test(navigator.userAgent)) { return }
|
||||||
|
document.querySelector('aside').addEventListener('click', function (event) {
|
||||||
|
body.classList.toggle('close');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2240,100 +2332,8 @@ function tree (toc, tpl) {
|
||||||
return tpl
|
return tpl
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Active sidebar when scroll
|
|
||||||
* @link https://buble.surge.sh/
|
|
||||||
*/
|
|
||||||
function scrollActiveSidebar () {
|
|
||||||
if (/mobile/i.test(navigator.userAgent)) { return }
|
|
||||||
|
|
||||||
var anchors = document.querySelectorAll('.anchor');
|
|
||||||
var nav = {};
|
|
||||||
var lis = document.querySelectorAll('.sidebar li');
|
|
||||||
var active = null;
|
|
||||||
|
|
||||||
for (var i = 0, len = lis.length; i < len; i += 1) {
|
|
||||||
var li = lis[i];
|
|
||||||
var href = li.querySelector('a').getAttribute('href');
|
|
||||||
|
|
||||||
if (href !== '/') { href = href.match(/#([^#]+)$/g)[0].slice(1); }
|
|
||||||
|
|
||||||
nav[href] = li;
|
|
||||||
}
|
|
||||||
|
|
||||||
function highlight () {
|
|
||||||
for (var i = 0, len = anchors.length; i < len; i += 1) {
|
|
||||||
var node = anchors[i].parentNode;
|
|
||||||
var bcr = node.getBoundingClientRect();
|
|
||||||
|
|
||||||
if (bcr.top < 10 && bcr.bottom > 10) {
|
|
||||||
var li = nav[node.id];
|
|
||||||
|
|
||||||
if (!li || li === active) { return }
|
|
||||||
if (active) { active.setAttribute('class', ''); }
|
|
||||||
|
|
||||||
li.setAttribute('class', 'active');
|
|
||||||
active = li;
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
document.querySelector('main .content').addEventListener('scroll', highlight);
|
|
||||||
highlight();
|
|
||||||
|
|
||||||
function scrollIntoView () {
|
|
||||||
var id = window.location.hash.match(/#[^#\/]+$/g);
|
|
||||||
if (!id || !id.length) { return }
|
|
||||||
var section = document.querySelector(id[0]);
|
|
||||||
|
|
||||||
if (section) { section.scrollIntoView(); }
|
|
||||||
}
|
|
||||||
|
|
||||||
window.addEventListener('hashchange', scrollIntoView);
|
|
||||||
scrollIntoView();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Acitve link
|
|
||||||
*/
|
|
||||||
function activeLink (dom, activeParent) {
|
|
||||||
var host = window.location.href;
|
|
||||||
|
|
||||||
dom = typeof dom === 'object' ? dom : document.querySelector(dom);
|
|
||||||
if (!dom) { return
|
|
||||||
|
|
||||||
; }[].slice.call(dom.querySelectorAll('a')).forEach(function (node) {
|
|
||||||
if (node.href === host) {
|
|
||||||
activeParent
|
|
||||||
? node.parentNode.setAttribute('class', 'active')
|
|
||||||
: node.setAttribute('class', 'active');
|
|
||||||
} else {
|
|
||||||
activeParent
|
|
||||||
? node.parentNode.removeAttribute('class')
|
|
||||||
: node.removeAttribute('class');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sidebar toggle
|
|
||||||
*/
|
|
||||||
function bindToggle (dom) {
|
|
||||||
dom = typeof dom === 'object' ? dom : document.querySelector(dom);
|
|
||||||
if (!dom) { return }
|
|
||||||
var body = document.body;
|
|
||||||
|
|
||||||
dom.addEventListener('click', function () { return body.classList.toggle('close'); });
|
|
||||||
|
|
||||||
if (!/mobile/i.test(navigator.userAgent)) { return }
|
|
||||||
document.querySelector('aside').addEventListener('click', function (event) {
|
|
||||||
body.classList.toggle('close');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var OPTIONS$1 = {};
|
var OPTIONS$1 = {};
|
||||||
|
var CACHE = {};
|
||||||
|
|
||||||
var renderTo = function (dom, content) {
|
var renderTo = function (dom, content) {
|
||||||
dom = typeof dom === 'object' ? dom : document.querySelector(dom);
|
dom = typeof dom === 'object' ? dom : document.querySelector(dom);
|
||||||
|
|
@ -2405,6 +2405,8 @@ function renderArticle (content) {
|
||||||
* navbar
|
* navbar
|
||||||
*/
|
*/
|
||||||
function renderNavbar (content) {
|
function renderNavbar (content) {
|
||||||
|
if (CACHE['navbar'] === content) { return }
|
||||||
|
CACHE['navbar'] = content;
|
||||||
renderNavbar.rendered = true;
|
renderNavbar.rendered = true;
|
||||||
|
|
||||||
if (content) { renderTo('nav', marked(content)); }
|
if (content) { renderTo('nav', marked(content)); }
|
||||||
|
|
@ -2415,6 +2417,8 @@ function renderNavbar (content) {
|
||||||
* sidebar
|
* sidebar
|
||||||
*/
|
*/
|
||||||
function renderSidebar (content) {
|
function renderSidebar (content) {
|
||||||
|
if (CACHE['sidebar'] === content) { return }
|
||||||
|
CACHE['sidebar'] = content;
|
||||||
renderSidebar.rendered = true;
|
renderSidebar.rendered = true;
|
||||||
|
|
||||||
var isToc = false;
|
var isToc = false;
|
||||||
|
|
@ -2429,7 +2433,7 @@ function renderSidebar (content) {
|
||||||
}
|
}
|
||||||
|
|
||||||
renderTo('aside.sidebar', content);
|
renderTo('aside.sidebar', content);
|
||||||
isToc ? scrollActiveSidebar() : activeLink('aside.sidebar', true);
|
if (isToc) { scrollActiveSidebar(); }
|
||||||
toc = [];
|
toc = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2465,25 +2469,37 @@ config(OPTIONS);
|
||||||
|
|
||||||
var cacheRoute = null;
|
var cacheRoute = null;
|
||||||
|
|
||||||
var mainRender = function () {
|
var mainRender = function (cb) {
|
||||||
var route = getRoute();
|
var route = getRoute();
|
||||||
if (cacheRoute === route) { return }
|
if (cacheRoute === route) { return cb() }
|
||||||
|
var wait;
|
||||||
var basePath = cacheRoute = route;
|
var basePath = cacheRoute = route;
|
||||||
|
|
||||||
if (!/\//.test(basePath)) {
|
if (!/\//.test(basePath)) {
|
||||||
basePath = '';
|
basePath = '';
|
||||||
} else if (basePath && !/\/$/.test(basePath)) {
|
} else if (basePath && !/\/$/.test(basePath)) {
|
||||||
basePath = basePath.match(/(\S+\/)[^\/]+$/)[1];
|
basePath = basePath.match(/(\S*\/)[^\/]+$/)[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render markdown file
|
// Render markdown file
|
||||||
load((!route || /\/$/.test(route)) ? (route + "README.md") : (route + ".md"))
|
load((!route || /\/$/.test(route)) ? (route + "README.md") : (route + ".md"))
|
||||||
.then(renderArticle, function (_) { return renderArticle(null); });
|
.then(function (result) {
|
||||||
|
renderArticle(result);
|
||||||
|
if (OPTIONS.loadSidebar) {
|
||||||
|
if (wait === false) { cb(); }
|
||||||
|
wait = false;
|
||||||
|
} else {
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
}, function (_) { return renderArticle(null); });
|
||||||
|
|
||||||
// Render sidebar
|
// Render sidebar
|
||||||
if (OPTIONS.loadSidebar) {
|
if (OPTIONS.loadSidebar) {
|
||||||
load(basePath + OPTIONS.loadSidebar).then(renderSidebar);
|
load(basePath + OPTIONS.loadSidebar).then(function (result) {
|
||||||
|
renderSidebar(result);
|
||||||
|
if (wait === false) { cb(); }
|
||||||
|
wait = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render navbar
|
// Render navbar
|
||||||
|
|
@ -2495,13 +2511,19 @@ var mainRender = function () {
|
||||||
var Docsify = function () {
|
var Docsify = function () {
|
||||||
var dom = document.querySelector(OPTIONS.el) || document.body;
|
var dom = document.querySelector(OPTIONS.el) || document.body;
|
||||||
var replace = dom !== document.body;
|
var replace = dom !== document.body;
|
||||||
|
var main = function () {
|
||||||
|
mainRender(function (_) {
|
||||||
|
activeLink('aside.sidebar', true);
|
||||||
|
scrollIntoView();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// Render app
|
// Render app
|
||||||
renderApp(dom, replace);
|
renderApp(dom, replace);
|
||||||
mainRender();
|
main();
|
||||||
if (OPTIONS.router) {
|
if (OPTIONS.router) {
|
||||||
if (!/^#\//.test(window.location.hash)) { window.location.hash = '#/'; }
|
if (!/^#\//.test(window.location.hash)) { window.location.hash = '#/'; }
|
||||||
window.addEventListener('hashchange', mainRender);
|
window.addEventListener('hashchange', main);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
4
lib/docsify.min.js
vendored
4
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
Loading…
Add table
Add a link
Reference in a new issue