From a39eddba743dde248da0f2b529999092200441ff Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Thu, 22 Dec 2016 00:26:06 +0800 Subject: [PATCH] bump 1.3.0 --- docs/_coverpage.md | 2 +- lib/docsify.js | 80 +++++++++++++++++++++++++++++++++++++------- lib/docsify.min.js | 4 +-- lib/themes/buble.css | 2 +- lib/themes/pure.css | 2 +- lib/themes/vue.css | 2 +- 6 files changed, 74 insertions(+), 18 deletions(-) diff --git a/docs/_coverpage.md b/docs/_coverpage.md index 9711afb..ba8b87a 100644 --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -1,6 +1,6 @@ ![logo](_media/icon.svg) -# docsify 1.2.0 +# docsify 1.3.0 > A magical documentation site generator. diff --git a/lib/docsify.js b/lib/docsify.js index 998e2e1..a02fe9e 100644 --- a/lib/docsify.js +++ b/lib/docsify.js @@ -137,11 +137,11 @@ function scrollActiveSidebar () { function highlight () { for (var i = 0, len = anchors.length; i < len; i += 1) { - var node = anchors[i].parentNode; + var node = anchors[i]; var bcr = node.getBoundingClientRect(); if (bcr.top < 10 && bcr.bottom > 10) { - var li = nav[node.id]; + var li = nav[node.getAttribute('data-id')]; if (!li || li === active) { return } if (active) { active.setAttribute('class', ''); } @@ -154,9 +154,8 @@ function scrollActiveSidebar () { } } - var dom = document.querySelector('main .content'); - dom.removeEventListener('scroll', highlight); - dom.addEventListener('scroll', highlight); + window.removeEventListener('scroll', highlight); + window.addEventListener('scroll', highlight); highlight(); } @@ -215,6 +214,19 @@ function scroll2Top () { cacheContentDOM.scrollTop = 0; } +function sticky () { + var dom = document.querySelector('section.cover'); + var coverHeight = dom.getBoundingClientRect().height; + + return (function () { + if (window.pageYOffset >= coverHeight || dom.classList.contains('hidden')) { + document.body.classList.add('sticky'); + } else { + document.body.classList.remove('sticky'); + } + })() +} + var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; @@ -2324,14 +2336,22 @@ function corner (data) { /** * Render main content - * @return {[type]} [description] */ -function main () { - return "
\n \n
\n
\n
\n
" +function main (tpl) { + return ("
\n " + tpl + "\n \n
\n
\n
\n
") } -function toggle (bool) { - if (!bool) { return '' } +/** + * Cover Page + */ +function cover () { + var SL = ', 100%, 85%'; + var bgc = "linear-gradient(to left bottom, hsl(" + (Math.floor(Math.random() * 255) + SL) + ") 0%, hsl(" + (Math.floor(Math.random() * 255) + SL) + ") 100%)"; + + return ("
\n
\n
") +} + +function toggle () { return "" } @@ -2384,7 +2404,7 @@ renderer.heading = function (text, level) { toc.push({ level: level, slug: (route + "#" + (encodeURIComponent(slug))), title: text }); - return ("" + text + "") + return ("" + text + "") }; // highlight code renderer.code = function (code, lang) { @@ -2409,11 +2429,21 @@ marked.setOptions({ renderer: renderer }); function renderApp (dom, replace) { var nav = document.querySelector('nav') || document.createElement('nav'); - dom[replace ? 'outerHTML' : 'innerHTML'] = toggle(OPTIONS$1.sidebarToggle) + corner(OPTIONS$1.repo) + main(); + if (!OPTIONS$1.repo) { nav.classList.add('no-badge'); } + + dom[replace ? 'outerHTML' : 'innerHTML'] = corner(OPTIONS$1.repo) + + (OPTIONS$1.coverpage ? cover() : '') + + main(OPTIONS$1.sidebarToggle ? toggle() : ''); document.body.insertBefore(nav, document.body.children[0]); // bind toggle bindToggle('button.sidebar-toggle'); + // bind sticky effect + if (OPTIONS$1.coverpage) { + !isMobile() && window.addEventListener('scroll', sticky); + } else { + document.body.classList.add('sticky'); + } } /** @@ -2464,6 +2494,20 @@ function renderSidebar (content) { toc = []; } +/** + * Cover Page + */ +function renderCover (content) { + renderCover.dom = renderCover.dom || document.querySelector('section.cover'); + if (!content) { + renderCover.dom.classList.add('hidden'); + } else { + renderCover.dom.classList.remove('hidden'); + !renderCover.rendered && renderTo('.cover-main', marked(content)); + renderCover.rendered = true; + } +} + /** * render loading bar * @return {[type]} [description] @@ -2519,6 +2563,7 @@ var OPTIONS = { loadNavbar: null, router: false, homepage: 'README.md', + coverpage: '', basePath: '', auto2top: false }; @@ -2532,6 +2577,7 @@ if (script) { } if (OPTIONS.loadSidebar === true) { OPTIONS.loadSidebar = '_sidebar.md'; } if (OPTIONS.loadNavbar === true) { OPTIONS.loadNavbar = '_navbar.md'; } + if (OPTIONS.coverpage === true) { OPTIONS.coverpage = '_coverpage.md'; } if (OPTIONS.sidebar) { OPTIONS.sidebar = window[OPTIONS.sidebar]; } } @@ -2563,6 +2609,15 @@ var mainRender = function (cb) { page = route + ".md"; } + // Render Cover page + if (OPTIONS.coverpage) { + if (page === OPTIONS.homepage) { + load(OPTIONS.coverpage).then(renderCover); + } else { + renderCover(); + } + } + cacheXhr && cacheXhr.abort && cacheXhr.abort(); // Render markdown file cacheXhr = load(page, 'GET', renderLoading); @@ -2598,6 +2653,7 @@ var Docsify = function () { mainRender(function (_) { activeLink('aside.sidebar', true); scrollIntoView(); + OPTIONS.coverpage && sticky(); }); }; diff --git a/lib/docsify.min.js b/lib/docsify.min.js index d1f0a89..a38b74e 100644 --- a/lib/docsify.min.js +++ b/lib/docsify.min.js @@ -1,2 +1,2 @@ -var Docsify=function(){"use strict";function e(e,t,n){void 0===t&&(t="GET");var r=new XMLHttpRequest;return r.open(t,e),r.send(),{then:function(e,t){if(void 0===t&&(t=function(){}),n){var i=setInterval(function(e){return n({step:Math.floor(5*Math.random()+1)})},500);r.addEventListener("progress",n),r.addEventListener("loadend",function(e){n(e),clearInterval(i)})}r.addEventListener("error",t),r.addEventListener("load",function(n){var r=n.target;r.status>=400?t(r):e(r.response)})},abort:function(){return 4!==r.readyState&&r.abort()}}}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(_===e.hash&&!r(S))return S;var t=e.hash.match(/^#\/([^#]+)/);return t=t&&2===t.length?t[1]:/^#\//.test(e.hash)?"":e.pathname,S=t,_=e.hash,t}function a(){return document.body.clientWidth<=600}function s(){function e(){for(var e=0,r=t.length;e10){var o=n[a.id];if(!o||o===i)return;return i&&i.setAttribute("class",""),o.setAttribute("class","active"),void(i=o)}}}if(!a()){for(var t=document.querySelectorAll(".anchor"),n={},r=document.querySelectorAll(".sidebar li"),i=null,s=0,o=r.length;s\n \n '):""}function g(){return'
\n \n
\n
\n
\n
'}function d(e){return e?'':""}function f(e,t){return void 0===t&&(t=""),e&&e.length?(e.forEach(function(e){t+='
  • '+e.title+"
  • ",e.children&&(t+='
    • '+f(e.children)+"
    ")}),t):""}function m(e,t){var n=document.querySelector("nav")||document.createElement("nav");e[t?"outerHTML":"innerHTML"]=d($.sidebarToggle)+h($.repo)+g(),document.body.insertBefore(n,document.body.children[0]),u("button.sidebar-toggle")}function b(e){q("article",e?C(e):"not found"),k.rendered||k(null,$),y.rendered||y(null,$),k.rendered=!1,y.rendered=!1,$.auto2top&&c()}function y(e){E.navbar&&E.navbar===e||(E.navbar=e,y.rendered=!0,e&&q("nav",C(e)),l("nav"))}function k(e){var n=!1;e?e=C(e):$.sidebar?e=f($.sidebar,"