mirror of
https://github.com/wahyd4/docsify.git
synced 2026-08-12 06:45:53 +10:00
Compare commits
49
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
09616dec06 | ||
|
|
f74b53f53e | ||
|
|
bba44fb536 | ||
|
|
270fa6cb41 | ||
|
|
24e61f5e2f | ||
|
|
ca8ae50717 | ||
|
|
31654f12ec | ||
|
|
d80aa2189b | ||
|
|
21cde83949 | ||
|
|
c1d4961a64 | ||
|
|
2039e0dd1c | ||
|
|
d5910bd1f9 | ||
|
|
a35531967a | ||
|
|
dac0bfec6c | ||
|
|
01ea44106b | ||
|
|
11ea1f8d12 | ||
|
|
bc4d06bb16 | ||
|
|
29d9cda3de | ||
|
|
140bf10377 | ||
|
|
dfd31b5de7 | ||
|
|
d1c72686bb | ||
|
|
8cd786c9d5 | ||
|
|
b53571810b | ||
|
|
cb53106fa7 | ||
|
|
fd86c727af | ||
|
|
69ef489210 | ||
|
|
c3345ba20c | ||
|
|
1447c8a40a | ||
|
|
3b952ac7c3 | ||
|
|
99dbaa3050 | ||
|
|
6ac7bace21 | ||
|
|
28beff80f7 | ||
|
|
049726e11e | ||
|
|
a257a4ab4e | ||
|
|
a07a613312 | ||
|
|
4db8cd6abf | ||
|
|
a72e7490c3 | ||
|
|
cc79e2e992 | ||
|
|
5b6525b8f1 | ||
|
|
aa719e3a47 | ||
|
|
22a5927eaf | ||
|
|
5ab9d8cb87 | ||
|
|
f84242d380 | ||
|
|
1a945d445a | ||
|
|
81ec7c763b | ||
|
|
d91a66cadd | ||
|
|
58b130996e | ||
|
|
ee800a6572 | ||
|
|
6daecc8a68 |
@@ -1,2 +0,0 @@
|
|||||||
<!-- Love docsify? Please consider supporting our collective:
|
|
||||||
👉 https://opencollective.com/docsify/donate -->
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a report to help us improve
|
||||||
|
|
||||||
|
---
|
||||||
|
<!-- Please don't delete this template or we'll close your issue -->
|
||||||
|
<!-- Please use English language -->
|
||||||
|
<!-- Before creating an issue please make sure you are using the latest version of Docsify. -->
|
||||||
|
<!-- Please ask questions on StackOverflow: https://stackoverflow.com/questions/ask?tags=docsify -->
|
||||||
|
|
||||||
|
## Bug Report
|
||||||
|
|
||||||
|
#### Steps to reproduce
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### What is current behaviour
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### What is the expected behaviour
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
- [ ] Bug does still occur when all/other plugins are disabled?
|
||||||
|
|
||||||
|
<!-- Please type in your environment -->
|
||||||
|
Environment:
|
||||||
|
|
||||||
|
```
|
||||||
|
docsify version:
|
||||||
|
docsify plugins:
|
||||||
|
browser:
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- Love docsify? Please consider supporting our collective:
|
||||||
|
👉 https://opencollective.com/docsify/donate -->
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for this project
|
||||||
|
|
||||||
|
---
|
||||||
|
<!-- Please don't delete this template or we'll close your issue -->
|
||||||
|
<!-- Please use English language -->
|
||||||
|
<!-- Before creating an issue please make sure you are using the latest version of Docsify. -->
|
||||||
|
<!-- Please ask questions on StackOverflow 👉 https://stackoverflow.com/questions/ask?tags=docsify -->
|
||||||
|
|
||||||
|
## Feature request
|
||||||
|
|
||||||
|
#### What problem does this feature solve?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### What does the proposed API look like?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### How should this be implemented in your opinion?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Are you willing to work on this yourself?
|
||||||
@@ -1,5 +1,54 @@
|
|||||||
Please makes sure these boxes are checked before submitting your PR, thank you!
|
<!-- Please use English language -->
|
||||||
|
<!-- Please don't delete this template -->
|
||||||
|
|
||||||
|
<!-- PULL REQUEST TEMPLATE -->
|
||||||
|
<!-- (Update "[ ]" to "[x]" to check a box) -->
|
||||||
|
|
||||||
|
**Summary**
|
||||||
|
|
||||||
|
**What kind of change does this PR introduce?** (check at least one)
|
||||||
|
|
||||||
|
- [ ] Bugfix
|
||||||
|
- [ ] Feature
|
||||||
|
- [ ] Code style update
|
||||||
|
- [ ] Refactor
|
||||||
|
- [ ] Docs
|
||||||
|
- [ ] Build-related changes
|
||||||
|
- [ ] Other, please describe:
|
||||||
|
|
||||||
|
If changing the UI of default theme, please provide the **before/after** screenshot:
|
||||||
|
|
||||||
|
**Does this PR introduce a breaking change?** (check one)
|
||||||
|
|
||||||
|
- [ ] Yes
|
||||||
|
- [ ] No
|
||||||
|
|
||||||
|
If yes, please describe the impact and migration path for existing applications:
|
||||||
|
|
||||||
|
**The PR fulfills these requirements:**
|
||||||
|
|
||||||
|
- [ ] When resolving a specific issue, it's referenced in the PR's title (e.g. `fix #xxx[,#xxx]`, where "xxx" is the issue number)
|
||||||
|
|
||||||
|
You have tested in the following browsers: (Providing a detailed version will be better.)
|
||||||
|
|
||||||
|
- [ ] Chrome
|
||||||
|
- [ ] Firefox
|
||||||
|
- [ ] Safari
|
||||||
|
- [ ] Edge
|
||||||
|
- [ ] IE
|
||||||
|
|
||||||
|
If adding a **new feature**, the PR's description includes:
|
||||||
|
|
||||||
|
- [ ] A convincing reason for adding this feature
|
||||||
|
- [ ] Related documents have been updated
|
||||||
|
- [ ] Related tests have been updated
|
||||||
|
|
||||||
|
To avoid wasting your time, it's best to open a **feature request issue** first and wait for approval before working on it.
|
||||||
|
|
||||||
|
|
||||||
|
**Other information:**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
* [ ] Make sure you are merging your commits to `master` branch.
|
|
||||||
* [ ] Add some descriptions and refer relative issues for you PR.
|
|
||||||
* [ ] DO NOT include files inside `lib` directory.
|
* [ ] DO NOT include files inside `lib` directory.
|
||||||
|
|
||||||
|
|||||||
+214
-182
@@ -1,182 +1,214 @@
|
|||||||
|
<a name="4.9.1"></a>
|
||||||
|
## [4.9.1](https://github.com/docsifyjs/docsify/compare/v4.9.0...v4.9.1) (2019-02-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* github assets url ([#774](https://github.com/docsifyjs/docsify/issues/774)) ([140bf10](https://github.com/docsifyjs/docsify/commit/140bf10))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="4.9.0"></a>
|
||||||
|
# [4.9.0](https://github.com/docsifyjs/docsify/compare/v4.8.6...v4.9.0) (2019-02-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* task list rendering (Fix [#749](https://github.com/docsifyjs/docsify/issues/749)) ([#757](https://github.com/docsifyjs/docsify/issues/757)) ([69ef489](https://github.com/docsifyjs/docsify/commit/69ef489))
|
||||||
|
* upgrade npm-run-all ([049726e](https://github.com/docsifyjs/docsify/commit/049726e))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* **search-plugin:** add namespace option ([#706](https://github.com/docsifyjs/docsify/issues/706)) ([28beff8](https://github.com/docsifyjs/docsify/commit/28beff8))
|
||||||
|
* Add new theme "dolphin" ([#735](https://github.com/docsifyjs/docsify/issues/735)) ([c3345ba](https://github.com/docsifyjs/docsify/commit/c3345ba))
|
||||||
|
* Provide code fragments feature ([#748](https://github.com/docsifyjs/docsify/issues/748)) ([1447c8a](https://github.com/docsifyjs/docsify/commit/1447c8a))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="4.8.6"></a>
|
||||||
|
## [4.8.6](https://github.com/docsifyjs/docsify/compare/v4.8.5...v4.8.6) (2018-11-12)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* IE10 compatibility ([#691](https://github.com/docsifyjs/docsify/issues/691)) ([4db8cd6](https://github.com/docsifyjs/docsify/commit/4db8cd6))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="4.8.5"></a>
|
||||||
|
## [4.8.5](https://github.com/docsifyjs/docsify/compare/v4.8.4...v4.8.5) (2018-11-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* expose version info for Docsify, fixed [#641](https://github.com/docsifyjs/docsify/issues/641) ([aa719e3](https://github.com/docsifyjs/docsify/commit/aa719e3))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="4.8.4"></a>
|
||||||
|
## [4.8.4](https://github.com/docsifyjs/docsify/compare/v4.8.3...v4.8.4) (2018-11-01)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* **cover:** Compatible with legacy styles, fixed [#677](https://github.com/docsifyjs/docsify/issues/677) ([#678](https://github.com/docsifyjs/docsify/issues/678)) ([1a945d4](https://github.com/docsifyjs/docsify/commit/1a945d4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="4.8.3"></a>
|
||||||
|
|
||||||
|
## [4.8.3](https://github.com/docsifyjs/docsify/compare/v4.8.2...v4.8.3) (2018-11-01)
|
||||||
|
|
||||||
|
Fix the last release files has the old version marked...
|
||||||
|
|
||||||
<a name="4.8.2"></a>
|
<a name="4.8.2"></a>
|
||||||
|
|
||||||
## [4.8.2](https://github.com/docsifyjs/docsify/compare/v4.8.1...v4.8.2) (2018-11-01)
|
## [4.8.2](https://github.com/docsifyjs/docsify/compare/v4.8.1...v4.8.2) (2018-11-01)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* cover button style, fixed [#670](https://github.com/docsifyjs/docsify/issues/670), fixed [#665](https://github.com/docsifyjs/docsify/issues/665) ([#675](https://github.com/docsifyjs/docsify/issues/675)) ([fcd1087](https://github.com/docsifyjs/docsify/commit/fcd1087))
|
- cover button style, fixed [#670](https://github.com/docsifyjs/docsify/issues/670), fixed [#665](https://github.com/docsifyjs/docsify/issues/665) ([#675](https://github.com/docsifyjs/docsify/issues/675)) ([fcd1087](https://github.com/docsifyjs/docsify/commit/fcd1087))
|
||||||
* update match regex ([#669](https://github.com/docsifyjs/docsify/issues/669)) ([2edf47e](https://github.com/docsifyjs/docsify/commit/2edf47e))
|
- update match regex ([#669](https://github.com/docsifyjs/docsify/issues/669)) ([2edf47e](https://github.com/docsifyjs/docsify/commit/2edf47e))
|
||||||
* use copy of cached value ([#668](https://github.com/docsifyjs/docsify/issues/668)) ([5fcf210](https://github.com/docsifyjs/docsify/commit/5fcf210))
|
- use copy of cached value ([#668](https://github.com/docsifyjs/docsify/issues/668)) ([5fcf210](https://github.com/docsifyjs/docsify/commit/5fcf210))
|
||||||
* **compiler:** import prism-markup-templating, fixed [#672](https://github.com/docsifyjs/docsify/issues/672) ([#676](https://github.com/docsifyjs/docsify/issues/676)) ([fdd8826](https://github.com/docsifyjs/docsify/commit/fdd8826))
|
- **compiler:** import prism-markup-templating, fixed [#672](https://github.com/docsifyjs/docsify/issues/672) ([#676](https://github.com/docsifyjs/docsify/issues/676)) ([fdd8826](https://github.com/docsifyjs/docsify/commit/fdd8826))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add heading config id ([#671](https://github.com/docsifyjs/docsify/issues/671)) ([ab19b13](https://github.com/docsifyjs/docsify/commit/ab19b13))
|
- add heading config id ([#671](https://github.com/docsifyjs/docsify/issues/671)) ([ab19b13](https://github.com/docsifyjs/docsify/commit/ab19b13))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.8.1"></a>
|
<a name="4.8.1"></a>
|
||||||
|
|
||||||
## [4.8.1](https://github.com/docsifyjs/docsify/compare/v4.8.0...v4.8.1) (2018-10-31)
|
## [4.8.1](https://github.com/docsifyjs/docsify/compare/v4.8.0...v4.8.1) (2018-10-31)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* ssr package dep, fixed [#605](https://github.com/docsifyjs/docsify/issues/605) ([2bc880d](https://github.com/docsifyjs/docsify/commit/2bc880d))
|
- ssr package dep, fixed [#605](https://github.com/docsifyjs/docsify/issues/605) ([2bc880d](https://github.com/docsifyjs/docsify/commit/2bc880d))
|
||||||
* **compiler:** extra quotes for codeblock ([4f588e0](https://github.com/docsifyjs/docsify/commit/4f588e0))
|
- **compiler:** extra quotes for codeblock ([4f588e0](https://github.com/docsifyjs/docsify/commit/4f588e0))
|
||||||
* **compiler:** prevent render of html code in paragraph, fixed [#663](https://github.com/docsifyjs/docsify/issues/663) ([d35059d](https://github.com/docsifyjs/docsify/commit/d35059d))
|
- **compiler:** prevent render of html code in paragraph, fixed [#663](https://github.com/docsifyjs/docsify/issues/663) ([d35059d](https://github.com/docsifyjs/docsify/commit/d35059d))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* upgrade PrismJS, fixed [#534](https://github.com/docsifyjs/docsify/issues/534) ([4805cb5](https://github.com/docsifyjs/docsify/commit/4805cb5))
|
- upgrade PrismJS, fixed [#534](https://github.com/docsifyjs/docsify/issues/534) ([4805cb5](https://github.com/docsifyjs/docsify/commit/4805cb5))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.8.0"></a>
|
<a name="4.8.0"></a>
|
||||||
|
|
||||||
# [4.8.0](https://github.com/docsifyjs/docsify/compare/v4.7.1...v4.8.0) (2018-10-31)
|
# [4.8.0](https://github.com/docsifyjs/docsify/compare/v4.7.1...v4.8.0) (2018-10-31)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* Cache TOC for later usage in the case of cached file html ([#649](https://github.com/docsifyjs/docsify/issues/649)) ([9e86017](https://github.com/docsifyjs/docsify/commit/9e86017))
|
- Cache TOC for later usage in the case of cached file html ([#649](https://github.com/docsifyjs/docsify/issues/649)) ([9e86017](https://github.com/docsifyjs/docsify/commit/9e86017))
|
||||||
* improve external script plugin ([#632](https://github.com/docsifyjs/docsify/issues/632)) ([50c2434](https://github.com/docsifyjs/docsify/commit/50c2434))
|
- improve external script plugin ([#632](https://github.com/docsifyjs/docsify/issues/632)) ([50c2434](https://github.com/docsifyjs/docsify/commit/50c2434))
|
||||||
* missing variable declaration ([#660](https://github.com/docsifyjs/docsify/issues/660)) ([1ce37bd](https://github.com/docsifyjs/docsify/commit/1ce37bd))
|
- missing variable declaration ([#660](https://github.com/docsifyjs/docsify/issues/660)) ([1ce37bd](https://github.com/docsifyjs/docsify/commit/1ce37bd))
|
||||||
* Remove target for mailto links ([#652](https://github.com/docsifyjs/docsify/issues/652)) ([18f0f03](https://github.com/docsifyjs/docsify/commit/18f0f03))
|
- Remove target for mailto links ([#652](https://github.com/docsifyjs/docsify/issues/652)) ([18f0f03](https://github.com/docsifyjs/docsify/commit/18f0f03))
|
||||||
* Update getAllPath query selector ([#653](https://github.com/docsifyjs/docsify/issues/653)) ([f6f4e32](https://github.com/docsifyjs/docsify/commit/f6f4e32))
|
- Update getAllPath query selector ([#653](https://github.com/docsifyjs/docsify/issues/653)) ([f6f4e32](https://github.com/docsifyjs/docsify/commit/f6f4e32))
|
||||||
* Update vue.styl ([#634](https://github.com/docsifyjs/docsify/issues/634)) ([bf060be](https://github.com/docsifyjs/docsify/commit/bf060be))
|
- Update vue.styl ([#634](https://github.com/docsifyjs/docsify/issues/634)) ([bf060be](https://github.com/docsifyjs/docsify/commit/bf060be))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* Add docsify version to $window.docsify object ([#641](https://github.com/docsifyjs/docsify/issues/641)) ([94bc415](https://github.com/docsifyjs/docsify/commit/94bc415)), closes [#521](https://github.com/docsifyjs/docsify/issues/521)
|
- Add docsify version to $window.docsify object ([#641](https://github.com/docsifyjs/docsify/issues/641)) ([94bc415](https://github.com/docsifyjs/docsify/commit/94bc415)), closes [#521](https://github.com/docsifyjs/docsify/issues/521)
|
||||||
* **compiler:** support embedded mermaid ([#629](https://github.com/docsifyjs/docsify/issues/629)) ([42ea8af](https://github.com/docsifyjs/docsify/commit/42ea8af))
|
- **compiler:** support embedded mermaid ([#629](https://github.com/docsifyjs/docsify/issues/629)) ([42ea8af](https://github.com/docsifyjs/docsify/commit/42ea8af))
|
||||||
* Add hideOtherSidebarContent option ([#661](https://github.com/docsifyjs/docsify/issues/661)) ([4a23c4a](https://github.com/docsifyjs/docsify/commit/4a23c4a))
|
- Add hideOtherSidebarContent option ([#661](https://github.com/docsifyjs/docsify/issues/661)) ([4a23c4a](https://github.com/docsifyjs/docsify/commit/4a23c4a))
|
||||||
* Allow base64, external, and relative logo values ([#642](https://github.com/docsifyjs/docsify/issues/642)) ([0a0802a](https://github.com/docsifyjs/docsify/commit/0a0802a)), closes [#577](https://github.com/docsifyjs/docsify/issues/577)
|
- Allow base64, external, and relative logo values ([#642](https://github.com/docsifyjs/docsify/issues/642)) ([0a0802a](https://github.com/docsifyjs/docsify/commit/0a0802a)), closes [#577](https://github.com/docsifyjs/docsify/issues/577)
|
||||||
* upgrade marked to 0.5.x, fixed [#645](https://github.com/docsifyjs/docsify/issues/645), close [#644](https://github.com/docsifyjs/docsify/issues/644) ([#662](https://github.com/docsifyjs/docsify/issues/662)) ([a39b214](https://github.com/docsifyjs/docsify/commit/a39b214))
|
- upgrade marked to 0.5.x, fixed [#645](https://github.com/docsifyjs/docsify/issues/645), close [#644](https://github.com/docsifyjs/docsify/issues/644) ([#662](https://github.com/docsifyjs/docsify/issues/662)) ([a39b214](https://github.com/docsifyjs/docsify/commit/a39b214))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.7.1"></a>
|
<a name="4.7.1"></a>
|
||||||
|
|
||||||
## [4.7.1](https://github.com/docsifyjs/docsify/compare/v4.7.0...v4.7.1) (2018-08-30)
|
## [4.7.1](https://github.com/docsifyjs/docsify/compare/v4.7.0...v4.7.1) (2018-08-30)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.7.0"></a>
|
<a name="4.7.0"></a>
|
||||||
|
|
||||||
# [4.7.0](https://github.com/QingWei-Li/docsify/compare/v4.6.9...v4.7.0) (2018-06-29)
|
# [4.7.0](https://github.com/QingWei-Li/docsify/compare/v4.6.9...v4.7.0) (2018-06-29)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* alldow addition content in sidebar, fix [#518](https://github.com/QingWei-Li/docsify/issues/518), fix 539 ([#543](https://github.com/QingWei-Li/docsify/issues/543)) ([04b36b0](https://github.com/QingWei-Li/docsify/commit/04b36b0))
|
- alldow addition content in sidebar, fix [#518](https://github.com/QingWei-Li/docsify/issues/518), fix 539 ([#543](https://github.com/QingWei-Li/docsify/issues/543)) ([04b36b0](https://github.com/QingWei-Li/docsify/commit/04b36b0))
|
||||||
* async install config, fixed [#425](https://github.com/QingWei-Li/docsify/issues/425) ([e4e011c](https://github.com/QingWei-Li/docsify/commit/e4e011c))
|
- async install config, fixed [#425](https://github.com/QingWei-Li/docsify/issues/425) ([e4e011c](https://github.com/QingWei-Li/docsify/commit/e4e011c))
|
||||||
* loading embed files synchronously, fixed [#525](https://github.com/QingWei-Li/docsify/issues/525), fixed [#527](https://github.com/QingWei-Li/docsify/issues/527) ([#544](https://github.com/QingWei-Li/docsify/issues/544)) ([feea7f9](https://github.com/QingWei-Li/docsify/commit/feea7f9))
|
- loading embed files synchronously, fixed [#525](https://github.com/QingWei-Li/docsify/issues/525), fixed [#527](https://github.com/QingWei-Li/docsify/issues/527) ([#544](https://github.com/QingWei-Li/docsify/issues/544)) ([feea7f9](https://github.com/QingWei-Li/docsify/commit/feea7f9))
|
||||||
* path include chinese character cause hilight bug ([#556](https://github.com/QingWei-Li/docsify/issues/556)) ([a5f333a](https://github.com/QingWei-Li/docsify/commit/a5f333a))
|
- path include chinese character cause hilight bug ([#556](https://github.com/QingWei-Li/docsify/issues/556)) ([a5f333a](https://github.com/QingWei-Li/docsify/commit/a5f333a))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add logo option, [#264](https://github.com/QingWei-Li/docsify/issues/264) ([#541](https://github.com/QingWei-Li/docsify/issues/541)) ([ee72dd0](https://github.com/QingWei-Li/docsify/commit/ee72dd0))
|
- add logo option, [#264](https://github.com/QingWei-Li/docsify/issues/264) ([#541](https://github.com/QingWei-Li/docsify/issues/541)) ([ee72dd0](https://github.com/QingWei-Li/docsify/commit/ee72dd0))
|
||||||
* add unpkg field, close [#531](https://github.com/QingWei-Li/docsify/issues/531) ([#558](https://github.com/QingWei-Li/docsify/issues/558)) ([5c0de0a](https://github.com/QingWei-Li/docsify/commit/5c0de0a))
|
- add unpkg field, close [#531](https://github.com/QingWei-Li/docsify/issues/531) ([#558](https://github.com/QingWei-Li/docsify/issues/558)) ([5c0de0a](https://github.com/QingWei-Li/docsify/commit/5c0de0a))
|
||||||
* support image resizing, resolve [#508](https://github.com/QingWei-Li/docsify/issues/508) ([#545](https://github.com/QingWei-Li/docsify/issues/545)) ([3a7ad62](https://github.com/QingWei-Li/docsify/commit/3a7ad62))
|
- support image resizing, resolve [#508](https://github.com/QingWei-Li/docsify/issues/508) ([#545](https://github.com/QingWei-Li/docsify/issues/545)) ([3a7ad62](https://github.com/QingWei-Li/docsify/commit/3a7ad62))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.10"></a>
|
<a name="4.6.10"></a>
|
||||||
|
|
||||||
## [4.6.10](https://github.com/QingWei-Li/docsify/compare/v4.6.9...v4.6.10) (2018-03-25)
|
## [4.6.10](https://github.com/QingWei-Li/docsify/compare/v4.6.9...v4.6.10) (2018-03-25)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* async install config, fixed [#425](https://github.com/QingWei-Li/docsify/issues/425) ([e4e011c](https://github.com/QingWei-Li/docsify/commit/e4e011c))
|
- async install config, fixed [#425](https://github.com/QingWei-Li/docsify/issues/425) ([e4e011c](https://github.com/QingWei-Li/docsify/commit/e4e011c))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.9"></a>
|
<a name="4.6.9"></a>
|
||||||
|
|
||||||
## [4.6.9](https://github.com/QingWei-Li/docsify/compare/v4.6.8...v4.6.9) (2018-03-10)
|
## [4.6.9](https://github.com/QingWei-Li/docsify/compare/v4.6.8...v4.6.9) (2018-03-10)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* upgrade medium-zoom, fixed [#417](https://github.com/QingWei-Li/docsify/issues/417) ([6a3d69a](https://github.com/QingWei-Li/docsify/commit/6a3d69a))
|
- upgrade medium-zoom, fixed [#417](https://github.com/QingWei-Li/docsify/issues/417) ([6a3d69a](https://github.com/QingWei-Li/docsify/commit/6a3d69a))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.8"></a>
|
<a name="4.6.8"></a>
|
||||||
|
|
||||||
## [4.6.8](https://github.com/QingWei-Li/docsify/compare/v4.6.7...v4.6.8) (2018-03-06)
|
## [4.6.8](https://github.com/QingWei-Li/docsify/compare/v4.6.7...v4.6.8) (2018-03-06)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* resolve path of image and embed files, fixed [#412](https://github.com/QingWei-Li/docsify/issues/412) ([bfd0d18](https://github.com/QingWei-Li/docsify/commit/bfd0d18))
|
- resolve path of image and embed files, fixed [#412](https://github.com/QingWei-Li/docsify/issues/412) ([bfd0d18](https://github.com/QingWei-Li/docsify/commit/bfd0d18))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.7"></a>
|
<a name="4.6.7"></a>
|
||||||
|
|
||||||
## [4.6.7](https://github.com/QingWei-Li/docsify/compare/v4.6.6...v4.6.7) (2018-03-03)
|
## [4.6.7](https://github.com/QingWei-Li/docsify/compare/v4.6.6...v4.6.7) (2018-03-03)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* layout css, fixed [#409](https://github.com/QingWei-Li/docsify/issues/409) ([aeb692e](https://github.com/QingWei-Li/docsify/commit/aeb692e))
|
- layout css, fixed [#409](https://github.com/QingWei-Li/docsify/issues/409) ([aeb692e](https://github.com/QingWei-Li/docsify/commit/aeb692e))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.6"></a>
|
<a name="4.6.6"></a>
|
||||||
|
|
||||||
## [4.6.6](https://github.com/QingWei-Li/docsify/compare/v4.6.5...v4.6.6) (2018-03-03)
|
## [4.6.6](https://github.com/QingWei-Li/docsify/compare/v4.6.5...v4.6.6) (2018-03-03)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.5"></a>
|
<a name="4.6.5"></a>
|
||||||
|
|
||||||
## [4.6.5](https://github.com/QingWei-Li/docsify/compare/v4.6.4...v4.6.5) (2018-03-03)
|
## [4.6.5](https://github.com/QingWei-Li/docsify/compare/v4.6.4...v4.6.5) (2018-03-03)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **navbar:** Now Navbar isn't append to DOM when loadNavbar is falsy ([#407](https://github.com/QingWei-Li/docsify/issues/407)) ([0933445](https://github.com/QingWei-Li/docsify/commit/0933445))
|
- **navbar:** Now Navbar isn't append to DOM when loadNavbar is falsy ([#407](https://github.com/QingWei-Li/docsify/issues/407)) ([0933445](https://github.com/QingWei-Li/docsify/commit/0933445))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* **config:** Add 404 page options. ([#406](https://github.com/QingWei-Li/docsify/issues/406)) ([9b3b445](https://github.com/QingWei-Li/docsify/commit/9b3b445))
|
- **config:** Add 404 page options. ([#406](https://github.com/QingWei-Li/docsify/issues/406)) ([9b3b445](https://github.com/QingWei-Li/docsify/commit/9b3b445))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.4"></a>
|
<a name="4.6.4"></a>
|
||||||
## [4.6.4](https://github.com/QingWei-Li/docsify/compare/v4.6.3...v4.6.4) (2018-03-01)
|
|
||||||
|
|
||||||
|
## [4.6.4](https://github.com/QingWei-Li/docsify/compare/v4.6.3...v4.6.4) (2018-03-01)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **render:** Disable markdown parsing when the file is an HTML ([#403](https://github.com/QingWei-Li/docsify/issues/403)) ([278a75e](https://github.com/QingWei-Li/docsify/commit/278a75e))
|
- **render:** Disable markdown parsing when the file is an HTML ([#403](https://github.com/QingWei-Li/docsify/issues/403)) ([278a75e](https://github.com/QingWei-Li/docsify/commit/278a75e))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* **fetch:** Add fallback languages configuration. ([#402](https://github.com/QingWei-Li/docsify/issues/402)) ([ecc0e04](https://github.com/QingWei-Li/docsify/commit/ecc0e04))
|
- **fetch:** Add fallback languages configuration. ([#402](https://github.com/QingWei-Li/docsify/issues/402)) ([ecc0e04](https://github.com/QingWei-Li/docsify/commit/ecc0e04))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.3"></a>
|
<a name="4.6.3"></a>
|
||||||
|
|
||||||
## [4.6.3](https://github.com/QingWei-Li/docsify/compare/v4.6.2...v4.6.3) (2018-02-15)
|
## [4.6.3](https://github.com/QingWei-Li/docsify/compare/v4.6.2...v4.6.3) (2018-02-15)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **hook:** beforeEach don\'t work, fixed [#393](https://github.com/QingWei-Li/docsify/issues/393) ([6a09059](https://github.com/QingWei-Li/docsify/commit/6a09059))
|
- **hook:** beforeEach don\'t work, fixed [#393](https://github.com/QingWei-Li/docsify/issues/393) ([6a09059](https://github.com/QingWei-Li/docsify/commit/6a09059))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.2"></a>
|
<a name="4.6.2"></a>
|
||||||
## [4.6.2](https://github.com/QingWei-Li/docsify/compare/v4.6.1...v4.6.2) (2018-02-14)
|
|
||||||
|
|
||||||
|
## [4.6.2](https://github.com/QingWei-Li/docsify/compare/v4.6.1...v4.6.2) (2018-02-14)
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **embed:** broken in IE, fixed [#389](https://github.com/QingWei-Li/docsify/issues/389), fixed [#391](https://github.com/QingWei-Li/docsify/issues/391) ([45a7464](https://github.com/QingWei-Li/docsify/commit/45a7464))
|
- **embed:** broken in IE, fixed [#389](https://github.com/QingWei-Li/docsify/issues/389), fixed [#391](https://github.com/QingWei-Li/docsify/issues/391) ([45a7464](https://github.com/QingWei-Li/docsify/commit/45a7464))
|
||||||
* **embed:** init value ([890a7bf](https://github.com/QingWei-Li/docsify/commit/890a7bf))
|
- **embed:** init value ([890a7bf](https://github.com/QingWei-Li/docsify/commit/890a7bf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="4.6.1"></a>
|
<a name="4.6.1"></a>
|
||||||
|
|
||||||
@@ -184,8 +216,8 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **embed** compatible ssr ([dc0c3ce](https://github.com/QingWei-Li/docsify/commit/dc0c3ce))
|
- **embed** compatible ssr ([dc0c3ce](https://github.com/QingWei-Li/docsify/commit/dc0c3ce))
|
||||||
* **embed** async fetch embed files, fixed [#387](https://github.com/QingWei-Li/docsify/issues/387)
|
- **embed** async fetch embed files, fixed [#387](https://github.com/QingWei-Li/docsify/issues/387)
|
||||||
|
|
||||||
<a name="4.6.0"></a>
|
<a name="4.6.0"></a>
|
||||||
|
|
||||||
@@ -193,26 +225,26 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **search:** custom clear button, fixed [#271](https://github.com/QingWei-Li/docsify/issues/271) ([864aa18](https://github.com/QingWei-Li/docsify/commit/864aa18))
|
- **search:** custom clear button, fixed [#271](https://github.com/QingWei-Li/docsify/issues/271) ([864aa18](https://github.com/QingWei-Li/docsify/commit/864aa18))
|
||||||
* **search:** escape special characters for search, fixed [#369](https://github.com/QingWei-Li/docsify/issues/369) ([9755439](https://github.com/QingWei-Li/docsify/commit/9755439))
|
- **search:** escape special characters for search, fixed [#369](https://github.com/QingWei-Li/docsify/issues/369) ([9755439](https://github.com/QingWei-Li/docsify/commit/9755439))
|
||||||
* build config ([342438f](https://github.com/QingWei-Li/docsify/commit/342438f))
|
- build config ([342438f](https://github.com/QingWei-Li/docsify/commit/342438f))
|
||||||
* button style for coverpage, fixed [#362](https://github.com/QingWei-Li/docsify/issues/362) ([85428ef](https://github.com/QingWei-Li/docsify/commit/85428ef))
|
- button style for coverpage, fixed [#362](https://github.com/QingWei-Li/docsify/issues/362) ([85428ef](https://github.com/QingWei-Li/docsify/commit/85428ef))
|
||||||
* dropdown scroll style, fixed [#346](https://github.com/QingWei-Li/docsify/issues/346) ([c4d83f2](https://github.com/QingWei-Li/docsify/commit/c4d83f2))
|
- dropdown scroll style, fixed [#346](https://github.com/QingWei-Li/docsify/issues/346) ([c4d83f2](https://github.com/QingWei-Li/docsify/commit/c4d83f2))
|
||||||
* highlight homepage link, fixed [#304](https://github.com/QingWei-Li/docsify/issues/304) ([f960c19](https://github.com/QingWei-Li/docsify/commit/f960c19))
|
- highlight homepage link, fixed [#304](https://github.com/QingWei-Li/docsify/issues/304) ([f960c19](https://github.com/QingWei-Li/docsify/commit/f960c19))
|
||||||
* homepage link ([e097f88](https://github.com/QingWei-Li/docsify/commit/e097f88))
|
- homepage link ([e097f88](https://github.com/QingWei-Li/docsify/commit/e097f88))
|
||||||
* onlyCover ([033be4f](https://github.com/QingWei-Li/docsify/commit/033be4f))
|
- onlyCover ([033be4f](https://github.com/QingWei-Li/docsify/commit/033be4f))
|
||||||
* ssr compatible embedd ([ebc10c4](https://github.com/QingWei-Li/docsify/commit/ebc10c4))
|
- ssr compatible embedd ([ebc10c4](https://github.com/QingWei-Li/docsify/commit/ebc10c4))
|
||||||
* ssr coverpage, fixed [#273](https://github.com/QingWei-Li/docsify/issues/273) ([9e824a4](https://github.com/QingWei-Li/docsify/commit/9e824a4))
|
- ssr coverpage, fixed [#273](https://github.com/QingWei-Li/docsify/issues/273) ([9e824a4](https://github.com/QingWei-Li/docsify/commit/9e824a4))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* click sidebar menu add collapse and expand, close [#294](https://github.com/QingWei-Li/docsify/issues/294) ([5e161a1](https://github.com/QingWei-Li/docsify/commit/5e161a1))
|
- click sidebar menu add collapse and expand, close [#294](https://github.com/QingWei-Li/docsify/issues/294) ([5e161a1](https://github.com/QingWei-Li/docsify/commit/5e161a1))
|
||||||
* **compiler:** support embedded file as code block, close [#134](https://github.com/QingWei-Li/docsify/issues/134) ([761ccc2](https://github.com/QingWei-Li/docsify/commit/761ccc2))
|
- **compiler:** support embedded file as code block, close [#134](https://github.com/QingWei-Li/docsify/issues/134) ([761ccc2](https://github.com/QingWei-Li/docsify/commit/761ccc2))
|
||||||
* **compiler:** support embedded markdown, html, video, etc files, close [#383](https://github.com/QingWei-Li/docsify/issues/383), close [#333](https://github.com/QingWei-Li/docsify/issues/333) ([524f52f](https://github.com/QingWei-Li/docsify/commit/524f52f))
|
- **compiler:** support embedded markdown, html, video, etc files, close [#383](https://github.com/QingWei-Li/docsify/issues/383), close [#333](https://github.com/QingWei-Li/docsify/issues/333) ([524f52f](https://github.com/QingWei-Li/docsify/commit/524f52f))
|
||||||
* **cover:** add onlyCover option, close [#382](https://github.com/QingWei-Li/docsify/issues/382) ([b265fdd](https://github.com/QingWei-Li/docsify/commit/b265fdd))
|
- **cover:** add onlyCover option, close [#382](https://github.com/QingWei-Li/docsify/issues/382) ([b265fdd](https://github.com/QingWei-Li/docsify/commit/b265fdd))
|
||||||
* **fetch:** add requestHeaders option, fixed [#336](https://github.com/QingWei-Li/docsify/issues/336) ([54ab4c9](https://github.com/QingWei-Li/docsify/commit/54ab4c9))
|
- **fetch:** add requestHeaders option, fixed [#336](https://github.com/QingWei-Li/docsify/issues/336) ([54ab4c9](https://github.com/QingWei-Li/docsify/commit/54ab4c9))
|
||||||
* **render:** add ext option for custom file extenstion, close [#340](https://github.com/QingWei-Li/docsify/issues/340) ([248aa72](https://github.com/QingWei-Li/docsify/commit/248aa72))
|
- **render:** add ext option for custom file extenstion, close [#340](https://github.com/QingWei-Li/docsify/issues/340) ([248aa72](https://github.com/QingWei-Li/docsify/commit/248aa72))
|
||||||
* **render:** mutilple coverpage, close [#315](https://github.com/QingWei-Li/docsify/issues/315) ([f68ddf5](https://github.com/QingWei-Li/docsify/commit/f68ddf5))
|
- **render:** mutilple coverpage, close [#315](https://github.com/QingWei-Li/docsify/issues/315) ([f68ddf5](https://github.com/QingWei-Li/docsify/commit/f68ddf5))
|
||||||
|
|
||||||
<a name="4.5.9"></a>
|
<a name="4.5.9"></a>
|
||||||
|
|
||||||
@@ -220,7 +252,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* upgrade marked ([4157173](https://github.com/QingWei-Li/docsify/commit/4157173))
|
- upgrade marked ([4157173](https://github.com/QingWei-Li/docsify/commit/4157173))
|
||||||
|
|
||||||
<a name="4.5.8"></a>
|
<a name="4.5.8"></a>
|
||||||
|
|
||||||
@@ -228,8 +260,8 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* cover style, fixed [#381](https://github.com/QingWei-Li/docsify/issues/381) ([368754e](https://github.com/QingWei-Li/docsify/commit/368754e))
|
- cover style, fixed [#381](https://github.com/QingWei-Li/docsify/issues/381) ([368754e](https://github.com/QingWei-Li/docsify/commit/368754e))
|
||||||
* updated deps ([#337](https://github.com/QingWei-Li/docsify/issues/337)) ([a12d393](https://github.com/QingWei-Li/docsify/commit/a12d393))
|
- updated deps ([#337](https://github.com/QingWei-Li/docsify/issues/337)) ([a12d393](https://github.com/QingWei-Li/docsify/commit/a12d393))
|
||||||
|
|
||||||
<a name="4.5.7"></a>
|
<a name="4.5.7"></a>
|
||||||
|
|
||||||
@@ -237,7 +269,7 @@
|
|||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add navigation plugin, closed [#180](https://github.com/QingWei-Li/docsify/issues/180) ([f78be4c](https://github.com/QingWei-Li/docsify/commit/f78be4c))
|
- add navigation plugin, closed [#180](https://github.com/QingWei-Li/docsify/issues/180) ([f78be4c](https://github.com/QingWei-Li/docsify/commit/f78be4c))
|
||||||
|
|
||||||
<a name="4.5.6"></a>
|
<a name="4.5.6"></a>
|
||||||
|
|
||||||
@@ -245,7 +277,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **style:** increase the tap targets of menu button, fixed [#325](https://github.com/QingWei-Li/docsify/issues/325) ([888f217](https://github.com/QingWei-Li/docsify/commit/888f217))
|
- **style:** increase the tap targets of menu button, fixed [#325](https://github.com/QingWei-Li/docsify/issues/325) ([888f217](https://github.com/QingWei-Li/docsify/commit/888f217))
|
||||||
|
|
||||||
<a name="4.5.5"></a>
|
<a name="4.5.5"></a>
|
||||||
|
|
||||||
@@ -253,7 +285,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* disqus plugin issue ([#318](https://github.com/QingWei-Li/docsify/issues/318)) ([041b33e](https://github.com/QingWei-Li/docsify/commit/041b33e)), closes [#317](https://github.com/QingWei-Li/docsify/issues/317)
|
- disqus plugin issue ([#318](https://github.com/QingWei-Li/docsify/issues/318)) ([041b33e](https://github.com/QingWei-Li/docsify/commit/041b33e)), closes [#317](https://github.com/QingWei-Li/docsify/issues/317)
|
||||||
|
|
||||||
<a name="4.5.4"></a>
|
<a name="4.5.4"></a>
|
||||||
|
|
||||||
@@ -261,11 +293,11 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **compiler:** task lists style, fixed [#215](https://github.com/QingWei-Li/docsify/issues/215) ([e43ded4](https://github.com/QingWei-Li/docsify/commit/e43ded4))
|
- **compiler:** task lists style, fixed [#215](https://github.com/QingWei-Li/docsify/issues/215) ([e43ded4](https://github.com/QingWei-Li/docsify/commit/e43ded4))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add gitalk plugin ([#306](https://github.com/QingWei-Li/docsify/issues/306)) ([9208e64](https://github.com/QingWei-Li/docsify/commit/9208e64))
|
- add gitalk plugin ([#306](https://github.com/QingWei-Li/docsify/issues/306)) ([9208e64](https://github.com/QingWei-Li/docsify/commit/9208e64))
|
||||||
|
|
||||||
<a name="4.5.3"></a>
|
<a name="4.5.3"></a>
|
||||||
|
|
||||||
@@ -273,7 +305,7 @@
|
|||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add gitalk plugin ([#306](https://github.com/QingWei-Li/docsify/issues/306)) ([9208e64](https://github.com/QingWei-Li/docsify/commit/9208e64))
|
- add gitalk plugin ([#306](https://github.com/QingWei-Li/docsify/issues/306)) ([9208e64](https://github.com/QingWei-Li/docsify/commit/9208e64))
|
||||||
|
|
||||||
<a name="4.5.2"></a>
|
<a name="4.5.2"></a>
|
||||||
|
|
||||||
@@ -281,7 +313,7 @@
|
|||||||
|
|
||||||
### Features
|
### 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))
|
- 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>
|
<a name="4.5.1"></a>
|
||||||
|
|
||||||
@@ -289,7 +321,7 @@
|
|||||||
|
|
||||||
### Features
|
### 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))
|
- 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>
|
<a name="4.5.0"></a>
|
||||||
|
|
||||||
@@ -297,7 +329,7 @@
|
|||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add disqus plugin, closed [#123](https://github.com/QingWei-Li/docsify/issues/123) ([fd7d4e0](https://github.com/QingWei-Li/docsify/commit/fd7d4e0))
|
- 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>
|
<a name="4.4.1"></a>
|
||||||
|
|
||||||
@@ -305,8 +337,8 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* {docsify-ignore-all} and {docsify-ignore} bug ([#299](https://github.com/QingWei-Li/docsify/issues/299)) ([cc98f56](https://github.com/QingWei-Li/docsify/commit/cc98f56))
|
- {docsify-ignore-all} and {docsify-ignore} bug ([#299](https://github.com/QingWei-Li/docsify/issues/299)) ([cc98f56](https://github.com/QingWei-Li/docsify/commit/cc98f56))
|
||||||
* zoom image plugin issue, fixed [#187](https://github.com/QingWei-Li/docsify/issues/187) ([#300](https://github.com/QingWei-Li/docsify/issues/300)) ([fa772cf](https://github.com/QingWei-Li/docsify/commit/fa772cf))
|
- zoom image plugin issue, fixed [#187](https://github.com/QingWei-Li/docsify/issues/187) ([#300](https://github.com/QingWei-Li/docsify/issues/300)) ([fa772cf](https://github.com/QingWei-Li/docsify/commit/fa772cf))
|
||||||
|
|
||||||
<a name="4.4.0"></a>
|
<a name="4.4.0"></a>
|
||||||
|
|
||||||
@@ -314,11 +346,11 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* sidebar style issue on firefox, fixed [#184](https://github.com/QingWei-Li/docsify/issues/184) ([#297](https://github.com/QingWei-Li/docsify/issues/297)) ([36bfc9d](https://github.com/QingWei-Li/docsify/commit/36bfc9d))
|
- sidebar style issue on firefox, fixed [#184](https://github.com/QingWei-Li/docsify/issues/184) ([#297](https://github.com/QingWei-Li/docsify/issues/297)) ([36bfc9d](https://github.com/QingWei-Li/docsify/commit/36bfc9d))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add helper for disabled link, fixed [#295](https://github.com/QingWei-Li/docsify/issues/295) ([#296](https://github.com/QingWei-Li/docsify/issues/296)) ([4ad96f3](https://github.com/QingWei-Li/docsify/commit/4ad96f3))
|
- add helper for disabled link, fixed [#295](https://github.com/QingWei-Li/docsify/issues/295) ([#296](https://github.com/QingWei-Li/docsify/issues/296)) ([4ad96f3](https://github.com/QingWei-Li/docsify/commit/4ad96f3))
|
||||||
|
|
||||||
<a name="4.3.15"></a>
|
<a name="4.3.15"></a>
|
||||||
|
|
||||||
@@ -326,7 +358,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* scroll active sidebar ([a2b8eae](https://github.com/QingWei-Li/docsify/commit/a2b8eae))
|
- scroll active sidebar ([a2b8eae](https://github.com/QingWei-Li/docsify/commit/a2b8eae))
|
||||||
|
|
||||||
<a name="4.3.14"></a>
|
<a name="4.3.14"></a>
|
||||||
|
|
||||||
@@ -334,7 +366,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* codesponsor style ([ab68268](https://github.com/QingWei-Li/docsify/commit/ab68268))
|
- codesponsor style ([ab68268](https://github.com/QingWei-Li/docsify/commit/ab68268))
|
||||||
|
|
||||||
<a name="4.3.13"></a>
|
<a name="4.3.13"></a>
|
||||||
|
|
||||||
@@ -342,11 +374,11 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* duplicate results in search fixed [#257](https://github.com/QingWei-Li/docsify/issues/257) ([#284](https://github.com/QingWei-Li/docsify/issues/284)) ([3476f6f](https://github.com/QingWei-Li/docsify/commit/3476f6f))
|
- duplicate results in search fixed [#257](https://github.com/QingWei-Li/docsify/issues/257) ([#284](https://github.com/QingWei-Li/docsify/issues/284)) ([3476f6f](https://github.com/QingWei-Li/docsify/commit/3476f6f))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* make whole search result clickable ([#285](https://github.com/QingWei-Li/docsify/issues/285)) ([1b91227](https://github.com/QingWei-Li/docsify/commit/1b91227))
|
- make whole search result clickable ([#285](https://github.com/QingWei-Li/docsify/issues/285)) ([1b91227](https://github.com/QingWei-Li/docsify/commit/1b91227))
|
||||||
|
|
||||||
<a name="4.3.12"></a>
|
<a name="4.3.12"></a>
|
||||||
|
|
||||||
@@ -354,7 +386,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* incorrect active link ([#281](https://github.com/QingWei-Li/docsify/issues/281)) ([a3ab379](https://github.com/QingWei-Li/docsify/commit/a3ab379))
|
- incorrect active link ([#281](https://github.com/QingWei-Li/docsify/issues/281)) ([a3ab379](https://github.com/QingWei-Li/docsify/commit/a3ab379))
|
||||||
|
|
||||||
<a name="4.3.11"></a>
|
<a name="4.3.11"></a>
|
||||||
|
|
||||||
@@ -362,7 +394,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* broken links to same page heading, fix [#278](https://github.com/QingWei-Li/docsify/issues/278), fix [#279](https://github.com/QingWei-Li/docsify/issues/279) ([91d6337](https://github.com/QingWei-Li/docsify/commit/91d6337))
|
- broken links to same page heading, fix [#278](https://github.com/QingWei-Li/docsify/issues/278), fix [#279](https://github.com/QingWei-Li/docsify/issues/279) ([91d6337](https://github.com/QingWei-Li/docsify/commit/91d6337))
|
||||||
|
|
||||||
<a name="4.3.10"></a>
|
<a name="4.3.10"></a>
|
||||||
|
|
||||||
@@ -370,7 +402,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* link render issue after page refreshing ([#276](https://github.com/QingWei-Li/docsify/issues/276)) ([abd885e](https://github.com/QingWei-Li/docsify/commit/abd885e))
|
- link render issue after page refreshing ([#276](https://github.com/QingWei-Li/docsify/issues/276)) ([abd885e](https://github.com/QingWei-Li/docsify/commit/abd885e))
|
||||||
|
|
||||||
<a name="4.3.9"></a>
|
<a name="4.3.9"></a>
|
||||||
|
|
||||||
@@ -378,7 +410,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* scroll issue in IE ([#275](https://github.com/QingWei-Li/docsify/issues/275)) ([3e94cb6](https://github.com/QingWei-Li/docsify/commit/3e94cb6))
|
- scroll issue in IE ([#275](https://github.com/QingWei-Li/docsify/issues/275)) ([3e94cb6](https://github.com/QingWei-Li/docsify/commit/3e94cb6))
|
||||||
|
|
||||||
<a name="4.3.8"></a>
|
<a name="4.3.8"></a>
|
||||||
|
|
||||||
@@ -386,7 +418,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **slugify:** GitHub compatible heading links, fixed [#272](https://github.com/QingWei-Li/docsify/issues/272) ([9b4e666](https://github.com/QingWei-Li/docsify/commit/9b4e666))
|
- **slugify:** GitHub compatible heading links, fixed [#272](https://github.com/QingWei-Li/docsify/issues/272) ([9b4e666](https://github.com/QingWei-Li/docsify/commit/9b4e666))
|
||||||
|
|
||||||
<a name="4.3.7"></a>
|
<a name="4.3.7"></a>
|
||||||
|
|
||||||
@@ -394,7 +426,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **slugify:** GitHub compatible heading links, fixed [#267](https://github.com/QingWei-Li/docsify/issues/267) ([c195d2d](https://github.com/QingWei-Li/docsify/commit/c195d2d))
|
- **slugify:** GitHub compatible heading links, fixed [#267](https://github.com/QingWei-Li/docsify/issues/267) ([c195d2d](https://github.com/QingWei-Li/docsify/commit/c195d2d))
|
||||||
|
|
||||||
<a name="4.3.6"></a>
|
<a name="4.3.6"></a>
|
||||||
|
|
||||||
@@ -402,7 +434,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* style for codesponsor plugin ([08afec7](https://github.com/QingWei-Li/docsify/commit/08afec7))
|
- style for codesponsor plugin ([08afec7](https://github.com/QingWei-Li/docsify/commit/08afec7))
|
||||||
|
|
||||||
<a name="4.3.5"></a>
|
<a name="4.3.5"></a>
|
||||||
|
|
||||||
@@ -410,11 +442,11 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* missed symbol ([#254](https://github.com/QingWei-Li/docsify/issues/254)) ([6c702d3](https://github.com/QingWei-Li/docsify/commit/6c702d3))
|
- missed symbol ([#254](https://github.com/QingWei-Li/docsify/issues/254)) ([6c702d3](https://github.com/QingWei-Li/docsify/commit/6c702d3))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* **plugin:** add codesponsor plugin ([46ac4c3](https://github.com/QingWei-Li/docsify/commit/46ac4c3))
|
- **plugin:** add codesponsor plugin ([46ac4c3](https://github.com/QingWei-Li/docsify/commit/46ac4c3))
|
||||||
|
|
||||||
<a name="4.3.4"></a>
|
<a name="4.3.4"></a>
|
||||||
|
|
||||||
@@ -422,7 +454,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* scroll position issue, fixed [#234](https://github.com/QingWei-Li/docsify/issues/234) ([388ed3d](https://github.com/QingWei-Li/docsify/commit/388ed3d))
|
- scroll position issue, fixed [#234](https://github.com/QingWei-Li/docsify/issues/234) ([388ed3d](https://github.com/QingWei-Li/docsify/commit/388ed3d))
|
||||||
|
|
||||||
<a name="4.3.3"></a>
|
<a name="4.3.3"></a>
|
||||||
|
|
||||||
@@ -430,11 +462,11 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **buble.css:** tweaks code block style, fixed [#249](https://github.com/QingWei-Li/docsify/issues/249) ([9d43051](https://github.com/QingWei-Li/docsify/commit/9d43051))
|
- **buble.css:** tweaks code block style, fixed [#249](https://github.com/QingWei-Li/docsify/issues/249) ([9d43051](https://github.com/QingWei-Li/docsify/commit/9d43051))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add doc for react and vue demo box plugin ([#247](https://github.com/QingWei-Li/docsify/issues/247)) ([f0aca19](https://github.com/QingWei-Li/docsify/commit/f0aca19))
|
- add doc for react and vue demo box plugin ([#247](https://github.com/QingWei-Li/docsify/issues/247)) ([f0aca19](https://github.com/QingWei-Li/docsify/commit/f0aca19))
|
||||||
|
|
||||||
<a name="4.3.2"></a>
|
<a name="4.3.2"></a>
|
||||||
|
|
||||||
@@ -442,11 +474,11 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* sidebar highlight ([f82f419](https://github.com/QingWei-Li/docsify/commit/f82f419))
|
- sidebar highlight ([f82f419](https://github.com/QingWei-Li/docsify/commit/f82f419))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add Edit on github plugin (thanks [@njleonzhang](https://github.com/njleonzhang)) ([a0e1ea8](https://github.com/QingWei-Li/docsify/commit/a0e1ea8))
|
- add Edit on github plugin (thanks [@njleonzhang](https://github.com/njleonzhang)) ([a0e1ea8](https://github.com/QingWei-Li/docsify/commit/a0e1ea8))
|
||||||
|
|
||||||
<a name="4.3.1"></a>
|
<a name="4.3.1"></a>
|
||||||
|
|
||||||
@@ -454,7 +486,7 @@
|
|||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* **markdown:** supports mermaid [#137](https://github.com/QingWei-Li/docsify/issues/137) ([f4800e0](https://github.com/QingWei-Li/docsify/commit/f4800e0))
|
- **markdown:** supports mermaid [#137](https://github.com/QingWei-Li/docsify/issues/137) ([f4800e0](https://github.com/QingWei-Li/docsify/commit/f4800e0))
|
||||||
|
|
||||||
<a name="4.3.0"></a>
|
<a name="4.3.0"></a>
|
||||||
|
|
||||||
@@ -462,7 +494,7 @@
|
|||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* **markdown:** supports mermaid [#137](https://github.com/QingWei-Li/docsify/issues/137) ([f4800e0](https://github.com/QingWei-Li/docsify/commit/f4800e0))
|
- **markdown:** supports mermaid [#137](https://github.com/QingWei-Li/docsify/issues/137) ([f4800e0](https://github.com/QingWei-Li/docsify/commit/f4800e0))
|
||||||
|
|
||||||
<a name="4.2.9"></a>
|
<a name="4.2.9"></a>
|
||||||
|
|
||||||
@@ -470,7 +502,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* ensure document ready before init Docsify [#233](https://github.com/QingWei-Li/docsify/issues/233)
|
- ensure document ready before init Docsify [#233](https://github.com/QingWei-Li/docsify/issues/233)
|
||||||
|
|
||||||
<a name="4.2.8"></a>
|
<a name="4.2.8"></a>
|
||||||
|
|
||||||
@@ -478,7 +510,7 @@
|
|||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* **compiler:** support for setting target attribute for link, fixed [#230](https://github.com/QingWei-Li/docsify/issues/230) ([7f270f9](https://github.com/QingWei-Li/docsify/commit/7f270f9))
|
- **compiler:** support for setting target attribute for link, fixed [#230](https://github.com/QingWei-Li/docsify/issues/230) ([7f270f9](https://github.com/QingWei-Li/docsify/commit/7f270f9))
|
||||||
|
|
||||||
<a name="4.2.7"></a>
|
<a name="4.2.7"></a>
|
||||||
|
|
||||||
@@ -486,8 +518,8 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **release:** release shell ([628e211](https://github.com/QingWei-Li/docsify/commit/628e211))
|
- **release:** release shell ([628e211](https://github.com/QingWei-Li/docsify/commit/628e211))
|
||||||
* **style:** nowrap => pre-wrap, fixed [#228](https://github.com/QingWei-Li/docsify/issues/228) ([a88252c](https://github.com/QingWei-Li/docsify/commit/a88252c))
|
- **style:** nowrap => pre-wrap, fixed [#228](https://github.com/QingWei-Li/docsify/issues/228) ([a88252c](https://github.com/QingWei-Li/docsify/commit/a88252c))
|
||||||
|
|
||||||
<a name="4.2.6"></a>
|
<a name="4.2.6"></a>
|
||||||
|
|
||||||
@@ -495,8 +527,8 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **css:** hide the nav when the content has not yet been loaded ([1fa1619](https://github.com/QingWei-Li/docsify/commit/1fa1619))
|
- **css:** hide the nav when the content has not yet been loaded ([1fa1619](https://github.com/QingWei-Li/docsify/commit/1fa1619))
|
||||||
* **release:** release shell ([628e211](https://github.com/QingWei-Li/docsify/commit/628e211))
|
- **release:** release shell ([628e211](https://github.com/QingWei-Li/docsify/commit/628e211))
|
||||||
|
|
||||||
<a name="4.2.4"></a>
|
<a name="4.2.4"></a>
|
||||||
|
|
||||||
@@ -504,7 +536,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **render:** Remove getRootNode to be compatible with the lower version of Chrome, fixed [#225](https://github.com/QingWei-Li/docsify/issues/225) ([b8dd346](https://github.com/QingWei-Li/docsify/commit/b8dd346))
|
- **render:** Remove getRootNode to be compatible with the lower version of Chrome, fixed [#225](https://github.com/QingWei-Li/docsify/issues/225) ([b8dd346](https://github.com/QingWei-Li/docsify/commit/b8dd346))
|
||||||
|
|
||||||
<a name="4.2.3"></a>
|
<a name="4.2.3"></a>
|
||||||
|
|
||||||
@@ -512,7 +544,7 @@
|
|||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* **search:** Supports the max depth of the search headline, fixed [#223](https://github.com/QingWei-Li/docsify/issues/223), resolve [#129](https://github.com/QingWei-Li/docsify/issues/129) ([b7b589b](https://github.com/QingWei-Li/docsify/commit/b7b589b))
|
- **search:** Supports the max depth of the search headline, fixed [#223](https://github.com/QingWei-Li/docsify/issues/223), resolve [#129](https://github.com/QingWei-Li/docsify/issues/129) ([b7b589b](https://github.com/QingWei-Li/docsify/commit/b7b589b))
|
||||||
|
|
||||||
<a name="4.2.2"></a>
|
<a name="4.2.2"></a>
|
||||||
|
|
||||||
@@ -520,14 +552,14 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* style rerender due to setting themeColor ([17ff3d1](https://github.com/QingWei-Li/docsify/commit/17ff3d1))
|
- style rerender due to setting themeColor ([17ff3d1](https://github.com/QingWei-Li/docsify/commit/17ff3d1))
|
||||||
|
|
||||||
<a name="4.2.1"></a>
|
<a name="4.2.1"></a>
|
||||||
|
|
||||||
## [4.2.1](https://github.com/QingWei-Li/docsify/compare/v4.2.0...v4.2.1) (2017-07-19)
|
## [4.2.1](https://github.com/QingWei-Li/docsify/compare/v4.2.0...v4.2.1) (2017-07-19)
|
||||||
|
|
||||||
* give the navbar some line-height (#216)
|
- give the navbar some line-height (#216)
|
||||||
* Remove unnecessary moduleName option from rollup config for plugins (#209)
|
- Remove unnecessary moduleName option from rollup config for plugins (#209)
|
||||||
|
|
||||||
<a name="4.2.0"></a>
|
<a name="4.2.0"></a>
|
||||||
|
|
||||||
@@ -535,12 +567,12 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* not found page ([9af8559](https://github.com/QingWei-Li/docsify/commit/9af8559))
|
- not found page ([9af8559](https://github.com/QingWei-Li/docsify/commit/9af8559))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* alias option supports regexp, resolve [#183](https://github.com/QingWei-Li/docsify/issues/183) ([c4aa22c](https://github.com/QingWei-Li/docsify/commit/c4aa22c))
|
- alias option supports regexp, resolve [#183](https://github.com/QingWei-Li/docsify/issues/183) ([c4aa22c](https://github.com/QingWei-Li/docsify/commit/c4aa22c))
|
||||||
* ignore to compiled link, fixed [#203](https://github.com/QingWei-Li/docsify/issues/203) ([#204](https://github.com/QingWei-Li/docsify/issues/204)) ([2e00f4c](https://github.com/QingWei-Li/docsify/commit/2e00f4c))
|
- ignore to compiled link, fixed [#203](https://github.com/QingWei-Li/docsify/issues/203) ([#204](https://github.com/QingWei-Li/docsify/issues/204)) ([2e00f4c](https://github.com/QingWei-Li/docsify/commit/2e00f4c))
|
||||||
|
|
||||||
<a name="4.1.14"></a>
|
<a name="4.1.14"></a>
|
||||||
|
|
||||||
@@ -548,11 +580,11 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* get file path, fixed jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13#commitcomment-22427070 ([e8117e5](https://github.com/QingWei-Li/docsify/commit/e8117e5)), closes [jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13#commitcomment-22427070](https://github.com/jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13/issues/commitcomment-22427070)
|
- get file path, fixed jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13#commitcomment-22427070 ([e8117e5](https://github.com/QingWei-Li/docsify/commit/e8117e5)), closes [jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13#commitcomment-22427070](https://github.com/jrappen/sublime-distractionless/commit/81bfadd391428823191cc03eca956a2312e04d13/issues/commitcomment-22427070)
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add context attribute, fixed [#191](https://github.com/QingWei-Li/docsify/issues/191) ([ce0e9ac](https://github.com/QingWei-Li/docsify/commit/ce0e9ac))
|
- add context attribute, fixed [#191](https://github.com/QingWei-Li/docsify/issues/191) ([ce0e9ac](https://github.com/QingWei-Li/docsify/commit/ce0e9ac))
|
||||||
|
|
||||||
<a name="4.1.13"></a>
|
<a name="4.1.13"></a>
|
||||||
|
|
||||||
@@ -564,7 +596,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **render:** subtitle in side bar shows undefined, fixed [#182](https://github.com/QingWei-Li/docsify/issues/182) ([d087d57](https://github.com/QingWei-Li/docsify/commit/d087d57))
|
- **render:** subtitle in side bar shows undefined, fixed [#182](https://github.com/QingWei-Li/docsify/issues/182) ([d087d57](https://github.com/QingWei-Li/docsify/commit/d087d57))
|
||||||
|
|
||||||
<a name="4.1.11"></a>
|
<a name="4.1.11"></a>
|
||||||
|
|
||||||
@@ -572,8 +604,8 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **compiler:** force reset toc when rendering sidebar fixed [#181](https://github.com/QingWei-Li/docsify/issues/181) ([ccf4c7c](https://github.com/QingWei-Li/docsify/commit/ccf4c7c))
|
- **compiler:** force reset toc when rendering sidebar fixed [#181](https://github.com/QingWei-Li/docsify/issues/181) ([ccf4c7c](https://github.com/QingWei-Li/docsify/commit/ccf4c7c))
|
||||||
* **render:** autoHeader does not work ([1304d2e](https://github.com/QingWei-Li/docsify/commit/1304d2e))
|
- **render:** autoHeader does not work ([1304d2e](https://github.com/QingWei-Li/docsify/commit/1304d2e))
|
||||||
|
|
||||||
<a name="4.1.10"></a>
|
<a name="4.1.10"></a>
|
||||||
|
|
||||||
@@ -581,7 +613,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **hash:** hash routing crashes when url has querystring ([6d48ce1](https://github.com/QingWei-Li/docsify/commit/6d48ce1))
|
- **hash:** hash routing crashes when url has querystring ([6d48ce1](https://github.com/QingWei-Li/docsify/commit/6d48ce1))
|
||||||
|
|
||||||
<a name="4.1.9"></a>
|
<a name="4.1.9"></a>
|
||||||
|
|
||||||
@@ -589,9 +621,9 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* can't render toc on first load ([d9b487e](https://github.com/QingWei-Li/docsify/commit/d9b487e))
|
- can't render toc on first load ([d9b487e](https://github.com/QingWei-Li/docsify/commit/d9b487e))
|
||||||
* **lifecycle:** continue to handle data ([955d3d5](https://github.com/QingWei-Li/docsify/commit/955d3d5))
|
- **lifecycle:** continue to handle data ([955d3d5](https://github.com/QingWei-Li/docsify/commit/955d3d5))
|
||||||
* **render:** broken name link, fixed [#167](https://github.com/QingWei-Li/docsify/issues/167) ([91b66a5](https://github.com/QingWei-Li/docsify/commit/91b66a5))
|
- **render:** broken name link, fixed [#167](https://github.com/QingWei-Li/docsify/issues/167) ([91b66a5](https://github.com/QingWei-Li/docsify/commit/91b66a5))
|
||||||
|
|
||||||
<a name="4.1.8"></a>
|
<a name="4.1.8"></a>
|
||||||
|
|
||||||
@@ -599,13 +631,13 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* auto replace version ([22b50f0](https://github.com/QingWei-Li/docsify/commit/22b50f0))
|
- auto replace version ([22b50f0](https://github.com/QingWei-Li/docsify/commit/22b50f0))
|
||||||
* update edit button demo ([ec887c1](https://github.com/QingWei-Li/docsify/commit/ec887c1))
|
- update edit button demo ([ec887c1](https://github.com/QingWei-Li/docsify/commit/ec887c1))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add edit button demo ([a64cee1](https://github.com/QingWei-Li/docsify/commit/a64cee1))
|
- add edit button demo ([a64cee1](https://github.com/QingWei-Li/docsify/commit/a64cee1))
|
||||||
* add edit button demo, close [#162](https://github.com/QingWei-Li/docsify/issues/162) ([036fdac](https://github.com/QingWei-Li/docsify/commit/036fdac))
|
- add edit button demo, close [#162](https://github.com/QingWei-Li/docsify/issues/162) ([036fdac](https://github.com/QingWei-Li/docsify/commit/036fdac))
|
||||||
|
|
||||||
<a name="4.1.7"></a>
|
<a name="4.1.7"></a>
|
||||||
|
|
||||||
@@ -613,7 +645,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **ssr:** clean files ([0014895](https://github.com/QingWei-Li/docsify/commit/0014895))
|
- **ssr:** clean files ([0014895](https://github.com/QingWei-Li/docsify/commit/0014895))
|
||||||
|
|
||||||
<a name="4.1.6"></a>
|
<a name="4.1.6"></a>
|
||||||
|
|
||||||
@@ -621,7 +653,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **ssr:** add debug ([6b9e092](https://github.com/QingWei-Li/docsify/commit/6b9e092))
|
- **ssr:** add debug ([6b9e092](https://github.com/QingWei-Li/docsify/commit/6b9e092))
|
||||||
|
|
||||||
<a name="4.1.5"></a>
|
<a name="4.1.5"></a>
|
||||||
|
|
||||||
@@ -629,7 +661,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **ssr:** missing package ([6db8c9e](https://github.com/QingWei-Li/docsify/commit/6db8c9e))
|
- **ssr:** missing package ([6db8c9e](https://github.com/QingWei-Li/docsify/commit/6db8c9e))
|
||||||
|
|
||||||
<a name="4.1.4"></a>
|
<a name="4.1.4"></a>
|
||||||
|
|
||||||
@@ -637,7 +669,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **ssr:** file path ([79a83bc](https://github.com/QingWei-Li/docsify/commit/79a83bc))
|
- **ssr:** file path ([79a83bc](https://github.com/QingWei-Li/docsify/commit/79a83bc))
|
||||||
|
|
||||||
<a name="4.1.3"></a>
|
<a name="4.1.3"></a>
|
||||||
|
|
||||||
@@ -645,7 +677,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* update babel config ([9825db4](https://github.com/QingWei-Li/docsify/commit/9825db4))
|
- update babel config ([9825db4](https://github.com/QingWei-Li/docsify/commit/9825db4))
|
||||||
|
|
||||||
<a name="4.1.2"></a>
|
<a name="4.1.2"></a>
|
||||||
|
|
||||||
@@ -653,7 +685,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* update babel config ([80dba19](https://github.com/QingWei-Li/docsify/commit/80dba19))
|
- update babel config ([80dba19](https://github.com/QingWei-Li/docsify/commit/80dba19))
|
||||||
|
|
||||||
<a name="4.1.1"></a>
|
<a name="4.1.1"></a>
|
||||||
|
|
||||||
@@ -661,8 +693,8 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* build for ssr package ([4cb20a5](https://github.com/QingWei-Li/docsify/commit/4cb20a5))
|
- build for ssr package ([4cb20a5](https://github.com/QingWei-Li/docsify/commit/4cb20a5))
|
||||||
* remove history mode ([0e74e6c](https://github.com/QingWei-Li/docsify/commit/0e74e6c))
|
- remove history mode ([0e74e6c](https://github.com/QingWei-Li/docsify/commit/0e74e6c))
|
||||||
|
|
||||||
<a name="4.1.0"></a>
|
<a name="4.1.0"></a>
|
||||||
|
|
||||||
@@ -674,7 +706,7 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* basePath for history mode ([fc1cd3f](https://github.com/QingWei-Li/docsify/commit/fc1cd3f))
|
- basePath for history mode ([fc1cd3f](https://github.com/QingWei-Li/docsify/commit/fc1cd3f))
|
||||||
|
|
||||||
<a name="4.0.1"></a>
|
<a name="4.0.1"></a>
|
||||||
|
|
||||||
@@ -682,8 +714,8 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **ssr:** remove context ([4626157](https://github.com/QingWei-Li/docsify/commit/4626157))
|
- **ssr:** remove context ([4626157](https://github.com/QingWei-Li/docsify/commit/4626157))
|
||||||
* lint ([b764b6e](https://github.com/QingWei-Li/docsify/commit/b764b6e))
|
- lint ([b764b6e](https://github.com/QingWei-Li/docsify/commit/b764b6e))
|
||||||
|
|
||||||
<a name="4.0.0"></a>
|
<a name="4.0.0"></a>
|
||||||
|
|
||||||
@@ -691,11 +723,11 @@
|
|||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* **render:** init event in ssr ([eba1c98](https://github.com/QingWei-Li/docsify/commit/eba1c98))
|
- **render:** init event in ssr ([eba1c98](https://github.com/QingWei-Li/docsify/commit/eba1c98))
|
||||||
* lint ([1f4514d](https://github.com/QingWei-Li/docsify/commit/1f4514d))
|
- lint ([1f4514d](https://github.com/QingWei-Li/docsify/commit/1f4514d))
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* finish ssr ([3444884](https://github.com/QingWei-Li/docsify/commit/3444884))
|
- finish ssr ([3444884](https://github.com/QingWei-Li/docsify/commit/3444884))
|
||||||
* init ocsify-server-renderer ([6dea685](https://github.com/QingWei-Li/docsify/commit/6dea685))
|
- init ocsify-server-renderer ([6dea685](https://github.com/QingWei-Li/docsify/commit/6dea685))
|
||||||
* support history mode ([f095eb8](https://github.com/QingWei-Li/docsify/commit/f095eb8))
|
- support history mode ([f095eb8](https://github.com/QingWei-Li/docsify/commit/f095eb8))
|
||||||
|
|||||||
@@ -46,7 +46,9 @@
|
|||||||
|
|
||||||
## Quick start
|
## Quick start
|
||||||
|
|
||||||
Look at [this tutorial](https://docsify.js.org/#/quickstart) or [online demo](https://jsfiddle.net/7ztb8qsr/1/).
|
Look at [this tutorial](https://docsify.js.org/#/quickstart)
|
||||||
|
|
||||||
|
[](https://codesandbox.io/s/307qqv236)
|
||||||
|
|
||||||
## Showcase
|
## Showcase
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||

|

|
||||||
|
|
||||||
# docsify <small>4.8.2</small>
|
# docsify <small>4.9.1</small>
|
||||||
|
|
||||||
> A magical documentation site generator.
|
> A magical documentation site generator.
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import fetch from 'fetch'
|
||||||
|
|
||||||
|
const URL = 'https://example.com'
|
||||||
|
const PORT = 8080
|
||||||
|
|
||||||
|
/// [demo]
|
||||||
|
const result = fetch(`${URL}:${PORT}`)
|
||||||
|
.then(function(response) {
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(function(myJson) {
|
||||||
|
console.log(JSON.stringify(myJson));
|
||||||
|
});
|
||||||
|
/// [demo]
|
||||||
|
|
||||||
|
result.then(console.log).catch(console.error)
|
||||||
@@ -150,6 +150,46 @@ window.$docsify = {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## relativePath
|
||||||
|
|
||||||
|
- Type: `Boolean`
|
||||||
|
- Default: `false`
|
||||||
|
|
||||||
|
If **true** links are relative to the current context.
|
||||||
|
|
||||||
|
For example, the directory structure is as follows:
|
||||||
|
|
||||||
|
```text
|
||||||
|
.
|
||||||
|
└── docs
|
||||||
|
├── README.md
|
||||||
|
├── guide.md
|
||||||
|
└── zh-cn
|
||||||
|
├── README.md
|
||||||
|
├── guide.md
|
||||||
|
└── config
|
||||||
|
└── example.md
|
||||||
|
```
|
||||||
|
|
||||||
|
With relative path **enabled** and current URL `http://domain.com/zh-cn/README`, given links will resolve to:
|
||||||
|
|
||||||
|
```text
|
||||||
|
guide.md => http://domain.com/zh-cn/guide
|
||||||
|
config/example.md => http://domain.com/zh-cn/config/example
|
||||||
|
../README.md => http://domain.com/README
|
||||||
|
/README.md => http://domain.com/README
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
window.$docsify = {
|
||||||
|
// Relative path enabled
|
||||||
|
relativePath: true,
|
||||||
|
|
||||||
|
// Relative path disabled (default value)
|
||||||
|
relativePath: false
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
## coverpage
|
## coverpage
|
||||||
|
|
||||||
- Type: `Boolean|String|String[]|Object`
|
- Type: `Boolean|String|String[]|Object`
|
||||||
|
|||||||
@@ -87,3 +87,45 @@ When using the HTML5 router, you need to set up redirect rules that redirect all
|
|||||||
```sh
|
```sh
|
||||||
/* /index.html 200
|
/* /index.html 200
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## AWS Amplify
|
||||||
|
|
||||||
|
1. Set the routerMode in the Docsify project `index.html` to *history* mode.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script>
|
||||||
|
window.$docsify = {
|
||||||
|
loadSidebar: true,
|
||||||
|
routerMode: 'history'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Login to your [AWS Console](https://aws.amazon.com).
|
||||||
|
3. Go to the [AWS Amplify Dashboard](https://aws.amazon.com/amplify).
|
||||||
|
4. Choose the **Deploy** route to setup your project.
|
||||||
|
5. When prompted, keep the build settings empty if you're serving your docs within the root directory. If you're serving your docs from a different directory, customise your amplify.yml
|
||||||
|
|
||||||
|
```yml
|
||||||
|
version: 0.1
|
||||||
|
frontend:
|
||||||
|
phases:
|
||||||
|
build:
|
||||||
|
commands:
|
||||||
|
- echo "Nothing to build"
|
||||||
|
artifacts:
|
||||||
|
baseDirectory: /docs
|
||||||
|
files:
|
||||||
|
- '**/*'
|
||||||
|
cache:
|
||||||
|
paths: []
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Add the following Redirect rules in their displayed order.
|
||||||
|
|
||||||
|
| Source address | Target address | Type |
|
||||||
|
|----------------|----------------|---------------|
|
||||||
|
| /<*>.md | /<*>.md | 200 (Rewrite) |
|
||||||
|
| /<*> | /index.html | 200 (Rewrite) |
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,21 @@ You will get it
|
|||||||
|
|
||||||
[filename](_media/example.md ':include :type=code')
|
[filename](_media/example.md ':include :type=code')
|
||||||
|
|
||||||
|
## Embedded code fragments
|
||||||
|
Sometimes you don't want to embed a whole file. Maybe because you need just a few lines but you want to compile and test the file in CI.
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
[filename](_media/example.js ':include :type=code :fragment=demo')
|
||||||
|
```
|
||||||
|
|
||||||
|
In your code file you need to surround the fragment between `/// [demo]` lines (before and after the fragment).
|
||||||
|
Alternatively you can use `### [demo]`.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
[filename](_media/example.js ':include :type=code :fragment=demo')
|
||||||
|
|
||||||
|
|
||||||
## Tag attribute
|
## Tag attribute
|
||||||
|
|
||||||
If you embed the file as `iframe`, `audio` and `video`, then you may need to set the attributes of these tags.
|
If you embed the file as `iframe`, `audio` and `video`, then you may need to set the attributes of these tags.
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
|
|||||||

|

|
||||||
|
|
||||||
<!-- Support percentage -->
|
<!-- Support percentage -->
|
||||||
|
|
||||||

|

|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -100,3 +101,45 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
|
|||||||
```md
|
```md
|
||||||
### 你好,世界! :id=hello-world
|
### 你好,世界! :id=hello-world
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Markdown in html tag
|
||||||
|
|
||||||
|
You need to insert a space between the html and markdown content.
|
||||||
|
This is useful for rendering markdown content in the details element.
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
<details>
|
||||||
|
<summary>Self-assessment (Click to expand)</summary>
|
||||||
|
|
||||||
|
- Abc
|
||||||
|
- Abc
|
||||||
|
|
||||||
|
</details>
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Self-assessment (Click to expand)</summary>
|
||||||
|
|
||||||
|
- Abc
|
||||||
|
- Abc
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
Or markdown content can be wrapped in html tag.
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
<div style='color: red'>
|
||||||
|
|
||||||
|
- listitem
|
||||||
|
- listitem
|
||||||
|
- listitem
|
||||||
|
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
<div style='color: red'>
|
||||||
|
|
||||||
|
- Abc
|
||||||
|
- Abc
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|||||||
+2
-1
@@ -36,6 +36,7 @@ window.$docsify = {
|
|||||||
// <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.css">
|
// <link rel="stylesheet" href="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.css">
|
||||||
// <script src="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
// <script src="//cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
|
||||||
|
|
||||||
|
var num = 0;
|
||||||
mermaid.initialize({ startOnLoad: false });
|
mermaid.initialize({ startOnLoad: false });
|
||||||
|
|
||||||
window.$docsify = {
|
window.$docsify = {
|
||||||
@@ -44,7 +45,7 @@ window.$docsify = {
|
|||||||
code: function(code, lang) {
|
code: function(code, lang) {
|
||||||
if (lang === "mermaid") {
|
if (lang === "mermaid") {
|
||||||
return (
|
return (
|
||||||
'<div class="mermaid">' + mermaid.render(lang, code) + "</div>"
|
'<div class="mermaid">' + mermaid.render('mermaid-svg-' + num++, code) + "</div>"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return this.origin.code.apply(this, arguments);
|
return this.origin.code.apply(this, arguments);
|
||||||
|
|||||||
@@ -72,6 +72,16 @@ You can specify `alias` to avoid unnecessary fallback.
|
|||||||
|
|
||||||
!> You can create a `README.md` file in a subdirectory to use it as the landing page for the route.
|
!> You can create a `README.md` file in a subdirectory to use it as the landing page for the route.
|
||||||
|
|
||||||
|
## Set Page Titles from Sidebar Selection
|
||||||
|
|
||||||
|
A page's `title` tag is generated from the _selected_ sidebar item name. For better SEO, you can customize the title by specifying a string after the filename.
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
<!-- docs/_sidebar.md -->
|
||||||
|
* [Home](/)
|
||||||
|
* [Guide](guide.md "The greatest guide in the world")
|
||||||
|
```
|
||||||
|
|
||||||
## Table of Contents
|
## Table of Contents
|
||||||
|
|
||||||
Once you've created `_sidebar.md`, the sidebar content is automatically generated based on the headers in the markdown files.
|
Once you've created `_sidebar.md`, the sidebar content is automatically generated based on the headers in the markdown files.
|
||||||
|
|||||||
+10
-2
@@ -40,6 +40,10 @@ By default, the hyperlink on the current page is recognized and the content is s
|
|||||||
depth: 2,
|
depth: 2,
|
||||||
|
|
||||||
hideOtherSidebarContent: false, // whether or not to hide other sidebar content
|
hideOtherSidebarContent: false, // whether or not to hide other sidebar content
|
||||||
|
|
||||||
|
// To avoid search index collision
|
||||||
|
// between multiple websites under the same domain
|
||||||
|
namespace: 'website-1',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -95,7 +99,7 @@ Medium's image zoom. Based on [medium-zoom](https://github.com/francoischalifour
|
|||||||
Exclude the special image
|
Exclude the special image
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||

|

|
||||||
```
|
```
|
||||||
|
|
||||||
## Edit on github
|
## Edit on github
|
||||||
@@ -184,6 +188,10 @@ window.$docsify = {
|
|||||||
|
|
||||||
A docsify.js plugin for displaying tabbed content from markdown.
|
A docsify.js plugin for displaying tabbed content from markdown.
|
||||||
|
|
||||||
* [Documentation & Demos](https://jhildenbiddle.github.io/docsify-tabs)
|
- [Documentation & Demos](https://jhildenbiddle.github.io/docsify-tabs)
|
||||||
|
|
||||||
Provided by [@jhildenbiddle](https://github.com/jhildenbiddle/docsify-tabs).
|
Provided by [@jhildenbiddle](https://github.com/jhildenbiddle/docsify-tabs).
|
||||||
|
|
||||||
|
## More plugins
|
||||||
|
|
||||||
|
See [awesome-docsify](awesome?id=plugins)
|
||||||
|
|||||||
+1
-1
@@ -111,7 +111,7 @@ var readFileSync = require('fs').readFileSync
|
|||||||
|
|
||||||
// init
|
// init
|
||||||
var renderer = new Renderer({
|
var renderer = new Renderer({
|
||||||
template: readFileSync('./docs/index.template.html', 'utf-8').,
|
template: readFileSync('./docs/index.template.html', 'utf-8'),
|
||||||
config: {
|
config: {
|
||||||
name: 'docsify',
|
name: 'docsify',
|
||||||
repo: 'docsifyjs/docsify'
|
repo: 'docsifyjs/docsify'
|
||||||
|
|||||||
+40
-22
@@ -10,37 +10,37 @@ window.$docsify = {
|
|||||||
function(hook, vm) {
|
function(hook, vm) {
|
||||||
hook.init(function() {
|
hook.init(function() {
|
||||||
// Called when the script starts running, only trigger once, no arguments,
|
// Called when the script starts running, only trigger once, no arguments,
|
||||||
})
|
});
|
||||||
|
|
||||||
hook.beforeEach(function(content) {
|
hook.beforeEach(function(content) {
|
||||||
// Invoked each time before parsing the Markdown file.
|
// Invoked each time before parsing the Markdown file.
|
||||||
// ...
|
// ...
|
||||||
return content
|
return content;
|
||||||
})
|
});
|
||||||
|
|
||||||
hook.afterEach(function(html, next) {
|
hook.afterEach(function(html, next) {
|
||||||
// Invoked each time after the Markdown file is parsed.
|
// Invoked each time after the Markdown file is parsed.
|
||||||
// beforeEach and afterEach support asynchronous。
|
// beforeEach and afterEach support asynchronous。
|
||||||
// ...
|
// ...
|
||||||
// call `next(html)` when task is done.
|
// call `next(html)` when task is done.
|
||||||
next(html)
|
next(html);
|
||||||
})
|
});
|
||||||
|
|
||||||
hook.doneEach(function() {
|
hook.doneEach(function() {
|
||||||
// Invoked each time after the data is fully loaded, no arguments,
|
// Invoked each time after the data is fully loaded, no arguments,
|
||||||
// ...
|
// ...
|
||||||
})
|
});
|
||||||
|
|
||||||
hook.mounted(function() {
|
hook.mounted(function() {
|
||||||
// Called after initial completion. Only trigger once, no arguments.
|
// Called after initial completion. Only trigger once, no arguments.
|
||||||
})
|
});
|
||||||
|
|
||||||
hook.ready(function() {
|
hook.ready(function() {
|
||||||
// Called after initial completion, no arguments.
|
// Called after initial completion, no arguments.
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
!> You can get internal methods through `window.Docsify`. Get the current instance through the second argument.
|
!> You can get internal methods through `window.Docsify`. Get the current instance through the second argument.
|
||||||
@@ -61,14 +61,14 @@ window.$docsify = {
|
|||||||
'<span><a href="https://github.com/QingWei-Li">cinwell</a> ©2017.</span>',
|
'<span><a href="https://github.com/QingWei-Li">cinwell</a> ©2017.</span>',
|
||||||
'<span>Proudly published with <a href="https://github.com/docsifyjs/docsify" target="_blank">docsify</a>.</span>',
|
'<span>Proudly published with <a href="https://github.com/docsifyjs/docsify" target="_blank">docsify</a>.</span>',
|
||||||
'</footer>'
|
'</footer>'
|
||||||
].join('')
|
].join('');
|
||||||
|
|
||||||
hook.afterEach(function(html) {
|
hook.afterEach(function(html) {
|
||||||
return html + footer
|
return html + footer;
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
### Edit Button
|
### Edit Button
|
||||||
@@ -78,16 +78,34 @@ window.$docsify = {
|
|||||||
plugins: [
|
plugins: [
|
||||||
function(hook, vm) {
|
function(hook, vm) {
|
||||||
hook.beforeEach(function(html) {
|
hook.beforeEach(function(html) {
|
||||||
var url = 'https://github.com/docsifyjs/docsify/blob/master/docs' + vm.route.file
|
var url =
|
||||||
var editHtml = '[📝 EDIT DOCUMENT](' + url + ')\n'
|
'https://github.com/docsifyjs/docsify/blob/master/docs/' +
|
||||||
|
vm.route.file;
|
||||||
|
var editHtml = '[📝 EDIT DOCUMENT](' + url + ')\n';
|
||||||
|
|
||||||
return editHtml
|
return (
|
||||||
+ html
|
editHtml +
|
||||||
+ '\n----\n'
|
html +
|
||||||
+ 'Last modified {docsify-updated} '
|
'\n----\n' +
|
||||||
+ editHtml
|
'Last modified {docsify-updated} ' +
|
||||||
})
|
editHtml
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
### Get docsify version
|
||||||
|
|
||||||
|
```
|
||||||
|
console.log(window.Docsify.version)
|
||||||
|
```
|
||||||
|
|
||||||
|
Current version: <span id='tip-version'>loading</span>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.getElementById('tip-version').innerText = Docsify.version
|
||||||
|
</script>
|
||||||
|
|||||||
+380
-143
@@ -608,7 +608,7 @@ function createCommonjsModule(fn, module) {
|
|||||||
var marked = createCommonjsModule(function (module, exports) {
|
var marked = createCommonjsModule(function (module, exports) {
|
||||||
/**
|
/**
|
||||||
* marked - a markdown parser
|
* marked - a markdown parser
|
||||||
* Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
|
* Copyright (c) 2011-2018, Christopher Jeffrey. (MIT Licensed)
|
||||||
* https://github.com/markedjs/marked
|
* https://github.com/markedjs/marked
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -618,20 +618,29 @@ var block = {
|
|||||||
code: /^( {4}[^\n]+\n*)+/,
|
code: /^( {4}[^\n]+\n*)+/,
|
||||||
fences: noop,
|
fences: noop,
|
||||||
hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
|
hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
|
||||||
heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
|
heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
|
||||||
nptable: noop,
|
nptable: noop,
|
||||||
blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
|
blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
|
||||||
list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
|
list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
|
||||||
html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,
|
html: '^ {0,3}(?:' // optional indentation
|
||||||
|
+ '<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
|
||||||
|
+ '|comment[^\\n]*(\\n+|$)' // (2)
|
||||||
|
+ '|<\\?[\\s\\S]*?\\?>\\n*' // (3)
|
||||||
|
+ '|<![A-Z][\\s\\S]*?>\\n*' // (4)
|
||||||
|
+ '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
|
||||||
|
+ '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
|
||||||
|
+ '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
|
||||||
|
+ '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
|
||||||
|
+ ')',
|
||||||
def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
|
def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
|
||||||
table: noop,
|
table: noop,
|
||||||
lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
|
lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
|
||||||
paragraph: /^([^\n]+(?:\n?(?!hr|heading|lheading| {0,3}>|tag)[^\n]+)+)/,
|
paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,
|
||||||
text: /^[^\n]+/
|
text: /^[^\n]+/
|
||||||
};
|
};
|
||||||
|
|
||||||
block._label = /(?:\\[\[\]]|[^\[\]])+/;
|
block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
|
||||||
block._title = /(?:"(?:\\"|[^"]|"[^"\n]*")*"|'\n?(?:[^'\n]+\n?)*'|\([^()]*\))/;
|
block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
|
||||||
block.def = edit(block.def)
|
block.def = edit(block.def)
|
||||||
.replace('label', block._label)
|
.replace('label', block._label)
|
||||||
.replace('title', block._title)
|
.replace('title', block._title)
|
||||||
@@ -649,23 +658,24 @@ block.list = edit(block.list)
|
|||||||
.replace('def', '\\n+(?=' + block.def.source + ')')
|
.replace('def', '\\n+(?=' + block.def.source + ')')
|
||||||
.getRegex();
|
.getRegex();
|
||||||
|
|
||||||
block._tag = '(?!(?:'
|
block._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
|
||||||
+ 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
|
+ '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
|
||||||
+ '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
|
+ '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
|
||||||
+ '|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b';
|
+ '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
|
||||||
|
+ '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
|
||||||
block.html = edit(block.html)
|
+ '|track|ul';
|
||||||
.replace('comment', /<!--[\s\S]*?-->/)
|
block._comment = /<!--(?!-?>)[\s\S]*?-->/;
|
||||||
.replace('closed', /<(tag)[\s\S]+?<\/\1>/)
|
block.html = edit(block.html, 'i')
|
||||||
.replace('closing', /<tag(?:"[^"]*"|'[^']*'|\s[^'"\/>\s]*)*?\/?>/)
|
.replace('comment', block._comment)
|
||||||
.replace(/tag/g, block._tag)
|
.replace('tag', block._tag)
|
||||||
|
.replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
|
||||||
.getRegex();
|
.getRegex();
|
||||||
|
|
||||||
block.paragraph = edit(block.paragraph)
|
block.paragraph = edit(block.paragraph)
|
||||||
.replace('hr', block.hr)
|
.replace('hr', block.hr)
|
||||||
.replace('heading', block.heading)
|
.replace('heading', block.heading)
|
||||||
.replace('lheading', block.lheading)
|
.replace('lheading', block.lheading)
|
||||||
.replace('tag', '<' + block._tag)
|
.replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
|
||||||
.getRegex();
|
.getRegex();
|
||||||
|
|
||||||
block.blockquote = edit(block.blockquote)
|
block.blockquote = edit(block.blockquote)
|
||||||
@@ -699,8 +709,26 @@ block.gfm.paragraph = edit(block.paragraph)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
block.tables = merge({}, block.gfm, {
|
block.tables = merge({}, block.gfm, {
|
||||||
nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,
|
nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
|
||||||
table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/
|
table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pedantic grammar
|
||||||
|
*/
|
||||||
|
|
||||||
|
block.pedantic = merge({}, block.normal, {
|
||||||
|
html: edit(
|
||||||
|
'^ *(?:comment *(?:\\n|\\s*$)'
|
||||||
|
+ '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
|
||||||
|
+ '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
|
||||||
|
.replace('comment', block._comment)
|
||||||
|
.replace(/tag/g, '(?!(?:'
|
||||||
|
+ 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
|
||||||
|
+ '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
|
||||||
|
+ '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
|
||||||
|
.getRegex(),
|
||||||
|
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -709,11 +737,13 @@ block.tables = merge({}, block.gfm, {
|
|||||||
|
|
||||||
function Lexer(options) {
|
function Lexer(options) {
|
||||||
this.tokens = [];
|
this.tokens = [];
|
||||||
this.tokens.links = {};
|
this.tokens.links = Object.create(null);
|
||||||
this.options = options || marked.defaults;
|
this.options = options || marked.defaults;
|
||||||
this.rules = block.normal;
|
this.rules = block.normal;
|
||||||
|
|
||||||
if (this.options.gfm) {
|
if (this.options.pedantic) {
|
||||||
|
this.rules = block.pedantic;
|
||||||
|
} else if (this.options.gfm) {
|
||||||
if (this.options.tables) {
|
if (this.options.tables) {
|
||||||
this.rules = block.tables;
|
this.rules = block.tables;
|
||||||
} else {
|
} else {
|
||||||
@@ -765,11 +795,16 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
bull,
|
bull,
|
||||||
b,
|
b,
|
||||||
item,
|
item,
|
||||||
|
listStart,
|
||||||
|
listItems,
|
||||||
|
t,
|
||||||
space,
|
space,
|
||||||
i,
|
i,
|
||||||
tag,
|
tag,
|
||||||
l,
|
l,
|
||||||
isordered;
|
isordered,
|
||||||
|
istask,
|
||||||
|
ischecked;
|
||||||
|
|
||||||
while (src) {
|
while (src) {
|
||||||
// newline
|
// newline
|
||||||
@@ -789,7 +824,7 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
this$1.tokens.push({
|
this$1.tokens.push({
|
||||||
type: 'code',
|
type: 'code',
|
||||||
text: !this$1.options.pedantic
|
text: !this$1.options.pedantic
|
||||||
? cap.replace(/\n+$/, '')
|
? rtrim(cap, '\n')
|
||||||
: cap
|
: cap
|
||||||
});
|
});
|
||||||
continue;
|
continue;
|
||||||
@@ -819,15 +854,16 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
|
|
||||||
// table no leading pipe (gfm)
|
// table no leading pipe (gfm)
|
||||||
if (top && (cap = this$1.rules.nptable.exec(src))) {
|
if (top && (cap = this$1.rules.nptable.exec(src))) {
|
||||||
src = src.substring(cap[0].length);
|
|
||||||
|
|
||||||
item = {
|
item = {
|
||||||
type: 'table',
|
type: 'table',
|
||||||
header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
|
header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
|
||||||
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
||||||
cells: cap[3].replace(/\n$/, '').split('\n')
|
cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (item.header.length === item.align.length) {
|
||||||
|
src = src.substring(cap[0].length);
|
||||||
|
|
||||||
for (i = 0; i < item.align.length; i++) {
|
for (i = 0; i < item.align.length; i++) {
|
||||||
if (/^ *-+: *$/.test(item.align[i])) {
|
if (/^ *-+: *$/.test(item.align[i])) {
|
||||||
item.align[i] = 'right';
|
item.align[i] = 'right';
|
||||||
@@ -841,13 +877,14 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < item.cells.length; i++) {
|
for (i = 0; i < item.cells.length; i++) {
|
||||||
item.cells[i] = item.cells[i].split(/ *\| */);
|
item.cells[i] = splitCells(item.cells[i], item.header.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
this$1.tokens.push(item);
|
this$1.tokens.push(item);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// hr
|
// hr
|
||||||
if (cap = this$1.rules.hr.exec(src)) {
|
if (cap = this$1.rules.hr.exec(src)) {
|
||||||
@@ -886,15 +923,19 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
bull = cap[2];
|
bull = cap[2];
|
||||||
isordered = bull.length > 1;
|
isordered = bull.length > 1;
|
||||||
|
|
||||||
this$1.tokens.push({
|
listStart = {
|
||||||
type: 'list_start',
|
type: 'list_start',
|
||||||
ordered: isordered,
|
ordered: isordered,
|
||||||
start: isordered ? +bull : ''
|
start: isordered ? +bull : '',
|
||||||
});
|
loose: false
|
||||||
|
};
|
||||||
|
|
||||||
|
this$1.tokens.push(listStart);
|
||||||
|
|
||||||
// Get each top-level item.
|
// Get each top-level item.
|
||||||
cap = cap[0].match(this$1.rules.item);
|
cap = cap[0].match(this$1.rules.item);
|
||||||
|
|
||||||
|
listItems = [];
|
||||||
next = false;
|
next = false;
|
||||||
l = cap.length;
|
l = cap.length;
|
||||||
i = 0;
|
i = 0;
|
||||||
@@ -935,11 +976,27 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
if (!loose) { loose = next; }
|
if (!loose) { loose = next; }
|
||||||
}
|
}
|
||||||
|
|
||||||
this$1.tokens.push({
|
if (loose) {
|
||||||
type: loose
|
listStart.loose = true;
|
||||||
? 'loose_item_start'
|
}
|
||||||
: 'list_item_start'
|
|
||||||
});
|
// Check for task list items
|
||||||
|
istask = /^\[[ xX]\] /.test(item);
|
||||||
|
ischecked = undefined;
|
||||||
|
if (istask) {
|
||||||
|
ischecked = item[1] !== ' ';
|
||||||
|
item = item.replace(/^\[[ xX]\] +/, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
t = {
|
||||||
|
type: 'list_item_start',
|
||||||
|
task: istask,
|
||||||
|
checked: ischecked,
|
||||||
|
loose: loose
|
||||||
|
};
|
||||||
|
|
||||||
|
listItems.push(t);
|
||||||
|
this$1.tokens.push(t);
|
||||||
|
|
||||||
// Recurse.
|
// Recurse.
|
||||||
this$1.token(item, false);
|
this$1.token(item, false);
|
||||||
@@ -949,6 +1006,14 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (listStart.loose) {
|
||||||
|
l = listItems.length;
|
||||||
|
i = 0;
|
||||||
|
for (; i < l; i++) {
|
||||||
|
listItems[i].loose = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this$1.tokens.push({
|
this$1.tokens.push({
|
||||||
type: 'list_end'
|
type: 'list_end'
|
||||||
});
|
});
|
||||||
@@ -974,7 +1039,7 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
if (top && (cap = this$1.rules.def.exec(src))) {
|
if (top && (cap = this$1.rules.def.exec(src))) {
|
||||||
src = src.substring(cap[0].length);
|
src = src.substring(cap[0].length);
|
||||||
if (cap[3]) { cap[3] = cap[3].substring(1, cap[3].length - 1); }
|
if (cap[3]) { cap[3] = cap[3].substring(1, cap[3].length - 1); }
|
||||||
tag = cap[1].toLowerCase();
|
tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
|
||||||
if (!this$1.tokens.links[tag]) {
|
if (!this$1.tokens.links[tag]) {
|
||||||
this$1.tokens.links[tag] = {
|
this$1.tokens.links[tag] = {
|
||||||
href: cap[2],
|
href: cap[2],
|
||||||
@@ -986,15 +1051,16 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
|
|
||||||
// table (gfm)
|
// table (gfm)
|
||||||
if (top && (cap = this$1.rules.table.exec(src))) {
|
if (top && (cap = this$1.rules.table.exec(src))) {
|
||||||
src = src.substring(cap[0].length);
|
|
||||||
|
|
||||||
item = {
|
item = {
|
||||||
type: 'table',
|
type: 'table',
|
||||||
header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
|
header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
|
||||||
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
||||||
cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n')
|
cells: cap[3] ? cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') : []
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (item.header.length === item.align.length) {
|
||||||
|
src = src.substring(cap[0].length);
|
||||||
|
|
||||||
for (i = 0; i < item.align.length; i++) {
|
for (i = 0; i < item.align.length; i++) {
|
||||||
if (/^ *-+: *$/.test(item.align[i])) {
|
if (/^ *-+: *$/.test(item.align[i])) {
|
||||||
item.align[i] = 'right';
|
item.align[i] = 'right';
|
||||||
@@ -1008,15 +1074,16 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < item.cells.length; i++) {
|
for (i = 0; i < item.cells.length; i++) {
|
||||||
item.cells[i] = item.cells[i]
|
item.cells[i] = splitCells(
|
||||||
.replace(/^ *\| *| *\| *$/g, '')
|
item.cells[i].replace(/^ *\| *| *\| *$/g, ''),
|
||||||
.split(/ *\| */);
|
item.header.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
this$1.tokens.push(item);
|
this$1.tokens.push(item);
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// lheading
|
// lheading
|
||||||
if (cap = this$1.rules.lheading.exec(src)) {
|
if (cap = this$1.rules.lheading.exec(src)) {
|
||||||
@@ -1065,39 +1132,54 @@ Lexer.prototype.token = function(src, top) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var inline = {
|
var inline = {
|
||||||
escape: /^\\([\\`*{}\[\]()#+\-.!_>])/,
|
escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
|
||||||
autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
|
autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
|
||||||
url: noop,
|
url: noop,
|
||||||
tag: /^<!--[\s\S]*?-->|^<\/?[a-zA-Z0-9\-]+(?:"[^"]*"|'[^']*'|\s[^<'">\/\s]*)*?\/?>/,
|
tag: '^comment'
|
||||||
link: /^!?\[(inside)\]\(href\)/,
|
+ '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
|
||||||
reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
|
+ '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
|
||||||
nolink: /^!?\[((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\]/,
|
+ '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
|
||||||
strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
|
+ '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
|
||||||
em: /^_([^\s_](?:[^_]|__)+?[^\s_])_\b|^\*((?:\*\*|[^*])+?)\*(?!\*)/,
|
+ '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
|
||||||
code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/,
|
link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
|
||||||
br: /^ {2,}\n(?!\s*$)/,
|
reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
|
||||||
|
nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
|
||||||
|
strong: /^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
|
||||||
|
em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
|
||||||
|
code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
|
||||||
|
br: /^( {2,}|\\)\n(?!\s*$)/,
|
||||||
del: noop,
|
del: noop,
|
||||||
text: /^[\s\S]+?(?=[\\<!\[`*]|\b_| {2,}\n|$)/
|
text: /^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
|
||||||
|
|
||||||
inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
|
inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
|
||||||
inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
|
inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
|
||||||
|
|
||||||
inline.autolink = edit(inline.autolink)
|
inline.autolink = edit(inline.autolink)
|
||||||
.replace('scheme', inline._scheme)
|
.replace('scheme', inline._scheme)
|
||||||
.replace('email', inline._email)
|
.replace('email', inline._email)
|
||||||
.getRegex();
|
.getRegex();
|
||||||
|
|
||||||
inline._inside = /(?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]]|\](?=[^\[]*\]))*/;
|
inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
|
||||||
inline._href = /\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;
|
|
||||||
|
inline.tag = edit(inline.tag)
|
||||||
|
.replace('comment', block._comment)
|
||||||
|
.replace('attribute', inline._attribute)
|
||||||
|
.getRegex();
|
||||||
|
|
||||||
|
inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/;
|
||||||
|
inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/;
|
||||||
|
inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
|
||||||
|
|
||||||
inline.link = edit(inline.link)
|
inline.link = edit(inline.link)
|
||||||
.replace('inside', inline._inside)
|
.replace('label', inline._label)
|
||||||
.replace('href', inline._href)
|
.replace('href', inline._href)
|
||||||
|
.replace('title', inline._title)
|
||||||
.getRegex();
|
.getRegex();
|
||||||
|
|
||||||
inline.reflink = edit(inline.reflink)
|
inline.reflink = edit(inline.reflink)
|
||||||
.replace('inside', inline._inside)
|
.replace('label', inline._label)
|
||||||
.getRegex();
|
.getRegex();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1112,7 +1194,13 @@ inline.normal = merge({}, inline);
|
|||||||
|
|
||||||
inline.pedantic = merge({}, inline.normal, {
|
inline.pedantic = merge({}, inline.normal, {
|
||||||
strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
|
strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
|
||||||
em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/
|
em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,
|
||||||
|
link: edit(/^!?\[(label)\]\((.*?)\)/)
|
||||||
|
.replace('label', inline._label)
|
||||||
|
.getRegex(),
|
||||||
|
reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
|
||||||
|
.replace('label', inline._label)
|
||||||
|
.getRegex()
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1121,17 +1209,19 @@ inline.pedantic = merge({}, inline.normal, {
|
|||||||
|
|
||||||
inline.gfm = merge({}, inline.normal, {
|
inline.gfm = merge({}, inline.normal, {
|
||||||
escape: edit(inline.escape).replace('])', '~|])').getRegex(),
|
escape: edit(inline.escape).replace('])', '~|])').getRegex(),
|
||||||
url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/)
|
_extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
|
||||||
.replace('email', inline._email)
|
url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
|
||||||
.getRegex(),
|
|
||||||
_backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
|
_backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
|
||||||
del: /^~~(?=\S)([\s\S]*?\S)~~/,
|
del: /^~+(?=\S)([\s\S]*?\S)~+/,
|
||||||
text: edit(inline.text)
|
text: edit(inline.text)
|
||||||
.replace(']|', '~]|')
|
.replace(']|', '~]|')
|
||||||
.replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|')
|
.replace('|$', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|$')
|
||||||
.getRegex()
|
.getRegex()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
inline.gfm.url = edit(inline.gfm.url)
|
||||||
|
.replace('email', inline.gfm._extended_email)
|
||||||
|
.getRegex();
|
||||||
/**
|
/**
|
||||||
* GFM + Line Breaks Inline Grammar
|
* GFM + Line Breaks Inline Grammar
|
||||||
*/
|
*/
|
||||||
@@ -1156,14 +1246,14 @@ function InlineLexer(links, options) {
|
|||||||
throw new Error('Tokens array requires a `links` property.');
|
throw new Error('Tokens array requires a `links` property.');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.options.gfm) {
|
if (this.options.pedantic) {
|
||||||
|
this.rules = inline.pedantic;
|
||||||
|
} else if (this.options.gfm) {
|
||||||
if (this.options.breaks) {
|
if (this.options.breaks) {
|
||||||
this.rules = inline.breaks;
|
this.rules = inline.breaks;
|
||||||
} else {
|
} else {
|
||||||
this.rules = inline.gfm;
|
this.rules = inline.gfm;
|
||||||
}
|
}
|
||||||
} else if (this.options.pedantic) {
|
|
||||||
this.rules = inline.pedantic;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1193,7 +1283,9 @@ InlineLexer.prototype.output = function(src) {
|
|||||||
link,
|
link,
|
||||||
text,
|
text,
|
||||||
href,
|
href,
|
||||||
cap;
|
title,
|
||||||
|
cap,
|
||||||
|
prevCapZero;
|
||||||
|
|
||||||
while (src) {
|
while (src) {
|
||||||
// escape
|
// escape
|
||||||
@@ -1219,12 +1311,15 @@ InlineLexer.prototype.output = function(src) {
|
|||||||
|
|
||||||
// url (gfm)
|
// url (gfm)
|
||||||
if (!this$1.inLink && (cap = this$1.rules.url.exec(src))) {
|
if (!this$1.inLink && (cap = this$1.rules.url.exec(src))) {
|
||||||
cap[0] = this$1.rules._backpedal.exec(cap[0])[0];
|
|
||||||
src = src.substring(cap[0].length);
|
|
||||||
if (cap[2] === '@') {
|
if (cap[2] === '@') {
|
||||||
text = escape(cap[0]);
|
text = escape(cap[0]);
|
||||||
href = 'mailto:' + text;
|
href = 'mailto:' + text;
|
||||||
} else {
|
} else {
|
||||||
|
// do extended autolink path validation
|
||||||
|
do {
|
||||||
|
prevCapZero = cap[0];
|
||||||
|
cap[0] = this$1.rules._backpedal.exec(cap[0])[0];
|
||||||
|
} while (prevCapZero !== cap[0]);
|
||||||
text = escape(cap[0]);
|
text = escape(cap[0]);
|
||||||
if (cap[1] === 'www.') {
|
if (cap[1] === 'www.') {
|
||||||
href = 'http://' + text;
|
href = 'http://' + text;
|
||||||
@@ -1232,6 +1327,7 @@ InlineLexer.prototype.output = function(src) {
|
|||||||
href = text;
|
href = text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
src = src.substring(cap[0].length);
|
||||||
out += this$1.renderer.link(href, null, text);
|
out += this$1.renderer.link(href, null, text);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1243,6 +1339,12 @@ InlineLexer.prototype.output = function(src) {
|
|||||||
} else if (this$1.inLink && /^<\/a>/i.test(cap[0])) {
|
} else if (this$1.inLink && /^<\/a>/i.test(cap[0])) {
|
||||||
this$1.inLink = false;
|
this$1.inLink = false;
|
||||||
}
|
}
|
||||||
|
if (!this$1.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
||||||
|
this$1.inRawBlock = true;
|
||||||
|
} else if (this$1.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
||||||
|
this$1.inRawBlock = false;
|
||||||
|
}
|
||||||
|
|
||||||
src = src.substring(cap[0].length);
|
src = src.substring(cap[0].length);
|
||||||
out += this$1.options.sanitize
|
out += this$1.options.sanitize
|
||||||
? this$1.options.sanitizer
|
? this$1.options.sanitizer
|
||||||
@@ -1256,9 +1358,23 @@ InlineLexer.prototype.output = function(src) {
|
|||||||
if (cap = this$1.rules.link.exec(src)) {
|
if (cap = this$1.rules.link.exec(src)) {
|
||||||
src = src.substring(cap[0].length);
|
src = src.substring(cap[0].length);
|
||||||
this$1.inLink = true;
|
this$1.inLink = true;
|
||||||
|
href = cap[2];
|
||||||
|
if (this$1.options.pedantic) {
|
||||||
|
link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
|
||||||
|
|
||||||
|
if (link) {
|
||||||
|
href = link[1];
|
||||||
|
title = link[3];
|
||||||
|
} else {
|
||||||
|
title = '';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
title = cap[3] ? cap[3].slice(1, -1) : '';
|
||||||
|
}
|
||||||
|
href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
|
||||||
out += this$1.outputLink(cap, {
|
out += this$1.outputLink(cap, {
|
||||||
href: cap[2],
|
href: InlineLexer.escapes(href),
|
||||||
title: cap[3]
|
title: InlineLexer.escapes(title)
|
||||||
});
|
});
|
||||||
this$1.inLink = false;
|
this$1.inLink = false;
|
||||||
continue;
|
continue;
|
||||||
@@ -1284,14 +1400,14 @@ InlineLexer.prototype.output = function(src) {
|
|||||||
// strong
|
// strong
|
||||||
if (cap = this$1.rules.strong.exec(src)) {
|
if (cap = this$1.rules.strong.exec(src)) {
|
||||||
src = src.substring(cap[0].length);
|
src = src.substring(cap[0].length);
|
||||||
out += this$1.renderer.strong(this$1.output(cap[2] || cap[1]));
|
out += this$1.renderer.strong(this$1.output(cap[4] || cap[3] || cap[2] || cap[1]));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// em
|
// em
|
||||||
if (cap = this$1.rules.em.exec(src)) {
|
if (cap = this$1.rules.em.exec(src)) {
|
||||||
src = src.substring(cap[0].length);
|
src = src.substring(cap[0].length);
|
||||||
out += this$1.renderer.em(this$1.output(cap[2] || cap[1]));
|
out += this$1.renderer.em(this$1.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1]));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1319,7 +1435,11 @@ InlineLexer.prototype.output = function(src) {
|
|||||||
// text
|
// text
|
||||||
if (cap = this$1.rules.text.exec(src)) {
|
if (cap = this$1.rules.text.exec(src)) {
|
||||||
src = src.substring(cap[0].length);
|
src = src.substring(cap[0].length);
|
||||||
|
if (this$1.inRawBlock) {
|
||||||
|
out += this$1.renderer.text(cap[0]);
|
||||||
|
} else {
|
||||||
out += this$1.renderer.text(escape(this$1.smartypants(cap[0])));
|
out += this$1.renderer.text(escape(this$1.smartypants(cap[0])));
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1331,12 +1451,16 @@ InlineLexer.prototype.output = function(src) {
|
|||||||
return out;
|
return out;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
InlineLexer.escapes = function(text) {
|
||||||
|
return text ? text.replace(InlineLexer.rules._escapes, '$1') : text;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compile Link
|
* Compile Link
|
||||||
*/
|
*/
|
||||||
|
|
||||||
InlineLexer.prototype.outputLink = function(cap, link) {
|
InlineLexer.prototype.outputLink = function(cap, link) {
|
||||||
var href = escape(link.href),
|
var href = link.href,
|
||||||
title = link.title ? escape(link.title) : null;
|
title = link.title ? escape(link.title) : null;
|
||||||
|
|
||||||
return cap[0].charAt(0) !== '!'
|
return cap[0].charAt(0) !== '!'
|
||||||
@@ -1394,7 +1518,7 @@ InlineLexer.prototype.mangle = function(text) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
function Renderer(options) {
|
function Renderer(options) {
|
||||||
this.options = options || {};
|
this.options = options || marked.defaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
Renderer.prototype.code = function(code, lang, escaped) {
|
Renderer.prototype.code = function(code, lang, escaped) {
|
||||||
@@ -1409,7 +1533,7 @@ Renderer.prototype.code = function(code, lang, escaped) {
|
|||||||
if (!lang) {
|
if (!lang) {
|
||||||
return '<pre><code>'
|
return '<pre><code>'
|
||||||
+ (escaped ? code : escape(code, true))
|
+ (escaped ? code : escape(code, true))
|
||||||
+ '\n</code></pre>';
|
+ '</code></pre>';
|
||||||
}
|
}
|
||||||
|
|
||||||
return '<pre><code class="'
|
return '<pre><code class="'
|
||||||
@@ -1417,7 +1541,7 @@ Renderer.prototype.code = function(code, lang, escaped) {
|
|||||||
+ escape(lang, true)
|
+ escape(lang, true)
|
||||||
+ '">'
|
+ '">'
|
||||||
+ (escaped ? code : escape(code, true))
|
+ (escaped ? code : escape(code, true))
|
||||||
+ '\n</code></pre>\n';
|
+ '</code></pre>\n';
|
||||||
};
|
};
|
||||||
|
|
||||||
Renderer.prototype.blockquote = function(quote) {
|
Renderer.prototype.blockquote = function(quote) {
|
||||||
@@ -1429,6 +1553,7 @@ Renderer.prototype.html = function(html) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Renderer.prototype.heading = function(text, level, raw) {
|
Renderer.prototype.heading = function(text, level, raw) {
|
||||||
|
if (this.options.headerIds) {
|
||||||
return '<h'
|
return '<h'
|
||||||
+ level
|
+ level
|
||||||
+ ' id="'
|
+ ' id="'
|
||||||
@@ -1439,6 +1564,9 @@ Renderer.prototype.heading = function(text, level, raw) {
|
|||||||
+ '</h'
|
+ '</h'
|
||||||
+ level
|
+ level
|
||||||
+ '>\n';
|
+ '>\n';
|
||||||
|
}
|
||||||
|
// ignore IDs
|
||||||
|
return '<h' + level + '>' + text + '</h' + level + '>\n';
|
||||||
};
|
};
|
||||||
|
|
||||||
Renderer.prototype.hr = function() {
|
Renderer.prototype.hr = function() {
|
||||||
@@ -1455,18 +1583,26 @@ Renderer.prototype.listitem = function(text) {
|
|||||||
return '<li>' + text + '</li>\n';
|
return '<li>' + text + '</li>\n';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Renderer.prototype.checkbox = function(checked) {
|
||||||
|
return '<input '
|
||||||
|
+ (checked ? 'checked="" ' : '')
|
||||||
|
+ 'disabled="" type="checkbox"'
|
||||||
|
+ (this.options.xhtml ? ' /' : '')
|
||||||
|
+ '> ';
|
||||||
|
};
|
||||||
|
|
||||||
Renderer.prototype.paragraph = function(text) {
|
Renderer.prototype.paragraph = function(text) {
|
||||||
return '<p>' + text + '</p>\n';
|
return '<p>' + text + '</p>\n';
|
||||||
};
|
};
|
||||||
|
|
||||||
Renderer.prototype.table = function(header, body) {
|
Renderer.prototype.table = function(header, body) {
|
||||||
|
if (body) { body = '<tbody>' + body + '</tbody>'; }
|
||||||
|
|
||||||
return '<table>\n'
|
return '<table>\n'
|
||||||
+ '<thead>\n'
|
+ '<thead>\n'
|
||||||
+ header
|
+ header
|
||||||
+ '</thead>\n'
|
+ '</thead>\n'
|
||||||
+ '<tbody>\n'
|
|
||||||
+ body
|
+ body
|
||||||
+ '</tbody>\n'
|
|
||||||
+ '</table>\n';
|
+ '</table>\n';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1477,7 +1613,7 @@ Renderer.prototype.tablerow = function(content) {
|
|||||||
Renderer.prototype.tablecell = function(content, flags) {
|
Renderer.prototype.tablecell = function(content, flags) {
|
||||||
var type = flags.header ? 'th' : 'td';
|
var type = flags.header ? 'th' : 'td';
|
||||||
var tag = flags.align
|
var tag = flags.align
|
||||||
? '<' + type + ' style="text-align:' + flags.align + '">'
|
? '<' + type + ' align="' + flags.align + '">'
|
||||||
: '<' + type + '>';
|
: '<' + type + '>';
|
||||||
return tag + content + '</' + type + '>\n';
|
return tag + content + '</' + type + '>\n';
|
||||||
};
|
};
|
||||||
@@ -1519,7 +1655,12 @@ Renderer.prototype.link = function(href, title, text) {
|
|||||||
if (this.options.baseUrl && !originIndependentUrl.test(href)) {
|
if (this.options.baseUrl && !originIndependentUrl.test(href)) {
|
||||||
href = resolveUrl(this.options.baseUrl, href);
|
href = resolveUrl(this.options.baseUrl, href);
|
||||||
}
|
}
|
||||||
var out = '<a href="' + href + '"';
|
try {
|
||||||
|
href = encodeURI(href).replace(/%25/g, '%');
|
||||||
|
} catch (e) {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
var out = '<a href="' + escape(href) + '"';
|
||||||
if (title) {
|
if (title) {
|
||||||
out += ' title="' + title + '"';
|
out += ' title="' + title + '"';
|
||||||
}
|
}
|
||||||
@@ -1726,29 +1867,23 @@ Parser.prototype.tok = function() {
|
|||||||
}
|
}
|
||||||
case 'list_item_start': {
|
case 'list_item_start': {
|
||||||
body = '';
|
body = '';
|
||||||
|
var loose = this.token.loose;
|
||||||
|
|
||||||
|
if (this.token.task) {
|
||||||
|
body += this.renderer.checkbox(this.token.checked);
|
||||||
|
}
|
||||||
|
|
||||||
while (this.next().type !== 'list_item_end') {
|
while (this.next().type !== 'list_item_end') {
|
||||||
body += this$1.token.type === 'text'
|
body += !loose && this$1.token.type === 'text'
|
||||||
? this$1.parseText()
|
? this$1.parseText()
|
||||||
: this$1.tok();
|
: this$1.tok();
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.renderer.listitem(body);
|
return this.renderer.listitem(body);
|
||||||
}
|
}
|
||||||
case 'loose_item_start': {
|
|
||||||
body = '';
|
|
||||||
|
|
||||||
while (this.next().type !== 'list_item_end') {
|
|
||||||
body += this$1.tok();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.renderer.listitem(body);
|
|
||||||
}
|
|
||||||
case 'html': {
|
case 'html': {
|
||||||
var html = !this.token.pre && !this.options.pedantic
|
// TODO parse inline content if parameter markdown=1
|
||||||
? this.inline.output(this.token.text)
|
return this.renderer.html(this.token.text);
|
||||||
: this.token.text;
|
|
||||||
return this.renderer.html(html);
|
|
||||||
}
|
}
|
||||||
case 'paragraph': {
|
case 'paragraph': {
|
||||||
return this.renderer.paragraph(this.inline.output(this.token.text));
|
return this.renderer.paragraph(this.inline.output(this.token.text));
|
||||||
@@ -1764,13 +1899,31 @@ Parser.prototype.tok = function() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
function escape(html, encode) {
|
function escape(html, encode) {
|
||||||
return html
|
if (encode) {
|
||||||
.replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&')
|
if (escape.escapeTest.test(html)) {
|
||||||
.replace(/</g, '<')
|
return html.replace(escape.escapeReplace, function (ch) { return escape.replacements[ch] });
|
||||||
.replace(/>/g, '>')
|
|
||||||
.replace(/"/g, '"')
|
|
||||||
.replace(/'/g, ''');
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (escape.escapeTestNoEncode.test(html)) {
|
||||||
|
return html.replace(escape.escapeReplaceNoEncode, function (ch) { return escape.replacements[ch] });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
escape.escapeTest = /[&<>"']/;
|
||||||
|
escape.escapeReplace = /[&<>"']/g;
|
||||||
|
escape.replacements = {
|
||||||
|
'&': '&',
|
||||||
|
'<': '<',
|
||||||
|
'>': '>',
|
||||||
|
'"': '"',
|
||||||
|
"'": '''
|
||||||
|
};
|
||||||
|
|
||||||
|
escape.escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
|
||||||
|
escape.escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
|
||||||
|
|
||||||
function unescape(html) {
|
function unescape(html) {
|
||||||
// explicitly match decimal, hex, and named HTML entities
|
// explicitly match decimal, hex, and named HTML entities
|
||||||
@@ -1787,7 +1940,7 @@ function unescape(html) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function edit(regex, opt) {
|
function edit(regex, opt) {
|
||||||
regex = regex.source;
|
regex = regex.source || regex;
|
||||||
opt = opt || '';
|
opt = opt || '';
|
||||||
return {
|
return {
|
||||||
replace: function(name, val) {
|
replace: function(name, val) {
|
||||||
@@ -1810,7 +1963,7 @@ function resolveUrl(base, href) {
|
|||||||
if (/^[^:]+:\/*[^/]*$/.test(base)) {
|
if (/^[^:]+:\/*[^/]*$/.test(base)) {
|
||||||
baseUrls[' ' + base] = base + '/';
|
baseUrls[' ' + base] = base + '/';
|
||||||
} else {
|
} else {
|
||||||
baseUrls[' ' + base] = base.replace(/[^/]*$/, '');
|
baseUrls[' ' + base] = rtrim(base, '/', true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
base = baseUrls[' ' + base];
|
base = baseUrls[' ' + base];
|
||||||
@@ -1848,6 +2001,64 @@ function merge(obj) {
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function splitCells(tableRow, count) {
|
||||||
|
// ensure that every cell-delimiting pipe has a space
|
||||||
|
// before it to distinguish it from an escaped pipe
|
||||||
|
var row = tableRow.replace(/\|/g, function (match, offset, str) {
|
||||||
|
var escaped = false,
|
||||||
|
curr = offset;
|
||||||
|
while (--curr >= 0 && str[curr] === '\\') { escaped = !escaped; }
|
||||||
|
if (escaped) {
|
||||||
|
// odd number of slashes means | is escaped
|
||||||
|
// so we leave it alone
|
||||||
|
return '|';
|
||||||
|
} else {
|
||||||
|
// add space before unescaped |
|
||||||
|
return ' |';
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
cells = row.split(/ \|/),
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
if (cells.length > count) {
|
||||||
|
cells.splice(count);
|
||||||
|
} else {
|
||||||
|
while (cells.length < count) { cells.push(''); }
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; i < cells.length; i++) {
|
||||||
|
// leading or trailing whitespace is ignored per the gfm spec
|
||||||
|
cells[i] = cells[i].trim().replace(/\\\|/g, '|');
|
||||||
|
}
|
||||||
|
return cells;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
|
||||||
|
// /c*$/ is vulnerable to REDOS.
|
||||||
|
// invert: Remove suffix of non-c chars instead. Default falsey.
|
||||||
|
function rtrim(str, c, invert) {
|
||||||
|
if (str.length === 0) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Length of suffix matching the invert condition.
|
||||||
|
var suffLen = 0;
|
||||||
|
|
||||||
|
// Step left until we fail to match the invert condition.
|
||||||
|
while (suffLen < str.length) {
|
||||||
|
var currChar = str.charAt(str.length - suffLen - 1);
|
||||||
|
if (currChar === c && !invert) {
|
||||||
|
suffLen++;
|
||||||
|
} else if (currChar !== c && invert) {
|
||||||
|
suffLen++;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.substr(0, str.length - suffLen);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Marked
|
* Marked
|
||||||
*/
|
*/
|
||||||
@@ -1955,24 +2166,29 @@ marked.setOptions = function(opt) {
|
|||||||
return marked;
|
return marked;
|
||||||
};
|
};
|
||||||
|
|
||||||
marked.defaults = {
|
marked.getDefaults = function () {
|
||||||
gfm: true,
|
return {
|
||||||
tables: true,
|
baseUrl: null,
|
||||||
breaks: false,
|
breaks: false,
|
||||||
|
gfm: true,
|
||||||
|
headerIds: true,
|
||||||
|
headerPrefix: '',
|
||||||
|
highlight: null,
|
||||||
|
langPrefix: 'language-',
|
||||||
|
mangle: true,
|
||||||
pedantic: false,
|
pedantic: false,
|
||||||
|
renderer: new Renderer(),
|
||||||
sanitize: false,
|
sanitize: false,
|
||||||
sanitizer: null,
|
sanitizer: null,
|
||||||
mangle: true,
|
|
||||||
smartLists: false,
|
|
||||||
silent: false,
|
silent: false,
|
||||||
highlight: null,
|
smartLists: false,
|
||||||
langPrefix: 'lang-',
|
|
||||||
smartypants: false,
|
smartypants: false,
|
||||||
headerPrefix: '',
|
tables: true,
|
||||||
renderer: new Renderer(),
|
xhtml: false
|
||||||
xhtml: false,
|
|
||||||
baseUrl: null
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
marked.defaults = marked.getDefaults();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expose
|
* Expose
|
||||||
@@ -2941,7 +3157,7 @@ slugify.clear = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function replace(m, $1) {
|
function replace(m, $1) {
|
||||||
return '<img class="emoji" src="https://assets-cdn.github.com/images/icons/emoji/' + $1 + '.png" alt="' + $1 + '" />'
|
return '<img class="emoji" src="https://github.githubassets.com/images/icons/emoji/' + $1 + '.png" alt="' + $1 + '" />'
|
||||||
}
|
}
|
||||||
|
|
||||||
function emojify(text) {
|
function emojify(text) {
|
||||||
@@ -3119,7 +3335,7 @@ function getAndRemoveConfig(str) {
|
|||||||
str = str
|
str = str
|
||||||
.replace(/^'/, '')
|
.replace(/^'/, '')
|
||||||
.replace(/'$/, '')
|
.replace(/'$/, '')
|
||||||
.replace(/:([\w-]+)=?([\w-]+)?/g, function (m, key, value) {
|
.replace(/(?:^|\s):([\w-]+)=?([\w-]+)?/g, function (m, key, value) {
|
||||||
config[key] = (value && value.replace(/"/g, '')) || true;
|
config[key] = (value && value.replace(/"/g, '')) || true;
|
||||||
return ''
|
return ''
|
||||||
})
|
})
|
||||||
@@ -3267,6 +3483,7 @@ Compiler.prototype.compileEmbed = function compileEmbed (href, title) {
|
|||||||
embed = compileMedia[type].call(this, href, title);
|
embed = compileMedia[type].call(this, href, title);
|
||||||
embed.type = type;
|
embed.type = type;
|
||||||
}
|
}
|
||||||
|
embed.fragment = config.fragment;
|
||||||
|
|
||||||
return embed
|
return embed
|
||||||
}
|
}
|
||||||
@@ -3355,7 +3572,7 @@ Compiler.prototype._initRenderer = function _initRenderer () {
|
|||||||
}
|
}
|
||||||
href = router.toURL(href, null, router.getCurrentPath());
|
href = router.toURL(href, null, router.getCurrentPath());
|
||||||
} else {
|
} else {
|
||||||
attrs += href.startsWith('mailto:') ? '' : (" target=\"" + linkTarget + "\"");
|
attrs += href.indexOf('mailto:') === 0 ? '' : (" target=\"" + linkTarget + "\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.target) {
|
if (config.target) {
|
||||||
@@ -3379,8 +3596,6 @@ Compiler.prototype._initRenderer = function _initRenderer () {
|
|||||||
result = helper('tip', text);
|
result = helper('tip', text);
|
||||||
} else if (/^\?>/.test(text)) {
|
} else if (/^\?>/.test(text)) {
|
||||||
result = helper('warn', text);
|
result = helper('warn', text);
|
||||||
} else if (/^</.test(text)) {
|
|
||||||
return text
|
|
||||||
} else {
|
} else {
|
||||||
result = "<p>" + text + "</p>";
|
result = "<p>" + text + "</p>";
|
||||||
}
|
}
|
||||||
@@ -3419,6 +3634,23 @@ Compiler.prototype._initRenderer = function _initRenderer () {
|
|||||||
|
|
||||||
return ("<img src=\"" + url + "\"data-origin=\"" + href + "\" alt=\"" + text + "\"" + attrs + ">")
|
return ("<img src=\"" + url + "\"data-origin=\"" + href + "\" alt=\"" + text + "\"" + attrs + ">")
|
||||||
};
|
};
|
||||||
|
origin.list = renderer.list = function (body, ordered, start) {
|
||||||
|
var isTaskList = /<li class="task-list-item">/.test(body.split('class="task-list"')[0]);
|
||||||
|
var isStartReq = start && start > 1;
|
||||||
|
var tag = ordered ? 'ol' : 'ul';
|
||||||
|
var tagAttrs = [
|
||||||
|
(isTaskList ? 'class="task-list"' : ''),
|
||||||
|
(isStartReq ? ("start=\"" + start + "\"") : '')
|
||||||
|
].join(' ').trim();
|
||||||
|
|
||||||
|
return ("<" + tag + " " + tagAttrs + ">" + body + "</" + tag + ">")
|
||||||
|
};
|
||||||
|
origin.listitem = renderer.listitem = function (text) {
|
||||||
|
var isTaskItem = /^(<input.*type="checkbox"[^>]*>)/.test(text);
|
||||||
|
var html = isTaskItem ? ("<li class=\"task-list-item\"><label>" + text + "</label></li>") : ("<li>" + text + "</li>");
|
||||||
|
|
||||||
|
return html
|
||||||
|
};
|
||||||
|
|
||||||
renderer.origin = origin;
|
renderer.origin = origin;
|
||||||
|
|
||||||
@@ -3494,6 +3726,9 @@ function btn(el) {
|
|||||||
var toggle = function (_) { return body.classList.toggle('close'); };
|
var toggle = function (_) { return body.classList.toggle('close'); };
|
||||||
|
|
||||||
el = getNode(el);
|
el = getNode(el);
|
||||||
|
if (el == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
on(el, 'click', function (e) {
|
on(el, 'click', function (e) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
toggle();
|
toggle();
|
||||||
@@ -3509,7 +3744,9 @@ function btn(el) {
|
|||||||
|
|
||||||
function collapse(el) {
|
function collapse(el) {
|
||||||
el = getNode(el);
|
el = getNode(el);
|
||||||
|
if (el == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
on(el, 'click', function (ref) {
|
on(el, 'click', function (ref) {
|
||||||
var target = ref.target;
|
var target = ref.target;
|
||||||
|
|
||||||
@@ -3547,8 +3784,10 @@ function sticky() {
|
|||||||
*/
|
*/
|
||||||
function getAndActive(router, el, isParent, autoTitle) {
|
function getAndActive(router, el, isParent, autoTitle) {
|
||||||
el = getNode(el);
|
el = getNode(el);
|
||||||
|
var links = [];
|
||||||
var links = findAll(el, 'a');
|
if (el != null) {
|
||||||
|
links = findAll(el, 'a');
|
||||||
|
}
|
||||||
var hash = decodeURI(router.toURL(router.getCurrentPath()));
|
var hash = decodeURI(router.toURL(router.getCurrentPath()));
|
||||||
var target;
|
var target;
|
||||||
|
|
||||||
@@ -3751,7 +3990,10 @@ function scrollActiveSidebar(router) {
|
|||||||
coverHeight = cover ? cover.offsetHeight : 0;
|
coverHeight = cover ? cover.offsetHeight : 0;
|
||||||
|
|
||||||
var sidebar = getNode('.sidebar');
|
var sidebar = getNode('.sidebar');
|
||||||
var lis = findAll(sidebar, 'li');
|
var lis = [];
|
||||||
|
if (sidebar != null) {
|
||||||
|
lis = findAll(sidebar, 'li');
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0, len = lis.length; i < len; i += 1) {
|
for (var i = 0, len = lis.length; i < len; i += 1) {
|
||||||
var li = lis[i];
|
var li = lis[i];
|
||||||
@@ -3835,6 +4077,11 @@ function walkFetchEmbed(ref, cb) {
|
|||||||
if (token.embed.type === 'markdown') {
|
if (token.embed.type === 'markdown') {
|
||||||
embedToken = compile.lexer(text);
|
embedToken = compile.lexer(text);
|
||||||
} else if (token.embed.type === 'code') {
|
} else if (token.embed.type === 'code') {
|
||||||
|
if (token.embed.fragment) {
|
||||||
|
var fragment = token.embed.fragment;
|
||||||
|
var pattern = new RegExp(("(?:###|\\/\\/\\/)\\s*\\[" + fragment + "\\]([\\s\\S]*)(?:###|\\/\\/\\/)\\s*\\[" + fragment + "\\]"));
|
||||||
|
text = ((text.match(pattern) || [])[1] || '').trim();
|
||||||
|
}
|
||||||
embedToken = compile.lexer(
|
embedToken = compile.lexer(
|
||||||
'```' +
|
'```' +
|
||||||
token.embed.lang +
|
token.embed.lang +
|
||||||
@@ -4104,7 +4351,7 @@ function renderMixin(proto) {
|
|||||||
|
|
||||||
var m = html
|
var m = html
|
||||||
.trim()
|
.trim()
|
||||||
.match('<img.*?data-origin="(.*?)"[^a]+alt="(.*?)">([^<]*?)$');
|
.match('<p><img.*?data-origin="(.*?)"[^a]+alt="(.*?)">([^<]*?)</p>$');
|
||||||
|
|
||||||
if (m) {
|
if (m) {
|
||||||
if (m[2] === 'color') {
|
if (m[2] === 'color') {
|
||||||
@@ -4123,17 +4370,6 @@ function renderMixin(proto) {
|
|||||||
html = html.replace(m[0], '');
|
html = html.replace(m[0], '');
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: A Workaround
|
|
||||||
html = html
|
|
||||||
.split('\n')
|
|
||||||
.map(function (part) {
|
|
||||||
if (/^<a/.test(part)) {
|
|
||||||
return part.replace('<a', '<a data-button')
|
|
||||||
}
|
|
||||||
return part
|
|
||||||
})
|
|
||||||
.join('\n');
|
|
||||||
|
|
||||||
this._renderTo('.cover-main', html);
|
this._renderTo('.cover-main', html);
|
||||||
sticky();
|
sticky();
|
||||||
};
|
};
|
||||||
@@ -4805,7 +5041,13 @@ var util = Object.freeze({
|
|||||||
});
|
});
|
||||||
|
|
||||||
function initGlobalAPI () {
|
function initGlobalAPI () {
|
||||||
window.Docsify = {util: util, dom: dom, get: get, slugify: slugify};
|
window.Docsify = {
|
||||||
|
util: util,
|
||||||
|
dom: dom,
|
||||||
|
get: get,
|
||||||
|
slugify: slugify,
|
||||||
|
version: '4.9.1'
|
||||||
|
};
|
||||||
window.DocsifyCompiler = Compiler;
|
window.DocsifyCompiler = Compiler;
|
||||||
window.marked = marked;
|
window.marked = marked;
|
||||||
window.Prism = prism;
|
window.Prism = prism;
|
||||||
@@ -4841,11 +5083,6 @@ eventMixin(proto);
|
|||||||
*/
|
*/
|
||||||
initGlobalAPI();
|
initGlobalAPI();
|
||||||
|
|
||||||
/**
|
|
||||||
* Version
|
|
||||||
*/
|
|
||||||
Docsify.version = '4.8.2';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run Docsify
|
* Run Docsify
|
||||||
*/
|
*/
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
@@ -893,7 +893,7 @@ var AllGithubEmoji = [
|
|||||||
window.emojify = function (match, $1) {
|
window.emojify = function (match, $1) {
|
||||||
return AllGithubEmoji.indexOf($1) === -1 ?
|
return AllGithubEmoji.indexOf($1) === -1 ?
|
||||||
match :
|
match :
|
||||||
'<img class="emoji" src="https://assets-cdn.github.com/images/icons/emoji/' +
|
'<img class="emoji" src="https://github.githubassets.com/images/icons/emoji/' +
|
||||||
$1 +
|
$1 +
|
||||||
'.png" alt="' +
|
'.png" alt="' +
|
||||||
$1 +
|
$1 +
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+26
-8
@@ -1,6 +1,18 @@
|
|||||||
(function () {
|
(function () {
|
||||||
var INDEXS = {};
|
var INDEXS = {};
|
||||||
|
|
||||||
|
var LOCAL_STORAGE = {
|
||||||
|
EXPIRE_KEY: 'docsify.search.expires',
|
||||||
|
INDEX_KEY: 'docsify.search.index'
|
||||||
|
};
|
||||||
|
|
||||||
|
function resolveExpireKey(namespace) {
|
||||||
|
return namespace ? ((LOCAL_STORAGE.EXPIRE_KEY) + "/" + namespace) : LOCAL_STORAGE.EXPIRE_KEY
|
||||||
|
}
|
||||||
|
function resolveIndexKey(namespace) {
|
||||||
|
return namespace ? ((LOCAL_STORAGE.INDEX_KEY) + "/" + namespace) : LOCAL_STORAGE.INDEX_KEY
|
||||||
|
}
|
||||||
|
|
||||||
function escapeHtml(string) {
|
function escapeHtml(string) {
|
||||||
var entityMap = {
|
var entityMap = {
|
||||||
'&': '&',
|
'&': '&',
|
||||||
@@ -17,7 +29,7 @@ function escapeHtml(string) {
|
|||||||
function getAllPaths(router) {
|
function getAllPaths(router) {
|
||||||
var paths = [];
|
var paths = [];
|
||||||
|
|
||||||
document.querySelectorAll('.sidebar-nav a:not(.section-link):not([data-nosearch])').forEach(function (node) {
|
Docsify.dom.findAll('.sidebar-nav a:not(.section-link):not([data-nosearch])').forEach(function (node) {
|
||||||
var href = node.href;
|
var href = node.href;
|
||||||
var originHref = node.getAttribute('href');
|
var originHref = node.getAttribute('href');
|
||||||
var path = router.parse(href).path;
|
var path = router.parse(href).path;
|
||||||
@@ -34,9 +46,9 @@ function getAllPaths(router) {
|
|||||||
return paths
|
return paths
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveData(maxAge) {
|
function saveData(maxAge, expireKey, indexKey) {
|
||||||
localStorage.setItem('docsify.search.expires', Date.now() + maxAge);
|
localStorage.setItem(expireKey, Date.now() + maxAge);
|
||||||
localStorage.setItem('docsify.search.index', JSON.stringify(INDEXS));
|
localStorage.setItem(indexKey, JSON.stringify(INDEXS));
|
||||||
}
|
}
|
||||||
|
|
||||||
function genIndex(path, content, router, depth) {
|
function genIndex(path, content, router, depth) {
|
||||||
@@ -154,9 +166,13 @@ function search(query) {
|
|||||||
|
|
||||||
function init$1(config, vm) {
|
function init$1(config, vm) {
|
||||||
var isAuto = config.paths === 'auto';
|
var isAuto = config.paths === 'auto';
|
||||||
var isExpired = localStorage.getItem('docsify.search.expires') < Date.now();
|
|
||||||
|
|
||||||
INDEXS = JSON.parse(localStorage.getItem('docsify.search.index'));
|
var expireKey = resolveExpireKey(config.namespace);
|
||||||
|
var indexKey = resolveIndexKey(config.namespace);
|
||||||
|
|
||||||
|
var isExpired = localStorage.getItem(expireKey) < Date.now();
|
||||||
|
|
||||||
|
INDEXS = JSON.parse(localStorage.getItem(indexKey));
|
||||||
|
|
||||||
if (isExpired) {
|
if (isExpired) {
|
||||||
INDEXS = {};
|
INDEXS = {};
|
||||||
@@ -177,7 +193,7 @@ function init$1(config, vm) {
|
|||||||
.get(vm.router.getFile(path), false, vm.config.requestHeaders)
|
.get(vm.router.getFile(path), false, vm.config.requestHeaders)
|
||||||
.then(function (result) {
|
.then(function (result) {
|
||||||
INDEXS[path] = genIndex(path, result, vm.router, config.depth);
|
INDEXS[path] = genIndex(path, result, vm.router, config.depth);
|
||||||
len === ++count && saveData(config.maxAge);
|
len === ++count && saveData(config.maxAge, expireKey, indexKey);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -311,7 +327,8 @@ var CONFIG = {
|
|||||||
paths: 'auto',
|
paths: 'auto',
|
||||||
depth: 2,
|
depth: 2,
|
||||||
maxAge: 86400000, // 1 day
|
maxAge: 86400000, // 1 day
|
||||||
hideOtherSidebarContent: false
|
hideOtherSidebarContent: false,
|
||||||
|
namespace: undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
var install = function (hook, vm) {
|
var install = function (hook, vm) {
|
||||||
@@ -327,6 +344,7 @@ var install = function (hook, vm) {
|
|||||||
CONFIG.noData = opts.noData || CONFIG.noData;
|
CONFIG.noData = opts.noData || CONFIG.noData;
|
||||||
CONFIG.depth = opts.depth || CONFIG.depth;
|
CONFIG.depth = opts.depth || CONFIG.depth;
|
||||||
CONFIG.hideOtherSidebarContent = opts.hideOtherSidebarContent || CONFIG.hideOtherSidebarContent;
|
CONFIG.hideOtherSidebarContent = opts.hideOtherSidebarContent || CONFIG.hideOtherSidebarContent;
|
||||||
|
CONFIG.namespace = opts.namespace || CONFIG.namespace;
|
||||||
}
|
}
|
||||||
|
|
||||||
var isAuto = CONFIG.paths === 'auto';
|
var isAuto = CONFIG.paths === 'auto';
|
||||||
|
|||||||
Vendored
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Generated
+897
-261
File diff suppressed because it is too large
Load Diff
+8
-4
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "docsify",
|
"name": "docsify",
|
||||||
"version": "4.8.2",
|
"version": "4.9.1",
|
||||||
"description": "A magical documentation generator.",
|
"description": "A magical documentation generator.",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "qingwei-li",
|
"name": "qingwei-li",
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
"dev": "run-p serve watch:*",
|
"dev": "run-p serve watch:*",
|
||||||
"dev:ssr": "run-p serve:ssr watch:*",
|
"dev:ssr": "run-p serve:ssr watch:*",
|
||||||
"lint": "eslint {src,packages} --fix",
|
"lint": "eslint {src,packages} --fix",
|
||||||
"test": "run-p lint",
|
"test": "mocha test/*/**",
|
||||||
"css": "stylus src/themes/*.styl -u autoprefixer-stylus",
|
"css": "stylus src/themes/*.styl -u autoprefixer-stylus",
|
||||||
"watch:css": "run-p 'css -- -o themes -w'",
|
"watch:css": "run-p 'css -- -o themes -w'",
|
||||||
"watch:js": "node build/build.js",
|
"watch:js": "node build/build.js",
|
||||||
@@ -51,15 +51,19 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"autoprefixer-stylus": "^0.14.0",
|
"autoprefixer-stylus": "^0.14.0",
|
||||||
|
"chai": "^4.2.0",
|
||||||
"chokidar": "^2.0.2",
|
"chokidar": "^2.0.2",
|
||||||
"conventional-changelog-cli": "^1.3.5",
|
"conventional-changelog-cli": "^1.3.5",
|
||||||
"cross-env": "^5.1.3",
|
"cross-env": "^5.1.3",
|
||||||
"cssnano": "^3.10.0",
|
"cssnano": "^3.10.0",
|
||||||
"eslint": "^4.14.0",
|
"eslint": "^4.14.0",
|
||||||
"eslint-config-xo-space": "^0.18.0",
|
"eslint-config-xo-space": "^0.18.0",
|
||||||
|
"esm": "^3.1.4",
|
||||||
|
"jsdom": "^13.2.0",
|
||||||
"lerna": "^2.5.1",
|
"lerna": "^2.5.1",
|
||||||
"live-server": "^1.2.0",
|
"live-server": "^1.2.1",
|
||||||
"npm-run-all": "^4.1.2",
|
"mocha": "^5.2.0",
|
||||||
|
"npm-run-all": "^4.1.5",
|
||||||
"rimraf": "^2.6.2",
|
"rimraf": "^2.6.2",
|
||||||
"rollup": "^0.53.3",
|
"rollup": "^0.53.3",
|
||||||
"rollup-plugin-async": "^1.2.0",
|
"rollup-plugin-async": "^1.2.0",
|
||||||
|
|||||||
+1
-1
@@ -37,5 +37,5 @@
|
|||||||
"integrity": "sha1-6DWIAbhrg7F1YNTjw4LXrvIQCUQ="
|
"integrity": "sha1-6DWIAbhrg7F1YNTjw4LXrvIQCUQ="
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"version": "4.8.2"
|
"version": "4.9.1"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "docsify-server-renderer",
|
"name": "docsify-server-renderer",
|
||||||
"version": "4.8.2",
|
"version": "4.9.1",
|
||||||
"description": "docsify server renderer",
|
"description": "docsify server renderer",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "qingwei-li",
|
"name": "qingwei-li",
|
||||||
|
|||||||
+2
-1
@@ -25,7 +25,8 @@ export default function () {
|
|||||||
formatUpdated: '',
|
formatUpdated: '',
|
||||||
externalLinkTarget: '_blank',
|
externalLinkTarget: '_blank',
|
||||||
routerMode: 'hash',
|
routerMode: 'hash',
|
||||||
noCompileLinks: []
|
noCompileLinks: [],
|
||||||
|
relativePath: false
|
||||||
},
|
},
|
||||||
window.$docsify
|
window.$docsify
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -87,7 +87,10 @@ export function scrollActiveSidebar(router) {
|
|||||||
coverHeight = cover ? cover.offsetHeight : 0
|
coverHeight = cover ? cover.offsetHeight : 0
|
||||||
|
|
||||||
const sidebar = dom.getNode('.sidebar')
|
const sidebar = dom.getNode('.sidebar')
|
||||||
const lis = dom.findAll(sidebar, 'li')
|
let lis = []
|
||||||
|
if (sidebar != null) {
|
||||||
|
lis = dom.findAll(sidebar, 'li')
|
||||||
|
}
|
||||||
|
|
||||||
for (let i = 0, len = lis.length; i < len; i += 1) {
|
for (let i = 0, len = lis.length; i < len; i += 1) {
|
||||||
const li = lis[i]
|
const li = lis[i]
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ export function btn(el) {
|
|||||||
const toggle = _ => dom.body.classList.toggle('close')
|
const toggle = _ => dom.body.classList.toggle('close')
|
||||||
|
|
||||||
el = dom.getNode(el)
|
el = dom.getNode(el)
|
||||||
|
if (el == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
dom.on(el, 'click', e => {
|
dom.on(el, 'click', e => {
|
||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
toggle()
|
toggle()
|
||||||
@@ -24,7 +27,9 @@ export function btn(el) {
|
|||||||
|
|
||||||
export function collapse(el) {
|
export function collapse(el) {
|
||||||
el = dom.getNode(el)
|
el = dom.getNode(el)
|
||||||
|
if (el == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
dom.on(el, 'click', ({target}) => {
|
dom.on(el, 'click', ({target}) => {
|
||||||
if (
|
if (
|
||||||
target.nodeName === 'A' &&
|
target.nodeName === 'A' &&
|
||||||
@@ -60,8 +65,10 @@ export function sticky() {
|
|||||||
*/
|
*/
|
||||||
export function getAndActive(router, el, isParent, autoTitle) {
|
export function getAndActive(router, el, isParent, autoTitle) {
|
||||||
el = dom.getNode(el)
|
el = dom.getNode(el)
|
||||||
|
let links = []
|
||||||
const links = dom.findAll(el, 'a')
|
if (el != null) {
|
||||||
|
links = dom.findAll(el, 'a')
|
||||||
|
}
|
||||||
const hash = decodeURI(router.toURL(router.getCurrentPath()))
|
const hash = decodeURI(router.toURL(router.getCurrentPath()))
|
||||||
let target
|
let target
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,13 @@ import marked from 'marked'
|
|||||||
import prism from 'prismjs'
|
import prism from 'prismjs'
|
||||||
|
|
||||||
export default function () {
|
export default function () {
|
||||||
window.Docsify = {util, dom, get, slugify}
|
window.Docsify = {
|
||||||
|
util,
|
||||||
|
dom,
|
||||||
|
get,
|
||||||
|
slugify,
|
||||||
|
version: '__VERSION__'
|
||||||
|
}
|
||||||
window.DocsifyCompiler = Compiler
|
window.DocsifyCompiler = Compiler
|
||||||
window.marked = marked
|
window.marked = marked
|
||||||
window.Prism = prism
|
window.Prism = prism
|
||||||
|
|||||||
@@ -35,11 +35,6 @@ eventMixin(proto)
|
|||||||
*/
|
*/
|
||||||
initGlobalAPI()
|
initGlobalAPI()
|
||||||
|
|
||||||
/**
|
|
||||||
* Version
|
|
||||||
*/
|
|
||||||
Docsify.version = '__VERSION__'
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run Docsify
|
* Run Docsify
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export function getAndRemoveConfig(str = '') {
|
|||||||
str = str
|
str = str
|
||||||
.replace(/^'/, '')
|
.replace(/^'/, '')
|
||||||
.replace(/'$/, '')
|
.replace(/'$/, '')
|
||||||
.replace(/:([\w-]+)=?([\w-]+)?/g, (m, key, value) => {
|
.replace(/(?:^|\s):([\w-]+)=?([\w-]+)?/g, (m, key, value) => {
|
||||||
config[key] = (value && value.replace(/"/g, '')) || true
|
config[key] = (value && value.replace(/"/g, '')) || true
|
||||||
return ''
|
return ''
|
||||||
})
|
})
|
||||||
@@ -164,6 +164,7 @@ export class Compiler {
|
|||||||
embed = compileMedia[type].call(this, href, title)
|
embed = compileMedia[type].call(this, href, title)
|
||||||
embed.type = type
|
embed.type = type
|
||||||
}
|
}
|
||||||
|
embed.fragment = config.fragment
|
||||||
|
|
||||||
return embed
|
return embed
|
||||||
}
|
}
|
||||||
@@ -241,7 +242,7 @@ export class Compiler {
|
|||||||
}
|
}
|
||||||
href = router.toURL(href, null, router.getCurrentPath())
|
href = router.toURL(href, null, router.getCurrentPath())
|
||||||
} else {
|
} else {
|
||||||
attrs += href.startsWith('mailto:') ? '' : ` target="${linkTarget}"`
|
attrs += href.indexOf('mailto:') === 0 ? '' : ` target="${linkTarget}"`
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.target) {
|
if (config.target) {
|
||||||
@@ -265,8 +266,6 @@ export class Compiler {
|
|||||||
result = helperTpl('tip', text)
|
result = helperTpl('tip', text)
|
||||||
} else if (/^\?>/.test(text)) {
|
} else if (/^\?>/.test(text)) {
|
||||||
result = helperTpl('warn', text)
|
result = helperTpl('warn', text)
|
||||||
} else if (/^</.test(text)) {
|
|
||||||
return text
|
|
||||||
} else {
|
} else {
|
||||||
result = `<p>${text}</p>`
|
result = `<p>${text}</p>`
|
||||||
}
|
}
|
||||||
@@ -303,6 +302,23 @@ export class Compiler {
|
|||||||
|
|
||||||
return `<img src="${url}"data-origin="${href}" alt="${text}"${attrs}>`
|
return `<img src="${url}"data-origin="${href}" alt="${text}"${attrs}>`
|
||||||
}
|
}
|
||||||
|
origin.list = renderer.list = function (body, ordered, start) {
|
||||||
|
const isTaskList = /<li class="task-list-item">/.test(body.split('class="task-list"')[0])
|
||||||
|
const isStartReq = start && start > 1
|
||||||
|
const tag = ordered ? 'ol' : 'ul'
|
||||||
|
const tagAttrs = [
|
||||||
|
(isTaskList ? 'class="task-list"' : ''),
|
||||||
|
(isStartReq ? `start="${start}"` : '')
|
||||||
|
].join(' ').trim()
|
||||||
|
|
||||||
|
return `<${tag} ${tagAttrs}>${body}</${tag}>`
|
||||||
|
}
|
||||||
|
origin.listitem = renderer.listitem = function (text) {
|
||||||
|
const isTaskItem = /^(<input.*type="checkbox"[^>]*>)/.test(text)
|
||||||
|
const html = isTaskItem ? `<li class="task-list-item"><label>${text}</label></li>` : `<li>${text}</li>`
|
||||||
|
|
||||||
|
return html
|
||||||
|
}
|
||||||
|
|
||||||
renderer.origin = origin
|
renderer.origin = origin
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,11 @@ function walkFetchEmbed({embedTokens, compile, fetch}, cb) {
|
|||||||
if (token.embed.type === 'markdown') {
|
if (token.embed.type === 'markdown') {
|
||||||
embedToken = compile.lexer(text)
|
embedToken = compile.lexer(text)
|
||||||
} else if (token.embed.type === 'code') {
|
} else if (token.embed.type === 'code') {
|
||||||
|
if (token.embed.fragment) {
|
||||||
|
const fragment = token.embed.fragment
|
||||||
|
const pattern = new RegExp(`(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]([\\s\\S]*)(?:###|\\/\\/\\/)\\s*\\[${fragment}\\]`)
|
||||||
|
text = ((text.match(pattern) || [])[1] || '').trim()
|
||||||
|
}
|
||||||
embedToken = compile.lexer(
|
embedToken = compile.lexer(
|
||||||
'```' +
|
'```' +
|
||||||
token.embed.lang +
|
token.embed.lang +
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import {inBrowser} from '../util/env'
|
import {inBrowser} from '../util/env'
|
||||||
|
|
||||||
function replace(m, $1) {
|
function replace(m, $1) {
|
||||||
return '<img class="emoji" src="https://assets-cdn.github.com/images/icons/emoji/' + $1 + '.png" alt="' + $1 + '" />'
|
return '<img class="emoji" src="https://github.githubassets.com/images/icons/emoji/' + $1 + '.png" alt="' + $1 + '" />'
|
||||||
}
|
}
|
||||||
|
|
||||||
export function emojify(text) {
|
export function emojify(text) {
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ export function renderMixin(proto) {
|
|||||||
|
|
||||||
const m = html
|
const m = html
|
||||||
.trim()
|
.trim()
|
||||||
.match('<img.*?data-origin="(.*?)"[^a]+alt="(.*?)">([^<]*?)$')
|
.match('<p><img.*?data-origin="(.*?)"[^a]+alt="(.*?)">([^<]*?)</p>$')
|
||||||
|
|
||||||
if (m) {
|
if (m) {
|
||||||
if (m[2] === 'color') {
|
if (m[2] === 'color') {
|
||||||
@@ -198,17 +198,6 @@ export function renderMixin(proto) {
|
|||||||
html = html.replace(m[0], '')
|
html = html.replace(m[0], '')
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: A Workaround
|
|
||||||
html = html
|
|
||||||
.split('\n')
|
|
||||||
.map(part => {
|
|
||||||
if (/^<a/.test(part)) {
|
|
||||||
return part.replace('<a', '<a data-button')
|
|
||||||
}
|
|
||||||
return part
|
|
||||||
})
|
|
||||||
.join('\n')
|
|
||||||
|
|
||||||
this._renderTo('.cover-main', html)
|
this._renderTo('.cover-main', html)
|
||||||
sticky()
|
sticky()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import {
|
|||||||
isAbsolutePath,
|
isAbsolutePath,
|
||||||
stringifyQuery,
|
stringifyQuery,
|
||||||
cleanPath,
|
cleanPath,
|
||||||
replaceSlug
|
replaceSlug,
|
||||||
|
resolvePath
|
||||||
} from '../util'
|
} from '../util'
|
||||||
import {noop, merge} from '../../util/core'
|
import {noop, merge} from '../../util/core'
|
||||||
|
|
||||||
@@ -73,9 +74,13 @@ export class History {
|
|||||||
if (local) {
|
if (local) {
|
||||||
const idIndex = currentRoute.indexOf('?')
|
const idIndex = currentRoute.indexOf('?')
|
||||||
path =
|
path =
|
||||||
(idIndex > 0 ? currentRoute.substr(0, idIndex) : currentRoute) + path
|
(idIndex > 0 ? currentRoute.substring(0, idIndex) : currentRoute) + path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.config.relativePath && path.indexOf('/') !== 0) {
|
||||||
|
const currentDir = currentRoute.substring(0, currentRoute.lastIndexOf('/') + 1)
|
||||||
|
return cleanPath(resolvePath(currentDir + path))
|
||||||
|
}
|
||||||
return cleanPath('/' + path)
|
return cleanPath('/' + path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,20 @@ export const cleanPath = cached(path => {
|
|||||||
return path.replace(/^\/+/, '/').replace(/([^:])\/{2,}/g, '$1/')
|
return path.replace(/^\/+/, '/').replace(/([^:])\/{2,}/g, '$1/')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
export const resolvePath = cached(path => {
|
||||||
|
const segments = path.replace(/^\//, '').split('/')
|
||||||
|
let resolved = []
|
||||||
|
for (let i = 0, len = segments.length; i < len; i++) {
|
||||||
|
const segment = segments[i]
|
||||||
|
if (segment === '..') {
|
||||||
|
resolved.pop()
|
||||||
|
} else if (segment !== '.') {
|
||||||
|
resolved.push(segment)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '/' + resolved.join('/')
|
||||||
|
})
|
||||||
|
|
||||||
export function getPath(...args) {
|
export function getPath(...args) {
|
||||||
return cleanPath(args.join('/'))
|
return cleanPath(args.join('/'))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -892,7 +892,7 @@ const AllGithubEmoji = [
|
|||||||
window.emojify = function (match, $1) {
|
window.emojify = function (match, $1) {
|
||||||
return AllGithubEmoji.indexOf($1) === -1 ?
|
return AllGithubEmoji.indexOf($1) === -1 ?
|
||||||
match :
|
match :
|
||||||
'<img class="emoji" src="https://assets-cdn.github.com/images/icons/emoji/' +
|
'<img class="emoji" src="https://github.githubassets.com/images/icons/emoji/' +
|
||||||
$1 +
|
$1 +
|
||||||
'.png" alt="' +
|
'.png" alt="' +
|
||||||
$1 +
|
$1 +
|
||||||
|
|||||||
+10
-4
@@ -7,10 +7,16 @@ function install(hook) {
|
|||||||
const main = dom.getNode('#main')
|
const main = dom.getNode('#main')
|
||||||
div.style = `width: ${main.clientWidth}px; margin: 0 auto 20px;`
|
div.style = `width: ${main.clientWidth}px; margin: 0 auto 20px;`
|
||||||
dom.appendTo(dom.find('.content'), div)
|
dom.appendTo(dom.find('.content'), div)
|
||||||
const script = dom.create('script')
|
})
|
||||||
const content = `gitalk.render('gitalk-container')`
|
|
||||||
script.textContent = content
|
hook.doneEach(_ => {
|
||||||
dom.appendTo(dom.body, script)
|
const el = document.getElementById('gitalk-container')
|
||||||
|
while (el.hasChildNodes()) {
|
||||||
|
el.removeChild(el.firstChild)
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line
|
||||||
|
gitalk.render('gitalk-container')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ const CONFIG = {
|
|||||||
paths: 'auto',
|
paths: 'auto',
|
||||||
depth: 2,
|
depth: 2,
|
||||||
maxAge: 86400000, // 1 day
|
maxAge: 86400000, // 1 day
|
||||||
hideOtherSidebarContent: false
|
hideOtherSidebarContent: false,
|
||||||
|
namespace: undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
const install = function (hook, vm) {
|
const install = function (hook, vm) {
|
||||||
@@ -23,6 +24,7 @@ const install = function (hook, vm) {
|
|||||||
CONFIG.noData = opts.noData || CONFIG.noData
|
CONFIG.noData = opts.noData || CONFIG.noData
|
||||||
CONFIG.depth = opts.depth || CONFIG.depth
|
CONFIG.depth = opts.depth || CONFIG.depth
|
||||||
CONFIG.hideOtherSidebarContent = opts.hideOtherSidebarContent || CONFIG.hideOtherSidebarContent
|
CONFIG.hideOtherSidebarContent = opts.hideOtherSidebarContent || CONFIG.hideOtherSidebarContent
|
||||||
|
CONFIG.namespace = opts.namespace || CONFIG.namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
const isAuto = CONFIG.paths === 'auto'
|
const isAuto = CONFIG.paths === 'auto'
|
||||||
|
|||||||
@@ -1,5 +1,17 @@
|
|||||||
let INDEXS = {}
|
let INDEXS = {}
|
||||||
|
|
||||||
|
const LOCAL_STORAGE = {
|
||||||
|
EXPIRE_KEY: 'docsify.search.expires',
|
||||||
|
INDEX_KEY: 'docsify.search.index'
|
||||||
|
}
|
||||||
|
|
||||||
|
function resolveExpireKey(namespace) {
|
||||||
|
return namespace ? `${LOCAL_STORAGE.EXPIRE_KEY}/${namespace}` : LOCAL_STORAGE.EXPIRE_KEY
|
||||||
|
}
|
||||||
|
function resolveIndexKey(namespace) {
|
||||||
|
return namespace ? `${LOCAL_STORAGE.INDEX_KEY}/${namespace}` : LOCAL_STORAGE.INDEX_KEY
|
||||||
|
}
|
||||||
|
|
||||||
function escapeHtml(string) {
|
function escapeHtml(string) {
|
||||||
const entityMap = {
|
const entityMap = {
|
||||||
'&': '&',
|
'&': '&',
|
||||||
@@ -16,7 +28,7 @@ function escapeHtml(string) {
|
|||||||
function getAllPaths(router) {
|
function getAllPaths(router) {
|
||||||
const paths = []
|
const paths = []
|
||||||
|
|
||||||
document.querySelectorAll('.sidebar-nav a:not(.section-link):not([data-nosearch])').forEach(node => {
|
Docsify.dom.findAll('.sidebar-nav a:not(.section-link):not([data-nosearch])').forEach(node => {
|
||||||
const href = node.href
|
const href = node.href
|
||||||
const originHref = node.getAttribute('href')
|
const originHref = node.getAttribute('href')
|
||||||
const path = router.parse(href).path
|
const path = router.parse(href).path
|
||||||
@@ -33,9 +45,9 @@ function getAllPaths(router) {
|
|||||||
return paths
|
return paths
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveData(maxAge) {
|
function saveData(maxAge, expireKey, indexKey) {
|
||||||
localStorage.setItem('docsify.search.expires', Date.now() + maxAge)
|
localStorage.setItem(expireKey, Date.now() + maxAge)
|
||||||
localStorage.setItem('docsify.search.index', JSON.stringify(INDEXS))
|
localStorage.setItem(indexKey, JSON.stringify(INDEXS))
|
||||||
}
|
}
|
||||||
|
|
||||||
export function genIndex(path, content = '', router, depth) {
|
export function genIndex(path, content = '', router, depth) {
|
||||||
@@ -149,9 +161,13 @@ export function search(query) {
|
|||||||
|
|
||||||
export function init(config, vm) {
|
export function init(config, vm) {
|
||||||
const isAuto = config.paths === 'auto'
|
const isAuto = config.paths === 'auto'
|
||||||
const isExpired = localStorage.getItem('docsify.search.expires') < Date.now()
|
|
||||||
|
|
||||||
INDEXS = JSON.parse(localStorage.getItem('docsify.search.index'))
|
const expireKey = resolveExpireKey(config.namespace)
|
||||||
|
const indexKey = resolveIndexKey(config.namespace)
|
||||||
|
|
||||||
|
const isExpired = localStorage.getItem(expireKey) < Date.now()
|
||||||
|
|
||||||
|
INDEXS = JSON.parse(localStorage.getItem(indexKey))
|
||||||
|
|
||||||
if (isExpired) {
|
if (isExpired) {
|
||||||
INDEXS = {}
|
INDEXS = {}
|
||||||
@@ -172,7 +188,7 @@ export function init(config, vm) {
|
|||||||
.get(vm.router.getFile(path), false, vm.config.requestHeaders)
|
.get(vm.router.getFile(path), false, vm.config.requestHeaders)
|
||||||
.then(result => {
|
.then(result => {
|
||||||
INDEXS[path] = genIndex(path, result, vm.router, config.depth)
|
INDEXS[path] = genIndex(path, result, vm.router, config.depth)
|
||||||
len === ++count && saveData(config.maxAge)
|
len === ++count && saveData(config.maxAge, expireKey, indexKey)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ section.cover
|
|||||||
max-width 500px
|
max-width 500px
|
||||||
padding 0
|
padding 0
|
||||||
|
|
||||||
.cover-main > a[data-button]
|
.cover-main > p:last-child a
|
||||||
border-color var(--theme-color, $color-primary)
|
border-color var(--theme-color, $color-primary)
|
||||||
border-radius 2rem
|
border-radius 2rem
|
||||||
border-style solid
|
border-style solid
|
||||||
|
|||||||
@@ -323,6 +323,9 @@ body.sticky
|
|||||||
|
|
||||||
.markdown-section iframe
|
.markdown-section iframe
|
||||||
border 1px solid #eee
|
border 1px solid #eee
|
||||||
|
/* fix horizontal overflow on iOS Safari */
|
||||||
|
width 1px
|
||||||
|
min-width 100%
|
||||||
|
|
||||||
.markdown-section table
|
.markdown-section table
|
||||||
border-collapse collapse
|
border-collapse collapse
|
||||||
@@ -383,6 +386,9 @@ body.sticky
|
|||||||
border-radius 2px
|
border-radius 2px
|
||||||
padding 1rem
|
padding 1rem
|
||||||
|
|
||||||
|
.markdown-section ul.task-list > li
|
||||||
|
list-style-type none
|
||||||
|
|
||||||
body.close
|
body.close
|
||||||
.sidebar
|
.sidebar
|
||||||
transform translateX(- $sidebar-width)
|
transform translateX(- $sidebar-width)
|
||||||
|
|||||||
@@ -0,0 +1,228 @@
|
|||||||
|
@import url('https://fonts.googleapis.com/css?family=Thasadith:400,400i,700')
|
||||||
|
|
||||||
|
$color-primary = #00ffff
|
||||||
|
$color-bg = #f0ffff
|
||||||
|
$color-text = #34495e
|
||||||
|
$sidebar-width = 300px
|
||||||
|
|
||||||
|
@import 'basic/_layout'
|
||||||
|
@import 'basic/_coverpage'
|
||||||
|
|
||||||
|
body
|
||||||
|
background-color $color-bg
|
||||||
|
|
||||||
|
/* sidebar */
|
||||||
|
.sidebar
|
||||||
|
background-color $color-bg
|
||||||
|
color #364149
|
||||||
|
|
||||||
|
li
|
||||||
|
margin 6px 0 6px 0
|
||||||
|
|
||||||
|
ul li a
|
||||||
|
color #505d6b
|
||||||
|
font-size 14px
|
||||||
|
font-weight normal
|
||||||
|
overflow hidden
|
||||||
|
text-decoration none
|
||||||
|
text-overflow ellipsis
|
||||||
|
white-space nowrap
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
text-decoration underline
|
||||||
|
|
||||||
|
ul li ul
|
||||||
|
padding 0
|
||||||
|
|
||||||
|
ul li.active > a
|
||||||
|
border-right 2px solid
|
||||||
|
color var(--theme-color, $color-primary)
|
||||||
|
font-weight 600
|
||||||
|
|
||||||
|
.app-sub-sidebar
|
||||||
|
li
|
||||||
|
&::before
|
||||||
|
content '-'
|
||||||
|
padding-right 4px
|
||||||
|
float left
|
||||||
|
|
||||||
|
/* markdown content found on pages */
|
||||||
|
.markdown-section h1, .markdown-section h2, .markdown-section h3, .markdown-section h4, .markdown-section strong
|
||||||
|
color #2c3e50
|
||||||
|
font-weight 600
|
||||||
|
|
||||||
|
.markdown-section a
|
||||||
|
color var(--theme-color, $color-primary)
|
||||||
|
font-weight 600
|
||||||
|
|
||||||
|
&:hover
|
||||||
|
text-decoration underline
|
||||||
|
|
||||||
|
.markdown-section h1
|
||||||
|
font-size 2rem
|
||||||
|
margin 0 0 1rem
|
||||||
|
|
||||||
|
.markdown-section h2
|
||||||
|
font-size 1.75rem
|
||||||
|
margin 45px 0 0.8rem
|
||||||
|
|
||||||
|
.markdown-section h3
|
||||||
|
font-size 1.5rem
|
||||||
|
margin 40px 0 0.6rem
|
||||||
|
|
||||||
|
.markdown-section h4
|
||||||
|
font-size 1.25rem
|
||||||
|
|
||||||
|
.markdown-section h5
|
||||||
|
font-size 1rem
|
||||||
|
|
||||||
|
.markdown-section h6
|
||||||
|
color #777
|
||||||
|
font-size 1rem
|
||||||
|
|
||||||
|
.markdown-section figure, .markdown-section p
|
||||||
|
margin 1.2em 0
|
||||||
|
|
||||||
|
.markdown-section p, .markdown-section ul, .markdown-section ol
|
||||||
|
line-height 1.6rem
|
||||||
|
word-spacing 0.05rem
|
||||||
|
|
||||||
|
.markdown-section ul, .markdown-section ol
|
||||||
|
padding-left 1.5rem
|
||||||
|
|
||||||
|
.markdown-section blockquote
|
||||||
|
border-left 4px solid var(--theme-color, $color-primary)
|
||||||
|
color #858585
|
||||||
|
margin 2em 0
|
||||||
|
padding-left 20px
|
||||||
|
|
||||||
|
.markdown-section blockquote p
|
||||||
|
font-weight 600
|
||||||
|
margin-left 0
|
||||||
|
|
||||||
|
.markdown-section iframe
|
||||||
|
margin 1em 0
|
||||||
|
|
||||||
|
.markdown-section em
|
||||||
|
color #7f8c8d
|
||||||
|
|
||||||
|
.markdown-section code
|
||||||
|
background-color #f8f8f8
|
||||||
|
border-radius 2px
|
||||||
|
color #e96900
|
||||||
|
font-family 'Roboto Mono', Monaco, courier, monospace
|
||||||
|
font-size 0.8rem
|
||||||
|
margin 0 2px
|
||||||
|
padding 3px 5px
|
||||||
|
white-space pre-wrap
|
||||||
|
|
||||||
|
.markdown-section pre
|
||||||
|
-moz-osx-font-smoothing initial
|
||||||
|
-webkit-font-smoothing initial
|
||||||
|
background-color #f8f8f8
|
||||||
|
font-family 'Roboto Mono', Monaco, courier, monospace
|
||||||
|
line-height 1.5rem
|
||||||
|
margin 1.2em 0
|
||||||
|
overflow auto
|
||||||
|
padding 0 1.4rem
|
||||||
|
position relative
|
||||||
|
word-wrap normal
|
||||||
|
|
||||||
|
/* code highlight */
|
||||||
|
.token.comment, .token.prolog, .token.doctype, .token.cdata
|
||||||
|
color #8e908c
|
||||||
|
|
||||||
|
.token.namespace
|
||||||
|
opacity 0.7
|
||||||
|
|
||||||
|
.token.boolean, .token.number
|
||||||
|
color #c76b29
|
||||||
|
|
||||||
|
.token.punctuation
|
||||||
|
color #525252
|
||||||
|
|
||||||
|
.token.property
|
||||||
|
color #c08b30
|
||||||
|
|
||||||
|
.token.tag
|
||||||
|
color #2973b7
|
||||||
|
|
||||||
|
.token.string
|
||||||
|
color var(--theme-color, $color-primary)
|
||||||
|
|
||||||
|
.token.selector
|
||||||
|
color #6679cc
|
||||||
|
|
||||||
|
.token.attr-name
|
||||||
|
color #2973b7
|
||||||
|
|
||||||
|
.token.entity, .token.url, .language-css .token.string, .style .token.string
|
||||||
|
color #22a2c9
|
||||||
|
|
||||||
|
.token.attr-value, .token.control, .token.directive, .token.unit
|
||||||
|
color var(--theme-color, $color-primary)
|
||||||
|
|
||||||
|
.token.keyword, .token.function
|
||||||
|
color #e96900
|
||||||
|
|
||||||
|
.token.statement, .token.regex, .token.atrule
|
||||||
|
color #22a2c9
|
||||||
|
|
||||||
|
.token.placeholder, .token.variable
|
||||||
|
color #3d8fd1
|
||||||
|
|
||||||
|
.token.deleted
|
||||||
|
text-decoration line-through
|
||||||
|
|
||||||
|
.token.inserted
|
||||||
|
border-bottom 1px dotted #202746
|
||||||
|
text-decoration none
|
||||||
|
|
||||||
|
.token.italic
|
||||||
|
font-style italic
|
||||||
|
|
||||||
|
.token.important, .token.bold
|
||||||
|
font-weight bold
|
||||||
|
|
||||||
|
.token.important
|
||||||
|
color #c94922
|
||||||
|
|
||||||
|
.token.entity
|
||||||
|
cursor help
|
||||||
|
|
||||||
|
.markdown-section pre > code
|
||||||
|
-moz-osx-font-smoothing initial
|
||||||
|
-webkit-font-smoothing initial
|
||||||
|
background-color #f8f8f8
|
||||||
|
border-radius 2px
|
||||||
|
color #525252
|
||||||
|
display block
|
||||||
|
font-family 'Roboto Mono', Monaco, courier, monospace
|
||||||
|
font-size 0.8rem
|
||||||
|
line-height inherit
|
||||||
|
margin 0 2px
|
||||||
|
max-width inherit
|
||||||
|
overflow inherit
|
||||||
|
padding 2.2em 5px
|
||||||
|
white-space inherit
|
||||||
|
|
||||||
|
.markdown-section code::after, .markdown-section code::before
|
||||||
|
letter-spacing 0.05rem
|
||||||
|
|
||||||
|
code .token
|
||||||
|
-moz-osx-font-smoothing initial
|
||||||
|
-webkit-font-smoothing initial
|
||||||
|
min-height 1.5rem
|
||||||
|
|
||||||
|
pre::after
|
||||||
|
color #ccc
|
||||||
|
content attr(data-lang)
|
||||||
|
font-size 0.6rem
|
||||||
|
font-weight 600
|
||||||
|
height 15px
|
||||||
|
line-height 15px
|
||||||
|
padding 5px 10px 0
|
||||||
|
position absolute
|
||||||
|
right 0
|
||||||
|
text-align right
|
||||||
|
top 0
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
// load ES6 modules in Node.js on the fly
|
||||||
|
require = require('esm')(module/*, options*/)
|
||||||
|
|
||||||
|
const path = require('path')
|
||||||
|
const {expect} = require('chai')
|
||||||
|
|
||||||
|
const {JSDOM} = require('jsdom')
|
||||||
|
|
||||||
|
function ready(callback) {
|
||||||
|
const state = document.readyState
|
||||||
|
|
||||||
|
if (state === 'complete' || state === 'interactive') {
|
||||||
|
return setTimeout(callback, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', callback)
|
||||||
|
}
|
||||||
|
module.exports.init = function(fixture = 'default', config = {}, markup) {
|
||||||
|
if (markup == null) {
|
||||||
|
markup = `<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head></head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script>
|
||||||
|
window.$docsify = ${JSON.stringify(config, null, 2)}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>`
|
||||||
|
}
|
||||||
|
const rootPath = path.join(__dirname, 'fixtures', fixture)
|
||||||
|
|
||||||
|
const dom = new JSDOM(markup)
|
||||||
|
dom.reconfigure({ url: 'file:///' + rootPath })
|
||||||
|
|
||||||
|
global.window = dom.window
|
||||||
|
global.document = dom.window.document
|
||||||
|
global.navigator = dom.window.navigator
|
||||||
|
global.location = dom.window.location
|
||||||
|
global.XMLHttpRequest = dom.window.XMLHttpRequest
|
||||||
|
|
||||||
|
// mimic src/core/index.js but for Node.js
|
||||||
|
function Docsify() {
|
||||||
|
this._init()
|
||||||
|
}
|
||||||
|
|
||||||
|
const proto = Docsify.prototype
|
||||||
|
|
||||||
|
const {initMixin} = require('../src/core/init')
|
||||||
|
const {routerMixin} = require('../src/core//router')
|
||||||
|
const {renderMixin} = require('../src/core//render')
|
||||||
|
const {fetchMixin} = require('../src/core/fetch')
|
||||||
|
const {eventMixin} = require('../src/core//event')
|
||||||
|
|
||||||
|
initMixin(proto)
|
||||||
|
routerMixin(proto)
|
||||||
|
renderMixin(proto)
|
||||||
|
fetchMixin(proto)
|
||||||
|
eventMixin(proto)
|
||||||
|
|
||||||
|
const NOT_INIT_PATTERN = '<!--main-->'
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
ready(() => {
|
||||||
|
const docsify = new Docsify()
|
||||||
|
// NOTE: I was not able to get it working with a callback, but polling works usually at the first time
|
||||||
|
const id = setInterval(() => {
|
||||||
|
if (dom.window.document.body.innerHTML.indexOf(NOT_INIT_PATTERN) == -1) {
|
||||||
|
clearInterval(id)
|
||||||
|
return resolve({
|
||||||
|
docsify: docsify,
|
||||||
|
dom: dom
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, 10)
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
module.exports.expectSameDom = function(actual, expected) {
|
||||||
|
const WHITESPACES_BETWEEN_TAGS = />(\s\s+)</g
|
||||||
|
function replacer(match, group1) {
|
||||||
|
return match.replace(group1, '')
|
||||||
|
}
|
||||||
|
expect(actual.replace(WHITESPACES_BETWEEN_TAGS, replacer).trim())
|
||||||
|
.equal(expected.replace(WHITESPACES_BETWEEN_TAGS, replacer).trim())
|
||||||
|
}
|
||||||
Vendored
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<!--
|
||||||
|
|
||||||
|
create your own fixture directory
|
||||||
|
if you need a custom README.md or sidebar
|
||||||
|
|
||||||
|
-->
|
||||||
Vendored
+18
@@ -0,0 +1,18 @@
|
|||||||
|
# Heading
|
||||||
|
|
||||||
|
[another page](other.md)
|
||||||
|
|
||||||
|
## II 1
|
||||||
|
|
||||||
|
### III 1
|
||||||
|
|
||||||
|
#### IV 1
|
||||||
|
|
||||||
|
##### V 1
|
||||||
|
|
||||||
|
|
||||||
|
## II 2
|
||||||
|
|
||||||
|
### III 2
|
||||||
|
|
||||||
|
#### IV 2
|
||||||
Vendored
+16
@@ -0,0 +1,16 @@
|
|||||||
|
# Other
|
||||||
|
|
||||||
|
## two 1
|
||||||
|
|
||||||
|
### three 1
|
||||||
|
|
||||||
|
#### four 1
|
||||||
|
|
||||||
|
##### five 1
|
||||||
|
|
||||||
|
|
||||||
|
## two 2
|
||||||
|
|
||||||
|
### three 2
|
||||||
|
|
||||||
|
#### four 2
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
const {expect} = require('chai')
|
||||||
|
|
||||||
|
const {init, expectSameDom} = require('../_helper')
|
||||||
|
|
||||||
|
describe('full docsify initialization', function() {
|
||||||
|
it('TODO: check generated markup', async function() {
|
||||||
|
const {docsify, dom} = await init('simple', {loadSidebar: true})
|
||||||
|
console.log(dom.window.document.body.innerHTML)
|
||||||
|
// TODO: add some expectations
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
const {expect} = require('chai')
|
||||||
|
|
||||||
|
const {init, expectSameDom} = require('../_helper')
|
||||||
|
|
||||||
|
describe('router', function() {
|
||||||
|
it('TODO: trigger to load another page', async function() {
|
||||||
|
const {docsify} = await init()
|
||||||
|
window.location = '/?foo=bar'
|
||||||
|
// TODO: add some expectations
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/* eslint-env node, chai, mocha */
|
||||||
|
require = require('esm')(module/*, options*/)
|
||||||
|
const {expect} = require('chai')
|
||||||
|
const {History} = require('../../src/core/router/history/base')
|
||||||
|
|
||||||
|
class MockHistory extends History {
|
||||||
|
parse(path) {
|
||||||
|
return {path}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('router/history/base', function () {
|
||||||
|
describe('relativePath true', function () {
|
||||||
|
var history
|
||||||
|
|
||||||
|
beforeEach(function () {
|
||||||
|
history = new MockHistory({relativePath: true})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('toURL', function () {
|
||||||
|
// WHEN
|
||||||
|
const url = history.toURL('guide.md', {}, '/zh-ch/')
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(url).equal('/zh-ch/guide')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('toURL with double dot', function () {
|
||||||
|
// WHEN
|
||||||
|
const url = history.toURL('../README.md', {}, '/zh-ch/')
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(url).equal('/README')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('toURL child path', function () {
|
||||||
|
// WHEN
|
||||||
|
const url = history.toURL('config/example.md', {}, '/zh-ch/')
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(url).equal('/zh-ch/config/example')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('toURL absolute path', function () {
|
||||||
|
// WHEN
|
||||||
|
const url = history.toURL('/README', {}, '/zh-ch/')
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(url).equal('/README')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('toURL without relative path', function () {
|
||||||
|
const history = new MockHistory({relativePath: false})
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
const url = history.toURL('README', {}, '/zh-ch/')
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(url).equal('/README')
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
const {expect} = require('chai')
|
||||||
|
|
||||||
|
const {init, expectSameDom} = require('../_helper')
|
||||||
|
|
||||||
|
describe('render', function() {
|
||||||
|
it('important content (tips)', async function() {
|
||||||
|
const {docsify, dom} = await init()
|
||||||
|
const output = docsify.compiler.compile('!> **Time** is money, my friend!')
|
||||||
|
expect(output).equal('<p class="tip"><strong>Time</strong> is money, my friend!</p>')
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('lists', function() {
|
||||||
|
it('as unordered task list', async function() {
|
||||||
|
const {docsify, dom} = await init()
|
||||||
|
const output = docsify.compiler.compile(`
|
||||||
|
- [x] Task 1
|
||||||
|
- [ ] Task 2
|
||||||
|
- [ ] Task 3`)
|
||||||
|
expect(output, `<ul class="task-list">
|
||||||
|
<li class="task-list-item"><label><input checked="" disabled="" type="checkbox"> Task 1</label></li>
|
||||||
|
<li class="task-list-item"><label><input disabled="" type="checkbox"> Task 2</label></li>
|
||||||
|
<li class="task-list-item"><label><input disabled="" type="checkbox"> Task 3</label></li>
|
||||||
|
</ul>`)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('as ordered task list', async function() {
|
||||||
|
const {docsify, dom} = await init()
|
||||||
|
const output = docsify.compiler.compile(`
|
||||||
|
1. [ ] Task 1
|
||||||
|
2. [x] Task 2`)
|
||||||
|
expectSameDom(output, `<ol class="task-list">
|
||||||
|
<li class="task-list-item"><label><input disabled="" type="checkbox"> Task 1</label></li>
|
||||||
|
<li class="task-list-item"><label><input checked="" disabled="" type="checkbox"> Task 2</label></li>
|
||||||
|
</ol>`)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('normal unordered', async function() {
|
||||||
|
const {docsify, dom} = await init()
|
||||||
|
const output = docsify.compiler.compile(`
|
||||||
|
- [linktext](link)
|
||||||
|
- just text`)
|
||||||
|
expectSameDom(output, `<ul >
|
||||||
|
<li><a href="#/link">linktext</a></li>
|
||||||
|
<li>just text</li>
|
||||||
|
</ul>`)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('unordered with custom start', async function() {
|
||||||
|
const {docsify, dom} = await init()
|
||||||
|
const output = docsify.compiler.compile(`
|
||||||
|
1. first
|
||||||
|
2. second
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
3. third`)
|
||||||
|
expectSameDom(output, `<ol >
|
||||||
|
<li>first</li>
|
||||||
|
<li>second</li>
|
||||||
|
</ol>
|
||||||
|
<p>text</p>
|
||||||
|
<ol start="3">
|
||||||
|
<li>third</li>
|
||||||
|
</ol>`)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('nested', async function() {
|
||||||
|
const {docsify, dom} = await init()
|
||||||
|
const output = docsify.compiler.compile(`
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
- 2 a
|
||||||
|
- 2 b
|
||||||
|
- 3`)
|
||||||
|
expectSameDom(output, `<ul >
|
||||||
|
<li>1</li>
|
||||||
|
<li>2<ul >
|
||||||
|
<li>2 a</li>
|
||||||
|
<li>2 b</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li>3</li>
|
||||||
|
</ul>`)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/* eslint-env node, chai, mocha */
|
||||||
|
require = require('esm')(module/*, options*/)
|
||||||
|
const {expect} = require('chai')
|
||||||
|
const {resolvePath} = require('../../src/core/router/util')
|
||||||
|
|
||||||
|
describe('router/util', function () {
|
||||||
|
it('resolvePath', async function () {
|
||||||
|
// WHEN
|
||||||
|
const result = resolvePath('hello.md')
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(result).equal('/hello.md')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('resolvePath with dot', async function () {
|
||||||
|
// WHEN
|
||||||
|
const result = resolvePath('./hello.md')
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(result).equal('/hello.md')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('resolvePath with two dots', async function () {
|
||||||
|
// WHEN
|
||||||
|
const result = resolvePath('test/../hello.md')
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
expect(result).equal('/hello.md')
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user