Compare commits

..
13 Commits
Author SHA1 Message Date
qingwei.li 405349102f chore: add changelog 4.5.2 2017-11-09 13:06:59 +08:00
qingwei.li 9d6595d04b [build] 4.5.2 2017-11-09 13:06:57 +08:00
cinwell.liandGitHub d486eef6cc feat: github task lists, close #215 (#305) 2017-11-09 13:06:23 +08:00
qingwei.li b3c3180bab chore: add changelog 4.5.1 2017-11-07 20:03:42 +08:00
qingwei.li c30af850a1 [build] 4.5.1 2017-11-07 20:03:41 +08:00
qingwei.li 2a2ed96eb8 feat: fetch files with the query params, fixed #303 2017-11-07 20:03:11 +08:00
Desmondandcinwell.li 0d54c0cf83 Add zooming to showcase (#302) 2017-11-05 00:42:10 -05:00
qingwei.li f27ce7d2b2 chore: add changelog 4.5.0 2017-11-04 13:56:25 +08:00
qingwei.li 2e1a7367a8 [build] 4.5.0 2017-11-04 13:56:24 +08:00
qingwei.li 7510f75968 fix lint 2017-11-04 13:56:08 +08:00
qingwei.li fd7d4e0e4e feat: add disqus plugin, closed #123 2017-11-04 13:54:37 +08:00
qingwei.li 025bc5cddf chore: update all plugins.md, fixed #187 2017-11-02 10:48:09 +08:00
cinwell.liandGitHub 8f1066a035 chore: update doc
fixed #187
2017-11-01 21:43:09 -05:00
28 changed files with 335 additions and 57 deletions
+30
View File
@@ -1,3 +1,33 @@
<a name="4.5.2"></a>
## [4.5.2](https://github.com/QingWei-Li/docsify/compare/v4.5.1...v4.5.2) (2017-11-09)
### Features
* github task lists, close [#215](https://github.com/QingWei-Li/docsify/issues/215) ([#305](https://github.com/QingWei-Li/docsify/issues/305)) ([d486eef](https://github.com/QingWei-Li/docsify/commit/d486eef))
<a name="4.5.1"></a>
## [4.5.1](https://github.com/QingWei-Li/docsify/compare/v4.5.0...v4.5.1) (2017-11-07)
### Features
* fetch files with the query params, fixed [#303](https://github.com/QingWei-Li/docsify/issues/303) ([2a2ed96](https://github.com/QingWei-Li/docsify/commit/2a2ed96))
<a name="4.5.0"></a>
# [4.5.0](https://github.com/QingWei-Li/docsify/compare/v4.4.1...v4.5.0) (2017-11-04)
### Features
* add disqus plugin, closed [#123](https://github.com/QingWei-Li/docsify/issues/123) ([fd7d4e0](https://github.com/QingWei-Li/docsify/commit/fd7d4e0))
<a name="4.4.1"></a>
## [4.4.1](https://github.com/QingWei-Li/docsify/compare/v4.4.0...v4.4.1) (2017-10-31)
+1
View File
@@ -86,6 +86,7 @@ These projects are using docsify to generate their sites. Pull requests welcome
| [Solidarity](https://infinitered.github.io/solidarity/) | Environment enforcer for your projects across machines. |
| [rnback](https://rnback.com/) | Backend service for react-native applications. |
| [IT-films](https://greybax.github.com/IT-films/) | A curated list of awesome movies, documentaries and TV series about hackers, geeks and IT in common, sorted by IMDB rating. |
| [zooming](http://desmonding.me/zooming/docs) | Image zoom that makes sense. |
## Similar projects
+2 -1
View File
@@ -48,7 +48,8 @@ var plugins = [
{ name: 'external-script', entry: 'external-script.js' },
{ name: 'front-matter', entry: 'front-matter/index.js' },
{ name: 'zoom-image', entry: 'zoom-image.js' },
{ name: 'codesponsor', entry: 'codesponsor.js' }
{ name: 'codesponsor', entry: 'codesponsor.js' },
{ name: 'disqus', entry: 'disqus.js' }
]
plugins.forEach(item => {
+1 -1
View File
@@ -1,6 +1,6 @@
![logo](_media/icon.svg)
# docsify <small>4.4.1</small>
# docsify <small>4.5.2</small>
> A magical documentation site generator.
+20
View File
@@ -56,3 +56,23 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
[link](/demo ":target=_blank")
[link](/demo2 ":target=_self")
```
## Github Task Lists
```md
* [ ] foo
* bar
* [x] baz
* [] bam
* [ ] bim
* [ ] lim
```
* [ ] foo
* bar
* [x] baz
* [] bam
* [ ] bim
* [ ] lim
+7 -1
View File
@@ -91,12 +91,18 @@ Wenn das Skript auf der Seite ein externes ist (eine Javascript Datei über das
## Bilder zoomen
Medium's Bilderzoom. Basierend auf [zoom-image](https://github.com/egoist/zoom-image).
Medium's Bilderzoom. Basierend auf [medium-zoom](https://github.com/francoischalifour/medium-zoom).
```html
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.min.js"></script>
```
Exclude the special image
```markdown
![](image.png ':no-zoom')
```
## Edit on github
Add `Edit on github` button on every pages. provided by 3rd party, check [document](https://github.com/njleonzhang/docsify-edit-on-github)
+20
View File
@@ -62,3 +62,23 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
```md
[link](/demo ":disabled")
```
## Github Task Lists
```md
* [ ] foo
* bar
* [x] baz
* [] bam
* [ ] bim
* [ ] lim
```
* [ ] foo
* bar
* [x] baz
* [] bam
* [ ] bim
* [ ] lim
+15 -1
View File
@@ -91,7 +91,7 @@ If the script on the page is an external one (imports a js file via `src` attrib
## Zoom image
Medium's Image Zoom. Based on [zoom-image](https://github.com/egoist/zoom-image).
Medium's image zoom. Based on [medium-zoom](https://github.com/francoischalifour/medium-zoom).
```html
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.min.js"></script>
@@ -147,3 +147,17 @@ window.$docsify = {
```
See [here](https://github.com/jperasmus/docsify-copy-code/blob/master/README.md) for more details.
## Disqus
Disqus comments. https://disqus.com/
```html
<script>
window.$docsify = {
disqus: 'shortname'
}
</script>
<script src="//unpkg.com/docsify/lib/plugins/disqus.min.js"></script>
```
+20
View File
@@ -56,3 +56,23 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
[link](/demo ":target=_blank")
[link](/demo2 ":target=_self")
```
## Github Task Lists
```md
* [ ] foo
* bar
* [x] baz
* [] bam
* [ ] bim
* [ ] lim
```
* [ ] foo
* bar
* [x] baz
* [] bam
* [ ] bim
* [ ] lim
+9 -1
View File
@@ -85,13 +85,21 @@
## 图片缩放 - Zoom image
Medium's 风格的图片缩放插件. 基于 [zoom-image](https://github.com/egoist/zoom-image)。
Medium's 风格的图片缩放插件. 基于 [medium-zoom](https://github.com/francoischalifour/medium-zoom)。
```html
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.js"></script>
```
忽略某张图片
```markdown
![](image.png ':no-zoom')
```
## Edit on github
Add `Edit on github` button on every pages. provided by 3rd party, check [document](https://github.com/njleonzhang/docsify-edit-on-github)
+46 -19
View File
@@ -2758,10 +2758,13 @@ function parseQuery (query) {
return res
}
function stringifyQuery (obj) {
function stringifyQuery (obj, ignores) {
if ( ignores === void 0 ) ignores = [];
var qs = [];
for (var key in obj) {
if (ignores.indexOf(key) > -1) { continue }
qs.push(
obj[key]
? ((encode(key)) + "=" + (encode(obj[key]))).toLowerCase()
@@ -2973,6 +2976,15 @@ Compiler.prototype._initRenderer = function _initRenderer () {
return ("<img src=\"" + url + "\"data-origin=\"" + href + "\" alt=\"" + text + "\"" + attrs + ">")
};
var CHECKED_RE = /^\[([ x])\] +/;
origin.listitem = renderer.listitem = function (text) {
var checked = CHECKED_RE.exec(text);
if (checked) {
text = text.replace(CHECKED_RE, ("<input type=\"checkbox\" " + (checked[1] === 'x' ? 'checked' : '') + " />"));
}
return ("<li>" + text + "</li>\n")
};
renderer.origin = origin;
return renderer
@@ -3851,14 +3863,14 @@ function initEvent (vm) {
}
}
function loadNested (path, file, next, vm, first) {
function loadNested (path, qs, file, next, vm, first) {
path = first ? path : path.replace(/\/$/, '');
path = getParentPath(path);
if (!path) { return }
get(vm.router.getFile(path + file))
.then(next, function (_) { return loadNested(path, file, next, vm); });
get(vm.router.getFile(path + file) + qs).then(next, function (_) { return loadNested(path, qs, file, next, vm); }
);
}
function fetchMixin (proto) {
@@ -3869,6 +3881,8 @@ function fetchMixin (proto) {
var ref = this.route;
var path = ref.path;
var query = ref.query;
var qs = stringifyQuery(query, ['id']);
var ref$1 = this.config;
var loadNavbar = ref$1.loadNavbar;
var loadSidebar = ref$1.loadSidebar;
@@ -3876,7 +3890,7 @@ function fetchMixin (proto) {
// Abort last request
last && last.abort && last.abort();
last = get(this.router.getFile(path), true);
last = get(this.router.getFile(path) + qs, true);
// Current page is html
this.isHTML = /\.html$/g.test(path);
@@ -3884,25 +3898,37 @@ function fetchMixin (proto) {
var loadSideAndNav = function () {
if (!loadSidebar) { return cb() }
var fn = function (result) { this$1._renderSidebar(result); cb(); };
var fn = function (result) {
this$1._renderSidebar(result);
cb();
};
// Load sidebar
loadNested(path, loadSidebar, fn, this$1, true);
loadNested(path, qs, loadSidebar, fn, this$1, true);
};
// Load main content
last.then(function (text, opt) {
this$1._renderMain(text, opt);
loadSideAndNav();
},
function (_) {
this$1._renderMain(null);
loadSideAndNav();
});
last.then(
function (text, opt) {
this$1._renderMain(text, opt);
loadSideAndNav();
},
function (_) {
this$1._renderMain(null);
loadSideAndNav();
}
);
// Load nav
loadNavbar &&
loadNested(path, loadNavbar, function (text) { return this$1._renderNav(text); }, this, true);
loadNested(
path,
qs,
loadNavbar,
function (text) { return this$1._renderNav(text); },
this,
true
);
};
proto._fetchCover = function () {
@@ -3910,6 +3936,7 @@ function fetchMixin (proto) {
var ref = this.config;
var coverpage = ref.coverpage;
var query = this.route.query;
var root = getParentPath(this.route.path);
var path = this.router.getFile(root + coverpage);
@@ -3919,8 +3946,8 @@ function fetchMixin (proto) {
}
this.coverIsHTML = /\.html$/g.test(path);
get(path)
.then(function (text) { return this$1._renderCover(text); });
get(path + stringifyQuery(query, ['id'])).then(function (text) { return this$1._renderCover(text); }
);
};
proto.$fetch = function (cb) {
@@ -4036,7 +4063,7 @@ initGlobalAPI();
/**
* Version
*/
Docsify.version = '4.4.1';
Docsify.version = '4.5.2';
/**
* Run Docsify
+2 -2
View File
File diff suppressed because one or more lines are too long
+53
View File
@@ -0,0 +1,53 @@
(function () {
'use strict';
location.href = location.href.replace('/-/', '/#/');
function install (hook, vm) {
var dom = Docsify.dom;
var disqus = vm.config.disqus;
if (!disqus) {
throw Error('$docsify.disqus is required')
}
hook.init(function (_) {
var script = dom.create('script');
script.async = true;
script.src = "https://" + disqus + ".disqus.com/embed.js";
script.setAttribute('data-timestamp', +new Date());
dom.appendTo(dom.body, script);
});
hook.mounted(function (_) {
var div = dom.create('div');
div.id = 'disqus_thread';
var main = dom.getNode('#main');
div.style = "width: " + (main.clientWidth) + "px; margin: 0 auto 20px;";
dom.appendTo(dom.find('.content'), div);
// eslint-disable-next-line
window.disqus_config = function() {
this.page.url = location.origin + '/-' + vm.route.path;
this.page.identifier = vm.route.path;
this.page.title = document.title;
};
});
hook.doneEach(function (_) {
if (typeof window.DISQUS !== 'undefined') {
window.DISQUS.reset({
reload: true,
config: function () {
this.page.url = location.origin + '/-' + vm.route.path;
this.page.identifier = vm.route.path;
this.page.title = document.title;
}
});
}
});
}
$docsify.plugins = [].concat(install, $docsify.plugins);
}());
+1
View File
@@ -0,0 +1 @@
!function(){"use strict";function i(i,t){var e=Docsify.dom,o=t.config.disqus;if(!o)throw Error("$docsify.disqus is required");i.init(function(i){var t=e.create("script");t.async=!0,t.src="https://"+o+".disqus.com/embed.js",t.setAttribute("data-timestamp",+new Date),e.appendTo(e.body,t)}),i.mounted(function(i){var o=e.create("div");o.id="disqus_thread";var n=e.getNode("#main");o.style="width: "+n.clientWidth+"px; margin: 0 auto 20px;",e.appendTo(e.find(".content"),o),window.disqus_config=function(){this.page.url=location.origin+"/-"+t.route.path,this.page.identifier=t.route.path,this.page.title=document.title}}),i.doneEach(function(i){void 0!==window.DISQUS&&window.DISQUS.reset({reload:!0,config:function(){this.page.url=location.origin+"/-"+t.route.path,this.page.identifier=t.route.path,this.page.title=document.title}})})}location.href=location.href.replace("/-/","/#/"),$docsify.plugins=[].concat(i,$docsify.plugins)}();
+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": "4.4.1",
"version": "4.5.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "docsify",
"version": "4.4.1",
"version": "4.5.2",
"description": "A magical documentation generator.",
"author": {
"name": "qingwei-li",
+1 -1
View File
@@ -37,5 +37,5 @@
"integrity": "sha1-6DWIAbhrg7F1YNTjw4LXrvIQCUQ="
}
},
"version": "4.4.1"
"version": "4.5.2"
}
@@ -1,6 +1,6 @@
{
"name": "docsify-server-renderer",
"version": "4.4.1",
"version": "4.5.2",
"description": "docsify server renderer",
"author": {
"name": "qingwei-li",
+35 -19
View File
@@ -1,29 +1,31 @@
import { get } from './ajax'
import { callHook } from '../init/lifecycle'
import { getParentPath } from '../router/util'
import { getParentPath, stringifyQuery } from '../router/util'
import { noop } from '../util/core'
import { getAndActive } from '../event/sidebar'
function loadNested (path, file, next, vm, first) {
function loadNested (path, qs, file, next, vm, first) {
path = first ? path : path.replace(/\/$/, '')
path = getParentPath(path)
if (!path) return
get(vm.router.getFile(path + file))
.then(next, _ => loadNested(path, file, next, vm))
get(vm.router.getFile(path + file) + qs).then(next, _ =>
loadNested(path, qs, file, next, vm)
)
}
export function fetchMixin (proto) {
let last
proto._fetch = function (cb = noop) {
const { path } = this.route
const { path, query } = this.route
const qs = stringifyQuery(query, ['id'])
const { loadNavbar, loadSidebar } = this.config
// Abort last request
last && last.abort && last.abort()
last = get(this.router.getFile(path), true)
last = get(this.router.getFile(path) + qs, true)
// Current page is html
this.isHTML = /\.html$/g.test(path)
@@ -31,29 +33,42 @@ export function fetchMixin (proto) {
const loadSideAndNav = () => {
if (!loadSidebar) return cb()
const fn = result => { this._renderSidebar(result); cb() }
const fn = result => {
this._renderSidebar(result)
cb()
}
// Load sidebar
loadNested(path, loadSidebar, fn, this, true)
loadNested(path, qs, loadSidebar, fn, this, true)
}
// Load main content
last.then((text, opt) => {
this._renderMain(text, opt)
loadSideAndNav()
},
_ => {
this._renderMain(null)
loadSideAndNav()
})
last.then(
(text, opt) => {
this._renderMain(text, opt)
loadSideAndNav()
},
_ => {
this._renderMain(null)
loadSideAndNav()
}
)
// Load nav
loadNavbar &&
loadNested(path, loadNavbar, text => this._renderNav(text), this, true)
loadNested(
path,
qs,
loadNavbar,
text => this._renderNav(text),
this,
true
)
}
proto._fetchCover = function () {
const { coverpage } = this.config
const query = this.route.query
const root = getParentPath(this.route.path)
const path = this.router.getFile(root + coverpage)
@@ -63,8 +78,9 @@ export function fetchMixin (proto) {
}
this.coverIsHTML = /\.html$/g.test(path)
get(path)
.then(text => this._renderCover(text))
get(path + stringifyQuery(query, ['id'])).then(text =>
this._renderCover(text)
)
}
proto.$fetch = function (cb = noop) {
+9
View File
@@ -175,6 +175,15 @@ export class Compiler {
return `<img src="${url}"data-origin="${href}" alt="${text}"${attrs}>`
}
const CHECKED_RE = /^\[([ x])\] +/
origin.listitem = renderer.listitem = function (text) {
const checked = CHECKED_RE.exec(text)
if (checked) {
text = text.replace(CHECKED_RE, `<input type="checkbox" ${checked[1] === 'x' ? 'checked' : ''} />`)
}
return `<li>${text}</li>\n`
}
renderer.origin = origin
return renderer
+2 -1
View File
@@ -22,10 +22,11 @@ export function parseQuery (query) {
return res
}
export function stringifyQuery (obj) {
export function stringifyQuery (obj, ignores = []) {
const qs = []
for (const key in obj) {
if (ignores.indexOf(key) > -1) continue
qs.push(
obj[key]
? `${encode(key)}=${encode(obj[key])}`.toLowerCase()
+48
View File
@@ -0,0 +1,48 @@
location.href = location.href.replace('/-/', '/#/')
function install (hook, vm) {
const dom = Docsify.dom
const disqus = vm.config.disqus
if (!disqus) {
throw Error('$docsify.disqus is required')
}
hook.init(_ => {
const script = dom.create('script')
script.async = true
script.src = `https://${disqus}.disqus.com/embed.js`
script.setAttribute('data-timestamp', +new Date())
dom.appendTo(dom.body, script)
})
hook.mounted(_ => {
const div = dom.create('div')
div.id = 'disqus_thread'
const main = dom.getNode('#main')
div.style = `width: ${main.clientWidth}px; margin: 0 auto 20px;`
dom.appendTo(dom.find('.content'), div)
// eslint-disable-next-line
window.disqus_config = function() {
this.page.url = location.origin + '/-' + vm.route.path
this.page.identifier = vm.route.path
this.page.title = document.title
}
})
hook.doneEach(_ => {
if (typeof window.DISQUS !== 'undefined') {
window.DISQUS.reset({
reload: true,
config: function () {
this.page.url = location.origin + '/-' + vm.route.path
this.page.identifier = vm.route.path
this.page.title = document.title
}
})
}
})
}
$docsify.plugins = [].concat(install, $docsify.plugins)
+5
View File
@@ -91,6 +91,11 @@ kbd {
vertical-align: middle;
}
li input[type=checkbox] {
margin: 0 0.2em 0.25em -1.6em;
vertical-align: middle;
}
/* navbar */
.app-nav {
left: 0;
+1 -3
View File
@@ -100,9 +100,7 @@ body {
}
.markdown-section figure,
.markdown-section p,
.markdown-section ul,
.markdown-section ol {
.markdown-section p {
margin: 1.2em 0;
}