From b0320416a5d6e0e126913279ea6406f08e25f50b Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Fri, 27 Jan 2017 12:01:36 +0800 Subject: [PATCH 1/5] compatible vuep, fixed QingWei-Li/vuep/issues/2 --- src/render.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/render.js b/src/render.js index 85362032a..f059b185f 100644 --- a/src/render.js +++ b/src/render.js @@ -106,13 +106,17 @@ export function renderArticle (content) { if (!OPTIONS.sidebar && !OPTIONS.loadSidebar) renderSidebar() if (content && typeof Vue !== 'undefined') { - const script = content.match(']*?>([^<]+)') - - script && document.body.querySelector('article script').remove() CACHE.vm && CACHE.vm.$destroy() - CACHE.vm = script - ? new Function(`return ${script[1].trim()}`)() + + const script = [].slice.call( + document.body.querySelectorAll('article>script')) + .filter(script => !/template/.test(script.type) + )[0] + + CACHE.vm = script && script.remove() + ? new Function(`return ${script.innerText.trim()}`)() : new Vue({ el: 'main' }) // eslint-disable-line + CACHE.vm && CACHE.vm.$nextTick(_ => event.scrollActiveSidebar()) } if (OPTIONS.auto2top) setTimeout(() => event.scroll2Top(OPTIONS.auto2top), 0) From 7db1f1034ac8ebf42b302b64858457935673b694 Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Fri, 27 Jan 2017 12:44:05 +0800 Subject: [PATCH 2/5] Fix sidebar scroll, fixed #63 --- src/event.js | 22 +++++++++++++++++++++- src/themes/basic/_layout.css | 20 +------------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/event.js b/src/event.js index 012961dbb..23a7467eb 100644 --- a/src/event.js +++ b/src/event.js @@ -10,6 +10,8 @@ export function scrollActiveSidebar () { let hoveredOverSidebar = false const anchors = document.querySelectorAll('.anchor') const sidebar = document.querySelector('aside.sidebar') + const sidebarHeight = sidebar.clientHeight + const nav = {} const lis = sidebar.querySelectorAll('li') let active = sidebar.querySelector('li.active') @@ -48,7 +50,25 @@ export function scrollActiveSidebar () { li.classList.add('active') active = li - !hoveredOverSidebar && !sticky.noSticky && active.scrollIntoView(false) + + // scroll into view + // https://github.com/vuejs/vuejs.org/blob/master/themes/vue/source/js/common.js#L282-L297 + if (!hoveredOverSidebar && !sticky.noSticky) { + const currentPageOffset = 0 + const currentActiveOffset = active.offsetTop + active.clientHeight + 40 + const currentActiveIsInView = ( + active.offsetTop >= sidebar.scrollTop && + currentActiveOffset <= sidebar.scrollTop + sidebarHeight + ) + const linkNotFurtherThanSidebarHeight = currentActiveOffset - currentPageOffset < sidebarHeight + const newScrollTop = currentActiveIsInView + ? sidebar.scrollTop + : linkNotFurtherThanSidebarHeight + ? currentPageOffset + : currentActiveOffset - sidebarHeight + + sidebar.scrollTop = newScrollTop + } } window.removeEventListener('scroll', highlight) diff --git a/src/themes/basic/_layout.css b/src/themes/basic/_layout.css index 5acaf5e94..3a711c5e9 100644 --- a/src/themes/basic/_layout.css +++ b/src/themes/basic/_layout.css @@ -193,16 +193,7 @@ main { transition: transform 250ms ease-out; width: $sidebar-width; z-index: 20; - margin-bottom: 40px; - - &::after { - content: ''; - position: inherit; - left: calc($sidebar-width - 1px); - top: 0; - height: 100vh; - border-right: 1px solid rgba(0, 0, 0, .07); - } + border-right: 1px solid rgba(0, 0, 0, .07); > h1 { text-align: center; @@ -384,15 +375,6 @@ body.close { position: fixed; } - .sidebar { - margin-bottom: 0; - border-right: 1px solid rgba(0, 0, 0, .07); - - &::after { - content: none; - } - } - nav { margin-top: 16px; } From 0e5f28cf60b5038281594d3dc687955128df5895 Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Fri, 27 Jan 2017 12:44:54 +0800 Subject: [PATCH 3/5] Add change log --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index feadcdd93..948d74027 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.10.3 +### Bug fixes +- compatible vuep QingWei-Li/vuep/issues/2 +- fix sidebar scroll, fixed #63 + ## 1.10.2 ### Bug fixes - Fix render emojis again From e69efb8954c9bee704afd2eea3e975a80627e399 Mon Sep 17 00:00:00 2001 From: "qingwei.li" Date: Fri, 27 Jan 2017 12:45:16 +0800 Subject: [PATCH 4/5] bump 1.10.3 --- docs/_coverpage.md | 2 +- lib/docsify.js | 36 ++++++++++++++++++++++++++++++------ lib/docsify.min.js | 4 ++-- lib/themes/buble.css | 2 +- lib/themes/pure.css | 2 +- lib/themes/vue.css | 2 +- 6 files changed, 36 insertions(+), 12 deletions(-) diff --git a/docs/_coverpage.md b/docs/_coverpage.md index 766321133..8c9b608bd 100644 --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -1,6 +1,6 @@ ![logo](_media/icon.svg) -# docsify 1.10.2 +# docsify 1.10.3 > A magical documentation site generator. diff --git a/lib/docsify.js b/lib/docsify.js index 50a4fd768..0621a5a30 100644 --- a/lib/docsify.js +++ b/lib/docsify.js @@ -184,6 +184,8 @@ function scrollActiveSidebar () { var hoveredOverSidebar = false; var anchors = document.querySelectorAll('.anchor'); var sidebar = document.querySelector('aside.sidebar'); + var sidebarHeight = sidebar.clientHeight; + var nav = {}; var lis = sidebar.querySelectorAll('li'); var active = sidebar.querySelector('li.active'); @@ -222,7 +224,25 @@ function scrollActiveSidebar () { li.classList.add('active'); active = li; - !hoveredOverSidebar && !sticky.noSticky && active.scrollIntoView(false); + + // scroll into view + // https://github.com/vuejs/vuejs.org/blob/master/themes/vue/source/js/common.js#L282-L297 + if (!hoveredOverSidebar && !sticky.noSticky) { + var currentPageOffset = 0; + var currentActiveOffset = active.offsetTop + active.clientHeight + 40; + var currentActiveIsInView = ( + active.offsetTop >= sidebar.scrollTop && + currentActiveOffset <= sidebar.scrollTop + sidebarHeight + ); + var linkNotFurtherThanSidebarHeight = currentActiveOffset - currentPageOffset < sidebarHeight; + var newScrollTop = currentActiveIsInView + ? sidebar.scrollTop + : linkNotFurtherThanSidebarHeight + ? currentPageOffset + : currentActiveOffset - sidebarHeight; + + sidebar.scrollTop = newScrollTop; + } } window.removeEventListener('scroll', highlight); @@ -2577,13 +2597,17 @@ function renderArticle (content) { if (!OPTIONS$1.sidebar && !OPTIONS$1.loadSidebar) { renderSidebar(); } if (content && typeof Vue !== 'undefined') { - var script = content.match(']*?>([^<]+)'); - - script && document.body.querySelector('article script').remove(); CACHE.vm && CACHE.vm.$destroy(); - CACHE.vm = script - ? new Function(("return " + (script[1].trim())))() + + var script = [].slice.call( + document.body.querySelectorAll('article>script')) + .filter(function (script) { return !/template/.test(script.type); } + )[0]; + + CACHE.vm = script && script.remove() + ? new Function(("return " + (script.innerText.trim())))() : new Vue({ el: 'main' }); // eslint-disable-line + CACHE.vm && CACHE.vm.$nextTick(function (_) { return scrollActiveSidebar(); }); } if (OPTIONS$1.auto2top) { setTimeout(function () { return scroll2Top(OPTIONS$1.auto2top); }, 0); } diff --git a/lib/docsify.min.js b/lib/docsify.min.js index 3df5a2b0c..4b47baa15 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 a=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(a)})}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 a=e.level||1,i=a-1;a>t||(r[i]?(r[i].children=r[i].children||[],r[i].children.push(e)):n.push(e),r[a]=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 a(){var e=window.location;if(q===e.hash&&!r(A))return A;var t=e.hash.match(/^#\/([^#]+)/);return t=t&&2===t.length?t[1]:/^#\//.test(e.hash)?"":e.pathname,A=t,q=e.hash,t}function i(){return document.body.clientWidth<=600}function s(e){var t=/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@\[\]^`{|}~]/g,n=!1,r="-";if(s.occurrences=s.occurrences||{},"string"!=typeof e)return"";n||(e=e.toLowerCase());var a=e.trim().replace(/<[^>\d]+>/g,"").replace(t,"").replace(/\s/g,r).replace(/-+/g,r).replace(/^(\d)/,"_$1"),i=s.occurrences[a];return s.occurrences.hasOwnProperty(a)?i++:i=0,s.occurrences[a]=i,i&&(a=a+"-"+i),a}function o(e){return e.replace(/:(\w*?):/gi,'$1').replace(/__colon__/g,":")}function l(){function e(){for(var e,r=document.body.scrollTop,i=0,s=n.length;ir){e||(e=l);break}e=l}if(e){var c=a[e.getAttribute("data-id")];c&&c!==o&&(o&&o.classList.remove("active"),c.classList.add("active"),o=c,!t&&!g.noSticky&&o.scrollIntoView(!1))}}if(!i()){for(var t=!1,n=document.querySelectorAll(".anchor"),r=document.querySelector("aside.sidebar"),a={},s=r.querySelectorAll("li"),o=r.querySelector("li.active"),l=0,c=s.length;l=e||g.dom.classList.contains("hidden")?(document.body.classList.add("sticky"),g.noSticky=!1):(document.body.classList.remove("sticky"),g.noSticky=!0)}()}function h(e,t){return t={exports:{}},e(t,t.exports),t.exports}function f(e){return e?(/\/\//.test(e)||(e="https://github.com/"+e),e=e.replace(/^git\+/,""),'\n \n \n '):""}function m(e){var t=e+'';return(i()?t+"
":"
"+t)+'
\n
\n
\n
'}function b(){var e=", 100%, 85%",t="linear-gradient(to left bottom, hsl("+(Math.floor(255*Math.random())+e)+") 0%, hsl("+(Math.floor(255*Math.random())+e)+") 100%)";return'
\n
\n
\n
'}function v(){return''}function y(e,t){return void 0===t&&(t=""),e&&e.length?(e.forEach(function(e){t+='
  • '+e.title+"
  • ",e.children&&(t+='
    • '+y(e.children)+"
    ")}),t):""}function k(e,t){return'

    '+t.slice(5).trim()+"

    "}function w(e){P=e;var t=new M.Renderer;t.heading=function(e,t){var n=s(e),r="";return P.router&&(r="#/"+a()),F.push({level:t,slug:r+"#"+encodeURIComponent(n),title:e}),"'+e+""},t.code=function(e,t){void 0===t&&(t="");var n=N.highlight(e,N.languages[t]||N.languages.markup);return'
    '+n.replace(/:/g,"__colon__")+"
    "},t.link=function(e,t,n){return P.router&&!/:/.test(e)&&(e=("#/"+e).replace(/\/\//g,"/")),''+n+""},t.paragraph=function(e){return/^!>/.test(e)?k("tip",e):/^\?>/.test(e)?k("warn",e):"

    "+e+"

    "},"function"==typeof P.markdown?(I.setOptions({renderer:t}),I=P.markdown.call(this,I)):I.setOptions(T({renderer:t},P.markdown));var n=I;I=function(e){return o(n(e))}}function x(e,t){var n=document.querySelector("nav")||document.createElement("nav");P.repo||n.classList.add("no-badge"),e[t?"outerHTML":"innerHTML"]=f(P.repo)+(P.coverpage?b():"")+m(P.sidebarToggle?v():""),document.body.insertBefore(n,document.body.children[0]),p("button.sidebar-toggle"),P.coverpage?!i()&&window.addEventListener("scroll",g):document.body.classList.add("sticky")}function L(e){if(z("article",e?I(e):"not found"),P.sidebar||P.loadSidebar||_(),e&&"undefined"!=typeof Vue){var t=e.match("]*?>([^<]+)");t&&document.body.querySelector("article script").remove(),W.vm&&W.vm.$destroy(),W.vm=t?new Function("return "+t[1].trim())():new Vue({el:"main"}),W.vm&&W.vm.$nextTick(function(e){return l()})}P.auto2top&&setTimeout(function(){return d(P.auto2top)},0)}function S(e){W.navbar&&W.navbar===e||(W.navbar=e,e&&z("nav",I(e)),u("nav"))}function _(e){var n;e?(n=I(e),n=n.match(/]*>([\s\S]+)<\/ul>/g)[0]):n=P.sidebar?y(P.sidebar,"