From 2574778605bb2e49875421984ab64f7a3bdcf243 Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Tue, 13 Dec 2016 22:11:50 +0800 Subject: [PATCH] bump 1.0.2 --- lib/docsify.js | 226 +++++++++++++++++++++++++-------------------- lib/docsify.min.js | 4 +- lib/themes/vue.css | 2 +- 3 files changed, 127 insertions(+), 105 deletions(-) diff --git a/lib/docsify.js b/lib/docsify.js index 33fd3a7..f842df9 100644 --- a/lib/docsify.js +++ b/lib/docsify.js @@ -99,6 +99,98 @@ function getRoute () { 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 : {}; @@ -2240,100 +2332,8 @@ function tree (toc, 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 CACHE = {}; var renderTo = function (dom, content) { dom = typeof dom === 'object' ? dom : document.querySelector(dom); @@ -2405,6 +2405,8 @@ function renderArticle (content) { * navbar */ function renderNavbar (content) { + if (CACHE['navbar'] === content) { return } + CACHE['navbar'] = content; renderNavbar.rendered = true; if (content) { renderTo('nav', marked(content)); } @@ -2415,6 +2417,8 @@ function renderNavbar (content) { * sidebar */ function renderSidebar (content) { + if (CACHE['sidebar'] === content) { return } + CACHE['sidebar'] = content; renderSidebar.rendered = true; var isToc = false; @@ -2429,7 +2433,7 @@ function renderSidebar (content) { } renderTo('aside.sidebar', content); - isToc ? scrollActiveSidebar() : activeLink('aside.sidebar', true); + if (isToc) { scrollActiveSidebar(); } toc = []; } @@ -2465,25 +2469,37 @@ config(OPTIONS); var cacheRoute = null; -var mainRender = function () { +var mainRender = function (cb) { var route = getRoute(); - if (cacheRoute === route) { return } - + if (cacheRoute === route) { return cb() } + var wait; var basePath = cacheRoute = route; if (!/\//.test(basePath)) { basePath = ''; } else if (basePath && !/\/$/.test(basePath)) { - basePath = basePath.match(/(\S+\/)[^\/]+$/)[1]; + basePath = basePath.match(/(\S*\/)[^\/]+$/)[1]; } // Render markdown file 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 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 @@ -2495,13 +2511,19 @@ var mainRender = function () { var Docsify = function () { var dom = document.querySelector(OPTIONS.el) || document.body; var replace = dom !== document.body; + var main = function () { + mainRender(function (_) { + activeLink('aside.sidebar', true); + scrollIntoView(); + }); + }; // Render app renderApp(dom, replace); - mainRender(); + main(); if (OPTIONS.router) { if (!/^#\//.test(window.location.hash)) { window.location.hash = '#/'; } - window.addEventListener('hashchange', mainRender); + window.addEventListener('hashchange', main); } }; diff --git a/lib/docsify.min.js b/lib/docsify.min.js index 4cf70a0..161c160 100644 --- a/lib/docsify.min.js +++ b/lib/docsify.min.js @@ -1,2 +1,2 @@ -var Docsify=function(){"use strict";function e(e,t){void 0===t&&(t="get");var n=new XMLHttpRequest;return n.open(t,e),n.send(),{then:function(e,t){void 0===t&&(t=function(){}),n.addEventListener("error",t),n.addEventListener("load",function(n){var r=n.target;r.status>=400?t(r):e(r.response)})}}}function t(e,t){var n=[],r={};return e.forEach(function(e){var i=e.level||1,a=i-1;i>t||(r[a]?(r[a].children=r[a].children||[],r[a].children.push(e)):n.push(e),r[i]=e)}),n}function n(e){return e.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}function r(e){return null===e||void 0===e}function i(){var e=window.location;if(k===e.hash&&!r(y))return y;var t=e.hash.match(/^#\/([^#]+)/);return t=t&&2===t.length?t[1]:/^#\//.test(e.hash)?"":e.pathname,y=t,k=e.hash,t}function a(e,t){return t={exports:{}},e(t,t.exports),t.exports}function s(e){return e?(/\/\//.test(e)||(e="https://github.com/"+e),e=e.replace(/^git\+/,""),'\n \n \n '):""}function o(){return'
\n \n
\n
\n
\n
'}function l(e){return e?'':""}function u(e,t){return void 0===t&&(t=""),e&&e.length?(e.forEach(function(e){t+='
  • '+e.title+"
  • ",e.children&&(t+='
  • ")}),t):""}function c(){function e(){for(var e=0,t=n.length;e10){var o=r[i.id];if(!o||o===a)return;return a&&a.setAttribute("class",""),o.setAttribute("class","active"),void(a=o)}}}function t(){var e=window.location.hash.match(/#[^#\/]+$/g);if(e&&e.length){var t=document.querySelector(e[0]);t&&t.scrollIntoView()}}if(!/mobile/i.test(navigator.userAgent)){for(var n=document.querySelectorAll(".anchor"),r={},i=document.querySelectorAll(".sidebar li"),a=null,s=0,o=i.length;s"):(e=u(t(L,S.maxLevel),"