Compare commits

..
10 Commits
Author SHA1 Message Date
qingwei.li 83d7862505 -> v3.0.4 2017-02-20 08:59:43 +08:00
qingwei.li 75686f1624 bump: 3.0.4 2017-02-20 08:59:38 +08:00
qingwei.li 780c1e580e fix(render): execute script 2017-02-20 08:57:09 +08:00
qingwei.li 35dd2e16fa fix(render): disable rendering sub list when loadSidebar is false 2017-02-19 23:23:43 +08:00
qingwei.li be6dcacde7 -> v3.0.3 2017-02-19 22:53:05 +08:00
qingwei.li 066fff4beb bump: 3.0.3 2017-02-19 22:52:59 +08:00
Le Liuandcinwell.li 42fb331079 Change description for Snipaste (#84) 2017-02-19 22:50:05 +08:00
Jintzoandcinwell.li f15e45c693 fixed look of links in blockquote 2017-02-19 22:49:44 +08:00
qingwei.li 6b08546654 fix(scroll) highlight bug 2017-02-19 22:29:35 +08:00
qingwei.li 46ff5e14bf tweaks code 2017-02-19 20:11:27 +08:00
17 changed files with 157 additions and 130 deletions
+12
View File
@@ -1,4 +1,16 @@
3.0.4 / 2017-02-20
==================
* fix(render): execute script
* fix(render): disable rendering sub list when loadSidebar is false
3.0.3 / 2017-02-19
==================
* fixed look of links in blockquote
* fix(scroll) highlight bug
3.0.2 / 2017-02-19
==================
+1 -1
View File
@@ -52,7 +52,7 @@ Modern browsers and Internet Explorer 9+.
## Showcase
These open-source projects are using docsify to generate their sites. Pull requests welcome : )
- [Snipaste](https://docs.snipaste.com/) - A new way to boost your productivity.
- [Snipaste](https://docs.snipaste.com/) - Snip & Paste
- [puck](https://puck.zz173.com/) - A small & magical php framework.
- [Samaritan](http://samaritan.stockdb.org) - An Algorithmic Trading Framework for Digital Currency.
- [Vudash](http://vudash.github.io/vudash/) - Powerful, Flexible, Open Source dashboards for anything
+1 -2
View File
@@ -26,8 +26,7 @@
</script>
<script
src="/lib/docsify.js"
data-name="sdfsdf"
data-name-link="//www.baidu.com"
data-name="docsify"
data-base-path="/docs/"
data-load-sidebar
data-sub-max-level="2"
+63 -59
View File
@@ -74,7 +74,7 @@ var config = merge({
themeColor: '',
nameLink: window.location.pathname,
autoHeader: false,
executeScript: false,
executeScript: null,
ga: ''
}, window.$docsify);
@@ -213,11 +213,11 @@ function on (el, type, handler) {
: el.addEventListener(type, handler);
}
var off = function on (el, type, handler) {
function off (el, type, handler) {
isFn(type)
? window.removeEventListener(el, type)
: el.removeEventListener(type, handler);
};
}
/**
* Toggle class
@@ -464,17 +464,62 @@ function getAndActive (el, isParent, autoTitle) {
return target
}
var nav = {};
var hoverOver = false;
function highlight () {
var sidebar = getNode('.sidebar');
var anchors = findAll('.anchor');
var wrap = find(sidebar, '.sidebar-nav');
var active = find(sidebar, 'li.active');
var top = body.scrollTop;
var last;
for (var i = 0, len = anchors.length; i < len; i += 1) {
var node = anchors[i];
if (node.offsetTop > top) {
if (!last) { last = node; }
break
} else {
last = node;
}
}
if (!last) { return }
var li = nav[last.getAttribute('data-id')];
if (!li || li === active) { return }
active && active.classList.remove('active');
li.classList.add('active');
active = li;
// scroll into view
// https://github.com/vuejs/vuejs.org/blob/master/themes/vue/source/js/common.js#L282-L297
if (!hoverOver && body.classList.contains('sticky')) {
var height = sidebar.clientHeight;
var curOffset = 0;
var cur = active.offsetTop + active.clientHeight + 40;
var isInView = (
active.offsetTop >= wrap.scrollTop &&
cur <= wrap.scrollTop + height
);
var notThan = cur - curOffset < height;
var top$1 = isInView
? wrap.scrollTop
: notThan
? curOffset
: cur - height;
sidebar.scrollTop = top$1;
}
}
function scrollActiveSidebar () {
if (isMobile) { return }
var hoverOver = false;
var anchors = findAll('.anchor');
var sidebar = find('.sidebar');
var wrap = find(sidebar, '.sidebar-nav');
var nav = {};
var sidebar = getNode('.sidebar');
var lis = findAll(sidebar, 'li');
var active = find(sidebar, 'li.active');
for (var i = 0, len = lis.length; i < len; i += 1) {
var li = lis[i];
@@ -489,50 +534,6 @@ function scrollActiveSidebar () {
nav[decodeURIComponent(href)] = li;
}
function highlight () {
var top = body.scrollTop;
var last;
for (var i = 0, len = anchors.length; i < len; i += 1) {
var node = anchors[i];
if (node.offsetTop > top) {
if (!last) { last = node; }
break
} else {
last = node;
}
}
if (!last) { return }
var li = nav[last.getAttribute('data-id')];
if (!li || li === active) { return }
active && active.classList.remove('active');
li.classList.add('active');
active = li;
// scroll into view
// https://github.com/vuejs/vuejs.org/blob/master/themes/vue/source/js/common.js#L282-L297
if (!hoverOver && body.classList.contains('sticky')) {
var height = sidebar.clientHeight;
var curOffset = 0;
var cur = active.offsetTop + active.clientHeight + 40;
var isInView = (
active.offsetTop >= wrap.scrollTop &&
cur <= wrap.scrollTop + height
);
var notThan = cur - curOffset < height;
var top$1 = isInView
? wrap.scrollTop
: notThan
? curOffset
: cur - height;
sidebar.scrollTop = top$1;
}
}
off('scroll', highlight);
on('scroll', highlight);
on(sidebar, 'mouseover', function () { hoverOver = true; });
@@ -3105,15 +3106,18 @@ function renderMain (html) {
this._renderTo('.markdown-section', html);
// Render sidebar with the TOC
!this.config.loadSidebar && this._renderSidebar();
// execute script
this.config.executeScript && executeScript();
if (!this.config.executeScript &&
// execute script
if (this.config.executeScript !== false &&
typeof window.Vue !== 'undefined' &&
!executeScript()) {
setTimeout(function (_) {
var vueVM = window.__EXECUTE_RESULT__;
vueVM && vueVM.$destroy && vueVM.$destroy();
window.__EXECUTE_RESULT__ = new window.Vue().$mount('#main');
}, 0);
} else {
this.config.executeScript && executeScript();
}
if (this.config.auto2top) {
@@ -3132,10 +3136,11 @@ function renderMixin (proto) {
var maxLevel = ref.maxLevel;
var subMaxLevel = ref.subMaxLevel;
var autoHeader = ref.autoHeader;
var loadSidebar = ref.loadSidebar;
this._renderTo('.sidebar-nav', sidebar(text, maxLevel));
var active = getAndActive('.sidebar-nav', true, true);
subSidebar(active, subMaxLevel);
loadSidebar && subSidebar(active, subMaxLevel);
// bind event
this.activeLink = active;
scrollActiveSidebar();
@@ -3449,7 +3454,6 @@ initGlobalAPI();
/**
* Run Docsify
*/
setTimeout(function (_) { return new Docsify(); }, 0);
}());
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "docsify",
"version": "3.0.2",
"version": "3.0.4",
"description": "A magical documentation generator.",
"main": "lib/docsify.js",
"files": [
+1 -1
View File
@@ -15,7 +15,7 @@ const config = merge({
themeColor: '',
nameLink: window.location.pathname,
autoHeader: false,
executeScript: false,
executeScript: null,
ga: ''
}, window.$docsify)
+52 -51
View File
@@ -2,17 +2,62 @@ import { isMobile } from '../util/env'
import * as dom from '../util/dom'
import { parse } from '../route/hash'
const nav = {}
let hoverOver = false
function highlight () {
const sidebar = dom.getNode('.sidebar')
const anchors = dom.findAll('.anchor')
const wrap = dom.find(sidebar, '.sidebar-nav')
let active = dom.find(sidebar, 'li.active')
const top = dom.body.scrollTop
let last
for (let i = 0, len = anchors.length; i < len; i += 1) {
const node = anchors[i]
if (node.offsetTop > top) {
if (!last) last = node
break
} else {
last = node
}
}
if (!last) return
const li = nav[last.getAttribute('data-id')]
if (!li || li === active) return
active && active.classList.remove('active')
li.classList.add('active')
active = li
// scroll into view
// https://github.com/vuejs/vuejs.org/blob/master/themes/vue/source/js/common.js#L282-L297
if (!hoverOver && dom.body.classList.contains('sticky')) {
const height = sidebar.clientHeight
const curOffset = 0
const cur = active.offsetTop + active.clientHeight + 40
const isInView = (
active.offsetTop >= wrap.scrollTop &&
cur <= wrap.scrollTop + height
)
const notThan = cur - curOffset < height
const top = isInView
? wrap.scrollTop
: notThan
? curOffset
: cur - height
sidebar.scrollTop = top
}
}
export function scrollActiveSidebar () {
if (isMobile) return
let hoverOver = false
const anchors = dom.findAll('.anchor')
const sidebar = dom.find('.sidebar')
const wrap = dom.find(sidebar, '.sidebar-nav')
const nav = {}
const sidebar = dom.getNode('.sidebar')
const lis = dom.findAll(sidebar, 'li')
let active = dom.find(sidebar, 'li.active')
for (let i = 0, len = lis.length; i < len; i += 1) {
const li = lis[i]
@@ -27,50 +72,6 @@ export function scrollActiveSidebar () {
nav[decodeURIComponent(href)] = li
}
function highlight () {
const top = dom.body.scrollTop
let last
for (let i = 0, len = anchors.length; i < len; i += 1) {
const node = anchors[i]
if (node.offsetTop > top) {
if (!last) last = node
break
} else {
last = node
}
}
if (!last) return
const li = nav[last.getAttribute('data-id')]
if (!li || li === active) return
active && active.classList.remove('active')
li.classList.add('active')
active = li
// scroll into view
// https://github.com/vuejs/vuejs.org/blob/master/themes/vue/source/js/common.js#L282-L297
if (!hoverOver && dom.body.classList.contains('sticky')) {
const height = sidebar.clientHeight
const curOffset = 0
const cur = active.offsetTop + active.clientHeight + 40
const isInView = (
active.offsetTop >= wrap.scrollTop &&
cur <= wrap.scrollTop + height
)
const notThan = cur - curOffset < height
const top = isInView
? wrap.scrollTop
: notThan
? curOffset
: cur - height
sidebar.scrollTop = top
}
}
dom.off('scroll', highlight)
dom.on('scroll', highlight)
dom.on(sidebar, 'mouseover', () => { hoverOver = true })
-1
View File
@@ -25,5 +25,4 @@ initGlobalAPI()
/**
* Run Docsify
*/
setTimeout(_ => new Docsify(), 0)
+8 -5
View File
@@ -28,15 +28,18 @@ function renderMain (html) {
this._renderTo('.markdown-section', html)
// Render sidebar with the TOC
!this.config.loadSidebar && this._renderSidebar()
// execute script
this.config.executeScript && executeScript()
if (!this.config.executeScript &&
// execute script
if (this.config.executeScript !== false &&
typeof window.Vue !== 'undefined' &&
!executeScript()) {
setTimeout(_ => {
const vueVM = window.__EXECUTE_RESULT__
vueVM && vueVM.$destroy && vueVM.$destroy()
window.__EXECUTE_RESULT__ = new window.Vue().$mount('#main')
}, 0)
} else {
this.config.executeScript && executeScript()
}
if (this.config.auto2top) {
@@ -51,11 +54,11 @@ export function renderMixin (proto) {
}
proto._renderSidebar = function (text) {
const { maxLevel, subMaxLevel, autoHeader } = this.config
const { maxLevel, subMaxLevel, autoHeader, loadSidebar } = this.config
this._renderTo('.sidebar-nav', sidebar(text, maxLevel))
const active = getAndActive('.sidebar-nav', true, true)
subSidebar(active, subMaxLevel)
loadSidebar && subSidebar(active, subMaxLevel)
// bind event
this.activeLink = active
scrollActiveSidebar()
+1 -1
View File
@@ -62,7 +62,7 @@ export function on (el, type, handler) {
: el.addEventListener(type, handler)
}
export const off = function on (el, type, handler) {
export function off (el, type, handler) {
isFn(type)
? window.removeEventListener(el, type)
: el.removeEventListener(type, handler)
+10 -1
View File
@@ -70,7 +70,7 @@ section.cover {
line-height: 1.8;
}
.cover-main p:last-child a {
.cover-main > p:last-child a {
border-radius: 2em;
border-width: 1px;
border-style: solid;
@@ -100,4 +100,13 @@ section.cover {
color: inherit;
}
}
blockquote > p > a {
border-bottom: 2px solid var(--theme-color, $color-primary);
transition: color .3s;
&:hover {
color: var(--theme-color, $color-primary);
}
}
}
+1 -1
View File
@@ -17,7 +17,7 @@ div#app {
text-align: center;
font-size: 30px;
font-weight: lighter;
margin: 40vw auto;
margin: 40vh auto;
&:empty::before {
content: "Loading...";