Compare commits

...
91 Commits
Author SHA1 Message Date
qingwei.li 2e3fe59702 chore: add changelog 4.3.7 2017-10-02 13:27:16 +08:00
qingwei.li 7923608bc9 [build] 4.3.7 2017-10-02 13:27:15 +08:00
qingwei.li e307308a78 chore: add vscode config 2017-10-02 13:26:45 +08:00
qingwei.li c195d2d1a6 fix(slugify): GitHub compatible heading links, fixed #267 2017-10-02 13:26:36 +08:00
JP Erasmusandcinwell.li 0624e592d8 docs: Add new copy-to-clipboard plugin (#265) 2017-09-28 21:14:09 -05:00
qingwei.li aba2aec0d0 chore: prettier code 2017-09-22 10:07:10 +08:00
qingwei.li a9704b5156 chore: add changelog 4.3.6 2017-09-21 09:51:53 +08:00
qingwei.li 16d730ec3d [build] 4.3.6 2017-09-21 09:51:51 +08:00
qingwei.li 08afec7d2a fix: style for codesponsor plugin 2017-09-21 09:51:02 +08:00
qingwei.li fcee316d2c chore: use unpkg cdn 2017-09-20 10:06:23 +08:00
qingwei.li 1d2b546602 chore: add changelog 4.3.5 2017-09-20 09:03:55 +08:00
qingwei.li 97793bfd6c [build] 4.3.5 2017-09-20 09:03:54 +08:00
qingwei.li ae3f74bfd4 chore: add build script 2017-09-20 09:01:31 +08:00
qingwei.li 04eaf4026b chore: add doc for codesponsor 2017-09-20 09:01:06 +08:00
qingwei.li 46ac4c3fd2 feat(plugin): add codesponsor plugin 2017-09-20 09:00:34 +08:00
Ken Berkeleyandcinwell.li 44dc68c6b2 Add vue2-datatable-component in Showcase (#255)
In my humble opinion, the doc of this project might have a better file structure for multiple languages
2017-09-13 03:38:25 -05:00
Chikara Chanandcinwell.li 6c702d3362 fix: missed symbol (#254) 2017-09-13 03:38:09 -05:00
cinwell.liandGitHub c476e49164 Update README.md 2017-09-11 01:30:48 -05:00
Ying Zhongandcinwell.li 0329bab359 Add xTeko website to showcase (#250) 2017-09-10 22:44:38 -05:00
qingwei.li 62aa161bff chore: add ga 2017-09-11 07:13:46 +08:00
qingwei.li 3854692331 chore: add codesponsor 2017-09-11 07:03:19 +08:00
qingwei.li 2066cb672d chore: add changelog 4.3.4 2017-09-07 23:05:24 +08:00
qingwei.li 5b7b60c553 [build] 4.3.4 2017-09-07 23:05:23 +08:00
qingwei.li 388ed3d685 fix: scroll position issue, fixed #234 2017-09-07 23:04:58 +08:00
qingwei.li e898350a84 chore: update travisci 2017-09-06 18:25:56 +08:00
qingwei.li 9c62fb41b8 chore: add changelog 4.3.3 2017-09-06 17:18:33 +08:00
qingwei.li 9b73b0bf8a [build] 4.3.3 2017-09-06 17:18:32 +08:00
qingwei.li 9d43051791 fix(buble.css): tweaks code block style, fixed #249 2017-09-06 17:17:57 +08:00
Leon Zhangandcinwell.li f0aca1905c feat: add doc for react and vue demo box plugin (#247) 2017-09-05 09:46:05 +08:00
Jeremygaoandcinwell.li 2959497874 bugfix: config.js里面应为routerMode属性而非routerModel (#245) 2017-09-01 16:33:29 +08:00
qingwei.li 5a9921f5e7 chore: add changelog 4.3.2 2017-09-01 15:53:06 +08:00
qingwei.li c9d556d829 [build] 4.3.2 2017-09-01 15:53:04 +08:00
qingwei.li a0e1ea811a feat: add Edit on github plugin (thanks @njleonzhang) 2017-09-01 15:52:35 +08:00
qingwei.li f82f41900e fix: sidebar highlight 2017-09-01 15:50:53 +08:00
Leon Zhangandcinwell.li 7a4d9bc5cd add doc for Edit on github plugin (#244) 2017-09-01 15:43:43 +08:00
qingwei.li 5e522879dd chore: add changelog 4.3.1 2017-08-30 21:54:49 +08:00
qingwei.li a72e7a3a3f [build] 4.3.1 2017-08-30 21:54:48 +08:00
qingwei.li 26c22a9843 chore: add lockfile 2017-08-30 21:54:17 +08:00
fyandcinwell.li 4ce118d60f fixed sidebar item inactive issue & fixed _sidebar.md 404 issue & smooth scroll (#242)
* fixed sidebar item inactive issue & fixed _sidebar.md 404 issue & smooth scroll

* sidebar load fix
2017-08-30 21:48:36 +08:00
Jonasandcinwell.li 3ad1645b90 fix yarn add command (#237)
package is published at `docsify-server-renderer` but README.md refers to `docsify-server-render`
2017-08-18 09:06:34 +08:00
qingwei.li 41967fa8fa chore(docs): fix markdown demo 2017-08-17 17:18:41 +08:00
qingwei.li 48276db15d chore: add changelog 4.3.0 2017-08-17 16:54:12 +08:00
qingwei.li b67ea62c75 [build] 4.3.0 2017-08-17 16:54:10 +08:00
qingwei.li f4800e09f1 feat(markdown): supports mermaid #137 2017-08-17 16:52:54 +08:00
qingwei.li ac10de1c5b chore: update changelog 2017-08-15 23:48:53 +08:00
qingwei.li d6ac7031b0 chore: add changelog 4.2.9 2017-08-15 23:47:21 +08:00
qingwei.li 4417f4669d [build] 4.2.9 2017-08-15 23:47:20 +08:00
qingwei.li b7735066ff chore(*): remove document-ready 2017-08-15 23:46:47 +08:00
yeloandcinwell.li 10045249d3 ensure document ready before init Docsify (#233) 2017-08-15 23:35:27 +08:00
qingwei.li 190710733e chore: add changelog 4.2.8 2017-08-10 08:46:26 +08:00
qingwei.li b292d819fc [build] 4.2.8 2017-08-10 08:46:25 +08:00
qingwei.li 7f270f93c6 feat(compiler): support for setting target attribute for link, fixed #230 2017-08-10 08:45:49 +08:00
qingwei.li c3a149679a chore(*): tweaks changelog 2017-08-05 09:56:53 +08:00
qingwei.li 5efa763075 chore: add changelog 4.2.7 2017-08-05 09:54:25 +08:00
qingwei.li 03a04f7898 [build] 4.2.7 2017-08-05 09:54:24 +08:00
qingwei.li a88252c6b2 fix(style): nowrap => pre-wrap, fixed #228 2017-08-05 09:53:57 +08:00
Nedim Arabacıandcinwell.li 2f5f90750a Noty added to showcase (#226)
Nice documentation site generator! Thanks.
2017-07-28 13:30:09 +08:00
qingwei.li 709c152950 chore: add changelog 4.2.6 2017-07-27 10:03:18 +08:00
qingwei.li b09a5a317e [build] 4.2.6 2017-07-27 10:03:17 +08:00
qingwei.li 628e2115a3 fix(release): release shell 2017-07-27 10:02:49 +08:00
qingwei.li 271dde8f5e chore(*): fix changelog script 2017-07-27 09:58:37 +08:00
qingwei.li 1fa1619278 fix(css): hide the nav when the content has not yet been loaded 2017-07-27 09:50:21 +08:00
qingwei.li 3de3def8a8 chore(*): fix changelog script 2017-07-26 18:55:13 +08:00
qingwei.li fb25726426 chore: add changelog 4.2.4 2017-07-26 18:52:59 +08:00
qingwei.li 36ddc42e91 [release] 4.2.4 2017-07-26 18:52:58 +08:00
qingwei.li abb0f6019f [build] 4.2.4 2017-07-26 18:52:58 +08:00
qingwei.li b8dd346baf fix(render): Remove getRootNode to be compatible with the lower version of Chrome, fixed #225 2017-07-26 18:52:36 +08:00
qingwei.li 7191d702e1 chore(*): add cdn 2017-07-26 08:42:07 +08:00
qingwei.li c039f1bfc0 chore: add changelog 4.2.3 2017-07-26 08:37:36 +08:00
qingwei.li f859d2d0b2 [release] 4.2.3 2017-07-26 08:37:35 +08:00
qingwei.li 9735f4036e [build] 4.2.3 2017-07-26 08:37:35 +08:00
qingwei.li b8a96b867b Merge branch 'master' of github.com:qingwei-li/docsify 2017-07-26 08:37:02 +08:00
qingwei.li b7b589b1bf feat(search): Supports the max depth of the search headline, fixed #223, resolve #129 2017-07-26 08:36:35 +08:00
qingwei.li 761e38f6ad chore: add changelog 4.2.2 2017-07-24 19:06:24 +08:00
qingwei.li 78899a0251 [release] 4.2.2 2017-07-24 19:00:39 +08:00
qingwei.li 357631c8b7 [build] 4.2.2 2017-07-24 19:00:12 +08:00
qingwei.li 17ff3d1506 fix: style rerender due to setting themeColor 2017-07-24 18:57:41 +08:00
Leon Zhangandcinwell.li f59aac478a Update README.md (#219) 2017-07-20 10:54:21 +08:00
qingwei.li 0dd2497467 chore: add history.md 2017-07-20 01:15:39 +08:00
qingwei.li 306136f6a3 chore: update changlog 2017-07-20 01:13:47 +08:00
qingwei.li 4aba9d0a25 chore(*): remove history.md 2017-07-20 01:05:01 +08:00
qingwei.li 3d2f23bcdc chore: add changelog 4.2.1 2017-07-20 00:58:17 +08:00
qingwei.li b85eb0ff4b [release] 4.2.1 2017-07-20 00:58:16 +08:00
qingwei.li efa8d25912 [build] 4.2.1 2017-07-20 00:58:15 +08:00
qingwei.li 437737cc5a chore: update release shell 2017-07-20 00:53:25 +08:00
qingwei.li 992ff77808 chore: remove yarnlock 2017-07-20 00:41:46 +08:00
yeloandcinwell.li 4cf13db685 give the navbar some line-height (#216) 2017-07-19 16:09:10 +08:00
Kim Burgessandcinwell.li e54062f80d Remove unnecessary moduleName option from rollup config for plugins (#209) 2017-07-18 17:44:25 +08:00
qingwei.li cee8ac6698 fix typo 2017-07-12 08:56:52 +08:00
Mario Neblandcinwell.li d057f66fce docs: add commitlint to showcase (#207) 2017-07-12 08:55:27 +08:00
Dobromir Hristovandcinwell.li 9b0f1978a4 docs: Add palettify in Showcase (#206) 2017-07-11 08:19:00 +08:00
83 changed files with 7209 additions and 6923 deletions
-6
View File
@@ -1,9 +1,3 @@
sudo: false sudo: false
cache:
directories:
- $HOME/.yarn-cache
language: node_js language: node_js
node_js: stable node_js: stable
os:
- linux
- osx
+3
View File
@@ -0,0 +1,3 @@
{
"prettier.eslintIntegration": true
}
+297 -125
View File
@@ -1,207 +1,379 @@
# Changelog <a name="4.3.7"></a>
## [4.3.7](https://github.com/QingWei-Li/docsify/compare/v4.3.6...v4.3.7) (2017-10-02)
4.2.0 / 2017-07-10
* feat: ignore to compiled link, fixed #203 (#204) ### Bug Fixes
* feat: alias option supports regexp, resolve #183
4.1.14 / 2017-06-24 * **slugify:** GitHub compatible heading links, fixed [#267](https://github.com/QingWei-Li/docsify/issues/267) ([c195d2d](https://github.com/QingWei-Li/docsify/commit/c195d2d))
* feat: add context attribute, fixed #191
* fix: get file path
* Merge pull request #195 from crawt/master
* Filter picture
* Update doc for external link target (#194)
4.1.13 / 2017-06-11
* fix ga <a name="4.3.6"></a>
## [4.3.6](https://github.com/QingWei-Li/docsify/compare/v4.3.5...v4.3.6) (2017-09-21)
4.1.12 / 2017-06-03
* fix(render): ubtitle in side bar shows undefined, fixed [#182](https://github.com/QingWei-Li/docsify/issues/182) ### Bug Fixes
4.1.11 / 2017-06-02 * style for codesponsor plugin ([08afec7](https://github.com/QingWei-Li/docsify/commit/08afec7))
* fix(render): autoHeader does not work
* fix(compiler): force reset toc when rendering sidebar fixed [#181](https://github.com/QingWei-Li/docsify/issues/181)
4.1.10 / 2017-06-02
* fix(hash): hash routing crashes when url has querystring <a name="4.3.5"></a>
## [4.3.5](https://github.com/QingWei-Li/docsify/compare/v4.3.4...v4.3.5) (2017-09-20)
4.1.9 / 2017-05-31
* fix(lifecycle): continue to handle data ### Bug Fixes
* fix: can't render toc on first load, fixed [#171](https://github.com/QingWei-Li/docsify/issues/171)
* fix(render): broken name link, fixed [#167](https://github.com/QingWei-Li/docsify/issues/167)
## 4.1.8(since 4.1.1) / 2017-05-31 * missed symbol ([#254](https://github.com/QingWei-Li/docsify/issues/254)) ([6c702d3](https://github.com/QingWei-Li/docsify/commit/6c702d3))
* fix(pure-css):add coverpage style, fixed [#165](https://github.com/QingWei-Li/docsify/issues/165)
* feat: add edit button demo, close [#162](https://github.com/QingWei-Li/docsify/issues/162)
* fix some ssr bugs
## 4.1.0 / 2017-05-30 🎂 to me ### Features
* **plugin:** add codesponsor plugin ([46ac4c3](https://github.com/QingWei-Li/docsify/commit/46ac4c3))
* feat: Support server client renderer [See detail](//docsify.js.org/#/ssr)
* feat: Support HTML5 history API. `$docsify.routerMode = 'history'`
* Breaking change: Clean global API
## 3.7.3 / 2017-05-22
* fix(render): find => filter, Compatible with old browser <a name="4.3.4"></a>
* Pretty dir tree ## [4.3.4](https://github.com/QingWei-Li/docsify/compare/v4.3.3...v4.3.4) (2017-09-07)
## 3.7.2 / 2017-05-19
* tweaks ### Bug Fixes
## 3.7.1 / 2017-05-19 * scroll position issue, fixed [#234](https://github.com/QingWei-Li/docsify/issues/234) ([388ed3d](https://github.com/QingWei-Li/docsify/commit/388ed3d))
* fix: docsify-updated is undefined
## 3.7.0 / 2017-05-16
* feat: add externalLinkTarget, close ([#149](https://github.com/QingWei-Li/docsify/issues/149) <a name="4.3.3"></a>
* feat: add **{docsify-updated<span>}</span>**, close ([#158](https://github.com/QingWei-Li/docsify/issues/158) ## [4.3.3](https://github.com/QingWei-Li/docsify/compare/v4.3.2...v4.3.3) (2017-09-06)
## 3.6.6 / 2017-05-06
* feat: support query string for the search, likes `https://docsify.js.org/#/?s=navbar`, fixed ([#156](https://github.com/QingWei-Li/docsify/issues/156) ### Bug Fixes
## 3.6.5 / 2017-04-28 * **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))
* fix(util): fix crash, fixed ([#154](https://github.com/QingWei-Li/docsify/issues/154)
## 3.6.4 / 2017-04-28 ### Features
* fix(util): correctly clean up duplicate slashes, fixed ([#153](https://github.com/QingWei-Li/docsify/issues/153) * 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))
## 3.6.3 / 2017-04-25
* fix(external-script): script attrs
## 3.6.2/ 2017-04-12 <a name="4.3.2"></a>
## [4.3.2](https://github.com/QingWei-Li/docsify/compare/v4.3.1...v4.3.2) (2017-09-01)
* feat(external-script): detect more than one script dom, fixed ([#146](https://github.com/QingWei-Li/docsify/issues/146)
* GA: Send hash instead of complete href ([#147](https://github.com/QingWei-Li/docsify/issues/147)
## 3.6.1 / 2017-04-09 ### Bug Fixes
* feat(event): Collapse the sidebar when click outside element in the small screen * sidebar highlight ([f82f419](https://github.com/QingWei-Li/docsify/commit/f82f419))
## 3.6.0 / 2017-04-09
* feat(render): add mergeNavbar option, close ([#125](https://github.com/QingWei-Li/docsify/issues/125) ### Features
## 3.5.2/ 2017-04-05 * add Edit on github plugin (thanks [@njleonzhang](https://github.com/njleonzhang)) ([a0e1ea8](https://github.com/QingWei-Li/docsify/commit/a0e1ea8))
* add optional current route param to toURL and use it to properly compose local anchor links
* fix code style by removing semicolons
* in toURL test for anchor links and if so prepend the currentPath to the generated path. fixes ([#142](https://github.com/QingWei-Li/docsify/issues/142))
## 3.5.1 / 2017-03-25
* fix: .md file extension regex <a name="4.3.1"></a>
## [4.3.1](https://github.com/QingWei-Li/docsify/compare/v4.2.9...v4.3.1) (2017-08-30)
## 3.5.0 / 2017-03-25
* feat(route): auto remove .md extension ### Features
* fix: adjust display on small screens [@jrappen](https://github.com/jrappen)
* fix: navbar labels for German [@jrappen](https://github.com/jrappen)
## 3.4.4 / 2017-03-17 * **markdown:** supports mermaid [#137](https://github.com/QingWei-Li/docsify/issues/137) ([f4800e0](https://github.com/QingWei-Li/docsify/commit/f4800e0))
* fix(search): fix input style
* fix search plugin match bug
## 3.4.3 / 2017-03-16
* Add ability to ignore headers when generating toc ([#127](https://github.com/QingWei-Li/docsify/issues/127) [@christopherwk210](https://github.com/christopherwk210)) <a name="4.3.0"></a>
* fix external-script not inserting script at right place [@Leopoldthecoder](https://github.com/Leopoldthecoder) # [4.3.0](https://github.com/QingWei-Li/docsify/compare/v4.2.9...v4.3.0) (2017-08-17)
* add German docs [@jrappen](https://github.com/jrappen)
## 3.4.2 / 2017-03-11
* feat(emojify): add no-emoji option ### Features
## 3.4.1 / 2017-03-10 * **markdown:** supports mermaid [#137](https://github.com/QingWei-Li/docsify/issues/137) ([f4800e0](https://github.com/QingWei-Li/docsify/commit/f4800e0))
* fix(dom): Disable the dom cache when vue is present, fixed [#119](https://github.com/QingWei-Li/docsify/issues/119)
* update english docs, [@jrappen](https://github.com/jrappen)
## 3.4.0 / 2017-03-09
* feat(zoom-image): add plugin <a name="4.2.9"></a>
## [4.2.9](https://github.com/QingWei-Li/docsify/compare/v4.2.8...v4.2.9) (2017-08-15)
## 3.3.0 / 2017-03-07
* add front-matter plugin ### Bug Fixes
* add external-script plugin, [@Leopoldthecoder](https://github.com/Leopoldthecoder)
* Fix nav showing while loading ([#112](https://github.com/QingWei-Li/docsify/issues/112))
## 3.2.0 / 2017-02-28 * ensure document ready before init Docsify [#233](https://github.com/QingWei-Li/docsify/issues/233)
* fix(render): Toc rendering error, fixed [#106](https://github.com/QingWei-Li/docsify/issues/106) <a name="4.2.8"></a>
* feat(search): Localization for no data tip, close [#103](https://github.com/QingWei-Li/docsify/issues/103) ## [4.2.8](https://github.com/QingWei-Li/docsify/compare/v4.2.7...v4.2.8) (2017-08-10)
* fix(fetch): load sidebar and navbar for parent path, fixed [#100](https://github.com/QingWei-Li/docsify/issues/100)
* feat(render) nameLink for each route, fixed [#99](https://github.com/QingWei-Li/docsify/issues/99)
## 3.1.2 / 2017-02-27
* fix(search): dont search nameLink, fixed [#102](https://github.com/QingWei-Li/docsify/issues/102) ### Features
## 3.1.1 / 2017-02-24 * **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))
* fix(search): dont search nameLink, fixed [#102](https://github.com/QingWei-Li/docsify/issues/102)
* fix(render): custom cover background image
* fix(tpl): extra character, fixed [#101](https://github.com/QingWei-Li/docsify/issues/101)
## 3.1.0 / 2017-02-22
* fix(search): incorrect anchor link, fixed [#90](https://github.com/QingWei-Li/docsify/issues/90) <a name="4.2.7"></a>
* feat(emoji): add emoji plugin ## [4.2.7](https://github.com/QingWei-Li/docsify/compare/v4.2.4...v4.2.7) (2017-08-05)
## 3.0.5 / 2017-02-21
* feat(pwa): add sw.js ### Bug Fixes
* fix(layout.css): loading style
* fix(event): highlight sidebar when clicked, fixed [#86](https://github.com/QingWei-Li/docsify/issues/86)
* fix(gen-tree): cache toc list, fixed [#88](https://github.com/QingWei-Li/docsify/issues/88)
## 3.0.4 / 2017-02-20 * **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))
* fix(render): execute script
* fix(render): disable rendering sub list when loadSidebar is false
## 3.0.3 / 2017-02-19
* fixed look of links in blockquote <a name="4.2.6"></a>
* fix(scroll) highlight bug ## [4.2.6](https://github.com/QingWei-Li/docsify/compare/v4.2.4...v4.2.6) (2017-07-27)
## 3.0.2 / 2017-02-19
* fix(search): add lazy input ### Bug Fixes
* fix(compiler): link
## 3.0.1 / 2017-02-19 * **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))
* fix(route): empty alias
## 3.0.0 / 2017-02-19
##### Breaking change <a name="4.2.4"></a>
## [4.2.4](https://github.com/QingWei-Li/docsify/compare/v4.2.2...v4.2.4) (2017-07-26)
* Not support IE9
* The route becomes: `/#/page?id=slug`. The previous route will be redirected
##### Features ### 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))
<a name="4.2.3"></a>
## [4.2.3](https://github.com/QingWei-Li/docsify/compare/v4.2.2...v4.2.3) (2017-07-26)
### 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))
<a name="4.2.2"></a>
## [4.2.2](https://github.com/QingWei-Li/docsify/compare/v4.2.1...v4.2.2) (2017-07-24)
### Bug Fixes
* style rerender due to setting themeColor ([17ff3d1](https://github.com/QingWei-Li/docsify/commit/17ff3d1))
<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)
- give the navbar some line-height (#216)
- Remove unnecessary moduleName option from rollup config for plugins (#209)
<a name="4.2.0"></a>
# [4.2.0](https://github.com/QingWei-Li/docsify/compare/v4.1.14...v4.2.0) (2017-07-10)
### Bug Fixes
* not found page ([9af8559](https://github.com/QingWei-Li/docsify/commit/9af8559))
### Features
* 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))
<a name="4.1.14"></a>
## [4.1.14](https://github.com/QingWei-Li/docsify/compare/v4.1.13...v4.1.14) (2017-06-24)
### 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)
### Features
* 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>
## [4.1.13](https://github.com/QingWei-Li/docsify/compare/v4.1.12...v4.1.13) (2017-06-11)
<a name="4.1.12"></a>
## [4.1.12](https://github.com/QingWei-Li/docsify/compare/v4.1.11...v4.1.12) (2017-06-03)
### Bug Fixes
* **render:** ubtitle 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>
## [4.1.11](https://github.com/QingWei-Li/docsify/compare/v4.1.10...v4.1.11) (2017-06-02)
### 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))
* **render:** autoHeader does not work ([1304d2e](https://github.com/QingWei-Li/docsify/commit/1304d2e))
<a name="4.1.10"></a>
## [4.1.10](https://github.com/QingWei-Li/docsify/compare/v4.1.9...v4.1.10) (2017-06-02)
### Bug Fixes
* **hash:** hash routing crashes when url has querystring ([6d48ce1](https://github.com/QingWei-Li/docsify/commit/6d48ce1))
<a name="4.1.9"></a>
## [4.1.9](https://github.com/QingWei-Li/docsify/compare/v4.1.8...v4.1.9) (2017-05-31)
### Bug Fixes
* 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))
* **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>
## [4.1.8](https://github.com/QingWei-Li/docsify/compare/v4.1.7...v4.1.8) (2017-05-31)
### Bug Fixes
* 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))
### Features
* 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))
<a name="4.1.7"></a>
## [4.1.7](https://github.com/QingWei-Li/docsify/compare/v4.1.6...v4.1.7) (2017-05-30)
### Bug Fixes
* **ssr:** clean files ([0014895](https://github.com/QingWei-Li/docsify/commit/0014895))
<a name="4.1.6"></a>
## [4.1.6](https://github.com/QingWei-Li/docsify/compare/v4.1.5...v4.1.6) (2017-05-30)
### Bug Fixes
* **ssr:** add debug ([6b9e092](https://github.com/QingWei-Li/docsify/commit/6b9e092))
<a name="4.1.5"></a>
## [4.1.5](https://github.com/QingWei-Li/docsify/compare/v4.1.4...v4.1.5) (2017-05-30)
### Bug Fixes
* **ssr:** missing package ([6db8c9e](https://github.com/QingWei-Li/docsify/commit/6db8c9e))
<a name="4.1.4"></a>
## [4.1.4](https://github.com/QingWei-Li/docsify/compare/v4.1.3...v4.1.4) (2017-05-30)
### Bug Fixes
* **ssr:** file path ([79a83bc](https://github.com/QingWei-Li/docsify/commit/79a83bc))
<a name="4.1.3"></a>
## [4.1.3](https://github.com/QingWei-Li/docsify/compare/v4.1.2...v4.1.3) (2017-05-30)
### Bug Fixes
* update babel config ([9825db4](https://github.com/QingWei-Li/docsify/commit/9825db4))
<a name="4.1.2"></a>
## [4.1.2](https://github.com/QingWei-Li/docsify/compare/v4.1.1...v4.1.2) (2017-05-30)
### Bug Fixes
* update babel config ([80dba19](https://github.com/QingWei-Li/docsify/commit/80dba19))
<a name="4.1.1"></a>
## [4.1.1](https://github.com/QingWei-Li/docsify/compare/v4.1.0...v4.1.1) (2017-05-30)
### Bug Fixes
* 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))
<a name="4.1.0"></a>
# [4.1.0](https://github.com/QingWei-Li/docsify/compare/v4.0.2...v4.1.0) (2017-05-30)
<a name="4.0.2"></a>
## [4.0.2](https://github.com/QingWei-Li/docsify/compare/v4.0.1...v4.0.2) (2017-05-30)
### Bug Fixes
* basePath for history mode ([fc1cd3f](https://github.com/QingWei-Li/docsify/commit/fc1cd3f))
<a name="4.0.1"></a>
## [4.0.1](https://github.com/QingWei-Li/docsify/compare/v4.0.0...v4.0.1) (2017-05-29)
### Bug Fixes
* **ssr:** remove context ([4626157](https://github.com/QingWei-Li/docsify/commit/4626157))
* lint ([b764b6e](https://github.com/QingWei-Li/docsify/commit/b764b6e))
<a name="4.0.0"></a>
# [4.0.0](https://github.com/QingWei-Li/docsify/compare/v3.7.3...v4.0.0) (2017-05-29)
### Bug Fixes
* **render:** init event in ssr ([eba1c98](https://github.com/QingWei-Li/docsify/commit/eba1c98))
* lint ([1f4514d](https://github.com/QingWei-Li/docsify/commit/1f4514d))
### Features
* finish ssr ([3444884](https://github.com/QingWei-Li/docsify/commit/3444884))
* 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))
* Faster rendering
* Clearer source code
* More powerful API
* Auto header for each page [#78](https://github.com/QingWei-Li/docsify/issues/78)
* Localization for search plugin [#80](https://github.com/QingWei-Li/docsify/issues/80)
* Execute the script in markdown (see `executeScript`)
+568 -344
View File
File diff suppressed because it is too large Load Diff
+13 -2
View File
@@ -13,13 +13,17 @@
<a href="https://www.npmjs.com/package/docsify"><img alt="npm" src="https://img.shields.io/npm/v/docsify.svg?style=flat-square"></a> <a href="https://www.npmjs.com/package/docsify"><img alt="npm" src="https://img.shields.io/npm/v/docsify.svg?style=flat-square"></a>
<a href="https://cdnjs.com/libraries/docsify"><img alt="cdnjs" src="https://img.shields.io/cdnjs/v/docsify.svg?style=flat-square"></a> <a href="https://cdnjs.com/libraries/docsify"><img alt="cdnjs" src="https://img.shields.io/cdnjs/v/docsify.svg?style=flat-square"></a>
<a href="https://github.com/QingWei-Li/donate"><img alt="donate" src="https://img.shields.io/badge/%24-donate-ff69b4.svg?style=flat-square"></a> <a href="https://github.com/QingWei-Li/donate"><img alt="donate" src="https://img.shields.io/badge/%24-donate-ff69b4.svg?style=flat-square"></a>
<a href="https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FQingWei-Li%2Fdocsify?ref=badge_shield" alt="FOSSA Status"><img src="https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FQingWei-Li%2Fdocsify.svg?type=shield"/></a>
</p> </p>
<a target='_blank' rel='nofollow' href='https://app.codesponsor.io/link/YdWAqnN2kHQmLtFQhEddaaPT/QingWei-Li/docsify'> <img alt='Sponsor' width='888' height='68' src='https://app.codesponsor.io/embed/YdWAqnN2kHQmLtFQhEddaaPT/QingWei-Li/docsify.svg' /></a>
## Links ## Links
- [Documentation](https://docsify.js.org) - [Documentation](https://docsify.js.org)
- [CLI](https://github.com/QingWei-Li/docsify-cli) - [CLI](https://github.com/QingWei-Li/docsify-cli)
- CDN: [UNPKG](https://unpkg.com/docsify/) | [jsDelivr](https://cdn.jsdelivr.net/npm/docsify/)
## Features ## Features
@@ -71,6 +75,12 @@ These projects are using docsify to generate their sites. Pull requests welcome
| [hire-me](https://fvcproductions.github.io/hire-me) | A path to getting an awesome tech gig. | | [hire-me](https://fvcproductions.github.io/hire-me) | A path to getting an awesome tech gig. |
| [vue-amap](https://elemefe.github.io/vue-amap/) | A Map Component Library Base on Vue 2.x and Gaode Map. | | [vue-amap](https://elemefe.github.io/vue-amap/) | A Map Component Library Base on Vue 2.x and Gaode Map. |
| [samlify](https://samlify.js.org) | Node.js SAML2 library | | [samlify](https://samlify.js.org) | Node.js SAML2 library |
| [palettify](https://dobromir-hristov.github.io/palettify/) | A color palette effects assistant |
| [commitlint](https://marionebl.github.io/commitlint/) | Lint commit messages |
| [vue-data-tables](https://github.com/njleonzhang/vue-data-tables/) | A simple and customizable data tablebased on vue2 and element-ui. |
| [Noty](http://ned.im/noty/) | A Dependency-free notification library |
| [xTeko](https://docs.xteko.com/) | Addins framework for Pin 3.0 |
| [vue2-datatable-component](https://github.com/OneWayTech/vue2-datatable) | The best Datatable for Vue.js 2.x which never sucks |
## Similar projects ## Similar projects
@@ -91,7 +101,7 @@ These projects are using docsify to generate their sites. Pull requests welcome
## Development ## Development
```bash ```bash
npm i && npm run dev npm run bootstrap && npm run dev
open http://localhost:3000 open http://localhost:3000
``` ```
@@ -100,3 +110,4 @@ open http://localhost:3000
MIT MIT
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FQingWei-Li%2Fdocsify.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FQingWei-Li%2Fdocsify?ref=badge_large) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FQingWei-Li%2Fdocsify.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FQingWei-Li%2Fdocsify?ref=badge_large)
+11 -9
View File
@@ -30,22 +30,24 @@ var renderer = new Renderer({
alias: { alias: {
'/de-de/changelog': '/changelog', '/de-de/changelog': '/changelog',
'/zh-cn/changelog': '/changelog', '/zh-cn/changelog': '/changelog',
'/changelog': 'https://raw.githubusercontent.com/QingWei-Li/docsify/master/CHANGELOG' '/changelog':
'https://raw.githubusercontent.com/QingWei-Li/docsify/master/CHANGELOG'
} }
}, },
path: './' path: './'
}) })
http.createServer(function (req, res) { http
serveStatic('.')(req, res, function () { .createServer(function (req, res) {
// TEST SSR serveStatic('.')(req, res, function () {
// renderer.renderToString(req.url) // TEST SSR
// renderer.renderToString(req.url)
// .then(html => res.end(html)) // .then(html => res.end(html))
res.writeHead(404, { 'Content-Type': 'text/html' }) res.writeHead(404, { 'Content-Type': 'text/html' })
res.end(fs.readFileSync('dev.html')) res.end(fs.readFileSync('dev.html'))
})
}) })
}).listen(3000, '0.0.0.0') .listen(3000, '0.0.0.0')
console.log(`\nListening at http://0.0.0.0:3000\n`) console.log(`\nListening at http://0.0.0.0:3000\n`)
+4 -1
View File
@@ -7,5 +7,8 @@ var file = __dirname + '/../docs/_coverpage.md'
var cover = read(file, 'utf8').toString() var cover = read(file, 'utf8').toString()
console.log('Replace version number in cover page...') console.log('Replace version number in cover page...')
cover = cover.replace(/<small>(\S+)?<\/small>/g, '<small>' + version + '</small>') cover = cover.replace(
/<small>(\S+)?<\/small>/g,
'<small>' + version + '</small>'
)
write(file, cover) write(file, cover)
+15 -12
View File
@@ -4,15 +4,17 @@ var resolve = require('path').resolve
var postcss = require('postcss') var postcss = require('postcss')
var isProd = process.argv[process.argv.length - 1] !== '--dev' var isProd = process.argv[process.argv.length - 1] !== '--dev'
var processor = postcss([require('postcss-salad')({ var processor = postcss([
features: { require('postcss-salad')({
precss: { features: {
properties: { precss: {
preserve: true properties: {
preserve: true
}
} }
} }
} })
})]) ])
var saveMin = function (file, content) { var saveMin = function (file, content) {
fs.writeFileSync(resolve(__dirname, '../lib/themes/', file), content) fs.writeFileSync(resolve(__dirname, '../lib/themes/', file), content)
@@ -31,17 +33,18 @@ var list = fs.readdirSync(resolve(__dirname, '../src/themes'))
list.forEach(function (file) { list.forEach(function (file) {
if (!/\.css$/.test(file)) return if (!/\.css$/.test(file)) return
processor.process(load(file), { from: resolve(__dirname, '../src/themes/', file) }) processor
.process(load(file), { from: resolve(__dirname, '../src/themes/', file) })
.then(function (result) { .then(function (result) {
save(file, result.css) save(file, result.css)
console.log('salad - ' + file) console.log('salad - ' + file)
isProd && cssnano(loadLib(file)) isProd &&
.then(function (result) { cssnano(loadLib(file)).then(function (result) {
saveMin(file, result.css) saveMin(file, result.css)
console.log('cssnao - ' + file) console.log('cssnao - ' + file)
}) })
}).catch(function (err) { })
.catch(function (err) {
console.log(err) console.log(err)
}) })
}) })
+1 -1
View File
@@ -17,7 +17,7 @@ rollup
} }
}) })
], ],
onwarn: function() {} onwarn: function () {}
}) })
.then(function (bundle) { .then(function (bundle) {
var dest = 'packages/docsify-server-renderer/build.js' var dest = 'packages/docsify-server-renderer/build.js'
+8 -10
View File
@@ -28,7 +28,6 @@ var build = function (opts) {
console.log(dest) console.log(dest)
bundle.write({ bundle.write({
format: 'iife', format: 'iife',
moduleName: opts.moduleName || 'D',
dest: dest dest: dest
}) })
}) })
@@ -43,19 +42,19 @@ build({
}) })
var plugins = [ var plugins = [
{ name: 'search', entry: 'search/index.js', moduleName: 'Search' }, { name: 'search', entry: 'search/index.js' },
{ name: 'ga', entry: 'ga.js', moduleName: 'GA' }, { name: 'ga', entry: 'ga.js' },
{ name: 'emoji', entry: 'emoji.js', moduleName: 'Emoji' }, { name: 'emoji', entry: 'emoji.js' },
{ name: 'external-script', entry: 'external-script.js', moduleName: 'ExternalScript' }, { name: 'external-script', entry: 'external-script.js' },
{ name: 'front-matter', entry: 'front-matter/index.js', moduleName: 'FrontMatter' }, { name: 'front-matter', entry: 'front-matter/index.js' },
{ name: 'zoom-image', entry: 'zoom-image.js', moduleName: 'ZoomImage' } { name: 'zoom-image', entry: 'zoom-image.js' },
{ name: 'codesponsor', entry: 'codesponsor.js' }
] ]
plugins.forEach(item => { plugins.forEach(item => {
build({ build({
entry: 'plugins/' + item.entry, entry: 'plugins/' + item.entry,
output: 'plugins/' + item.name + '.js', output: 'plugins/' + item.name + '.js'
moduleName: 'D.' + item.moduleName
}) })
}) })
@@ -69,7 +68,6 @@ if (isProd) {
build({ build({
entry: 'plugins/' + item.entry, entry: 'plugins/' + item.entry,
output: 'plugins/' + item.name + '.min.js', output: 'plugins/' + item.name + '.min.js',
moduleName: 'D.' + item.moduleName,
plugins: [uglify()] plugins: [uglify()]
}) })
}) })
+8 -1
View File
@@ -30,9 +30,16 @@ if [[ $REPLY =~ ^[Yy]$ ]]; then
# commit # commit
git add -A git add -A
git commit -m "[build] $VERSION $RELEASE_TAG" git commit -m "[build] $VERSION $RELEASE_TAG"
npm version $VERSION --message "[release] $VERSION $RELEASE_TAG" npm --no-git-tag-version version $VERSION --message "[release] $VERSION $RELEASE_TAG"
# changelog
node_modules/.bin/conventional-changelog -p angular -i CHANGELOG.md -s
git add .
git commit -m "chore: add changelog $VERSION"
# publish # publish
git tag v$VERSION
git push origin refs/tags/v$VERSION git push origin refs/tags/v$VERSION
git push git push
if [[ -z $RELEASE_TAG ]]; then if [[ -z $RELEASE_TAG ]]; then
+3 -2
View File
@@ -19,7 +19,8 @@
<script> <script>
window.$docsify = { window.$docsify = {
alias: { alias: {
'.*?/changelog': 'https://raw.githubusercontent.com/QingWei-Li/docsify/master/CHANGELOG' '.*?/changelog': 'https://raw.githubusercontent.com/QingWei-Li/docsify/master/CHANGELOG',
'/.*/_navbar.md': '/_navbar.md'
}, },
auto2top: true, auto2top: true,
basePath: '/docs/', basePath: '/docs/',
@@ -28,7 +29,7 @@
loadSidebar: true, loadSidebar: true,
coverpage: true, coverpage: true,
name: 'docsify', name: 'docsify',
subMaxLevel: 0, subMaxLevel: 2,
mergeNavbar: true, mergeNavbar: true,
formatUpdated: '{MM}/{DD} {HH}:{mm}', formatUpdated: '{MM}/{DD} {HH}:{mm}',
plugins: [ plugins: [
+1 -1
View File
@@ -1,6 +1,6 @@
![logo](_media/icon.svg) ![logo](_media/icon.svg)
# docsify <small>4.2.0</small> # docsify <small>4.3.7</small>
> A magical documentation site generator. > A magical documentation site generator.
+7
View File
@@ -49,3 +49,10 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
<a href="/demo/" title="title">link</a> <a href="/demo/" title="title">link</a>
``` ```
## Set target attribute for link
```md
[link](/demo ":target=_blank")
[link](/demo2 ":target=_self")
```
+27
View File
@@ -28,3 +28,30 @@ window.$docsify = {
} }
} }
``` ```
## Supports mermaid
```js
// Import mermaid
// <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>
mermaid.initialize({ startOnLoad: false });
window.$docsify = {
markdown: {
renderer: {
code: function(code, lang) {
if (lang === "mermaid") {
return (
'<div class="mermaid">' + mermaid.render(lang, code) + "</div>"
);
}
return this.origin.code.apply(this, arguments);
}
}
}
}
```
+24 -1
View File
@@ -35,7 +35,10 @@ Als Standardeinstellung werden Hyperlinks auf der aktuellen Seite erkannt und de
noData: { noData: {
'/de-de/': 'Keine Ergebnisse', '/de-de/': 'Keine Ergebnisse',
'/': 'No Results' '/': 'No Results'
} },
// Headline depth, 1 - 6
depth: 2
} }
} }
</script> </script>
@@ -93,3 +96,23 @@ Medium's Bilderzoom. Basierend auf [zoom-image](https://github.com/egoist/zoom-i
```html ```html
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.min.js"></script> <script src="//unpkg.com/docsify/lib/plugins/zoom-image.min.js"></script>
``` ```
## Edit on github
Add `Edit on github` button on every pages. provided by 3rd party, check [document](https://github.com/njleonzhang/docsify-edit-on-github)
## CodeSponsor
See https://codesponsor.io
```html
<script>
window.$docsify = {
codesponsor: 'id'
}
</script>
<script src="//unpkg.com/docsify/lib/plugins/codesponsor.min.js"></script>
```
+7
View File
@@ -50,3 +50,10 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
<a href="/demo/" title="title">link</a> <a href="/demo/" title="title">link</a>
``` ```
## Set target attribute for link
```md
[link](/demo ":target=_blank")
[link](/demo2 ":target=_self")
```
+15 -10
View File
@@ -7,10 +7,10 @@
<meta name="keywords" content="doc,docs,documentation,gitbook,creator,generator,github,jekyll,github-pages"> <meta name="keywords" content="doc,docs,documentation,gitbook,creator,generator,github,jekyll,github-pages">
<meta name="description" content="A magical documentation generator."> <meta name="description" content="A magical documentation generator.">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@latest/lib/themes/vue.css" title="vue"> <link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/vue.css" title="vue">
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@latest/lib/themes/dark.css" title="dark" disabled> <link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/dark.css" title="dark" disabled>
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@latest/lib/themes/buble.css" title="buble" disabled> <link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/buble.css" title="buble" disabled>
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@latest/lib/themes/pure.css" title="pure" disabled> <link rel="stylesheet" href="//unpkg.com/docsify/lib/themes/pure.css" title="pure" disabled>
<style> <style>
nav.app-nav li ul { nav.app-nav li ul {
min-width: 100px; min-width: 100px;
@@ -23,7 +23,8 @@
<script> <script>
window.$docsify = { window.$docsify = {
alias: { alias: {
'.*?/changelog': 'https://raw.githubusercontent.com/QingWei-Li/docsify/master/CHANGELOG' '.*?/changelog': 'https://raw.githubusercontent.com/QingWei-Li/docsify/master/CHANGELOG',
'/.*/_navbar.md': '/_navbar.md'
}, },
auto2top: true, auto2top: true,
coverpage: true, coverpage: true,
@@ -33,6 +34,8 @@
mergeNavbar: true, mergeNavbar: true,
maxLevel: 4, maxLevel: 4,
subMaxLevel: 2, subMaxLevel: 2,
codesponsor: '7c9Ms7xRs-j_y_8abU03DA',
ga: 'UA-106147152-1',
name: 'docsify', name: 'docsify',
search: { search: {
noData: { noData: {
@@ -64,9 +67,11 @@
] ]
} }
</script> </script>
<script src="//cdn.jsdelivr.net/npm/docsify@latest/lib/docsify.min.js"></script> <script src="//unpkg.com/docsify/lib/docsify.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/docsify@latest/lib/plugins/search.min.js"></script> <script src="//unpkg.com/docsify/lib/plugins/search.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/prismjs/components/prism-bash.min.js"></script> <script src="//unpkg.com/docsify/lib/plugins/codesponsor.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/prismjs/components/prism-markdown.min.js"></script> <script src="//unpkg.com/docsify/lib/plugins/ga.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/prismjs/components/prism-nginx.min.js"></script> <script src="//unpkg.com/prismjs/components/prism-bash.min.js"></script>
<script src="//unpkg.com/prismjs/components/prism-markdown.min.js"></script>
<script src="//unpkg.com/prismjs/components/prism-nginx.min.js"></script>
</html> </html>
+25
View File
@@ -28,3 +28,28 @@ window.$docsify = {
} }
} }
``` ```
## Supports mermaid
```js
// Import mermaid
// <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>
mermaid.initialize({ startOnLoad: false });
window.$docsify = {
markdown: {
renderer: {
code: function(code, lang) {
if (lang === "mermaid") {
return (
'<div class="mermaid">' + mermaid.render(lang, code) + "</div>"
);
}
return this.origin.code.apply(this, arguments);
}
}
}
}
```
+48 -1
View File
@@ -35,7 +35,10 @@ By default, the hyperlink on the current page is recognized and the content is s
noData: { noData: {
'/zh-cn/': '找不到结果', '/zh-cn/': '找不到结果',
'/': 'No Results' '/': 'No Results'
} },
// Headline depth, 1 - 6
depth: 2
} }
} }
</script> </script>
@@ -93,3 +96,47 @@ Medium's Image Zoom. Based on [zoom-image](https://github.com/egoist/zoom-image)
```html ```html
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.min.js"></script> <script src="//unpkg.com/docsify/lib/plugins/zoom-image.min.js"></script>
``` ```
## Edit on github
Add `Edit on github` button on every pages. provided by 3rd party, check [document](https://github.com/njleonzhang/docsify-edit-on-github)
## Demo code with instant preview and jsfiddle integration
With this plugin, sample code can be rendered on the page instantly, so that the readers can see the preview immediately.
When readers expand the demo box, the source code and description are shown there. if they click the button `Try in Jsfiddle`,
`jsfiddle.net` will be open with the code of this sample, which allow readers to revise the code and try on their own.
[Vue](https://njleonzhang.github.io/docsify-demo-box-vue/) and [React](https://njleonzhang.github.io/docsify-demo-box-react/) are both supported.
## CodeSponsor
See https://codesponsor.io
```html
<script>
window.$docsify = {
codesponsor: 'id'
}
</script>
<script src="//unpkg.com/docsify/lib/plugins/codesponsor.min.js"></script>
```
## Copy to Clipboard
Add a simple `Click to copy` button to all preformatted code blocks to effortlessly allow users to copy example code from your docs.
```html
<link rel="stylesheet" href="//unpkg.com/docsify-copy-code/styles.css">
<script src="//unpkg.com/docsify-copy-code/index.js"></script>
```
```javascript
window.$docsify = {
plugins: [
window.DocsifyCopyCodePlugin.init()
]
}
```
See [here](https://github.com/jperasmus/docsify-copy-code/blob/master/README.md) for more details.
+1 -1
View File
@@ -28,7 +28,7 @@ Then you can immediately write Vue code at Markdown file. `new Vue({ el: '#main'
<ul> <ul>
<li v-for="i in 10">{{ i }}</li> <li v-for="i in 10">{{ i }}</li>
</ul> </ul>
`` ```
<ul> <ul>
<li v-for="i in 10">{{ i }}</li> <li v-for="i in 10">{{ i }}</li>
+7
View File
@@ -49,3 +49,10 @@ You will get `<a href="/demo/">link</a>`html. Do not worry, you can still set ti
<a href="/demo/" title="title">link</a> <a href="/demo/" title="title">link</a>
``` ```
## Set target attribute for link
```md
[link](/demo ":target=_blank")
[link](/demo2 ":target=_self")
```
+27 -1
View File
@@ -27,4 +27,30 @@ window.$docsify = {
return marked return marked
} }
} }
``` ```
## Supports mermaid
```js
// Import mermaid
// <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>
mermaid.initialize({ startOnLoad: false });
window.$docsify = {
markdown: {
renderer: {
code: function(code, lang) {
if (lang === "mermaid") {
return (
'<div class="mermaid">' + mermaid.render(lang, code) + "</div>"
);
}
return this.origin.code.apply(this, arguments);
}
}
}
}
```
+25 -1
View File
@@ -35,7 +35,10 @@
noData: { noData: {
'/zh-cn/': '找不到结果', '/zh-cn/': '找不到结果',
'/': 'No Results' '/': 'No Results'
} },
// 搜索标题的最大程级, 1 - 6
depth: 2
} }
} }
</script> </script>
@@ -87,3 +90,24 @@ Medium's 风格的图片缩放插件. 基于 [zoom-image](https://github.com/ego
```html ```html
<script src="//unpkg.com/docsify/lib/plugins/zoom-image.js"></script> <script src="//unpkg.com/docsify/lib/plugins/zoom-image.js"></script>
``` ```
## Edit on github
Add `Edit on github` button on every pages. provided by 3rd party, check [document](https://github.com/njleonzhang/docsify-edit-on-github)
## CodeSponsor
See https://codesponsor.io
```html
<script>
window.$docsify = {
codesponsor: 'id'
}
</script>
<script src="//unpkg.com/docsify/lib/plugins/codesponsor.min.js"></script>
```
+321 -145
View File
@@ -22,23 +22,25 @@ var hyphenate = cached(function (str) {
/** /**
* Simple Object.assign polyfill * Simple Object.assign polyfill
*/ */
var merge = Object.assign || function (to) { var merge =
var arguments$1 = arguments; Object.assign ||
function (to) {
var arguments$1 = arguments;
var hasOwn = Object.prototype.hasOwnProperty; var hasOwn = Object.prototype.hasOwnProperty;
for (var i = 1; i < arguments.length; i++) { for (var i = 1; i < arguments.length; i++) {
var from = Object(arguments$1[i]); var from = Object(arguments$1[i]);
for (var key in from) { for (var key in from) {
if (hasOwn.call(from, key)) { if (hasOwn.call(from, key)) {
to[key] = from[key]; to[key] = from[key];
}
} }
} }
}
return to return to
}; };
/** /**
* Check if value is primitive * Check if value is primitive
@@ -59,33 +61,38 @@ function isFn (obj) {
return typeof obj === 'function' return typeof obj === 'function'
} }
var config = merge({ var config = merge(
el: '#app', {
repo: '', el: '#app',
maxLevel: 6, repo: '',
subMaxLevel: 0, maxLevel: 6,
loadSidebar: null, subMaxLevel: 0,
loadNavbar: null, loadSidebar: null,
homepage: 'README.md', loadNavbar: null,
coverpage: '', homepage: 'README.md',
basePath: '', coverpage: '',
auto2top: false, basePath: '',
name: '', auto2top: false,
themeColor: '', name: '',
nameLink: window.location.pathname, themeColor: '',
autoHeader: false, nameLink: window.location.pathname,
executeScript: null, autoHeader: false,
noEmoji: false, executeScript: null,
ga: '', noEmoji: false,
mergeNavbar: false, ga: '',
formatUpdated: '', mergeNavbar: false,
externalLinkTarget: '_blank', formatUpdated: '',
routerModel: 'hash', externalLinkTarget: '_blank',
noCompileLinks: [] routerMode: 'hash',
}, window.$docsify); noCompileLinks: []
},
window.$docsify
);
var script = document.currentScript || var script =
[].slice.call(document.getElementsByTagName('script')) document.currentScript ||
[].slice
.call(document.getElementsByTagName('script'))
.filter(function (n) { return /docsify\./.test(n.src); })[0]; .filter(function (n) { return /docsify\./.test(n.src); })[0];
if (script) { if (script) {
@@ -119,7 +126,7 @@ function initLifecycle (vm) {
vm._hooks = {}; vm._hooks = {};
vm._lifecycle = {}; vm._lifecycle = {};
hooks.forEach(function (hook) { hooks.forEach(function (hook) {
var arr = vm._hooks[hook] = []; var arr = (vm._hooks[hook] = []);
vm._lifecycle[hook] = function (fn) { return arr.push(fn); }; vm._lifecycle[hook] = function (fn) { return arr.push(fn); };
}); });
} }
@@ -238,6 +245,11 @@ function toggleClass (el, type, val) {
el && el.classList[val ? type : 'toggle'](val || type); el && el.classList[val ? type : 'toggle'](val || type);
} }
function style (content) {
appendTo(head, create('style', content));
}
var dom = Object.freeze({ var dom = Object.freeze({
getNode: getNode, getNode: getNode,
@@ -251,7 +263,8 @@ var dom = Object.freeze({
before: before, before: before,
on: on, on: on,
off: off, off: off,
toggleClass: toggleClass toggleClass: toggleClass,
style: style
}); });
var inBrowser = typeof window !== 'undefined'; var inBrowser = typeof window !== 'undefined';
@@ -261,14 +274,20 @@ var isMobile = inBrowser && document.body.clientWidth <= 600;
/** /**
* @see https://github.com/MoOx/pjax/blob/master/lib/is-supported.js * @see https://github.com/MoOx/pjax/blob/master/lib/is-supported.js
*/ */
var supportsPushState = inBrowser && (function () { var supportsPushState =
// Borrowed wholesale from https://github.com/defunkt/jquery-pjax inBrowser &&
return window.history && (function () {
window.history.pushState && // Borrowed wholesale from https://github.com/defunkt/jquery-pjax
window.history.replaceState && return (
// pushState isnt reliable on iOS until 5. window.history &&
!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/) window.history.pushState &&
})(); window.history.replaceState &&
// pushState isnt reliable on iOS until 5.
!navigator.userAgent.match(
/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/
)
)
})();
/** /**
* Render github corner * Render github corner
@@ -281,37 +300,40 @@ function corner (data) {
data = data.replace(/^git\+/, ''); data = data.replace(/^git\+/, '');
return ( return (
"<a href=\"" + data + "\" class=\"github-corner\" aria-label=\"View source on Github\">" + "<a href=\"" + data + "\" class=\"github-corner\" aria-label=\"View source on Github\">" +
'<svg viewBox="0 0 250 250" aria-hidden="true">' + '<svg viewBox="0 0 250 250" aria-hidden="true">' +
'<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>' + '<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>' +
'<path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>' + '<path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>' +
'<path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>' + '<path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>' +
'</svg>' + '</svg>' +
'</a>') '</a>'
)
} }
/** /**
* Render main content * Render main content
*/ */
function main (config) { function main (config) {
var aside = ( var aside =
'<button class="sidebar-toggle">' + '<button class="sidebar-toggle">' +
'<div class="sidebar-toggle-button">' + '<div class="sidebar-toggle-button">' +
'<span></span><span></span><span></span>' + '<span></span><span></span><span></span>' +
'</div>' + '</div>' +
'</button>' + '</button>' +
'<aside class="sidebar">' + '<aside class="sidebar">' +
(config.name (config.name
? ("<h1><a class=\"app-name-link\" data-nosearch>" + (config.name) + "</a></h1>") ? ("<h1><a class=\"app-name-link\" data-nosearch>" + (config.name) + "</a></h1>")
: '') + : '') +
'<div class="sidebar-nav"><!--sidebar--></div>' + '<div class="sidebar-nav"><!--sidebar--></div>' +
'</aside>'); '</aside>';
return (isMobile ? (aside + "<main>") : ("<main>" + aside)) + return (
'<section class="content">' + (isMobile ? (aside + "<main>") : ("<main>" + aside)) +
'<article class="markdown-section" id="main"><!--main--></article>' + '<section class="content">' +
'</section>' + '<article class="markdown-section" id="main"><!--main--></article>' +
'</section>' +
'</main>' '</main>'
)
} }
/** /**
@@ -319,14 +341,17 @@ function main (config) {
*/ */
function cover () { function cover () {
var SL = ', 100%, 85%'; var SL = ', 100%, 85%';
var bgc = 'linear-gradient(to left bottom, ' + var bgc =
"hsl(" + (Math.floor(Math.random() * 255) + SL) + ") 0%," + 'linear-gradient(to left bottom, ' +
"hsl(" + (Math.floor(Math.random() * 255) + SL) + ") 100%)"; "hsl(" + (Math.floor(Math.random() * 255) + SL) + ") 0%," +
"hsl(" + (Math.floor(Math.random() * 255) + SL) + ") 100%)";
return "<section class=\"cover\" style=\"background: " + bgc + "\">" + return (
"<section class=\"cover\" style=\"background: " + bgc + "\">" +
'<div class="cover-main"></div>' + '<div class="cover-main"></div>' +
'<div class="mask"></div>' + '<div class="mask"></div>' +
'</section>' '</section>'
)
} }
/** /**
@@ -431,9 +456,12 @@ function get (url, hasBar) {
if ( error === void 0 ) error = noop; if ( error === void 0 ) error = noop;
if (hasBar) { if (hasBar) {
var id = setInterval(function (_) { return progressbar({ var id = setInterval(
step: Math.floor(Math.random() * 5 + 1) function (_) { return progressbar({
}); }, 500); step: Math.floor(Math.random() * 5 + 1)
}); },
500
);
on('progress', progressbar); on('progress', progressbar);
on('loadend', function (evt) { on('loadend', function (evt) {
@@ -449,12 +477,12 @@ function get (url, hasBar) {
if (target.status >= 400) { if (target.status >= 400) {
error(target); error(target);
} else { } else {
var result = cache[url] = { var result = (cache[url] = {
content: target.response, content: target.response,
opt: { opt: {
updatedAt: xhr.getResponseHeader('last-modified') updatedAt: xhr.getResponseHeader('last-modified')
} }
}; });
success(result.content, result.opt); success(result.content, result.opt);
} }
@@ -465,15 +493,15 @@ function get (url, hasBar) {
} }
function replaceVar (block, color) { function replaceVar (block, color) {
block.innerHTML = block.innerHTML block.innerHTML = block.innerHTML.replace(
.replace(/var\(\s*--theme-color.*?\)/g, color); /var\(\s*--theme-color.*?\)/g,
color
);
} }
var cssVars = function (color) { var cssVars = function (color) {
// Variable support // Variable support
if (window.CSS && if (window.CSS && window.CSS.supports && window.CSS.supports('(--v:red)')) { return }
window.CSS.supports &&
window.CSS.supports('(--v:red)')) { return }
var styleBlocks = findAll('style:not(.inserted),link');[].forEach.call(styleBlocks, function (block) { var styleBlocks = findAll('style:not(.inserted),link');[].forEach.call(styleBlocks, function (block) {
if (block.nodeName === 'STYLE') { if (block.nodeName === 'STYLE') {
@@ -484,10 +512,10 @@ var cssVars = function (color) {
if (!/\.css$/.test(href)) { return } if (!/\.css$/.test(href)) { return }
get(href).then(function (res) { get(href).then(function (res) {
var style = create('style', res); var style$$1 = create('style', res);
head.appendChild(style); head.appendChild(style$$1);
replaceVar(style, color); replaceVar(style$$1, color);
}); });
} }
}); });
@@ -2669,7 +2697,10 @@ var re = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@\[\]^`{|}~]/g;
function slugify (str) { function slugify (str) {
if (typeof str !== 'string') { return '' } if (typeof str !== 'string') { return '' }
var slug = str.toLowerCase().trim() str = /^[\w\s]+$/g.test(str) ? str.toLowerCase() : str;
var slug = str
.trim()
.replace(/<[^>\d]+>/g, '') .replace(/<[^>\d]+>/g, '')
.replace(re, '') .replace(re, '')
.replace(/\s/g, '-') .replace(/\s/g, '-')
@@ -2677,7 +2708,7 @@ function slugify (str) {
.replace(/^(\d)/, '_$1'); .replace(/^(\d)/, '_$1');
var count = cache$1[slug]; var count = cache$1[slug];
count = cache$1.hasOwnProperty(slug) ? (count + 1) : 0; count = cache$1.hasOwnProperty(slug) ? count + 1 : 0;
cache$1[slug] = count; cache$1[slug] = count;
if (count) { if (count) {
@@ -2728,9 +2759,11 @@ function stringifyQuery (obj) {
var qs = []; var qs = [];
for (var key in obj) { for (var key in obj) {
qs.push(obj[key] qs.push(
? ((encode(key)) + "=" + (encode(obj[key]))).toLowerCase() obj[key]
: encode(key)); ? ((encode(key)) + "=" + (encode(obj[key]))).toLowerCase()
: encode(key)
);
} }
return qs.length ? ("?" + (qs.join('&'))) : '' return qs.length ? ("?" + (qs.join('&'))) : ''
@@ -2750,15 +2783,11 @@ var isAbsolutePath = cached(function (path) {
var getParentPath = cached(function (path) { var getParentPath = cached(function (path) {
return /\/$/g.test(path) return /\/$/g.test(path)
? path ? path
: (path = path.match(/(\S*\/)[^\/]+$/)) : (path = path.match(/(\S*\/)[^\/]+$/)) ? path[1] : ''
? path[1]
: ''
}); });
var cleanPath = cached(function (path) { var cleanPath = cached(function (path) {
return path return path.replace(/^\/+/, '/').replace(/([^:])\/{2,}/g, '$1/')
.replace(/^\/+/, '/')
.replace(/([^:])\/{2,}/g, '$1/')
}); });
var cachedLinks = {}; var cachedLinks = {};
@@ -2817,11 +2846,13 @@ Compiler.prototype._initRenderer = function _initRenderer () {
var router = ref.router; var router = ref.router;
var contentBase = ref.contentBase; var contentBase = ref.contentBase;
var _self = this; var _self = this;
var origin = {};
/** /**
* render anchor tag * render anchor tag
* @link https://github.com/chjj/marked#overriding-renderer-methods * @link https://github.com/chjj/marked#overriding-renderer-methods
*/ */
renderer.heading = function (text, level) { origin.heading = renderer.heading = function (text, level) {
var nextToc = { level: level, title: text }; var nextToc = { level: level, title: text };
if (/{docsify-ignore}/g.test(text)) { if (/{docsify-ignore}/g.test(text)) {
@@ -2844,14 +2875,14 @@ Compiler.prototype._initRenderer = function _initRenderer () {
return ("<h" + level + " id=\"" + slug + "\"><a href=\"" + url + "\" data-id=\"" + slug + "\" class=\"anchor\"><span>" + text + "</span></a></h" + level + ">") return ("<h" + level + " id=\"" + slug + "\"><a href=\"" + url + "\" data-id=\"" + slug + "\" class=\"anchor\"><span>" + text + "</span></a></h" + level + ">")
}; };
// highlight code // highlight code
renderer.code = function (code, lang) { origin.code = renderer.code = function (code, lang) {
if ( lang === void 0 ) lang = ''; if ( lang === void 0 ) lang = '';
var hl = prism.highlight(code, prism.languages[lang] || prism.languages.markup); var hl = prism.highlight(code, prism.languages[lang] || prism.languages.markup);
return ("<pre v-pre data-lang=\"" + lang + "\"><code class=\"lang-" + lang + "\">" + hl + "</code></pre>") return ("<pre v-pre data-lang=\"" + lang + "\"><code class=\"lang-" + lang + "\">" + hl + "</code></pre>")
}; };
renderer.link = function (href, title, text) { origin.link = renderer.link = function (href, title, text) {
var blank = ''; var blank = '';
if (!/:|(\/{2})/.test(href) && if (!/:|(\/{2})/.test(href) &&
@@ -2863,12 +2894,19 @@ Compiler.prototype._initRenderer = function _initRenderer () {
title = title && title.replace(/:ignore/g, '').trim(); title = title && title.replace(/:ignore/g, '').trim();
} }
var target = title && title.match(/:target=\w+/);
if (target) {
target = target[0];
title = title.replace(target, '');
blank = ' ' + target.slice(1);
}
if (title) { if (title) {
title = " title=\"" + title + "\""; title = " title=\"" + title + "\"";
} }
return ("<a href=\"" + href + "\"" + (title || '') + blank + ">" + text + "</a>") return ("<a href=\"" + href + "\"" + (title || '') + blank + ">" + text + "</a>")
}; };
renderer.paragraph = function (text) { origin.paragraph = renderer.paragraph = function (text) {
if (/^!&gt;/.test(text)) { if (/^!&gt;/.test(text)) {
return helper('tip', text) return helper('tip', text)
} else if (/^\?&gt;/.test(text)) { } else if (/^\?&gt;/.test(text)) {
@@ -2876,7 +2914,7 @@ Compiler.prototype._initRenderer = function _initRenderer () {
} }
return ("<p>" + text + "</p>") return ("<p>" + text + "</p>")
}; };
renderer.image = function (href, title, text) { origin.image = renderer.image = function (href, title, text) {
var url = href; var url = href;
var titleHTML = title ? (" title=\"" + title + "\"") : ''; var titleHTML = title ? (" title=\"" + title + "\"") : '';
@@ -2887,6 +2925,8 @@ Compiler.prototype._initRenderer = function _initRenderer () {
return ("<img src=\"" + url + "\" data-origin=\"" + href + "\" alt=\"" + text + "\"" + titleHTML + ">") return ("<img src=\"" + url + "\" data-origin=\"" + href + "\" alt=\"" + text + "\"" + titleHTML + ">")
}; };
renderer.origin = origin;
return renderer return renderer
}; };
@@ -2966,8 +3006,12 @@ function btn (el, router) {
var sidebar = getNode('.sidebar'); var sidebar = getNode('.sidebar');
isMobile && on(body, 'click', function (_) { return body.classList.contains('close') && toggle(); } isMobile &&
); on(
body,
'click',
function (_) { return body.classList.contains('close') && toggle(); }
);
on(sidebar, 'click', function (_) { return setTimeout((function (_) { return getAndActive(router, sidebar, true, true); }, 0)); } on(sidebar, 'click', function (_) { return setTimeout((function (_) { return getAndActive(router, sidebar, true, true); }, 0)); }
); );
} }
@@ -2999,19 +3043,17 @@ function getAndActive (router, el, isParent, autoTitle) {
var hash = router.toURL(router.getCurrentPath()); var hash = router.toURL(router.getCurrentPath());
var target; var target;
links links.sort(function (a, b) { return b.href.length - a.href.length; }).forEach(function (a) {
.sort(function (a, b) { return b.href.length - a.href.length; }) var href = a.getAttribute('href');
.forEach(function (a) { var node = isParent ? a.parentNode : a;
var href = a.getAttribute('href');
var node = isParent ? a.parentNode : a;
if (hash.indexOf(href) === 0 && !target) { if (hash.indexOf(href) === 0 && !target) {
target = a; target = a;
toggleClass(node, 'add', 'active'); toggleClass(node, 'add', 'active');
} else { } else {
toggleClass(node, 'remove', 'active'); toggleClass(node, 'remove', 'active');
} }
}); });
if (autoTitle) { if (autoTitle) {
$.title = target ? ((target.innerText) + " - " + title) : title; $.title = target ? ((target.innerText) + " - " + title) : title;
@@ -3020,15 +3062,131 @@ function getAndActive (router, el, isParent, autoTitle) {
return target return target
} }
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) { descriptor.writable = true; } Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) { defineProperties(Constructor.prototype, protoProps); } if (staticProps) { defineProperties(Constructor, staticProps); } return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Tweezer = function () {
function Tweezer() {
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, Tweezer);
this.duration = opts.duration || 1000;
this.ease = opts.easing || this._defaultEase;
this.start = opts.start;
this.end = opts.end;
this.frame = null;
this.next = null;
this.isRunning = false;
this.events = {};
this.direction = this.start < this.end ? 'up' : 'down';
}
_createClass(Tweezer, [{
key: 'begin',
value: function begin() {
if (!this.isRunning && this.next !== this.end) {
this.frame = window.requestAnimationFrame(this._tick.bind(this));
}
return this;
}
}, {
key: 'stop',
value: function stop() {
window.cancelAnimationFrame(this.frame);
this.isRunning = false;
this.frame = null;
this.timeStart = null;
this.next = null;
return this;
}
}, {
key: 'on',
value: function on(name, handler) {
this.events[name] = this.events[name] || [];
this.events[name].push(handler);
return this;
}
}, {
key: 'emit',
value: function emit(name, val) {
var _this = this;
var e = this.events[name];
e && e.forEach(function (handler) {
return handler.call(_this, val);
});
}
}, {
key: '_tick',
value: function _tick(currentTime) {
this.isRunning = true;
var lastTick = this.next || this.start;
if (!this.timeStart) { this.timeStart = currentTime; }
this.timeElapsed = currentTime - this.timeStart;
this.next = Math.round(this.ease(this.timeElapsed, this.start, this.end - this.start, this.duration));
if (this._shouldTick(lastTick)) {
this.emit('tick', this.next);
this.frame = window.requestAnimationFrame(this._tick.bind(this));
} else {
this.emit('tick', this.end);
this.emit('done', null);
}
}
}, {
key: '_shouldTick',
value: function _shouldTick(lastTick) {
return {
up: this.next < this.end && lastTick <= this.next,
down: this.next > this.end && lastTick >= this.next
}[this.direction];
}
}, {
key: '_defaultEase',
value: function _defaultEase(t, b, c, d) {
if ((t /= d / 2) < 1) { return c / 2 * t * t + b; }
return -c / 2 * (--t * (t - 2) - 1) + b;
}
}]);
return Tweezer;
}();
var nav = {}; var nav = {};
var hoverOver = false; var hoverOver = false;
var scroller = null;
var enableScrollEvent = true;
var coverHeight = 0;
function scrollTo (el) {
if (scroller) { scroller.stop(); }
enableScrollEvent = false;
scroller = new Tweezer({
start: window.scrollY,
end: el.getBoundingClientRect().top + window.scrollY,
duration: 500
})
.on('tick', function (v) { return window.scrollTo(0, v); })
.on('done', function () {
enableScrollEvent = true;
scroller = null;
})
.begin();
}
function highlight () { function highlight () {
if (!enableScrollEvent) { return }
var sidebar = getNode('.sidebar'); var sidebar = getNode('.sidebar');
var anchors = findAll('.anchor'); var anchors = findAll('.anchor');
var wrap = find(sidebar, '.sidebar-nav'); var wrap = find(sidebar, '.sidebar-nav');
var active = find(sidebar, 'li.active'); var active = find(sidebar, 'li.active');
var top = body.scrollTop; var doc = document.documentElement;
var top = ((doc && doc.scrollTop) || document.body.scrollTop) - coverHeight;
var last; var last;
for (var i = 0, len = anchors.length; i < len; i += 1) { for (var i = 0, len = anchors.length; i < len; i += 1) {
@@ -3056,23 +3214,18 @@ function highlight () {
var height = sidebar.clientHeight; var height = sidebar.clientHeight;
var curOffset = 0; var curOffset = 0;
var cur = active.offsetTop + active.clientHeight + 40; var cur = active.offsetTop + active.clientHeight + 40;
var isInView = ( var isInView =
active.offsetTop >= wrap.scrollTop && active.offsetTop >= wrap.scrollTop && cur <= wrap.scrollTop + height;
cur <= wrap.scrollTop + height
);
var notThan = cur - curOffset < height; var notThan = cur - curOffset < height;
var top$1 = isInView var top$1 = isInView ? wrap.scrollTop : notThan ? curOffset : cur - height;
? wrap.scrollTop
: notThan
? curOffset
: cur - height;
sidebar.scrollTop = top$1; sidebar.scrollTop = top$1;
} }
} }
function scrollActiveSidebar (router) { function scrollActiveSidebar (router) {
if (isMobile) { return } var cover = find('.cover.show');
coverHeight = cover ? cover.offsetHeight : 0;
var sidebar = getNode('.sidebar'); var sidebar = getNode('.sidebar');
var lis = findAll(sidebar, 'li'); var lis = findAll(sidebar, 'li');
@@ -3087,18 +3240,32 @@ function scrollActiveSidebar (router) {
href = router.parse(href).query.id; href = router.parse(href).query.id;
} }
nav[decodeURIComponent(href)] = li; if (href) { nav[decodeURIComponent(href)] = li; }
} }
if (isMobile) { return }
off('scroll', highlight); off('scroll', highlight);
on('scroll', highlight); on('scroll', highlight);
on(sidebar, 'mouseover', function () { hoverOver = true; }); on(sidebar, 'mouseover', function () {
on(sidebar, 'mouseleave', function () { hoverOver = false; }); hoverOver = true;
});
on(sidebar, 'mouseleave', function () {
hoverOver = false;
});
} }
function scrollIntoView (id) { function scrollIntoView (id) {
if (!id) { return }
var section = find('#' + id); var section = find('#' + id);
section && section.scrollIntoView(); section && scrollTo(section);
var li = nav[id];
var sidebar = getNode('.sidebar');
var active = find(sidebar, 'li.active');
active && active.classList.remove('active');
li && li.classList.add('active');
} }
var scrollEl = $.scrollingElement || $.documentElement; var scrollEl = $.scrollingElement || $.documentElement;
@@ -3318,7 +3485,9 @@ function initRender (vm) {
before(navAppendToTarget, navEl); before(navAppendToTarget, navEl);
if (config.themeColor) { if (config.themeColor) {
$.head.innerHTML += theme(config.themeColor); $.head.appendChild(
create('div', theme(config.themeColor)).firstElementChild
);
// Polyfll // Polyfll
cssVars(config.themeColor); cssVars(config.themeColor);
} }
@@ -3334,15 +3503,15 @@ function getAlias (path, alias, last) {
return re.test(path) && path !== last return re.test(path) && path !== last
})[0]; })[0];
return match ? getAlias(path.replace(cached$1[match], alias[match]), alias, path) : path return match
? getAlias(path.replace(cached$1[match], alias[match]), alias, path)
: path
} }
function getFileName (path) { function getFileName (path) {
return /\.(md|html)$/g.test(path) return /\.(md|html)$/g.test(path)
? path ? path
: /\/$/g.test(path) : /\/$/g.test(path) ? (path + "README.md") : (path + ".md")
? (path + "README.md")
: (path + ".md")
} }
var History = function History (config) { var History = function History (config) {
@@ -3362,7 +3531,7 @@ History.prototype.getFile = function getFile (path, isRelative) {
path = config.alias ? getAlias(path, config.alias) : path; path = config.alias ? getAlias(path, config.alias) : path;
path = getFileName(path); path = getFileName(path);
path = path === '/README.md' ? (config.homepage || path) : path; path = path === '/README.md' ? config.homepage || path : path;
path = isAbsolutePath(path) ? path : getPath(base, path); path = isAbsolutePath(path) ? path : getPath(base, path);
if (isRelative) { if (isRelative) {
@@ -3388,9 +3557,7 @@ History.prototype.toURL = function toURL () {};
function replaceHash (path) { function replaceHash (path) {
var i = location.href.indexOf('#'); var i = location.href.indexOf('#');
location.replace( location.replace(location.href.slice(0, i >= 0 ? i : 0) + '#' + path);
location.href.slice(0, i >= 0 ? i : 0) + '#' + path
);
} }
var replaceSlug = cached(function (path) { var replaceSlug = cached(function (path) {
@@ -3411,9 +3578,7 @@ var HashHistory = (function (History$$1) {
var path = window.location.pathname || ''; var path = window.location.pathname || '';
var base = this.config.basePath; var base = this.config.basePath;
return /^(\/|https?:)/g.test(base) return /^(\/|https?:)/g.test(base) ? base : cleanPath(path + '/' + base)
? base
: cleanPath(path + '/' + base)
}; };
HashHistory.prototype.getCurrentPath = function getCurrentPath () { HashHistory.prototype.getCurrentPath = function getCurrentPath () {
@@ -3508,9 +3673,7 @@ var HTML5History = (function (History$$1) {
if ( cb === void 0 ) cb = noop; if ( cb === void 0 ) cb = noop;
on('click', function (e) { on('click', function (e) {
var el = e.target.tagName === 'A' var el = e.target.tagName === 'A' ? e.target : e.target.parentNode;
? e.target
: e.target.parentNode;
if (el.tagName === 'A' && !/_blank/.test(el.target)) { if (el.tagName === 'A' && !/_blank/.test(el.target)) {
e.preventDefault(); e.preventDefault();
@@ -3780,6 +3943,19 @@ var initGlobalAPI = function () {
window.Prism = prism; window.Prism = prism;
}; };
/**
* Fork https://github.com/bendrucker/document-ready/blob/master/index.js
*/
function ready (callback) {
var state = document.readyState;
if (state === 'complete' || state === 'interactive') {
return setTimeout(callback, 0)
}
document.addEventListener('DOMContentLoaded', callback);
}
function Docsify () { function Docsify () {
this._init(); this._init();
} }
@@ -3800,11 +3976,11 @@ initGlobalAPI();
/** /**
* Version * Version
*/ */
Docsify.version = '4.2.0'; Docsify.version = '4.3.7';
/** /**
* Run Docsify * Run Docsify
*/ */
setTimeout(function (_) { return new Docsify(); }, 0); ready(function (_) { return new Docsify(); });
}()); }());
+2 -2
View File
File diff suppressed because one or more lines are too long
+64
View File
@@ -0,0 +1,64 @@
(function () {
'use strict';
var DEFAULT_OPTIONS = {
theme: 'light',
image: 'show'
};
function tpl (id, options) {
var qs = [];
for (var key in options) {
qs.push((key + "=" + (options[key])));
}
var div = Docsify.dom.create('div');
Docsify.dom.toggleClass(div, 'codesponsor');
div.innerHTML = "<iframe\n scrolling=0\n frameborder=0\n width=250\n height=250\n id=\"code-sponsor-embed-iframe\"\n src=\"https://app.codesponsor.io/widgets/" + id + "?" + (qs.join('&')) + "\">\n </iframe>";
return div
}
function appIframe (id, opts) {
var html = tpl(id, opts);
Docsify.dom.before(Docsify.dom.find('section.content'), html);
}
function appendStyle () {
Docsify.dom.style("\n .codesponsor {\n position: relative;\n float: right;\n right: 10px;\n top: 10px;\n }\n\n @media screen and (min-width: 1600px) {\n body.sticky .codesponsor {\n position: fixed;\n }\n\n .codesponsor {\n position: absolute;\n bottom: 10px;\n top: auto;\n float: none;\n }\n }\n ");
}
var install = function (hook, vm) {
var config = vm.config.codesponsor;
var id;
if (typeof config === 'string') {
id = config;
config = {};
} else {
id = config.id;
}
var opts = Docsify.util.merge(DEFAULT_OPTIONS, config);
if (!id) {
throw Error('codesponsor plugin need id')
}
if (Docsify.util.isMobile) {
return
}
// Append style
hook.ready(function () {
appendStyle();
appIframe(id, opts);
});
};
window.$docsify.plugins = [].concat(install, window.$docsify.plugins);
}());
+1
View File
@@ -0,0 +1 @@
!function(){"use strict";function o(o,n){var i=[];for(var s in n)i.push(s+"="+n[s]);var e=Docsify.dom.create("div");return Docsify.dom.toggleClass(e,"codesponsor"),e.innerHTML='<iframe\n scrolling=0\n frameborder=0\n width=250\n height=250\n id="code-sponsor-embed-iframe"\n src="https://app.codesponsor.io/widgets/'+o+"?"+i.join("&")+'">\n </iframe>',e}function n(n,i){var s=o(n,i);Docsify.dom.before(Docsify.dom.find("section.content"),s)}function i(){Docsify.dom.style("\n .codesponsor {\n position: relative;\n float: right;\n right: 10px;\n top: 10px;\n }\n\n @media screen and (min-width: 1600px) {\n body.sticky .codesponsor {\n position: fixed;\n }\n\n .codesponsor {\n position: absolute;\n bottom: 10px;\n top: auto;\n float: none;\n }\n }\n ")}var s={theme:"light",image:"show"},e=function(o,e){var t,r=e.config.codesponsor;"string"==typeof r?(t=r,r={}):t=r.id;var c=Docsify.util.merge(s,r);if(!t)throw Error("codesponsor plugin need id");Docsify.util.isMobile||o.ready(function(){i(),n(t,c)})};window.$docsify.plugins=[].concat(e,window.$docsify.plugins)}();
+893 -147
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -1,4 +1,3 @@
this.D = this.D || {};
(function () { (function () {
'use strict'; 'use strict';
+1 -1
View File
@@ -1 +1 @@
this.D=this.D||{},function(){"use strict";function e(){for(var e=Docsify.dom.getNode("#main"),i=Docsify.dom.findAll(e,"script"),o=i.length;o--;){var t=i[o];if(t&&t.src){var n=document.createElement("script");Array.prototype.slice.call(t.attributes).forEach(function(e){n[e.name]=e.value}),t.parentNode.insertBefore(n,t),t.parentNode.removeChild(t)}}}var i=function(i){i.doneEach(e)};window.$docsify.plugins=[].concat(i,window.$docsify.plugins)}(); !function(){"use strict";function e(){for(var e=Docsify.dom.getNode("#main"),o=Docsify.dom.findAll(e,"script"),n=o.length;n--;){var i=o[n];if(i&&i.src){var t=document.createElement("script");Array.prototype.slice.call(i.attributes).forEach(function(e){t[e.name]=e.value}),i.parentNode.insertBefore(t,i),i.parentNode.removeChild(i)}}}var o=function(o){o.doneEach(e)};window.$docsify.plugins=[].concat(o,window.$docsify.plugins)}();
+327 -332
View File
@@ -1,4 +1,3 @@
this.D = this.D || {};
(function () { (function () {
'use strict'; 'use strict';
@@ -33,386 +32,381 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* @namespace * @namespace
*/ */
var errors = []; var errors = [];
var reference_blocks = []; var reference_blocks = [];
var processing_time = 0; var processing_time = 0;
var regex$1 = var regex$1 = {
{ regLevel: new RegExp('^([\\s\\-]+)'),
"regLevel" : new RegExp("^([\\s\\-]+)"), invalidLine: new RegExp('^\\-\\-\\-|^\\.\\.\\.|^\\s*#.*|^\\s*$'),
"invalidLine" : new RegExp("^\\-\\-\\-|^\\.\\.\\.|^\\s*#.*|^\\s*$"), dashesString: new RegExp('^\\s*\\"([^\\"]*)\\"\\s*$'),
"dashesString" : new RegExp("^\\s*\\\"([^\\\"]*)\\\"\\s*$"), quotesString: new RegExp("^\\s*\\'([^\\']*)\\'\\s*$"),
"quotesString" : new RegExp("^\\s*\\\'([^\\\']*)\\\'\\s*$"), float: new RegExp('^[+-]?[0-9]+\\.[0-9]+(e[+-]?[0-9]+(\\.[0-9]+)?)?$'),
"float" : new RegExp("^[+-]?[0-9]+\\.[0-9]+(e[+-]?[0-9]+(\\.[0-9]+)?)?$"), integer: new RegExp('^[+-]?[0-9]+$'),
"integer" : new RegExp("^[+-]?[0-9]+$"), array: new RegExp('\\[\\s*(.*)\\s*\\]'),
"array" : new RegExp("\\[\\s*(.*)\\s*\\]"), map: new RegExp('\\{\\s*(.*)\\s*\\}'),
"map" : new RegExp("\\{\\s*(.*)\\s*\\}"), key_value: new RegExp('([a-z0-9_-][ a-z0-9_-]*):( .+)', 'i'),
"key_value" : new RegExp("([a-z0-9_-][ a-z0-9_-]*):( .+)", "i"), single_key_value: new RegExp('^([a-z0-9_-][ a-z0-9_-]*):( .+?)$', 'i'),
"single_key_value" : new RegExp("^([a-z0-9_-][ a-z0-9_-]*):( .+?)$", "i"), key: new RegExp('([a-z0-9_-][ a-z0-9_-]+):( .+)?', 'i'),
"key" : new RegExp("([a-z0-9_-][ a-z0-9_-]+):( .+)?", "i"), item: new RegExp('^-\\s+'),
"item" : new RegExp("^-\\s+"), trim: new RegExp('^\\s+|\\s+$'),
"trim" : new RegExp("^\\s+|\\s+$"), comment: new RegExp('([^\\\'\\"#]+([\\\'\\"][^\\\'\\"]*[\\\'\\"])*)*(#.*)?')
"comment" : new RegExp("([^\\\'\\\"#]+([\\\'\\\"][^\\\'\\\"]*[\\\'\\\"])*)*(#.*)?") };
};
/** /**
* @class A block of lines of a given level. * @class A block of lines of a given level.
* @param {int} lvl The block's level. * @param {int} lvl The block's level.
* @private * @private
*/ */
function Block(lvl) { function Block(lvl) {
return { return {
/* The block's parent */ /* The block's parent */
parent: null, parent: null,
/* Number of children */ /* Number of children */
length: 0, length: 0,
/* Block's level */ /* Block's level */
level: lvl, level: lvl,
/* Lines of code to process */ /* Lines of code to process */
lines: [], lines: [],
/* Blocks with greater level */ /* Blocks with greater level */
children : [], children: [],
/* Add a block to the children collection */ /* Add a block to the children collection */
addChild : function(obj) { addChild: function(obj) {
this.children.push(obj); this.children.push(obj);
obj.parent = this; obj.parent = this;
++this.length; ++this.length;
} }
}; }
} }
function parser$1(str) { function parser$1(str) {
var regLevel = regex$1["regLevel"]; var regLevel = regex$1['regLevel'];
var invalidLine = regex$1["invalidLine"]; var invalidLine = regex$1['invalidLine'];
var lines = str.split("\n"); var lines = str.split('\n');
var m; var m;
var level = 0, curLevel = 0; var level = 0,
curLevel = 0;
var blocks = []; var blocks = [];
var result = new Block(-1); var result = new Block(-1);
var currentBlock = new Block(0); var currentBlock = new Block(0);
result.addChild(currentBlock); result.addChild(currentBlock);
var levels = []; var levels = [];
var line = ""; var line = '';
blocks.push(currentBlock); blocks.push(currentBlock);
levels.push(level); levels.push(level);
for(var i = 0, len = lines.length; i < len; ++i) { for (var i = 0, len = lines.length; i < len; ++i) {
line = lines[i]; line = lines[i];
if(line.match(invalidLine)) { if (line.match(invalidLine)) {
continue; continue
}
if(m = regLevel.exec(line)) {
level = m[1].length;
} else
{ level = 0; }
if(level > curLevel) {
var oldBlock = currentBlock;
currentBlock = new Block(level);
oldBlock.addChild(currentBlock);
blocks.push(currentBlock);
levels.push(level);
} else if(level < curLevel) {
var added = false;
var k = levels.length - 1;
for(; k >= 0; --k) {
if(levels[k] == level) {
currentBlock = new Block(level);
blocks.push(currentBlock);
levels.push(level);
if(blocks[k].parent!= null)
{ blocks[k].parent.addChild(currentBlock); }
added = true;
break;
}
}
if(!added) {
errors.push("Error: Invalid indentation at line " + i + ": " + line);
return;
}
}
currentBlock.lines.push(line.replace(regex$1["trim"], ""));
curLevel = level;
} }
return result; if ((m = regLevel.exec(line))) {
level = m[1].length;
} else { level = 0; }
if (level > curLevel) {
var oldBlock = currentBlock;
currentBlock = new Block(level);
oldBlock.addChild(currentBlock);
blocks.push(currentBlock);
levels.push(level);
} else if (level < curLevel) {
var added = false;
var k = levels.length - 1;
for (; k >= 0; --k) {
if (levels[k] == level) {
currentBlock = new Block(level);
blocks.push(currentBlock);
levels.push(level);
if (blocks[k].parent != null) { blocks[k].parent.addChild(currentBlock); }
added = true;
break
}
}
if (!added) {
errors.push('Error: Invalid indentation at line ' + i + ': ' + line);
return
}
}
currentBlock.lines.push(line.replace(regex$1['trim'], ''));
curLevel = level;
}
return result
} }
function processValue(val) { function processValue(val) {
val = val.replace(regex$1["trim"], ""); val = val.replace(regex$1['trim'], '');
var m = null; var m = null;
if(val == 'true') { if (val == 'true') {
return true; return true
} else if(val == 'false') { } else if (val == 'false') {
return false; return false
} else if(val == '.NaN') { } else if (val == '.NaN') {
return Number.NaN; return Number.NaN
} else if(val == 'null') { } else if (val == 'null') {
return null; return null
} else if(val == '.inf') { } else if (val == '.inf') {
return Number.POSITIVE_INFINITY; return Number.POSITIVE_INFINITY
} else if(val == '-.inf') { } else if (val == '-.inf') {
return Number.NEGATIVE_INFINITY; return Number.NEGATIVE_INFINITY
} else if(m = val.match(regex$1["dashesString"])) { } else if ((m = val.match(regex$1['dashesString']))) {
return m[1]; return m[1]
} else if(m = val.match(regex$1["quotesString"])) { } else if ((m = val.match(regex$1['quotesString']))) {
return m[1]; return m[1]
} else if(m = val.match(regex$1["float"])) { } else if ((m = val.match(regex$1['float']))) {
return parseFloat(m[0]); return parseFloat(m[0])
} else if(m = val.match(regex$1["integer"])) { } else if ((m = val.match(regex$1['integer']))) {
return parseInt(m[0]); return parseInt(m[0])
} else if( !isNaN(m = Date.parse(val))) { } else if (!isNaN((m = Date.parse(val)))) {
return new Date(m); return new Date(m)
} else if(m = val.match(regex$1["single_key_value"])) { } else if ((m = val.match(regex$1['single_key_value']))) {
var res = {}; var res = {};
res[m[1]] = processValue(m[2]); res[m[1]] = processValue(m[2]);
return res; return res
} else if(m = val.match(regex$1["array"])){ } else if ((m = val.match(regex$1['array']))) {
var count = 0, c = ' '; var count = 0,
var res = []; c = ' ';
var content = ""; var res = [];
var str = false; var content = '';
for(var j = 0, lenJ = m[1].length; j < lenJ; ++j) { var str = false;
c = m[1][j]; for (var j = 0, lenJ = m[1].length; j < lenJ; ++j) {
if(c == '\'' || c == '"') { c = m[1][j];
if(str === false) { if (c == "'" || c == '"') {
str = c; if (str === false) {
content += c; str = c;
continue; content += c;
} else if((c == '\'' && str == '\'') || (c == '"' && str == '"')) { continue
str = false; } else if ((c == "'" && str == "'") || (c == '"' && str == '"')) {
content += c; str = false;
continue; content += c;
} continue
} else if(str === false && (c == '[' || c == '{')) {
++count;
} else if(str === false && (c == ']' || c == '}')) {
--count;
} else if(str === false && count == 0 && c == ',') {
res.push(processValue(content));
content = "";
continue;
}
content += c;
} }
} else if (str === false && (c == '[' || c == '{')) {
++count;
} else if (str === false && (c == ']' || c == '}')) {
--count;
} else if (str === false && count == 0 && c == ',') {
res.push(processValue(content));
content = '';
continue
}
if(content.length > 0) content += c;
{ res.push(processValue(content)); } }
return res;
} else if(m = val.match(regex$1["map"])){
var count = 0, c = ' ';
var res = [];
var content = "";
var str = false;
for(var j = 0, lenJ = m[1].length; j < lenJ; ++j) {
c = m[1][j];
if(c == '\'' || c == '"') {
if(str === false) {
str = c;
content += c;
continue;
} else if((c == '\'' && str == '\'') || (c == '"' && str == '"')) {
str = false;
content += c;
continue;
}
} else if(str === false && (c == '[' || c == '{')) {
++count;
} else if(str === false && (c == ']' || c == '}')) {
--count;
} else if(str === false && count == 0 && c == ',') {
res.push(content);
content = "";
continue;
}
content += c; if (content.length > 0) { res.push(processValue(content)); }
return res
} else if ((m = val.match(regex$1['map']))) {
var count = 0,
c = ' ';
var res = [];
var content = '';
var str = false;
for (var j = 0, lenJ = m[1].length; j < lenJ; ++j) {
c = m[1][j];
if (c == "'" || c == '"') {
if (str === false) {
str = c;
content += c;
continue
} else if ((c == "'" && str == "'") || (c == '"' && str == '"')) {
str = false;
content += c;
continue
} }
} else if (str === false && (c == '[' || c == '{')) {
++count;
} else if (str === false && (c == ']' || c == '}')) {
--count;
} else if (str === false && count == 0 && c == ',') {
res.push(content);
content = '';
continue
}
if(content.length > 0) content += c;
{ res.push(content); } }
var newRes = {}; if (content.length > 0) { res.push(content); }
for(var j = 0, lenJ = res.length; j < lenJ; ++j) {
if(m = res[j].match(regex$1["key_value"])) {
newRes[m[1]] = processValue(m[2]);
}
}
return newRes; var newRes = {};
} else for (var j = 0, lenJ = res.length; j < lenJ; ++j) {
{ return val; } if ((m = res[j].match(regex$1['key_value']))) {
newRes[m[1]] = processValue(m[2]);
}
}
return newRes
} else { return val }
} }
function processFoldedBlock(block) { function processFoldedBlock(block) {
var lines = block.lines; var lines = block.lines;
var children = block.children; var children = block.children;
var str = lines.join(" "); var str = lines.join(' ');
var chunks = [str]; var chunks = [str];
for(var i = 0, len = children.length; i < len; ++i) { for (var i = 0, len = children.length; i < len; ++i) {
chunks.push(processFoldedBlock(children[i])); chunks.push(processFoldedBlock(children[i]));
} }
return chunks.join("\n"); return chunks.join('\n')
} }
function processLiteralBlock(block) { function processLiteralBlock(block) {
var lines = block.lines; var lines = block.lines;
var children = block.children; var children = block.children;
var str = lines.join("\n"); var str = lines.join('\n');
for(var i = 0, len = children.length; i < len; ++i) { for (var i = 0, len = children.length; i < len; ++i) {
str += processLiteralBlock(children[i]); str += processLiteralBlock(children[i]);
} }
return str; return str
} }
function processBlock(blocks) { function processBlock(blocks) {
var m = null; var m = null;
var res = {}; var res = {};
var lines = null; var lines = null;
var children = null; var children = null;
var currentObj = null; var currentObj = null;
var level = -1; var level = -1;
var processedBlocks = []; var processedBlocks = [];
var isMap = true; var isMap = true;
for(var j = 0, lenJ = blocks.length; j < lenJ; ++j) { for (var j = 0, lenJ = blocks.length; j < lenJ; ++j) {
if (level != -1 && level != blocks[j].level) { continue }
if(level != -1 && level != blocks[j].level) processedBlocks.push(j);
{ continue; }
processedBlocks.push(j); level = blocks[j].level;
lines = blocks[j].lines;
children = blocks[j].children;
currentObj = null;
level = blocks[j].level; for (var i = 0, len = lines.length; i < len; ++i) {
lines = blocks[j].lines; var line = lines[i];
children = blocks[j].children;
currentObj = null;
for(var i = 0, len = lines.length; i < len; ++i) { if ((m = line.match(regex$1['key']))) {
var line = lines[i]; var key = m[1];
if(m = line.match(regex$1["key"])) { if (key[0] == '-') {
var key = m[1]; key = key.replace(regex$1['item'], '');
if (isMap) {
if(key[0] == '-') { isMap = false;
key = key.replace(regex$1["item"], ""); if (typeof res.length === 'undefined') {
if (isMap) { res = [];
isMap = false;
if (typeof(res.length) === "undefined") {
res = [];
}
}
if(currentObj != null) { res.push(currentObj); }
currentObj = {};
isMap = true;
}
if(typeof m[2] != "undefined") {
var value = m[2].replace(regex$1["trim"], "");
if(value[0] == '&') {
var nb = processBlock(children);
if(currentObj != null) { currentObj[key] = nb; }
else { res[key] = nb; }
reference_blocks[value.substr(1)] = nb;
} else if(value[0] == '|') {
if(currentObj != null) { currentObj[key] = processLiteralBlock(children.shift()); }
else { res[key] = processLiteralBlock(children.shift()); }
} else if(value[0] == '*') {
var v = value.substr(1);
var no = {};
if(typeof reference_blocks[v] == "undefined") {
errors.push("Reference '" + v + "' not found!");
} else {
for(var k in reference_blocks[v]) {
no[k] = reference_blocks[v][k];
}
if(currentObj != null) { currentObj[key] = no; }
else { res[key] = no; }
}
} else if(value[0] == '>') {
if(currentObj != null) { currentObj[key] = processFoldedBlock(children.shift()); }
else { res[key] = processFoldedBlock(children.shift()); }
} else {
if(currentObj != null) { currentObj[key] = processValue(value); }
else { res[key] = processValue(value); }
}
} else {
if(currentObj != null) { currentObj[key] = processBlock(children); }
else { res[key] = processBlock(children); }
}
} else if(line.match(/^-\s*$/)) {
if (isMap) {
isMap = false;
if (typeof(res.length) === "undefined") {
res = [];
}
}
if(currentObj != null) { res.push(currentObj); }
currentObj = {};
isMap = true;
continue;
} else if(m = line.match(/^-\s*(.*)/)) {
if(currentObj != null)
{ currentObj.push(processValue(m[1])); }
else {
if (isMap) {
isMap = false;
if (typeof(res.length) === "undefined") {
res = [];
}
}
res.push(processValue(m[1]));
}
continue;
} }
}
if (currentObj != null) { res.push(currentObj); }
currentObj = {};
isMap = true;
} }
if(currentObj != null) { if (typeof m[2] != 'undefined') {
if (isMap) { var value = m[2].replace(regex$1['trim'], '');
isMap = false; if (value[0] == '&') {
if (typeof(res.length) === "undefined") { var nb = processBlock(children);
res = []; if (currentObj != null) { currentObj[key] = nb; }
} else { res[key] = nb; }
reference_blocks[value.substr(1)] = nb;
} else if (value[0] == '|') {
if (currentObj != null)
{ currentObj[key] = processLiteralBlock(children.shift()); }
else { res[key] = processLiteralBlock(children.shift()); }
} else if (value[0] == '*') {
var v = value.substr(1);
var no = {};
if (typeof reference_blocks[v] == 'undefined') {
errors.push("Reference '" + v + "' not found!");
} else {
for (var k in reference_blocks[v]) {
no[k] = reference_blocks[v][k];
}
if (currentObj != null) { currentObj[key] = no; }
else { res[key] = no; }
} }
res.push(currentObj); } else if (value[0] == '>') {
if (currentObj != null)
{ currentObj[key] = processFoldedBlock(children.shift()); }
else { res[key] = processFoldedBlock(children.shift()); }
} else {
if (currentObj != null) { currentObj[key] = processValue(value); }
else { res[key] = processValue(value); }
}
} else {
if (currentObj != null) { currentObj[key] = processBlock(children); }
else { res[key] = processBlock(children); }
} }
} else if (line.match(/^-\s*$/)) {
if (isMap) {
isMap = false;
if (typeof res.length === 'undefined') {
res = [];
}
}
if (currentObj != null) { res.push(currentObj); }
currentObj = {};
isMap = true;
continue
} else if ((m = line.match(/^-\s*(.*)/))) {
if (currentObj != null) { currentObj.push(processValue(m[1])); }
else {
if (isMap) {
isMap = false;
if (typeof res.length === 'undefined') {
res = [];
}
}
res.push(processValue(m[1]));
}
continue
}
} }
for(var j = processedBlocks.length - 1; j >= 0; --j) { if (currentObj != null) {
blocks.splice.call(blocks, processedBlocks[j], 1); if (isMap) {
isMap = false;
if (typeof res.length === 'undefined') {
res = [];
}
}
res.push(currentObj);
} }
}
return res; for (var j = processedBlocks.length - 1; j >= 0; --j) {
blocks.splice.call(blocks, processedBlocks[j], 1);
}
return res
} }
function semanticAnalysis(blocks) { function semanticAnalysis(blocks) {
var res = processBlock(blocks.children); var res = processBlock(blocks.children);
return res; return res
} }
function preProcess(src) { function preProcess(src) {
var m; var m;
var lines = src.split("\n"); var lines = src.split('\n');
var r = regex$1["comment"]; var r = regex$1['comment'];
for(var i in lines) { for (var i in lines) {
if(m = lines[i].match(r)) { if ((m = lines[i].match(r))) {
/* var cmt = ""; /* var cmt = "";
if(typeof m[3] != "undefined") if(typeof m[3] != "undefined")
lines[i] = m[1]; lines[i] = m[1];
else if(typeof m[3] != "undefined") else if(typeof m[3] != "undefined")
@@ -420,25 +414,25 @@ function preProcess(src) {
else else
lines[i] = ""; lines[i] = "";
*/ */
if(typeof m[3] !== "undefined") { if (typeof m[3] !== 'undefined') {
lines[i] = m[0].substr(0, m[0].length - m[3].length); lines[i] = m[0].substr(0, m[0].length - m[3].length);
} }
}
} }
}
return lines.join("\n"); return lines.join('\n')
} }
function load(str) { function load(str) {
errors = []; errors = [];
reference_blocks = []; reference_blocks = [];
processing_time = (new Date()).getTime(); processing_time = new Date().getTime();
var pre = preProcess(str); var pre = preProcess(str);
var doc = parser$1(pre); var doc = parser$1(pre);
var res = semanticAnalysis(doc); var res = semanticAnalysis(doc);
processing_time = (new Date()).getTime() - processing_time; processing_time = new Date().getTime() - processing_time;
return res; return res
} }
/** /**
@@ -446,7 +440,8 @@ function load(str) {
*/ */
/* eslint-disable */ /* eslint-disable */
var optionalByteOrderMark = '\\ufeff?'; var optionalByteOrderMark = '\\ufeff?';
var pattern = '^(' + var pattern =
'^(' +
optionalByteOrderMark + optionalByteOrderMark +
'(= yaml =|---)' + '(= yaml =|---)' +
'$([\\s\\S]*?)' + '$([\\s\\S]*?)' +
@@ -458,7 +453,7 @@ var pattern = '^(' +
// need to be moved down into the functions that use it. // need to be moved down into the functions that use it.
var regex = new RegExp(pattern, 'm'); var regex = new RegExp(pattern, 'm');
function extractor (string) { function extractor(string) {
string = string || ''; string = string || '';
var lines = string.split(/(\r?\n)/); var lines = string.split(/(\r?\n)/);
@@ -469,7 +464,7 @@ function extractor (string) {
} }
} }
function parse (string) { function parse(string) {
var match = regex.exec(string); var match = regex.exec(string);
if (!match) { if (!match) {
+1 -1
View File
File diff suppressed because one or more lines are too long
+5 -4
View File
@@ -1,4 +1,3 @@
this.D = this.D || {};
(function () { (function () {
'use strict'; 'use strict';
@@ -12,9 +11,11 @@ function appendScript () {
function init (id) { function init (id) {
appendScript(); appendScript();
window.ga = window.ga || function () { window.ga =
(window.ga.q = window.ga.q || []).push(arguments); window.ga ||
}; function () {
(window.ga.q = window.ga.q || []).push(arguments);
};
window.ga.l = Number(new Date()); window.ga.l = Number(new Date());
window.ga('create', id, 'auto'); window.ga('create', id, 'auto');
} }
+1 -1
View File
@@ -1 +1 @@
this.D=this.D||{},function(){"use strict";function n(){var n=document.createElement("script");n.async=!0,n.src="https://www.google-analytics.com/analytics.js",document.body.appendChild(n)}function i(i){n(),window.ga=window.ga||function(){(window.ga.q=window.ga.q||[]).push(arguments)},window.ga.l=Number(new Date),window.ga("create",i,"auto")}function o(){window.ga||i($docsify.ga),window.ga("set","page",location.hash),window.ga("send","pageview")}var a=function(n){if(!$docsify.ga)return void console.error("[Docsify] ga is required.");n.beforeEach(o)};$docsify.plugins=[].concat(a,$docsify.plugins)}(); !function(){"use strict";function n(){var n=document.createElement("script");n.async=!0,n.src="https://www.google-analytics.com/analytics.js",document.body.appendChild(n)}function o(o){n(),window.ga=window.ga||function(){(window.ga.q=window.ga.q||[]).push(arguments)},window.ga.l=Number(new Date),window.ga("create",o,"auto")}function i(){window.ga||o($docsify.ga),window.ga("set","page",location.hash),window.ga("send","pageview")}var a=function(n){if(!$docsify.ga)return void console.error("[Docsify] ga is required.");n.beforeEach(i)};$docsify.plugins=[].concat(a,$docsify.plugins)}();
+13 -9
View File
@@ -1,4 +1,3 @@
this.D = this.D || {};
(function () { (function () {
'use strict'; 'use strict';
@@ -42,7 +41,7 @@ function saveData (maxAge) {
localStorage.setItem('docsify.search.index', JSON.stringify(INDEXS)); localStorage.setItem('docsify.search.index', JSON.stringify(INDEXS));
} }
function genIndex (path, content, router) { function genIndex (path, content, router, depth) {
if ( content === void 0 ) content = ''; if ( content === void 0 ) content = '';
var tokens = window.marked.lexer(content); var tokens = window.marked.lexer(content);
@@ -51,7 +50,7 @@ function genIndex (path, content, router) {
var slug; var slug;
tokens.forEach(function (token) { tokens.forEach(function (token) {
if (token.type === 'heading' && token.depth <= 2) { if (token.type === 'heading' && token.depth <= depth) {
slug = router.toURL(path, { id: slugify(token.text) }); slug = router.toURL(path, { id: slugify(token.text) });
index[slug] = { slug: slug, title: token.text, body: '' }; index[slug] = { slug: slug, title: token.text, body: '' };
} else { } else {
@@ -162,7 +161,7 @@ function init$1 (config, vm) {
helper helper
.get(vm.router.getFile(path)) .get(vm.router.getFile(path))
.then(function (result) { .then(function (result) {
INDEXS[path] = genIndex(path, result, vm.router); INDEXS[path] = genIndex(path, result, vm.router, config.depth);
len === ++count && saveData(config.maxAge); len === ++count && saveData(config.maxAge);
}); });
}); });
@@ -172,8 +171,8 @@ var NO_DATA_TEXT = '';
function style () { function style () {
var code = "\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 7px;\n line-height: 22px;\n font-size: 14px;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}"; var code = "\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 7px;\n line-height: 22px;\n font-size: 14px;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}";
var style = Docsify.dom.create('style', code);
Docsify.dom.appendTo(Docsify.dom.head, style); Docsify.dom.style(code);
} }
function tpl (opts, defaultValue) { function tpl (opts, defaultValue) {
@@ -181,7 +180,7 @@ function tpl (opts, defaultValue) {
var html = var html =
"<input type=\"search\" value=\"" + defaultValue + "\" />" + "<input type=\"search\" value=\"" + defaultValue + "\" />" +
'<div class="results-panel"></div>' + '<div class="results-panel"></div>' +
'</div>'; '</div>';
var el = Docsify.dom.create('div', html); var el = Docsify.dom.create('div', html);
var aside = Docsify.dom.find('aside'); var aside = Docsify.dom.find('aside');
@@ -216,8 +215,11 @@ function bindEvents () {
var timeId; var timeId;
// Prevent to Fold sidebar // Prevent to Fold sidebar
Docsify.dom.on($search, 'click', Docsify.dom.on(
function (e) { return e.target.tagName !== 'A' && e.stopPropagation(); }); $search,
'click',
function (e) { return e.target.tagName !== 'A' && e.stopPropagation(); }
);
Docsify.dom.on($input, 'input', function (e) { Docsify.dom.on($input, 'input', function (e) {
clearTimeout(timeId); clearTimeout(timeId);
timeId = setTimeout(function (_) { return doSearch(e.target.value.trim()); }, 100); timeId = setTimeout(function (_) { return doSearch(e.target.value.trim()); }, 100);
@@ -263,6 +265,7 @@ var CONFIG = {
placeholder: 'Type to search', placeholder: 'Type to search',
noData: 'No Results!', noData: 'No Results!',
paths: 'auto', paths: 'auto',
depth: 2,
maxAge: 86400000 // 1 day maxAge: 86400000 // 1 day
}; };
@@ -277,6 +280,7 @@ var install = function (hook, vm) {
CONFIG.maxAge = util.isPrimitive(opts.maxAge) ? opts.maxAge : CONFIG.maxAge; CONFIG.maxAge = util.isPrimitive(opts.maxAge) ? opts.maxAge : CONFIG.maxAge;
CONFIG.placeholder = opts.placeholder || CONFIG.placeholder; CONFIG.placeholder = opts.placeholder || CONFIG.placeholder;
CONFIG.noData = opts.noData || CONFIG.noData; CONFIG.noData = opts.noData || CONFIG.noData;
CONFIG.depth = opts.depth || CONFIG.depth;
} }
var isAuto = CONFIG.paths === 'auto'; var isAuto = CONFIG.paths === 'auto';
+1 -1
View File
@@ -1 +1 @@
this.D=this.D||{},function(){"use strict";function e(e){var n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};return String(e).replace(/[&<>"'\/]/g,function(e){return n[e]})}function n(e){var n=[];return h.dom.findAll("a:not([data-nosearch])").map(function(t){var o=t.href,i=t.getAttribute("href"),r=e.parse(o).path;r&&-1===n.indexOf(r)&&!Docsify.util.isAbsolutePath(i)&&n.push(r)}),n}function t(e){localStorage.setItem("docsify.search.expires",Date.now()+e),localStorage.setItem("docsify.search.index",JSON.stringify(y))}function o(e,n,t){void 0===n&&(n="");var o,i=window.marked.lexer(n),r=window.Docsify.slugify,a={};return i.forEach(function(n){if("heading"===n.type&&n.depth<=2)o=t.toURL(e,{id:r(n.text)}),a[o]={slug:o,title:n.text,body:""};else{if(!o)return;a[o]?a[o].body?a[o].body+="\n"+(n.text||""):a[o].body=n.text:a[o]={slug:o,title:"",body:""}}}),r.clear(),a}function i(n){var t=[],o=[];Object.keys(y).forEach(function(e){o=o.concat(Object.keys(y[e]).map(function(n){return y[e][n]}))}),n=[].concat(n,n.trim().split(/[\s\-\\\\/]+/));for(var i=0;i<o.length;i++)!function(i){var r=o[i],a=!1,s="",c=r.title&&r.title.trim(),f=r.body&&r.body.trim(),l=r.slug||"";if(c&&f&&(n.forEach(function(n,t){var o=new RegExp(n,"gi"),i=-1,r=-1;if(i=c&&c.search(o),r=f&&f.search(o),i<0&&r<0)a=!1;else{a=!0,r<0&&(r=0);var l=0,d=0;l=r<11?0:r-10,d=0===l?70:r+n.length+60,d>f.length&&(d=f.length);var u="..."+e(f).substring(l,d).replace(o,'<em class="search-keyword">'+n+"</em>")+"...";s+=u}}),a)){var d={title:e(c),content:s,url:l};t.push(d)}}(i);return t}function r(e,i){h=Docsify;var r="auto"===e.paths,a=localStorage.getItem("docsify.search.expires")<Date.now();if(y=JSON.parse(localStorage.getItem("docsify.search.index")),a)y={};else if(!r)return;var s=r?n(i.router):e.paths,c=s.length,f=0;s.forEach(function(n){if(y[n])return f++;h.get(i.router.getFile(n)).then(function(r){y[n]=o(n,r,i.router),c===++f&&t(e.maxAge)})})}function a(){var e=Docsify.dom.create("style","\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 7px;\n line-height: 22px;\n font-size: 14px;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}");Docsify.dom.appendTo(Docsify.dom.head,e)}function s(e,n){void 0===n&&(n="");var t='<input type="search" value="'+n+'" /><div class="results-panel"></div></div>',o=Docsify.dom.create("div",t),i=Docsify.dom.find("aside");Docsify.dom.toggleClass(o,"search"),Docsify.dom.before(i,o)}function c(e){var n=Docsify.dom.find("div.search"),t=Docsify.dom.find(n,".results-panel");if(!e)return t.classList.remove("show"),void(t.innerHTML="");var o=i(e),r="";o.forEach(function(e){r+='<div class="matching-post">\n<h2><a href="'+e.url+'">'+e.title+"</a></h2>\n<p>"+e.content+"</p>\n</div>"}),t.classList.add("show"),t.innerHTML=r||'<p class="empty">'+m+"</p>"}function f(){var e,n=Docsify.dom.find("div.search"),t=Docsify.dom.find(n,"input");Docsify.dom.on(n,"click",function(e){return"A"!==e.target.tagName&&e.stopPropagation()}),Docsify.dom.on(t,"input",function(n){clearTimeout(e),e=setTimeout(function(e){return c(n.target.value.trim())},100)})}function l(e,n){var t=Docsify.dom.getNode('.search input[type="search"]');if(t)if("string"==typeof e)t.placeholder=e;else{var o=Object.keys(e).filter(function(e){return n.indexOf(e)>-1})[0];t.placeholder=e[o]}}function d(e,n){if("string"==typeof e)m=e;else{var t=Object.keys(e).filter(function(e){return n.indexOf(e)>-1})[0];m=e[t]}}function u(e,n){var t=n.router.parse().query.s;a(),s(e,t),f(),t&&setTimeout(function(e){return c(t)},500)}function p(e,n){l(e.placeholder,n.route.path),d(e.noData,n.route.path)}var h,y={},m="",g={placeholder:"Type to search",noData:"No Results!",paths:"auto",maxAge:864e5},v=function(e,n){var t=Docsify.util,o=n.config.search||g;Array.isArray(o)?g.paths=o:"object"==typeof o&&(g.paths=Array.isArray(o.paths)?o.paths:"auto",g.maxAge=t.isPrimitive(o.maxAge)?o.maxAge:g.maxAge,g.placeholder=o.placeholder||g.placeholder,g.noData=o.noData||g.noData);var i="auto"===g.paths;e.mounted(function(e){u(g,n),!i&&r(g,n)}),e.doneEach(function(e){p(g,n),i&&r(g,n)})};$docsify.plugins=[].concat(v,$docsify.plugins)}(); !function(){"use strict";function e(e){var n={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"};return String(e).replace(/[&<>"'\/]/g,function(e){return n[e]})}function n(e){var n=[];return h.dom.findAll("a:not([data-nosearch])").map(function(t){var o=t.href,i=t.getAttribute("href"),r=e.parse(o).path;r&&-1===n.indexOf(r)&&!Docsify.util.isAbsolutePath(i)&&n.push(r)}),n}function t(e){localStorage.setItem("docsify.search.expires",Date.now()+e),localStorage.setItem("docsify.search.index",JSON.stringify(g))}function o(e,n,t,o){void 0===n&&(n="");var i,r=window.marked.lexer(n),a=window.Docsify.slugify,s={};return r.forEach(function(n){if("heading"===n.type&&n.depth<=o)i=t.toURL(e,{id:a(n.text)}),s[i]={slug:i,title:n.text,body:""};else{if(!i)return;s[i]?s[i].body?s[i].body+="\n"+(n.text||""):s[i].body=n.text:s[i]={slug:i,title:"",body:""}}}),a.clear(),s}function i(n){var t=[],o=[];Object.keys(g).forEach(function(e){o=o.concat(Object.keys(g[e]).map(function(n){return g[e][n]}))}),n=[].concat(n,n.trim().split(/[\s\-\\\\/]+/));for(var i=0;i<o.length;i++)!function(i){var r=o[i],a=!1,s="",c=r.title&&r.title.trim(),l=r.body&&r.body.trim(),f=r.slug||"";if(c&&l&&(n.forEach(function(n,t){var o=new RegExp(n,"gi"),i=-1,r=-1;if(i=c&&c.search(o),r=l&&l.search(o),i<0&&r<0)a=!1;else{a=!0,r<0&&(r=0);var f=0,d=0;f=r<11?0:r-10,d=0===f?70:r+n.length+60,d>l.length&&(d=l.length);var p="..."+e(l).substring(f,d).replace(o,'<em class="search-keyword">'+n+"</em>")+"...";s+=p}}),a)){var d={title:e(c),content:s,url:f};t.push(d)}}(i);return t}function r(e,i){h=Docsify;var r="auto"===e.paths,a=localStorage.getItem("docsify.search.expires")<Date.now();if(g=JSON.parse(localStorage.getItem("docsify.search.index")),a)g={};else if(!r)return;var s=r?n(i.router):e.paths,c=s.length,l=0;s.forEach(function(n){if(g[n])return l++;h.get(i.router.getFile(n)).then(function(r){g[n]=o(n,r,i.router,e.depth),c===++l&&t(e.maxAge)})})}function a(){Docsify.dom.style("\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 7px;\n line-height: 22px;\n font-size: 14px;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}")}function s(e,n){void 0===n&&(n="");var t='<input type="search" value="'+n+'" /><div class="results-panel"></div></div>',o=Docsify.dom.create("div",t),i=Docsify.dom.find("aside");Docsify.dom.toggleClass(o,"search"),Docsify.dom.before(i,o)}function c(e){var n=Docsify.dom.find("div.search"),t=Docsify.dom.find(n,".results-panel");if(!e)return t.classList.remove("show"),void(t.innerHTML="");var o=i(e),r="";o.forEach(function(e){r+='<div class="matching-post">\n<h2><a href="'+e.url+'">'+e.title+"</a></h2>\n<p>"+e.content+"</p>\n</div>"}),t.classList.add("show"),t.innerHTML=r||'<p class="empty">'+y+"</p>"}function l(){var e,n=Docsify.dom.find("div.search"),t=Docsify.dom.find(n,"input");Docsify.dom.on(n,"click",function(e){return"A"!==e.target.tagName&&e.stopPropagation()}),Docsify.dom.on(t,"input",function(n){clearTimeout(e),e=setTimeout(function(e){return c(n.target.value.trim())},100)})}function f(e,n){var t=Docsify.dom.getNode('.search input[type="search"]');if(t)if("string"==typeof e)t.placeholder=e;else{var o=Object.keys(e).filter(function(e){return n.indexOf(e)>-1})[0];t.placeholder=e[o]}}function d(e,n){if("string"==typeof e)y=e;else{var t=Object.keys(e).filter(function(e){return n.indexOf(e)>-1})[0];y=e[t]}}function p(e,n){var t=n.router.parse().query.s;a(),s(e,t),l(),t&&setTimeout(function(e){return c(t)},500)}function u(e,n){f(e.placeholder,n.route.path),d(e.noData,n.route.path)}var h,g={},y="",m={placeholder:"Type to search",noData:"No Results!",paths:"auto",depth:2,maxAge:864e5},v=function(e,n){var t=Docsify.util,o=n.config.search||m;Array.isArray(o)?m.paths=o:"object"==typeof o&&(m.paths=Array.isArray(o.paths)?o.paths:"auto",m.maxAge=t.isPrimitive(o.maxAge)?o.maxAge:m.maxAge,m.placeholder=o.placeholder||m.placeholder,m.noData=o.noData||m.noData,m.depth=o.depth||m.depth);var i="auto"===m.paths;e.mounted(function(e){p(m,n),!i&&r(m,n)}),e.doneEach(function(e){u(m,n),i&&r(m,n)})};$docsify.plugins=[].concat(v,$docsify.plugins)}();
-1
View File
@@ -1,4 +1,3 @@
this.D = this.D || {};
(function () { (function () {
'use strict'; 'use strict';
+1 -1
View File
@@ -1 +1 @@
this.D=this.D||{},function(){"use strict";function t(t){var o,i=Docsify.dom;i.appendTo(i.head,i.create("style",n)),t.doneEach(function(t){var n=i.findAll("img:not(.emoji)");Array.isArray(o)&&o.length&&(o.forEach(function(t){return t()}),o=[]),o=n.map(e)})}var e=("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self,function(t,e){return e={exports:{}},t(e,e.exports),e.exports}(function(t,e){!function(e,n){t.exports=function(){function t(){-1===g&&(g=window.pageYOffset),Math.abs(g-window.pageYOffset)>=40&&a()}function e(t){27===t.keyCode&&a()}function n(t){var e=t.touches[0];null!==e&&(y=e.pageY,t.target.addEventListener("touchmove",o))}function o(t){var e=t.touches[0];null!==e&&Math.abs(e.pageY-y)>10&&(a(),t.target.removeEventListener("touchmove",o))}function i(){a()}function r(){document.addEventListener("scroll",t),document.addEventListener("keyup",e),document.addEventListener("touchstart",n),document.addEventListener("click",i,!0)}function s(){document.removeEventListener("scroll",t),document.removeEventListener("keyup",e),document.removeEventListener("touchstart",n),document.removeEventListener("click",i,!0)}function a(t){null!==h&&(t?h.dispose():h.close(),s(),h=null)}function c(t){if(!document.body.classList.contains("zoom-overlay-open"))return t.metaKey||t.ctrlKey?void window.open(t.target.getAttribute("data-original")||t.target.src,"_blank"):void(t.target.width>=m()-v||(a(!0),h=new p(t.target,v),h.zoom(),r()))}var m=function(){return document.documentElement.clientWidth},u=function(){return document.documentElement.clientHeight},d=function(t){var e=t.getBoundingClientRect(),n=document.documentElement,o=window;return{top:e.top+o.pageYOffset-n.clientTop,left:e.left+o.pageXOffset-n.clientLeft}},l=function(t,e,n){var o=function(t){t.target.removeEventListener(e,o),n()};t.addEventListener(e,o)},f=function(t,e){this.w=t,this.h=e},p=function(t,e){this.img=t,this.preservedTransform=t.style.transform,this.wrap=null,this.overlay=null,this.offset=e};p.prototype.forceRepaint=function(){this.img.offsetWidth},p.prototype.zoom=function(){var t=new f(this.img.naturalWidth,this.img.naturalHeight);this.wrap=document.createElement("div"),this.wrap.classList.add("zoom-img-wrap"),this.img.parentNode.insertBefore(this.wrap,this.img),this.wrap.appendChild(this.img),this.img.classList.add("zoom-img"),this.img.setAttribute("data-action","zoom-out"),this.overlay=document.createElement("div"),this.overlay.classList.add("zoom-overlay"),document.body.appendChild(this.overlay),this.forceRepaint();var e=this.calculateScale(t);this.forceRepaint(),this.animate(e),document.body.classList.add("zoom-overlay-open")},p.prototype.calculateScale=function(t){var e=t.w/this.img.width,n=m()-this.offset,o=u()-this.offset,i=t.w/t.h,r=n/o;return t.w<n&&t.h<o?e:i<r?o/t.h*e:n/t.w*e},p.prototype.animate=function(t){var e=d(this.img),n=window.pageYOffset,o=m()/2,i=n+u()/2,r=e.left+this.img.width/2,s=e.top+this.img.height/2,a=o-r,c=i-s,l="scale("+t+")",f="translate3d("+a+"px, "+c+"px, 0px)";this.img.style.transform=l,this.wrap.style.transform=f},p.prototype.dispose=function(){null!==this.wrap&&null!==this.wrap.parentNode&&(this.img.classList.remove("zoom-img"),this.img.setAttribute("data-action","zoom"),this.wrap.parentNode.insertBefore(this.img,this.wrap),this.wrap.parentNode.removeChild(this.wrap),document.body.removeChild(this.overlay),document.body.classList.remove("zoom-overlay-transitioning"))},p.prototype.close=function(){var t=this;document.body.classList.add("zoom-overlay-transitioning"),this.img.style.transform=this.preservedTransform,0===this.img.style.length&&this.img.removeAttribute("style"),this.wrap.style.transform="none",l(this.img,"transitionend",function(){t.dispose(),document.body.classList.remove("zoom-overlay-open")})};var h=null,v=80,g=-1,y=-1;return function(t){return t.setAttribute("data-action","zoom"),t.addEventListener("click",c),function(){return t.removeEventListener("click",c)}}}()}()})),n='img[data-action="zoom"] {\n cursor: pointer;\n cursor: -webkit-zoom-in;\n cursor: zoom-in;\n}\n.zoom-img,\n.zoom-img-wrap {\n position: relative;\n z-index: 666;\n transition: -webkit-transform 300ms cubic-bezier(.2,0,.2,1);\n transition: transform 300ms cubic-bezier(.2,0,.2,1);\n transition: transform 300ms cubic-bezier(.2,0,.2,1), -webkit-transform 300ms cubic-bezier(.2,0,.2,1);\n}\n.zoom-overlay {\n z-index: 420;\n background: #fff;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n opacity: 0;\n transition: opacity 300ms;\n}\n.zoom-overlay-open .zoom-overlay {\n opacity: 1;\n}\n.zoom-overlay-open {\n cursor: pointer;\n cursor: -webkit-zoom-out;\n cursor: zoom-out;\n}\n.zoom-overlay-transitioning {\n cursor: default;\n}\n.zoom-overlay-open.zoom-overlay-transitioning .zoom-overlay{\n opacity: 0;\n}\n';$docsify.plugins=[].concat(t,$docsify.plugins)}(); !function(){"use strict";function t(t){var o,i=Docsify.dom;i.appendTo(i.head,i.create("style",n)),t.doneEach(function(t){var n=i.findAll("img:not(.emoji)");Array.isArray(o)&&o.length&&(o.forEach(function(t){return t()}),o=[]),o=n.map(e)})}var e=("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self,function(t,e){return e={exports:{}},t(e,e.exports),e.exports}(function(t,e){!function(e,n){t.exports=function(){function t(){-1===g&&(g=window.pageYOffset),Math.abs(g-window.pageYOffset)>=40&&a()}function e(t){27===t.keyCode&&a()}function n(t){var e=t.touches[0];null!==e&&(y=e.pageY,t.target.addEventListener("touchmove",o))}function o(t){var e=t.touches[0];null!==e&&Math.abs(e.pageY-y)>10&&(a(),t.target.removeEventListener("touchmove",o))}function i(){a()}function r(){document.addEventListener("scroll",t),document.addEventListener("keyup",e),document.addEventListener("touchstart",n),document.addEventListener("click",i,!0)}function s(){document.removeEventListener("scroll",t),document.removeEventListener("keyup",e),document.removeEventListener("touchstart",n),document.removeEventListener("click",i,!0)}function a(t){null!==h&&(t?h.dispose():h.close(),s(),h=null)}function c(t){if(!document.body.classList.contains("zoom-overlay-open"))return t.metaKey||t.ctrlKey?void window.open(t.target.getAttribute("data-original")||t.target.src,"_blank"):void(t.target.width>=m()-v||(a(!0),h=new p(t.target,v),h.zoom(),r()))}var m=function(){return document.documentElement.clientWidth},u=function(){return document.documentElement.clientHeight},d=function(t){var e=t.getBoundingClientRect(),n=document.documentElement,o=window;return{top:e.top+o.pageYOffset-n.clientTop,left:e.left+o.pageXOffset-n.clientLeft}},l=function(t,e,n){var o=function(t){t.target.removeEventListener(e,o),n()};t.addEventListener(e,o)},f=function(t,e){this.w=t,this.h=e},p=function(t,e){this.img=t,this.preservedTransform=t.style.transform,this.wrap=null,this.overlay=null,this.offset=e};p.prototype.forceRepaint=function(){this.img.offsetWidth},p.prototype.zoom=function(){var t=new f(this.img.naturalWidth,this.img.naturalHeight);this.wrap=document.createElement("div"),this.wrap.classList.add("zoom-img-wrap"),this.img.parentNode.insertBefore(this.wrap,this.img),this.wrap.appendChild(this.img),this.img.classList.add("zoom-img"),this.img.setAttribute("data-action","zoom-out"),this.overlay=document.createElement("div"),this.overlay.classList.add("zoom-overlay"),document.body.appendChild(this.overlay),this.forceRepaint();var e=this.calculateScale(t);this.forceRepaint(),this.animate(e),document.body.classList.add("zoom-overlay-open")},p.prototype.calculateScale=function(t){var e=t.w/this.img.width,n=m()-this.offset,o=u()-this.offset,i=t.w/t.h,r=n/o;return t.w<n&&t.h<o?e:i<r?o/t.h*e:n/t.w*e},p.prototype.animate=function(t){var e=d(this.img),n=window.pageYOffset,o=m()/2,i=n+u()/2,r=e.left+this.img.width/2,s=e.top+this.img.height/2,a=o-r,c=i-s,l="scale("+t+")",f="translate3d("+a+"px, "+c+"px, 0px)";this.img.style.transform=l,this.wrap.style.transform=f},p.prototype.dispose=function(){null!==this.wrap&&null!==this.wrap.parentNode&&(this.img.classList.remove("zoom-img"),this.img.setAttribute("data-action","zoom"),this.wrap.parentNode.insertBefore(this.img,this.wrap),this.wrap.parentNode.removeChild(this.wrap),document.body.removeChild(this.overlay),document.body.classList.remove("zoom-overlay-transitioning"))},p.prototype.close=function(){var t=this;document.body.classList.add("zoom-overlay-transitioning"),this.img.style.transform=this.preservedTransform,0===this.img.style.length&&this.img.removeAttribute("style"),this.wrap.style.transform="none",l(this.img,"transitionend",function(){t.dispose(),document.body.classList.remove("zoom-overlay-open")})};var h=null,v=80,g=-1,y=-1;return function(t){return t.setAttribute("data-action","zoom"),t.addEventListener("click",c),function(){return t.removeEventListener("click",c)}}}()}()})),n='img[data-action="zoom"] {\n cursor: pointer;\n cursor: -webkit-zoom-in;\n cursor: zoom-in;\n}\n.zoom-img,\n.zoom-img-wrap {\n position: relative;\n z-index: 666;\n transition: -webkit-transform 300ms cubic-bezier(.2,0,.2,1);\n transition: transform 300ms cubic-bezier(.2,0,.2,1);\n transition: transform 300ms cubic-bezier(.2,0,.2,1), -webkit-transform 300ms cubic-bezier(.2,0,.2,1);\n}\n.zoom-overlay {\n z-index: 420;\n background: #fff;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n opacity: 0;\n transition: opacity 300ms;\n}\n.zoom-overlay-open .zoom-overlay {\n opacity: 1;\n}\n.zoom-overlay-open {\n cursor: pointer;\n cursor: -webkit-zoom-out;\n cursor: zoom-out;\n}\n.zoom-overlay-transitioning {\n cursor: default;\n}\n.zoom-overlay-open.zoom-overlay-transitioning .zoom-overlay{\n opacity: 0;\n}\n';$docsify.plugins=[].concat(t,$docsify.plugins)}();
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+2708 -439
View File
File diff suppressed because it is too large Load Diff
+3 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "docsify", "name": "docsify",
"version": "4.2.0", "version": "4.3.7",
"description": "A magical documentation generator.", "description": "A magical documentation generator.",
"author": { "author": {
"name": "qingwei-li", "name": "qingwei-li",
@@ -33,9 +33,11 @@
"marked": "^0.3.6", "marked": "^0.3.6",
"prismjs": "^1.6.0", "prismjs": "^1.6.0",
"tinydate": "^1.0.0", "tinydate": "^1.0.0",
"tweezer.js": "^1.4.0",
"zoom-image": "^0.1.4" "zoom-image": "^0.1.4"
}, },
"devDependencies": { "devDependencies": {
"conventional-changelog-cli": "^1.3.2",
"cssnano": "^3.10.0", "cssnano": "^3.10.0",
"eslint": "^3.18.0", "eslint": "^3.18.0",
"eslint-config-vue": "^2.0.2", "eslint-config-vue": "^2.0.2",
+1 -1
View File
@@ -3,7 +3,7 @@
## Install ## Install
```bash ```bash
yarn add docsify-server-render yarn add docsify-server-renderer
``` ```
## Usage ## Usage
+11 -11
View File
@@ -13,7 +13,9 @@ function cwd (...args) {
} }
function mainTpl (config) { function mainTpl (config) {
let html = `<nav class="app-nav${config.repo ? '' : ' no-badge'}"><!--navbar--></nav>` let html = `<nav class="app-nav${config.repo
? ''
: ' no-badge'}"><!--navbar--></nav>`
if (config.repo) { if (config.repo) {
html += tpl.corner(config.repo) html += tpl.corner(config.repo)
@@ -28,11 +30,7 @@ function mainTpl (config) {
} }
export default class Renderer { export default class Renderer {
constructor ({ constructor ({ template, config, cache }) {
template,
config,
cache
}) {
this.html = template this.html = template
this.config = config = Object.assign({}, config, { this.config = config = Object.assign({}, config, {
routerMode: 'history' routerMode: 'history'
@@ -43,7 +41,10 @@ export default class Renderer {
this.compiler = new Compiler(config, this.router) this.compiler = new Compiler(config, this.router)
this.router.getCurrentPath = () => this.url this.router.getCurrentPath = () => this.url
this._renderHtml('inject-config', `<script>window.$docsify = ${JSON.stringify(config)}</script>`) this._renderHtml(
'inject-config',
`<script>window.$docsify = ${JSON.stringify(config)}</script>`
)
this._renderHtml('inject-app', mainTpl(config)) this._renderHtml('inject-app', mainTpl(config))
this.template = this.html this.template = this.html
@@ -52,9 +53,7 @@ export default class Renderer {
_getPath (url) { _getPath (url) {
const file = this.router.getFile(url) const file = this.router.getFile(url)
return isAbsolutePath(file) return isAbsolutePath(file) ? file : cwd(`./${file}`)
? file
: cwd(`./${file}`)
} }
async renderToString (url) { async renderToString (url) {
@@ -94,7 +93,8 @@ export default class Renderer {
switch (type) { switch (type) {
case 'sidebar': case 'sidebar':
html = this.compiler.sidebar(html, maxLevel) + html =
this.compiler.sidebar(html, maxLevel) +
`<script>window.__SUB_SIDEBAR__ = ${JSON.stringify( `<script>window.__SUB_SIDEBAR__ = ${JSON.stringify(
this.compiler.subSidebar(subMaxLevel) this.compiler.subSidebar(subMaxLevel)
)}</script>` )}</script>`
+41
View File
@@ -0,0 +1,41 @@
{
"lockfileVersion": 1,
"dependencies": {
"debug": {
"version": "2.6.8",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
"integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw="
},
"encoding": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s="
},
"iconv-lite": {
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
"integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA=="
},
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"node-fetch": {
"version": "1.7.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.1.tgz",
"integrity": "sha512-j8XsFGCLw79vWXkZtMSmmLaOk9z5SQ9bV/tkbZVCqvgwzrjAGq66igobLofHtF63NvMTp2WjytpsNTGKa+XRIQ=="
},
"resolve-pathname": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.1.0.tgz",
"integrity": "sha1-6DWIAbhrg7F1YNTjw4LXrvIQCUQ="
}
},
"version": "4.3.7"
}
@@ -1,6 +1,6 @@
{ {
"name": "docsify-server-renderer", "name": "docsify-server-renderer",
"version": "4.2.0", "version": "4.3.7",
"description": "docsify server renderer", "description": "docsify server renderer",
"author": { "author": {
"name": "qingwei-li", "name": "qingwei-li",
+31 -26
View File
@@ -1,32 +1,37 @@
import { merge, hyphenate, isPrimitive } from './util/core' import { merge, hyphenate, isPrimitive } from './util/core'
const config = merge({ const config = merge(
el: '#app', {
repo: '', el: '#app',
maxLevel: 6, repo: '',
subMaxLevel: 0, maxLevel: 6,
loadSidebar: null, subMaxLevel: 0,
loadNavbar: null, loadSidebar: null,
homepage: 'README.md', loadNavbar: null,
coverpage: '', homepage: 'README.md',
basePath: '', coverpage: '',
auto2top: false, basePath: '',
name: '', auto2top: false,
themeColor: '', name: '',
nameLink: window.location.pathname, themeColor: '',
autoHeader: false, nameLink: window.location.pathname,
executeScript: null, autoHeader: false,
noEmoji: false, executeScript: null,
ga: '', noEmoji: false,
mergeNavbar: false, ga: '',
formatUpdated: '', mergeNavbar: false,
externalLinkTarget: '_blank', formatUpdated: '',
routerModel: 'hash', externalLinkTarget: '_blank',
noCompileLinks: [] routerMode: 'hash',
}, window.$docsify) noCompileLinks: []
},
window.$docsify
)
const script = document.currentScript || const script =
[].slice.call(document.getElementsByTagName('script')) document.currentScript ||
[].slice
.call(document.getElementsByTagName('script'))
.filter(n => /docsify\./.test(n.src))[0] .filter(n => /docsify\./.test(n.src))[0]
if (script) { if (script) {
+46 -15
View File
@@ -1,15 +1,37 @@
import { isMobile } from '../util/env' import { isMobile } from '../util/env'
import * as dom from '../util/dom' import * as dom from '../util/dom'
import Tweezer from 'tweezer.js'
const nav = {} const nav = {}
let hoverOver = false let hoverOver = false
let scroller = null
let enableScrollEvent = true
let coverHeight = 0
function scrollTo (el) {
if (scroller) scroller.stop()
enableScrollEvent = false
scroller = new Tweezer({
start: window.scrollY,
end: el.getBoundingClientRect().top + window.scrollY,
duration: 500
})
.on('tick', v => window.scrollTo(0, v))
.on('done', () => {
enableScrollEvent = true
scroller = null
})
.begin()
}
function highlight () { function highlight () {
if (!enableScrollEvent) return
const sidebar = dom.getNode('.sidebar') const sidebar = dom.getNode('.sidebar')
const anchors = dom.findAll('.anchor') const anchors = dom.findAll('.anchor')
const wrap = dom.find(sidebar, '.sidebar-nav') const wrap = dom.find(sidebar, '.sidebar-nav')
let active = dom.find(sidebar, 'li.active') let active = dom.find(sidebar, 'li.active')
const top = dom.body.scrollTop const doc = document.documentElement
const top = ((doc && doc.scrollTop) || document.body.scrollTop) - coverHeight
let last let last
for (let i = 0, len = anchors.length; i < len; i += 1) { for (let i = 0, len = anchors.length; i < len; i += 1) {
@@ -37,23 +59,18 @@ function highlight () {
const height = sidebar.clientHeight const height = sidebar.clientHeight
const curOffset = 0 const curOffset = 0
const cur = active.offsetTop + active.clientHeight + 40 const cur = active.offsetTop + active.clientHeight + 40
const isInView = ( const isInView =
active.offsetTop >= wrap.scrollTop && active.offsetTop >= wrap.scrollTop && cur <= wrap.scrollTop + height
cur <= wrap.scrollTop + height
)
const notThan = cur - curOffset < height const notThan = cur - curOffset < height
const top = isInView const top = isInView ? wrap.scrollTop : notThan ? curOffset : cur - height
? wrap.scrollTop
: notThan
? curOffset
: cur - height
sidebar.scrollTop = top sidebar.scrollTop = top
} }
} }
export function scrollActiveSidebar (router) { export function scrollActiveSidebar (router) {
if (isMobile) return const cover = dom.find('.cover.show')
coverHeight = cover ? cover.offsetHeight : 0
const sidebar = dom.getNode('.sidebar') const sidebar = dom.getNode('.sidebar')
const lis = dom.findAll(sidebar, 'li') const lis = dom.findAll(sidebar, 'li')
@@ -68,18 +85,32 @@ export function scrollActiveSidebar (router) {
href = router.parse(href).query.id href = router.parse(href).query.id
} }
nav[decodeURIComponent(href)] = li if (href) nav[decodeURIComponent(href)] = li
} }
if (isMobile) return
dom.off('scroll', highlight) dom.off('scroll', highlight)
dom.on('scroll', highlight) dom.on('scroll', highlight)
dom.on(sidebar, 'mouseover', () => { hoverOver = true }) dom.on(sidebar, 'mouseover', () => {
dom.on(sidebar, 'mouseleave', () => { hoverOver = false }) hoverOver = true
})
dom.on(sidebar, 'mouseleave', () => {
hoverOver = false
})
} }
export function scrollIntoView (id) { export function scrollIntoView (id) {
if (!id) return
const section = dom.find('#' + id) const section = dom.find('#' + id)
section && section.scrollIntoView() section && scrollTo(section)
const li = nav[id]
const sidebar = dom.getNode('.sidebar')
const active = dom.find(sidebar, 'li.active')
active && active.classList.remove('active')
li && li.classList.add('active')
} }
const scrollEl = dom.$.scrollingElement || dom.$.documentElement const scrollEl = dom.$.scrollingElement || dom.$.documentElement
+16 -15
View File
@@ -16,9 +16,12 @@ export function btn (el, router) {
const sidebar = dom.getNode('.sidebar') const sidebar = dom.getNode('.sidebar')
isMobile && dom.on(dom.body, 'click', _ => isMobile &&
dom.body.classList.contains('close') && toggle() dom.on(
) dom.body,
'click',
_ => dom.body.classList.contains('close') && toggle()
)
dom.on(sidebar, 'click', _ => dom.on(sidebar, 'click', _ =>
setTimeout((_ => getAndActive(router, sidebar, true, true), 0)) setTimeout((_ => getAndActive(router, sidebar, true, true), 0))
) )
@@ -51,19 +54,17 @@ export function getAndActive (router, el, isParent, autoTitle) {
const hash = router.toURL(router.getCurrentPath()) const hash = router.toURL(router.getCurrentPath())
let target let target
links links.sort((a, b) => b.href.length - a.href.length).forEach(a => {
.sort((a, b) => b.href.length - a.href.length) const href = a.getAttribute('href')
.forEach(a => { const node = isParent ? a.parentNode : a
const href = a.getAttribute('href')
const node = isParent ? a.parentNode : a
if (hash.indexOf(href) === 0 && !target) { if (hash.indexOf(href) === 0 && !target) {
target = a target = a
dom.toggleClass(node, 'add', 'active') dom.toggleClass(node, 'add', 'active')
} else { } else {
dom.toggleClass(node, 'remove', 'active') dom.toggleClass(node, 'remove', 'active')
} }
}) })
if (autoTitle) { if (autoTitle) {
dom.$.title = target ? `${target.innerText} - ${title}` : title dom.$.title = target ? `${target.innerText} - ${title}` : title
+9 -5
View File
@@ -26,9 +26,13 @@ export function get (url, hasBar = false) {
return { return {
then: function (success, error = noop) { then: function (success, error = noop) {
if (hasBar) { if (hasBar) {
const id = setInterval(_ => progressbar({ const id = setInterval(
step: Math.floor(Math.random() * 5 + 1) _ =>
}), 500) progressbar({
step: Math.floor(Math.random() * 5 + 1)
}),
500
)
on('progress', progressbar) on('progress', progressbar)
on('loadend', evt => { on('loadend', evt => {
@@ -42,12 +46,12 @@ export function get (url, hasBar = false) {
if (target.status >= 400) { if (target.status >= 400) {
error(target) error(target)
} else { } else {
const result = cache[url] = { const result = (cache[url] = {
content: target.response, content: target.response,
opt: { opt: {
updatedAt: xhr.getResponseHeader('last-modified') updatedAt: xhr.getResponseHeader('last-modified')
} }
} })
success(result.content, result.opt) success(result.content, result.opt)
} }
+14 -1
View File
@@ -5,6 +5,19 @@ import { fetchMixin } from './fetch'
import { eventMixin } from './event' import { eventMixin } from './event'
import initGlobalAPI from './global-api' import initGlobalAPI from './global-api'
/**
* Fork https://github.com/bendrucker/document-ready/blob/master/index.js
*/
function ready (callback) {
const state = document.readyState
if (state === 'complete' || state === 'interactive') {
return setTimeout(callback, 0)
}
document.addEventListener('DOMContentLoaded', callback)
}
function Docsify () { function Docsify () {
this._init() this._init()
} }
@@ -30,4 +43,4 @@ Docsify.version = '__VERSION__'
/** /**
* Run Docsify * Run Docsify
*/ */
setTimeout(_ => new Docsify(), 0) ready(_ => new Docsify())
+1 -1
View File
@@ -13,7 +13,7 @@ export function initLifecycle (vm) {
vm._hooks = {} vm._hooks = {}
vm._lifecycle = {} vm._lifecycle = {}
hooks.forEach(hook => { hooks.forEach(hook => {
const arr = vm._hooks[hook] = [] const arr = (vm._hooks[hook] = [])
vm._lifecycle[hook] = fn => arr.push(fn) vm._lifecycle[hook] = fn => arr.push(fn)
}) })
} }
+16 -5
View File
@@ -61,11 +61,13 @@ export class Compiler {
const renderer = new marked.Renderer() const renderer = new marked.Renderer()
const { linkTarget, router, contentBase } = this const { linkTarget, router, contentBase } = this
const _self = this const _self = this
const origin = {}
/** /**
* render anchor tag * render anchor tag
* @link https://github.com/chjj/marked#overriding-renderer-methods * @link https://github.com/chjj/marked#overriding-renderer-methods
*/ */
renderer.heading = function (text, level) { origin.heading = renderer.heading = function (text, level) {
const nextToc = { level, title: text } const nextToc = { level, title: text }
if (/{docsify-ignore}/g.test(text)) { if (/{docsify-ignore}/g.test(text)) {
@@ -88,12 +90,12 @@ export class Compiler {
return `<h${level} id="${slug}"><a href="${url}" data-id="${slug}" class="anchor"><span>${text}</span></a></h${level}>` return `<h${level} id="${slug}"><a href="${url}" data-id="${slug}" class="anchor"><span>${text}</span></a></h${level}>`
} }
// highlight code // highlight code
renderer.code = function (code, lang = '') { origin.code = renderer.code = function (code, lang = '') {
const hl = Prism.highlight(code, Prism.languages[lang] || Prism.languages.markup) const hl = Prism.highlight(code, Prism.languages[lang] || Prism.languages.markup)
return `<pre v-pre data-lang="${lang}"><code class="lang-${lang}">${hl}</code></pre>` return `<pre v-pre data-lang="${lang}"><code class="lang-${lang}">${hl}</code></pre>`
} }
renderer.link = function (href, title, text) { origin.link = renderer.link = function (href, title, text) {
let blank = '' let blank = ''
if (!/:|(\/{2})/.test(href) && if (!/:|(\/{2})/.test(href) &&
@@ -105,12 +107,19 @@ export class Compiler {
title = title && title.replace(/:ignore/g, '').trim() title = title && title.replace(/:ignore/g, '').trim()
} }
let target = title && title.match(/:target=\w+/)
if (target) {
target = target[0]
title = title.replace(target, '')
blank = ' ' + target.slice(1)
}
if (title) { if (title) {
title = ` title="${title}"` title = ` title="${title}"`
} }
return `<a href="${href}"${title || ''}${blank}>${text}</a>` return `<a href="${href}"${title || ''}${blank}>${text}</a>`
} }
renderer.paragraph = function (text) { origin.paragraph = renderer.paragraph = function (text) {
if (/^!&gt;/.test(text)) { if (/^!&gt;/.test(text)) {
return helperTpl('tip', text) return helperTpl('tip', text)
} else if (/^\?&gt;/.test(text)) { } else if (/^\?&gt;/.test(text)) {
@@ -118,7 +127,7 @@ export class Compiler {
} }
return `<p>${text}</p>` return `<p>${text}</p>`
} }
renderer.image = function (href, title, text) { origin.image = renderer.image = function (href, title, text) {
let url = href let url = href
const titleHTML = title ? ` title="${title}"` : '' const titleHTML = title ? ` title="${title}"` : ''
@@ -129,6 +138,8 @@ export class Compiler {
return `<img src="${url}" data-origin="${href}" alt="${text}"${titleHTML}>` return `<img src="${url}" data-origin="${href}" alt="${text}"${titleHTML}>`
} }
renderer.origin = origin
return renderer return renderer
} }
+3 -1
View File
@@ -211,7 +211,9 @@ export function initRender (vm) {
dom.before(navAppendToTarget, navEl) dom.before(navAppendToTarget, navEl)
if (config.themeColor) { if (config.themeColor) {
dom.$.head.innerHTML += tpl.theme(config.themeColor) dom.$.head.appendChild(
dom.create('div', tpl.theme(config.themeColor)).firstElementChild
)
// Polyfll // Polyfll
cssVars(config.themeColor) cssVars(config.themeColor)
} }
+5 -2
View File
@@ -4,7 +4,10 @@ const re = /[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,.\/:;<=>?@\[\]^`{|}~]/g
export function slugify (str) { export function slugify (str) {
if (typeof str !== 'string') return '' if (typeof str !== 'string') return ''
let slug = str.toLowerCase().trim() str = /^[\w\s]+$/g.test(str) ? str.toLowerCase() : str
let slug = str
.trim()
.replace(/<[^>\d]+>/g, '') .replace(/<[^>\d]+>/g, '')
.replace(re, '') .replace(re, '')
.replace(/\s/g, '-') .replace(/\s/g, '-')
@@ -12,7 +15,7 @@ export function slugify (str) {
.replace(/^(\d)/, '_$1') .replace(/^(\d)/, '_$1')
let count = cache[slug] let count = cache[slug]
count = cache.hasOwnProperty(slug) ? (count + 1) : 0 count = cache.hasOwnProperty(slug) ? count + 1 : 0
cache[slug] = count cache[slug] = count
if (count) { if (count) {
+29 -23
View File
@@ -10,37 +10,40 @@ export function corner (data) {
data = data.replace(/^git\+/, '') data = data.replace(/^git\+/, '')
return ( return (
`<a href="${data}" class="github-corner" aria-label="View source on Github">` + `<a href="${data}" class="github-corner" aria-label="View source on Github">` +
'<svg viewBox="0 0 250 250" aria-hidden="true">' + '<svg viewBox="0 0 250 250" aria-hidden="true">' +
'<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>' + '<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>' +
'<path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>' + '<path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>' +
'<path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>' + '<path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>' +
'</svg>' + '</svg>' +
'</a>') '</a>'
)
} }
/** /**
* Render main content * Render main content
*/ */
export function main (config) { export function main (config) {
const aside = ( const aside =
'<button class="sidebar-toggle">' + '<button class="sidebar-toggle">' +
'<div class="sidebar-toggle-button">' + '<div class="sidebar-toggle-button">' +
'<span></span><span></span><span></span>' + '<span></span><span></span><span></span>' +
'</div>' + '</div>' +
'</button>' + '</button>' +
'<aside class="sidebar">' + '<aside class="sidebar">' +
(config.name (config.name
? `<h1><a class="app-name-link" data-nosearch>${config.name}</a></h1>` ? `<h1><a class="app-name-link" data-nosearch>${config.name}</a></h1>`
: '') + : '') +
'<div class="sidebar-nav"><!--sidebar--></div>' + '<div class="sidebar-nav"><!--sidebar--></div>' +
'</aside>') '</aside>'
return (isMobile ? `${aside}<main>` : `<main>${aside}`) + return (
'<section class="content">' + (isMobile ? `${aside}<main>` : `<main>${aside}`) +
'<article class="markdown-section" id="main"><!--main--></article>' + '<section class="content">' +
'</section>' + '<article class="markdown-section" id="main"><!--main--></article>' +
'</section>' +
'</main>' '</main>'
)
} }
/** /**
@@ -48,14 +51,17 @@ export function main (config) {
*/ */
export function cover () { export function cover () {
const SL = ', 100%, 85%' const SL = ', 100%, 85%'
const bgc = 'linear-gradient(to left bottom, ' + const bgc =
`hsl(${Math.floor(Math.random() * 255) + SL}) 0%,` + 'linear-gradient(to left bottom, ' +
`hsl(${Math.floor(Math.random() * 255) + SL}) 100%)` `hsl(${Math.floor(Math.random() * 255) + SL}) 0%,` +
`hsl(${Math.floor(Math.random() * 255) + SL}) 100%)`
return `<section class="cover" style="background: ${bgc}">` + return (
`<section class="cover" style="background: ${bgc}">` +
'<div class="cover-main"></div>' + '<div class="cover-main"></div>' +
'<div class="mask"></div>' + '<div class="mask"></div>' +
'</section>' '</section>'
)
} }
/** /**
+6 -6
View File
@@ -4,20 +4,20 @@ import { noop } from '../../util/core'
const cached = {} const cached = {}
function getAlias (path, alias, last) { function getAlias (path, alias, last) {
const match = Object.keys(alias).filter((key) => { const match = Object.keys(alias).filter(key => {
const re = cached[key] || (cached[key] = new RegExp(`^${key}$`)) const re = cached[key] || (cached[key] = new RegExp(`^${key}$`))
return re.test(path) && path !== last return re.test(path) && path !== last
})[0] })[0]
return match ? getAlias(path.replace(cached[match], alias[match]), alias, path) : path return match
? getAlias(path.replace(cached[match], alias[match]), alias, path)
: path
} }
function getFileName (path) { function getFileName (path) {
return /\.(md|html)$/g.test(path) return /\.(md|html)$/g.test(path)
? path ? path
: /\/$/g.test(path) : /\/$/g.test(path) ? `${path}README.md` : `${path}.md`
? `${path}README.md`
: `${path}.md`
} }
export class History { export class History {
@@ -37,7 +37,7 @@ export class History {
path = config.alias ? getAlias(path, config.alias) : path path = config.alias ? getAlias(path, config.alias) : path
path = getFileName(path) path = getFileName(path)
path = path === '/README.md' ? (config.homepage || path) : path path = path === '/README.md' ? config.homepage || path : path
path = isAbsolutePath(path) ? path : getPath(base, path) path = isAbsolutePath(path) ? path : getPath(base, path)
if (isRelative) { if (isRelative) {
+2 -6
View File
@@ -5,9 +5,7 @@ import { parseQuery, stringifyQuery, cleanPath } from '../util'
function replaceHash (path) { function replaceHash (path) {
const i = location.href.indexOf('#') const i = location.href.indexOf('#')
location.replace( location.replace(location.href.slice(0, i >= 0 ? i : 0) + '#' + path)
location.href.slice(0, i >= 0 ? i : 0) + '#' + path
)
} }
const replaceSlug = cached(path => { const replaceSlug = cached(path => {
@@ -24,9 +22,7 @@ export class HashHistory extends History {
const path = window.location.pathname || '' const path = window.location.pathname || ''
const base = this.config.basePath const base = this.config.basePath
return /^(\/|https?:)/g.test(base) return /^(\/|https?:)/g.test(base) ? base : cleanPath(path + '/' + base)
? base
: cleanPath(path + '/' + base)
} }
getCurrentPath () { getCurrentPath () {
+1 -3
View File
@@ -22,9 +22,7 @@ export class HTML5History extends History {
onchange (cb = noop) { onchange (cb = noop) {
on('click', e => { on('click', e => {
const el = e.target.tagName === 'A' const el = e.target.tagName === 'A' ? e.target : e.target.parentNode
? e.target
: e.target.parentNode
if (el.tagName === 'A' && !/_blank/.test(el.target)) { if (el.tagName === 'A' && !/_blank/.test(el.target)) {
e.preventDefault() e.preventDefault()
+7 -9
View File
@@ -26,9 +26,11 @@ export function stringifyQuery (obj) {
const qs = [] const qs = []
for (const key in obj) { for (const key in obj) {
qs.push(obj[key] qs.push(
? `${encode(key)}=${encode(obj[key])}`.toLowerCase() obj[key]
: encode(key)) ? `${encode(key)}=${encode(obj[key])}`.toLowerCase()
: encode(key)
)
} }
return qs.length ? `?${qs.join('&')}` : '' return qs.length ? `?${qs.join('&')}` : ''
@@ -45,13 +47,9 @@ export const isAbsolutePath = cached(path => {
export const getParentPath = cached(path => { export const getParentPath = cached(path => {
return /\/$/g.test(path) return /\/$/g.test(path)
? path ? path
: (path = path.match(/(\S*\/)[^\/]+$/)) : (path = path.match(/(\S*\/)[^\/]+$/)) ? path[1] : ''
? path[1]
: ''
}) })
export const cleanPath = cached(path => { export const cleanPath = cached(path => {
return path return path.replace(/^\/+/, '/').replace(/([^:])\/{2,}/g, '$1/')
.replace(/^\/+/, '/')
.replace(/([^:])\/{2,}/g, '$1/')
}) })
+12 -10
View File
@@ -19,21 +19,23 @@ export const hyphenate = cached(str => {
/** /**
* Simple Object.assign polyfill * Simple Object.assign polyfill
*/ */
export const merge = Object.assign || function (to) { export const merge =
const hasOwn = Object.prototype.hasOwnProperty Object.assign ||
function (to) {
const hasOwn = Object.prototype.hasOwnProperty
for (let i = 1; i < arguments.length; i++) { for (let i = 1; i < arguments.length; i++) {
const from = Object(arguments[i]) const from = Object(arguments[i])
for (const key in from) { for (const key in from) {
if (hasOwn.call(from, key)) { if (hasOwn.call(from, key)) {
to[key] = from[key] to[key] = from[key]
}
} }
} }
}
return to return to
} }
/** /**
* Check if value is primitive * Check if value is primitive
+5
View File
@@ -81,3 +81,8 @@ export function off (el, type, handler) {
export function toggleClass (el, type, val) { export function toggleClass (el, type, val) {
el && el.classList[val ? type : 'toggle'](val || type) el && el.classList[val ? type : 'toggle'](val || type)
} }
export function style (content) {
appendTo(head, create('style', content))
}
+14 -8
View File
@@ -5,11 +5,17 @@ export const isMobile = inBrowser && document.body.clientWidth <= 600
/** /**
* @see https://github.com/MoOx/pjax/blob/master/lib/is-supported.js * @see https://github.com/MoOx/pjax/blob/master/lib/is-supported.js
*/ */
export const supportsPushState = inBrowser && (function () { export const supportsPushState =
// Borrowed wholesale from https://github.com/defunkt/jquery-pjax inBrowser &&
return window.history && (function () {
window.history.pushState && // Borrowed wholesale from https://github.com/defunkt/jquery-pjax
window.history.replaceState && return (
// pushState isnt reliable on iOS until 5. window.history &&
!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/) window.history.pushState &&
})() window.history.replaceState &&
// pushState isnt reliable on iOS until 5.
!navigator.userAgent.match(
/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/
)
)
})()
+5 -6
View File
@@ -2,18 +2,17 @@ import * as dom from '../dom'
import { get } from '../../fetch/ajax' import { get } from '../../fetch/ajax'
function replaceVar (block, color) { function replaceVar (block, color) {
block.innerHTML = block.innerHTML block.innerHTML = block.innerHTML.replace(
.replace(/var\(\s*--theme-color.*?\)/g, color) /var\(\s*--theme-color.*?\)/g,
color
)
} }
export default function (color) { export default function (color) {
// Variable support // Variable support
if (window.CSS && if (window.CSS && window.CSS.supports && window.CSS.supports('(--v:red)')) { return }
window.CSS.supports &&
window.CSS.supports('(--v:red)')) return
const styleBlocks = dom.findAll('style:not(.inserted),link') const styleBlocks = dom.findAll('style:not(.inserted),link')
;[].forEach.call(styleBlocks, block => { ;[].forEach.call(styleBlocks, block => {
if (block.nodeName === 'STYLE') { if (block.nodeName === 'STYLE') {
replaceVar(block, color) replaceVar(block, color)
+86
View File
@@ -0,0 +1,86 @@
const DEFAULT_OPTIONS = {
theme: 'light',
image: 'show'
}
function tpl (id, options) {
const qs = []
for (const key in options) {
qs.push(`${key}=${options[key]}`)
}
const div = Docsify.dom.create('div')
Docsify.dom.toggleClass(div, 'codesponsor')
div.innerHTML = `<iframe
scrolling=0
frameborder=0
width=250
height=250
id="code-sponsor-embed-iframe"
src="https://app.codesponsor.io/widgets/${id}?${qs.join('&')}">
</iframe>`
return div
}
function appIframe (id, opts) {
const html = tpl(id, opts)
Docsify.dom.before(Docsify.dom.find('section.content'), html)
}
function appendStyle () {
Docsify.dom.style(`
.codesponsor {
position: relative;
float: right;
right: 10px;
top: 10px;
}
@media screen and (min-width: 1600px) {
body.sticky .codesponsor {
position: fixed;
}
.codesponsor {
position: absolute;
bottom: 10px;
top: auto;
float: none;
}
}
`)
}
const install = function (hook, vm) {
let config = vm.config.codesponsor
let id
if (typeof config === 'string') {
id = config
config = {}
} else {
id = config.id
}
const opts = Docsify.util.merge(DEFAULT_OPTIONS, config)
if (!id) {
throw Error('codesponsor plugin need id')
}
if (Docsify.util.isMobile) {
return
}
// Append style
hook.ready(() => {
appendStyle()
appIframe(id, opts)
})
}
window.$docsify.plugins = [].concat(install, window.$docsify.plugins)
+893 -146
View File
File diff suppressed because it is too large Load Diff
+6 -5
View File
@@ -5,7 +5,8 @@
import parser from './yaml' import parser from './yaml'
var optionalByteOrderMark = '\\ufeff?' var optionalByteOrderMark = '\\ufeff?'
var pattern = '^(' + var pattern =
'^(' +
optionalByteOrderMark + optionalByteOrderMark +
'(= yaml =|---)' + '(= yaml =|---)' +
'$([\\s\\S]*?)' + '$([\\s\\S]*?)' +
@@ -17,7 +18,7 @@ var pattern = '^(' +
// need to be moved down into the functions that use it. // need to be moved down into the functions that use it.
var regex = new RegExp(pattern, 'm') var regex = new RegExp(pattern, 'm')
function extractor (string) { function extractor(string) {
string = string || '' string = string || ''
var lines = string.split(/(\r?\n)/) var lines = string.split(/(\r?\n)/)
@@ -28,7 +29,7 @@ function extractor (string) {
} }
} }
function parse (string) { function parse(string) {
var match = regex.exec(string) var match = regex.exec(string)
if (!match) { if (!match) {
@@ -45,10 +46,10 @@ function parse (string) {
return { attributes: attributes, body: body, frontmatter: yaml } return { attributes: attributes, body: body, frontmatter: yaml }
} }
function test (string) { function test(string) {
string = string || '' string = string || ''
return regex.test(string) return regex.test(string)
} }
export default extractor export default extractor
+350 -353
View File
@@ -29,415 +29,412 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* @namespace * @namespace
*/ */
var errors = [], var errors = [],
reference_blocks = [], reference_blocks = [],
processing_time = 0, processing_time = 0,
regex = regex = {
{ regLevel: new RegExp('^([\\s\\-]+)'),
"regLevel" : new RegExp("^([\\s\\-]+)"), invalidLine: new RegExp('^\\-\\-\\-|^\\.\\.\\.|^\\s*#.*|^\\s*$'),
"invalidLine" : new RegExp("^\\-\\-\\-|^\\.\\.\\.|^\\s*#.*|^\\s*$"), dashesString: new RegExp('^\\s*\\"([^\\"]*)\\"\\s*$'),
"dashesString" : new RegExp("^\\s*\\\"([^\\\"]*)\\\"\\s*$"), quotesString: new RegExp("^\\s*\\'([^\\']*)\\'\\s*$"),
"quotesString" : new RegExp("^\\s*\\\'([^\\\']*)\\\'\\s*$"), float: new RegExp('^[+-]?[0-9]+\\.[0-9]+(e[+-]?[0-9]+(\\.[0-9]+)?)?$'),
"float" : new RegExp("^[+-]?[0-9]+\\.[0-9]+(e[+-]?[0-9]+(\\.[0-9]+)?)?$"), integer: new RegExp('^[+-]?[0-9]+$'),
"integer" : new RegExp("^[+-]?[0-9]+$"), array: new RegExp('\\[\\s*(.*)\\s*\\]'),
"array" : new RegExp("\\[\\s*(.*)\\s*\\]"), map: new RegExp('\\{\\s*(.*)\\s*\\}'),
"map" : new RegExp("\\{\\s*(.*)\\s*\\}"), key_value: new RegExp('([a-z0-9_-][ a-z0-9_-]*):( .+)', 'i'),
"key_value" : new RegExp("([a-z0-9_-][ a-z0-9_-]*):( .+)", "i"), single_key_value: new RegExp('^([a-z0-9_-][ a-z0-9_-]*):( .+?)$', 'i'),
"single_key_value" : new RegExp("^([a-z0-9_-][ a-z0-9_-]*):( .+?)$", "i"), key: new RegExp('([a-z0-9_-][ a-z0-9_-]+):( .+)?', 'i'),
"key" : new RegExp("([a-z0-9_-][ a-z0-9_-]+):( .+)?", "i"), item: new RegExp('^-\\s+'),
"item" : new RegExp("^-\\s+"), trim: new RegExp('^\\s+|\\s+$'),
"trim" : new RegExp("^\\s+|\\s+$"), comment: new RegExp('([^\\\'\\"#]+([\\\'\\"][^\\\'\\"]*[\\\'\\"])*)*(#.*)?')
"comment" : new RegExp("([^\\\'\\\"#]+([\\\'\\\"][^\\\'\\\"]*[\\\'\\\"])*)*(#.*)?") }
};
/** /**
* @class A block of lines of a given level. * @class A block of lines of a given level.
* @param {int} lvl The block's level. * @param {int} lvl The block's level.
* @private * @private
*/ */
function Block(lvl) { function Block(lvl) {
return { return {
/* The block's parent */ /* The block's parent */
parent: null, parent: null,
/* Number of children */ /* Number of children */
length: 0, length: 0,
/* Block's level */ /* Block's level */
level: lvl, level: lvl,
/* Lines of code to process */ /* Lines of code to process */
lines: [], lines: [],
/* Blocks with greater level */ /* Blocks with greater level */
children : [], children: [],
/* Add a block to the children collection */ /* Add a block to the children collection */
addChild : function(obj) { addChild: function(obj) {
this.children.push(obj); this.children.push(obj)
obj.parent = this; obj.parent = this
++this.length; ++this.length
} }
}; }
} }
// function to create an XMLHttpClient in a cross-browser manner // function to create an XMLHttpClient in a cross-browser manner
function createXMLHTTPRequest() { function createXMLHTTPRequest() {
var xmlhttp; var xmlhttp
try { try {
// Mozilla / Safari / IE7 // Mozilla / Safari / IE7
xmlhttp = new XMLHttpRequest(); xmlhttp = new XMLHttpRequest()
} catch (e) { } catch (e) {
// IE // IE
var XMLHTTP_IDS = new Array('MSXML2.XMLHTTP.5.0', var XMLHTTP_IDS = new Array(
'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP', 'MSXML2.XMLHTTP.3.0',
'Microsoft.XMLHTTP' ); 'MSXML2.XMLHTTP',
var success = false; 'Microsoft.XMLHTTP'
for (var i=0;i < XMLHTTP_IDS.length && !success; i++) { )
try { var success = false
xmlhttp = new ActiveXObject(XMLHTTP_IDS[i]); for (var i = 0; i < XMLHTTP_IDS.length && !success; i++) {
success = true; try {
} catch (e) {} xmlhttp = new ActiveXObject(XMLHTTP_IDS[i])
} success = true
if (!success) { } catch (e) {}
throw new Error('Unable to create XMLHttpRequest.');
}
} }
if (!success) {
throw new Error('Unable to create XMLHttpRequest.')
}
}
return xmlhttp; return xmlhttp
} }
function parser(str) { function parser(str) {
var regLevel = regex["regLevel"]; var regLevel = regex['regLevel']
var invalidLine = regex["invalidLine"]; var invalidLine = regex['invalidLine']
var lines = str.split("\n"); var lines = str.split('\n')
var m; var m
var level = 0, curLevel = 0; var level = 0,
curLevel = 0
var blocks = []; var blocks = []
var result = new Block(-1); var result = new Block(-1)
var currentBlock = new Block(0); var currentBlock = new Block(0)
result.addChild(currentBlock); result.addChild(currentBlock)
var levels = []; var levels = []
var line = ""; var line = ''
blocks.push(currentBlock); blocks.push(currentBlock)
levels.push(level); levels.push(level)
for(var i = 0, len = lines.length; i < len; ++i) { for (var i = 0, len = lines.length; i < len; ++i) {
line = lines[i]; line = lines[i]
if(line.match(invalidLine)) { if (line.match(invalidLine)) {
continue; continue
}
if(m = regLevel.exec(line)) {
level = m[1].length;
} else
level = 0;
if(level > curLevel) {
var oldBlock = currentBlock;
currentBlock = new Block(level);
oldBlock.addChild(currentBlock);
blocks.push(currentBlock);
levels.push(level);
} else if(level < curLevel) {
var added = false;
var k = levels.length - 1;
for(; k >= 0; --k) {
if(levels[k] == level) {
currentBlock = new Block(level);
blocks.push(currentBlock);
levels.push(level);
if(blocks[k].parent!= null)
blocks[k].parent.addChild(currentBlock);
added = true;
break;
}
}
if(!added) {
errors.push("Error: Invalid indentation at line " + i + ": " + line);
return;
}
}
currentBlock.lines.push(line.replace(regex["trim"], ""));
curLevel = level;
} }
return result; if ((m = regLevel.exec(line))) {
level = m[1].length
} else level = 0
if (level > curLevel) {
var oldBlock = currentBlock
currentBlock = new Block(level)
oldBlock.addChild(currentBlock)
blocks.push(currentBlock)
levels.push(level)
} else if (level < curLevel) {
var added = false
var k = levels.length - 1
for (; k >= 0; --k) {
if (levels[k] == level) {
currentBlock = new Block(level)
blocks.push(currentBlock)
levels.push(level)
if (blocks[k].parent != null) blocks[k].parent.addChild(currentBlock)
added = true
break
}
}
if (!added) {
errors.push('Error: Invalid indentation at line ' + i + ': ' + line)
return
}
}
currentBlock.lines.push(line.replace(regex['trim'], ''))
curLevel = level
}
return result
} }
function processValue(val) { function processValue(val) {
val = val.replace(regex["trim"], ""); val = val.replace(regex['trim'], '')
var m = null; var m = null
if(val == 'true') { if (val == 'true') {
return true; return true
} else if(val == 'false') { } else if (val == 'false') {
return false; return false
} else if(val == '.NaN') { } else if (val == '.NaN') {
return Number.NaN; return Number.NaN
} else if(val == 'null') { } else if (val == 'null') {
return null; return null
} else if(val == '.inf') { } else if (val == '.inf') {
return Number.POSITIVE_INFINITY; return Number.POSITIVE_INFINITY
} else if(val == '-.inf') { } else if (val == '-.inf') {
return Number.NEGATIVE_INFINITY; return Number.NEGATIVE_INFINITY
} else if(m = val.match(regex["dashesString"])) { } else if ((m = val.match(regex['dashesString']))) {
return m[1]; return m[1]
} else if(m = val.match(regex["quotesString"])) { } else if ((m = val.match(regex['quotesString']))) {
return m[1]; return m[1]
} else if(m = val.match(regex["float"])) { } else if ((m = val.match(regex['float']))) {
return parseFloat(m[0]); return parseFloat(m[0])
} else if(m = val.match(regex["integer"])) { } else if ((m = val.match(regex['integer']))) {
return parseInt(m[0]); return parseInt(m[0])
} else if( !isNaN(m = Date.parse(val))) { } else if (!isNaN((m = Date.parse(val)))) {
return new Date(m); return new Date(m)
} else if(m = val.match(regex["single_key_value"])) { } else if ((m = val.match(regex['single_key_value']))) {
var res = {}; var res = {}
res[m[1]] = processValue(m[2]); res[m[1]] = processValue(m[2])
return res; return res
} else if(m = val.match(regex["array"])){ } else if ((m = val.match(regex['array']))) {
var count = 0, c = ' '; var count = 0,
var res = []; c = ' '
var content = ""; var res = []
var str = false; var content = ''
for(var j = 0, lenJ = m[1].length; j < lenJ; ++j) { var str = false
c = m[1][j]; for (var j = 0, lenJ = m[1].length; j < lenJ; ++j) {
if(c == '\'' || c == '"') { c = m[1][j]
if(str === false) { if (c == "'" || c == '"') {
str = c; if (str === false) {
content += c; str = c
continue; content += c
} else if((c == '\'' && str == '\'') || (c == '"' && str == '"')) { continue
str = false; } else if ((c == "'" && str == "'") || (c == '"' && str == '"')) {
content += c; str = false
continue; content += c
} continue
} else if(str === false && (c == '[' || c == '{')) {
++count;
} else if(str === false && (c == ']' || c == '}')) {
--count;
} else if(str === false && count == 0 && c == ',') {
res.push(processValue(content));
content = "";
continue;
}
content += c;
} }
} else if (str === false && (c == '[' || c == '{')) {
++count
} else if (str === false && (c == ']' || c == '}')) {
--count
} else if (str === false && count == 0 && c == ',') {
res.push(processValue(content))
content = ''
continue
}
if(content.length > 0) content += c
res.push(processValue(content)); }
return res;
} else if(m = val.match(regex["map"])){
var count = 0, c = ' ';
var res = [];
var content = "";
var str = false;
for(var j = 0, lenJ = m[1].length; j < lenJ; ++j) {
c = m[1][j];
if(c == '\'' || c == '"') {
if(str === false) {
str = c;
content += c;
continue;
} else if((c == '\'' && str == '\'') || (c == '"' && str == '"')) {
str = false;
content += c;
continue;
}
} else if(str === false && (c == '[' || c == '{')) {
++count;
} else if(str === false && (c == ']' || c == '}')) {
--count;
} else if(str === false && count == 0 && c == ',') {
res.push(content);
content = "";
continue;
}
content += c; if (content.length > 0) res.push(processValue(content))
return res
} else if ((m = val.match(regex['map']))) {
var count = 0,
c = ' '
var res = []
var content = ''
var str = false
for (var j = 0, lenJ = m[1].length; j < lenJ; ++j) {
c = m[1][j]
if (c == "'" || c == '"') {
if (str === false) {
str = c
content += c
continue
} else if ((c == "'" && str == "'") || (c == '"' && str == '"')) {
str = false
content += c
continue
} }
} else if (str === false && (c == '[' || c == '{')) {
++count
} else if (str === false && (c == ']' || c == '}')) {
--count
} else if (str === false && count == 0 && c == ',') {
res.push(content)
content = ''
continue
}
if(content.length > 0) content += c
res.push(content); }
var newRes = {}; if (content.length > 0) res.push(content)
for(var j = 0, lenJ = res.length; j < lenJ; ++j) {
if(m = res[j].match(regex["key_value"])) {
newRes[m[1]] = processValue(m[2]);
}
}
return newRes; var newRes = {}
} else for (var j = 0, lenJ = res.length; j < lenJ; ++j) {
return val; if ((m = res[j].match(regex['key_value']))) {
newRes[m[1]] = processValue(m[2])
}
}
return newRes
} else return val
} }
function processFoldedBlock(block) { function processFoldedBlock(block) {
var lines = block.lines; var lines = block.lines
var children = block.children; var children = block.children
var str = lines.join(" "); var str = lines.join(' ')
var chunks = [str]; var chunks = [str]
for(var i = 0, len = children.length; i < len; ++i) { for (var i = 0, len = children.length; i < len; ++i) {
chunks.push(processFoldedBlock(children[i])); chunks.push(processFoldedBlock(children[i]))
} }
return chunks.join("\n"); return chunks.join('\n')
} }
function processLiteralBlock(block) { function processLiteralBlock(block) {
var lines = block.lines; var lines = block.lines
var children = block.children; var children = block.children
var str = lines.join("\n"); var str = lines.join('\n')
for(var i = 0, len = children.length; i < len; ++i) { for (var i = 0, len = children.length; i < len; ++i) {
str += processLiteralBlock(children[i]); str += processLiteralBlock(children[i])
} }
return str; return str
} }
function processBlock(blocks) { function processBlock(blocks) {
var m = null; var m = null
var res = {}; var res = {}
var lines = null; var lines = null
var children = null; var children = null
var currentObj = null; var currentObj = null
var level = -1; var level = -1
var processedBlocks = []; var processedBlocks = []
var isMap = true; var isMap = true
for(var j = 0, lenJ = blocks.length; j < lenJ; ++j) { for (var j = 0, lenJ = blocks.length; j < lenJ; ++j) {
if (level != -1 && level != blocks[j].level) continue
if(level != -1 && level != blocks[j].level) processedBlocks.push(j)
continue;
processedBlocks.push(j); level = blocks[j].level
lines = blocks[j].lines
children = blocks[j].children
currentObj = null
level = blocks[j].level; for (var i = 0, len = lines.length; i < len; ++i) {
lines = blocks[j].lines; var line = lines[i]
children = blocks[j].children;
currentObj = null;
for(var i = 0, len = lines.length; i < len; ++i) { if ((m = line.match(regex['key']))) {
var line = lines[i]; var key = m[1]
if(m = line.match(regex["key"])) { if (key[0] == '-') {
var key = m[1]; key = key.replace(regex['item'], '')
if (isMap) {
if(key[0] == '-') { isMap = false
key = key.replace(regex["item"], ""); if (typeof res.length === 'undefined') {
if (isMap) { res = []
isMap = false;
if (typeof(res.length) === "undefined") {
res = [];
}
}
if(currentObj != null) res.push(currentObj);
currentObj = {};
isMap = true;
}
if(typeof m[2] != "undefined") {
var value = m[2].replace(regex["trim"], "");
if(value[0] == '&') {
var nb = processBlock(children);
if(currentObj != null) currentObj[key] = nb;
else res[key] = nb;
reference_blocks[value.substr(1)] = nb;
} else if(value[0] == '|') {
if(currentObj != null) currentObj[key] = processLiteralBlock(children.shift());
else res[key] = processLiteralBlock(children.shift());
} else if(value[0] == '*') {
var v = value.substr(1);
var no = {};
if(typeof reference_blocks[v] == "undefined") {
errors.push("Reference '" + v + "' not found!");
} else {
for(var k in reference_blocks[v]) {
no[k] = reference_blocks[v][k];
}
if(currentObj != null) currentObj[key] = no;
else res[key] = no;
}
} else if(value[0] == '>') {
if(currentObj != null) currentObj[key] = processFoldedBlock(children.shift());
else res[key] = processFoldedBlock(children.shift());
} else {
if(currentObj != null) currentObj[key] = processValue(value);
else res[key] = processValue(value);
}
} else {
if(currentObj != null) currentObj[key] = processBlock(children);
else res[key] = processBlock(children);
}
} else if(line.match(/^-\s*$/)) {
if (isMap) {
isMap = false;
if (typeof(res.length) === "undefined") {
res = [];
}
}
if(currentObj != null) res.push(currentObj);
currentObj = {};
isMap = true;
continue;
} else if(m = line.match(/^-\s*(.*)/)) {
if(currentObj != null)
currentObj.push(processValue(m[1]));
else {
if (isMap) {
isMap = false;
if (typeof(res.length) === "undefined") {
res = [];
}
}
res.push(processValue(m[1]));
}
continue;
} }
}
if (currentObj != null) res.push(currentObj)
currentObj = {}
isMap = true
} }
if(currentObj != null) { if (typeof m[2] != 'undefined') {
if (isMap) { var value = m[2].replace(regex['trim'], '')
isMap = false; if (value[0] == '&') {
if (typeof(res.length) === "undefined") { var nb = processBlock(children)
res = []; if (currentObj != null) currentObj[key] = nb
} else res[key] = nb
reference_blocks[value.substr(1)] = nb
} else if (value[0] == '|') {
if (currentObj != null)
currentObj[key] = processLiteralBlock(children.shift())
else res[key] = processLiteralBlock(children.shift())
} else if (value[0] == '*') {
var v = value.substr(1)
var no = {}
if (typeof reference_blocks[v] == 'undefined') {
errors.push("Reference '" + v + "' not found!")
} else {
for (var k in reference_blocks[v]) {
no[k] = reference_blocks[v][k]
}
if (currentObj != null) currentObj[key] = no
else res[key] = no
} }
res.push(currentObj); } else if (value[0] == '>') {
if (currentObj != null)
currentObj[key] = processFoldedBlock(children.shift())
else res[key] = processFoldedBlock(children.shift())
} else {
if (currentObj != null) currentObj[key] = processValue(value)
else res[key] = processValue(value)
}
} else {
if (currentObj != null) currentObj[key] = processBlock(children)
else res[key] = processBlock(children)
} }
} else if (line.match(/^-\s*$/)) {
if (isMap) {
isMap = false
if (typeof res.length === 'undefined') {
res = []
}
}
if (currentObj != null) res.push(currentObj)
currentObj = {}
isMap = true
continue
} else if ((m = line.match(/^-\s*(.*)/))) {
if (currentObj != null) currentObj.push(processValue(m[1]))
else {
if (isMap) {
isMap = false
if (typeof res.length === 'undefined') {
res = []
}
}
res.push(processValue(m[1]))
}
continue
}
} }
for(var j = processedBlocks.length - 1; j >= 0; --j) { if (currentObj != null) {
blocks.splice.call(blocks, processedBlocks[j], 1); if (isMap) {
isMap = false
if (typeof res.length === 'undefined') {
res = []
}
}
res.push(currentObj)
} }
}
return res; for (var j = processedBlocks.length - 1; j >= 0; --j) {
blocks.splice.call(blocks, processedBlocks[j], 1)
}
return res
} }
function semanticAnalysis(blocks) { function semanticAnalysis(blocks) {
var res = processBlock(blocks.children); var res = processBlock(blocks.children)
return res; return res
} }
function preProcess(src) { function preProcess(src) {
var m; var m
var lines = src.split("\n"); var lines = src.split('\n')
var r = regex["comment"]; var r = regex['comment']
for(var i in lines) { for (var i in lines) {
if(m = lines[i].match(r)) { if ((m = lines[i].match(r))) {
/* var cmt = ""; /* var cmt = "";
if(typeof m[3] != "undefined") if(typeof m[3] != "undefined")
lines[i] = m[1]; lines[i] = m[1];
else if(typeof m[3] != "undefined") else if(typeof m[3] != "undefined")
@@ -445,25 +442,25 @@ function preProcess(src) {
else else
lines[i] = ""; lines[i] = "";
*/ */
if(typeof m[3] !== "undefined") { if (typeof m[3] !== 'undefined') {
lines[i] = m[0].substr(0, m[0].length - m[3].length); lines[i] = m[0].substr(0, m[0].length - m[3].length)
} }
}
} }
}
return lines.join("\n"); return lines.join('\n')
} }
function load(str) { function load(str) {
errors = []; errors = []
reference_blocks = []; reference_blocks = []
processing_time = (new Date()).getTime(); processing_time = new Date().getTime()
var pre = preProcess(str) var pre = preProcess(str)
var doc = parser(pre); var doc = parser(pre)
var res = semanticAnalysis(doc); var res = semanticAnalysis(doc)
processing_time = (new Date()).getTime() - processing_time; processing_time = new Date().getTime() - processing_time
return res; return res
} }
export default load export default load
+5 -3
View File
@@ -8,9 +8,11 @@ function appendScript () {
function init (id) { function init (id) {
appendScript() appendScript()
window.ga = window.ga || function () { window.ga =
(window.ga.q = window.ga.q || []).push(arguments) window.ga ||
} function () {
;(window.ga.q = window.ga.q || []).push(arguments)
}
window.ga.l = Number(new Date()) window.ga.l = Number(new Date())
window.ga('create', id, 'auto') window.ga('create', id, 'auto')
} }
+8 -6
View File
@@ -64,14 +64,14 @@ function style () {
.search p.empty { .search p.empty {
text-align: center; text-align: center;
}` }`
const style = Docsify.dom.create('style', code)
Docsify.dom.appendTo(Docsify.dom.head, style) Docsify.dom.style(code)
} }
function tpl (opts, defaultValue = '') { function tpl (opts, defaultValue = '') {
const html = const html =
`<input type="search" value="${defaultValue}" />` + `<input type="search" value="${defaultValue}" />` +
'<div class="results-panel"></div>' + '<div class="results-panel"></div>' +
'</div>' '</div>'
const el = Docsify.dom.create('div', html) const el = Docsify.dom.create('div', html)
const aside = Docsify.dom.find('aside') const aside = Docsify.dom.find('aside')
@@ -109,8 +109,11 @@ function bindEvents () {
let timeId let timeId
// Prevent to Fold sidebar // Prevent to Fold sidebar
Docsify.dom.on($search, 'click', Docsify.dom.on(
e => e.target.tagName !== 'A' && e.stopPropagation()) $search,
'click',
e => e.target.tagName !== 'A' && e.stopPropagation()
)
Docsify.dom.on($input, 'input', e => { Docsify.dom.on($input, 'input', e => {
clearTimeout(timeId) clearTimeout(timeId)
timeId = setTimeout(_ => doSearch(e.target.value.trim()), 100) timeId = setTimeout(_ => doSearch(e.target.value.trim()), 100)
@@ -151,4 +154,3 @@ export function update (opts, vm) {
updatePlaceholder(opts.placeholder, vm.route.path) updatePlaceholder(opts.placeholder, vm.route.path)
updateNoData(opts.noData, vm.route.path) updateNoData(opts.noData, vm.route.path)
} }
+2
View File
@@ -5,6 +5,7 @@ const CONFIG = {
placeholder: 'Type to search', placeholder: 'Type to search',
noData: 'No Results!', noData: 'No Results!',
paths: 'auto', paths: 'auto',
depth: 2,
maxAge: 86400000 // 1 day maxAge: 86400000 // 1 day
} }
@@ -19,6 +20,7 @@ const install = function (hook, vm) {
CONFIG.maxAge = util.isPrimitive(opts.maxAge) ? opts.maxAge : CONFIG.maxAge CONFIG.maxAge = util.isPrimitive(opts.maxAge) ? opts.maxAge : CONFIG.maxAge
CONFIG.placeholder = opts.placeholder || CONFIG.placeholder CONFIG.placeholder = opts.placeholder || CONFIG.placeholder
CONFIG.noData = opts.noData || CONFIG.noData CONFIG.noData = opts.noData || CONFIG.noData
CONFIG.depth = opts.depth || CONFIG.depth
} }
const isAuto = CONFIG.paths === 'auto' const isAuto = CONFIG.paths === 'auto'
+3 -3
View File
@@ -38,14 +38,14 @@ function saveData (maxAge) {
localStorage.setItem('docsify.search.index', JSON.stringify(INDEXS)) localStorage.setItem('docsify.search.index', JSON.stringify(INDEXS))
} }
export function genIndex (path, content = '', router) { export function genIndex (path, content = '', router, depth) {
const tokens = window.marked.lexer(content) const tokens = window.marked.lexer(content)
const slugify = window.Docsify.slugify const slugify = window.Docsify.slugify
const index = {} const index = {}
let slug let slug
tokens.forEach(token => { tokens.forEach(token => {
if (token.type === 'heading' && token.depth <= 2) { if (token.type === 'heading' && token.depth <= depth) {
slug = router.toURL(path, { id: slugify(token.text) }) slug = router.toURL(path, { id: slugify(token.text) })
index[slug] = { slug, title: token.text, body: '' } index[slug] = { slug, title: token.text, body: '' }
} else { } else {
@@ -154,7 +154,7 @@ export function init (config, vm) {
helper helper
.get(vm.router.getFile(path)) .get(vm.router.getFile(path))
.then(result => { .then(result => {
INDEXS[path] = genIndex(path, result, vm.router) INDEXS[path] = genIndex(path, result, vm.router, config.depth)
len === ++count && saveData(config.maxAge) len === ++count && saveData(config.maxAge)
}) })
}) })
+4 -4
View File
@@ -12,7 +12,7 @@ section.cover {
&.has-mask .mask { &.has-mask .mask {
background-color: $color-bg; background-color: $color-bg;
opacity: .8; opacity: 0.8;
position: absolute; position: absolute;
size: 100%; size: 100%;
} }
@@ -42,7 +42,7 @@ section.cover {
color: inherit; color: inherit;
font-size: 2.5rem; font-size: 2.5rem;
font-weight: 300; font-weight: 300;
margin: .625rem 0 2.5rem; margin: 0.625rem 0 2.5rem;
position: relative; position: relative;
text-align: center; text-align: center;
@@ -92,7 +92,7 @@ section.cover {
&:hover { &:hover {
color: inherit; color: inherit;
opacity: .8; opacity: 0.8;
} }
} }
@@ -103,7 +103,7 @@ section.cover {
blockquote > p > a { blockquote > p > a {
border-bottom: 2px solid var(--theme-color, $color-primary); border-bottom: 2px solid var(--theme-color, $color-primary);
transition: color .3s; transition: color 0.3s;
&:hover { &:hover {
color: var(--theme-color, $color-primary); color: var(--theme-color, $color-primary);
+54 -28
View File
@@ -10,7 +10,9 @@
body:not(.ready) { body:not(.ready) {
overflow: hidden; overflow: hidden;
[data-cloak], .app-nav { [data-cloak],
.app-nav,
> nav {
display: none; display: none;
} }
} }
@@ -22,7 +24,7 @@ div#app {
text-align: center; text-align: center;
&:empty::before { &:empty::before {
content: "Loading..."; content: 'Loading...';
} }
} }
@@ -52,7 +54,8 @@ div#app {
font-style: normal; font-style: normal;
} }
html, body { html,
body {
height: 100%; height: 100%;
} }
@@ -77,7 +80,7 @@ kbd {
display: inline-block; display: inline-block;
font-size: 12px !important; font-size: 12px !important;
line-height: 12px; line-height: 12px;
margin-bottom : 3px; margin-bottom: 3px;
padding: 3px 5px; padding: 3px 5px;
vertical-align: middle; vertical-align: middle;
} }
@@ -99,12 +102,13 @@ kbd {
margin: 0; margin: 0;
} }
>a { > a {
margin: 0 1rem; margin: 0 1rem;
padding: 5px 0; padding: 5px 0;
} }
ul, li { ul,
li {
display: inline-block; display: inline-block;
list-style: none; list-style: none;
margin: 0; margin: 0;
@@ -114,7 +118,7 @@ kbd {
color: inherit; color: inherit;
font-size: 16px; font-size: 16px;
text-decoration: none; text-decoration: none;
transition: color .3s; transition: color 0.3s;
&:hover { &:hover {
color: var(--theme-color, $color-primary); color: var(--theme-color, $color-primary);
@@ -186,7 +190,7 @@ kbd {
z-index: 1; z-index: 1;
&:hover .octo-arm { &:hover .octo-arm {
animation:octocat-wave 560ms ease-in-out; animation: octocat-wave 560ms ease-in-out;
} }
svg { svg {
@@ -207,7 +211,7 @@ main {
.anchor { .anchor {
display: inline-block; display: inline-block;
text-decoration: none; text-decoration: none;
transition: all .3s; transition: all 0.3s;
span { span {
color: $color-text; color: $color-text;
@@ -220,7 +224,7 @@ main {
/* sidebar */ /* sidebar */
.sidebar { .sidebar {
border-right: 1px solid rgba(0, 0, 0, .07); border-right: 1px solid rgba(0, 0, 0, 0.07);
overflow-y: auto; overflow-y: auto;
padding: 40px 0; padding: 40px 0;
position: absolute 0 * 0 0; position: absolute 0 * 0 0;
@@ -245,17 +249,22 @@ main {
} }
} }
.sidebar-nav {
line-height: 2em;
}
ul { ul {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
li>p { li > p {
font-weight: 700; font-weight: 700;
margin: 0; margin: 0;
} }
ul, ul li { ul,
ul li {
list-style: none; list-style: none;
} }
@@ -289,20 +298,20 @@ main {
/* sidebar toggle */ /* sidebar toggle */
.sidebar-toggle { .sidebar-toggle {
background-color: transparent; background-color: transparent;
background-color: rgba($color-bg, .8); background-color: rgba($color-bg, 0.8);
border: 0; border: 0;
outline: none; outline: none;
outline: none; outline: none;
padding: 10px; padding: 10px;
position: absolute * * 0 0; position: absolute * * 0 0;
text-align: center; text-align: center;
transition: opacity .3s; transition: opacity 0.3s;
width: 30px; width: 30px;
width: calc($sidebar-width - 16px); width: calc($sidebar-width - 16px);
z-index: 30; z-index: 30;
.sidebar-toggle-button:hover { .sidebar-toggle-button:hover {
opacity: .4; opacity: 0.4;
} }
span { span {
@@ -314,14 +323,15 @@ main {
} }
body.sticky { body.sticky {
.sidebar, .sidebar-toggle { .sidebar,
.sidebar-toggle {
position: fixed; position: fixed;
} }
} }
/* main content */ /* main content */
.content { .content {
padding-top: 20px; padding-top: 60px;
position: absolute 0 0 0 $sidebar-width; position: absolute 0 0 0 $sidebar-width;
transition: left 250ms ease; transition: left 250ms ease;
} }
@@ -338,8 +348,8 @@ body.sticky {
font-size: inherit; font-size: inherit;
} }
>:first-child { > :first-child {
margin-top: 0!important; margin-top: 0 !important;
} }
} }
@@ -389,7 +399,7 @@ body.sticky {
background-color: #f66; background-color: #f66;
border-radius: 100%; border-radius: 100%;
color: $color-bg; color: $color-bg;
content: "!"; content: '!';
font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif; font-family: 'Dosis', 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
font-size: 14px; font-size: 14px;
font-weight: bold; font-weight: bold;
@@ -431,7 +441,9 @@ body.close {
} }
@media print { @media print {
.github-corner, .sidebar-toggle, .sidebar { .github-corner,
.sidebar-toggle,
.sidebar {
display: none; display: none;
} }
@@ -441,7 +453,9 @@ body.close {
} }
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
.github-corner, .sidebar-toggle, .sidebar { .github-corner,
.sidebar-toggle,
.sidebar {
position: fixed; position: fixed;
} }
@@ -467,10 +481,12 @@ body.close {
left: 0; left: 0;
max-width: 100vw; max-width: 100vw;
position: static; position: static;
padding-top: 20px;
transition: transform 250ms ease; transition: transform 250ms ease;
} }
.app-nav, .github-corner { .app-nav,
.github-corner {
transition: transform 250ms ease-out; transition: transform 250ms ease-out;
} }
@@ -485,7 +501,7 @@ body.close {
} }
.sidebar-toggle { .sidebar-toggle {
background-color: rgba($color-bg, .8); background-color: rgba($color-bg, 0.8);
transition: 1s background-color; transition: 1s background-color;
width: calc($sidebar-width - 16px); width: calc($sidebar-width - 16px);
} }
@@ -494,7 +510,8 @@ body.close {
transform: translateX($sidebar-width); transform: translateX($sidebar-width);
} }
.app-nav, .github-corner { .app-nav,
.github-corner {
display: none; display: none;
} }
} }
@@ -510,7 +527,16 @@ body.close {
} }
@keyframes octocat-wave { @keyframes octocat-wave {
0%,100% { transform: rotate(0); } 0%,
20%,60% { transform: rotate(-25deg); } 100% {
40%,80% { transform: rotate(10deg); } transform: rotate(0);
}
20%,
60% {
transform: rotate(-25deg);
}
40%,
80% {
transform: rotate(10deg);
}
} }
+9 -7
View File
@@ -1,12 +1,12 @@
@import url('https://fonts.googleapis.com/css?family=Inconsolata|Inconsolata-Bold'); @import url('https://fonts.googleapis.com/css?family=Inconsolata|Inconsolata-Bold');
$color-primary: #0074D9; $color-primary: #0074d9;
$color-bg: #fff; $color-bg: #fff;
$color-text: #34495e; $color-text: #34495e;
$sidebar-width: 16rem; $sidebar-width: 16rem;
@import "basic/layout"; @import 'basic/layout';
@import "basic/coverpage"; @import 'basic/coverpage';
/* sidebar */ /* sidebar */
.sidebar { .sidebar {
@@ -132,7 +132,7 @@ $sidebar-width: 16rem;
border-radius: 3px; border-radius: 3px;
font-family: Inconsolata; font-family: Inconsolata;
padding: 0.2em 0.4rem; padding: 0.2em 0.4rem;
white-space: pre; white-space: nowrap;
} }
.markdown-section pre { .markdown-section pre {
@@ -160,7 +160,7 @@ $sidebar-width: 16rem;
} }
.namespace { .namespace {
opacity: .7; opacity: 0.7;
} }
.token.property, .token.property,
@@ -216,7 +216,7 @@ $sidebar-width: 16rem;
cursor: help; cursor: help;
} }
.markdown-section pre>code { .markdown-section pre > code {
background-color: #f8f8f8; background-color: #f8f8f8;
border-radius: 2px; border-radius: 2px;
display: block; display: block;
@@ -226,9 +226,11 @@ $sidebar-width: 16rem;
overflow: inherit; overflow: inherit;
padding: 20px 0.8em 20px; padding: 20px 0.8em 20px;
position: relative; position: relative;
white-space: inherit;
} }
.markdown-section code::after, .markdown-section code::before { .markdown-section code::after,
.markdown-section code::before {
letter-spacing: 0.05rem; letter-spacing: 0.05rem;
} }
+10 -9
View File
@@ -5,8 +5,8 @@ $color-bg: #3f3f3f;
$color-text: #c8c8c8; $color-text: #c8c8c8;
$sidebar-width: 300px; $sidebar-width: 300px;
@import "basic/layout"; @import 'basic/layout';
@import "basic/coverpage"; @import 'basic/coverpage';
body { body {
background-color: $color-bg; background-color: $color-bg;
@@ -38,7 +38,7 @@ body {
padding: 0; padding: 0;
} }
ul li.active>a { ul li.active > a {
color: var(--theme-color, $color-primary); color: var(--theme-color, $color-primary);
font-weight: 600; font-weight: 600;
} }
@@ -71,7 +71,7 @@ body {
.markdown-section h3 { .markdown-section h3 {
font-size: 1.5rem; font-size: 1.5rem;
margin: 40px 0 .6rem; margin: 40px 0 0.6rem;
} }
.markdown-section h4 { .markdown-section h4 {
@@ -134,7 +134,7 @@ body {
font-size: 0.8rem; font-size: 0.8rem;
margin: 0 2px; margin: 0 2px;
padding: 3px 5px; padding: 3px 5px;
white-space: nowrap; white-space: pre-wrap;
} }
.markdown-section pre { .markdown-section pre {
@@ -159,7 +159,7 @@ body {
} }
.token.namespace { .token.namespace {
opacity: .7; opacity: 0.7;
} }
.token.boolean, .token.boolean,
@@ -246,7 +246,7 @@ body {
cursor: help; cursor: help;
} }
.markdown-section pre>code { .markdown-section pre > code {
-moz-osx-font-smoothing: initial; -moz-osx-font-smoothing: initial;
-webkit-font-smoothing: initial; -webkit-font-smoothing: initial;
background-color: #282828; background-color: #282828;
@@ -263,7 +263,8 @@ body {
white-space: inherit; white-space: inherit;
} }
.markdown-section code::after, .markdown-section code::before { .markdown-section code::after,
.markdown-section code::before {
letter-spacing: 0.05rem; letter-spacing: 0.05rem;
} }
@@ -292,7 +293,7 @@ pre::after {
color: #657b83; color: #657b83;
} }
input[type="search"] { input[type='search'] {
background: #4f4f4f; background: #4f4f4f;
border-color: #4f4f4f; border-color: #4f4f4f;
color: #c8c8c8; color: #c8c8c8;
+2 -2
View File
@@ -2,5 +2,5 @@ $color-primary: #000;
$color-bg: #fff; $color-bg: #fff;
$color-text: #000; $color-text: #000;
$sidebar-width: 300px; $sidebar-width: 300px;
@import "basic/layout"; @import 'basic/layout';
@import "basic/coverpage"; @import 'basic/coverpage';
+9 -8
View File
@@ -5,8 +5,8 @@ $color-bg: #fff;
$color-text: #34495e; $color-text: #34495e;
$sidebar-width: 300px; $sidebar-width: 300px;
@import "basic/layout"; @import 'basic/layout';
@import "basic/coverpage"; @import 'basic/coverpage';
body { body {
background-color: $color-bg; background-color: $color-bg;
@@ -39,7 +39,7 @@ body {
padding: 0; padding: 0;
} }
ul li.active>a { ul li.active > a {
border-right: 2px solid; border-right: 2px solid;
color: var(--theme-color, $color-primary); color: var(--theme-color, $color-primary);
font-weight: 600; font-weight: 600;
@@ -82,7 +82,7 @@ body {
.markdown-section h3 { .markdown-section h3 {
font-size: 1.5rem; font-size: 1.5rem;
margin: 40px 0 .6rem; margin: 40px 0 0.6rem;
} }
.markdown-section h4 { .markdown-section h4 {
@@ -145,7 +145,7 @@ body {
font-size: 0.8rem; font-size: 0.8rem;
margin: 0 2px; margin: 0 2px;
padding: 3px 5px; padding: 3px 5px;
white-space: nowrap; white-space: pre-wrap;
} }
.markdown-section pre { .markdown-section pre {
@@ -170,7 +170,7 @@ body {
} }
.token.namespace { .token.namespace {
opacity: .7; opacity: 0.7;
} }
.token.boolean, .token.boolean,
@@ -257,7 +257,7 @@ body {
cursor: help; cursor: help;
} }
.markdown-section pre>code { .markdown-section pre > code {
-moz-osx-font-smoothing: initial; -moz-osx-font-smoothing: initial;
-webkit-font-smoothing: initial; -webkit-font-smoothing: initial;
background-color: #f8f8f8; background-color: #f8f8f8;
@@ -274,7 +274,8 @@ body {
white-space: inherit; white-space: inherit;
} }
.markdown-section code::after, .markdown-section code::before { .markdown-section code::after,
.markdown-section code::before {
letter-spacing: 0.05rem; letter-spacing: 0.05rem;
} }
-4574
View File
File diff suppressed because it is too large Load Diff