hexo-theme-volantis 4.3.1 → 5.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (850) hide show
  1. package/_config.yml +425 -145
  2. package/languages/en.yml +7 -0
  3. package/languages/zh-CN.yml +13 -2
  4. package/languages/zh-TW.yml +7 -0
  5. package/layout/404.ejs +1 -1
  6. package/layout/_meta/author.ejs +4 -4
  7. package/layout/_meta/category.ejs +11 -8
  8. package/layout/_meta/counter.ejs +5 -2
  9. package/layout/_meta/date.ejs +1 -1
  10. package/layout/_meta/music.ejs +1 -1
  11. package/layout/_meta/share.ejs +1 -1
  12. package/layout/_meta/tags.ejs +3 -0
  13. package/layout/_meta/thumbnail.ejs +3 -1
  14. package/layout/_meta/updated.ejs +1 -1
  15. package/layout/{_cover → _partial/_cover}/blank.ejs +0 -0
  16. package/layout/{_cover → _partial/_cover}/dock.ejs +1 -1
  17. package/layout/{_cover → _partial/_cover}/featured.ejs +1 -1
  18. package/layout/{_cover → _partial/_cover}/focus.ejs +1 -1
  19. package/layout/_partial/_cover/layout.ejs +8 -0
  20. package/layout/{_cover → _partial/_cover}/search.ejs +1 -1
  21. package/layout/_partial/article.ejs +17 -12
  22. package/layout/_partial/cover.ejs +8 -28
  23. package/layout/_partial/footer.ejs +18 -10
  24. package/layout/_partial/head.ejs +55 -110
  25. package/layout/_partial/header.ejs +16 -10
  26. package/layout/_partial/meta.ejs +18 -4
  27. package/layout/_partial/post.ejs +35 -9
  28. package/layout/_partial/scripts/_ctrl/cdnCtrl.ejs +113 -0
  29. package/layout/_partial/scripts/{coverCtrl.ejs → _ctrl/coverCtrl.ejs} +17 -25
  30. package/layout/_partial/scripts/_ctrl.ejs +2 -0
  31. package/layout/_partial/scripts/content-visibility-scroll-fix.ejs +86 -0
  32. package/layout/_partial/scripts/global.ejs +352 -108
  33. package/layout/_partial/scripts/index.ejs +68 -40
  34. package/layout/_partial/scripts/toc.ejs +74 -67
  35. package/layout/_partial/side.ejs +4 -1
  36. package/layout/_plugins/_page_plugins/artitalk/index.ejs +15 -0
  37. package/layout/_plugins/_page_plugins/bbtalk/index.ejs +10 -0
  38. package/layout/_plugins/_page_plugins/fcircle/index.ejs +226 -0
  39. package/layout/_plugins/_page_plugins/gitter/index.ejs +14 -0
  40. package/layout/_plugins/_page_plugins/hpptalk/index.ejs +14 -0
  41. package/layout/_plugins/_page_plugins/indent/index.ejs +16 -0
  42. package/layout/_plugins/_page_plugins/index.ejs +7 -0
  43. package/layout/_plugins/_page_plugins/katex/index.ejs +13 -0
  44. package/layout/{_third-party/math/mathjax/script.ejs → _plugins/_page_plugins/mathjax/index.ejs} +2 -2
  45. package/layout/_plugins/_page_plugins/snackbar/index.ejs +55 -0
  46. package/layout/{_partial/scripts/counter.ejs → _plugins/analytics/LCCounter.ejs} +0 -0
  47. package/layout/{_third-party → _plugins}/analytics/script.ejs +33 -5
  48. package/layout/{_third-party → _plugins}/aplayer/layout.ejs +0 -0
  49. package/layout/_plugins/aplayer/script.ejs +74 -0
  50. package/layout/_plugins/chat/gitter/script.ejs +17 -0
  51. package/layout/_plugins/chat/index.ejs +1 -0
  52. package/layout/_plugins/chat/tidio/script.ejs +1 -0
  53. package/layout/_plugins/comments/artalk/script.ejs +53 -0
  54. package/layout/_plugins/comments/beaudar/script.ejs +61 -0
  55. package/layout/_plugins/comments/disqus/script.ejs +98 -0
  56. package/layout/_plugins/comments/disqusjs/script.ejs +35 -0
  57. package/layout/_plugins/comments/giscus/script.ejs +47 -0
  58. package/layout/_plugins/comments/gitalk/script.ejs +24 -0
  59. package/layout/_plugins/comments/hashover/script.ejs +5 -0
  60. package/layout/{_third-party → _plugins}/comments/index.ejs +9 -2
  61. package/layout/_plugins/comments/isso/script.ejs +27 -0
  62. package/layout/_plugins/comments/livere/script.ejs +15 -0
  63. package/layout/_plugins/comments/minivaline/script.ejs +45 -0
  64. package/layout/_plugins/comments/twikoo/script.ejs +40 -0
  65. package/layout/_plugins/comments/utterances/script.ejs +43 -0
  66. package/layout/{_third-party → _plugins}/comments/valine/script.ejs +17 -13
  67. package/layout/_plugins/comments/vssue/script.ejs +37 -0
  68. package/layout/_plugins/comments/waline/script.ejs +38 -0
  69. package/layout/_plugins/comments/z-custom/script.ejs +1 -0
  70. package/layout/_plugins/darkmode/script.ejs +114 -0
  71. package/layout/{_third-party → _plugins}/end-of-support/script.ejs +25 -8
  72. package/layout/_plugins/github-api/script.ejs +27 -0
  73. package/layout/_plugins/highlight/highlightjs/script.ejs +26 -0
  74. package/layout/_plugins/highlight/prismjs/script.ejs +25 -0
  75. package/layout/_plugins/highlight/script.ejs +1 -0
  76. package/layout/{_third-party → _plugins}/lazyload/script.ejs +1 -1
  77. package/layout/{_third-party → _plugins}/nodewaves/script.ejs +1 -1
  78. package/layout/_plugins/parallax/script.ejs +70 -0
  79. package/layout/{_third-party → _plugins}/pjax/animate.ejs +31 -31
  80. package/layout/_plugins/pjax/index.ejs +68 -0
  81. package/layout/_plugins/pjax/pdata.ejs +57 -0
  82. package/layout/{_third-party → _plugins}/preload/script.ejs +3 -3
  83. package/layout/_plugins/rightmenu/layout.ejs +119 -0
  84. package/layout/_plugins/scrollreveal/script.ejs +25 -0
  85. package/layout/_plugins/search/script.ejs +39 -0
  86. package/layout/{_third-party → _plugins}/share/layout.ejs +0 -0
  87. package/layout/_plugins/swiper/script.ejs +37 -0
  88. package/layout/_pre.ejs +2 -2
  89. package/layout/_widget/_pre.ejs +5 -0
  90. package/layout/_widget/blogger.ejs +1 -1
  91. package/layout/_widget/category.ejs +2 -2
  92. package/layout/_widget/copyright.ejs +1 -1
  93. package/layout/_widget/grid.ejs +3 -3
  94. package/layout/_widget/lastupdate.ejs +27 -0
  95. package/layout/_widget/list.ejs +2 -2
  96. package/layout/_widget/load.ejs +18 -0
  97. package/layout/_widget/music.ejs +3 -2
  98. package/layout/_widget/page.ejs +1 -1
  99. package/layout/_widget/qrcode.ejs +1 -1
  100. package/layout/_widget/related_posts.ejs +1 -1
  101. package/layout/_widget/tagcloud.ejs +1 -1
  102. package/layout/_widget/text.ejs +1 -1
  103. package/layout/_widget/toc.ejs +6 -2
  104. package/layout/_widget/webinfo.ejs +2 -58
  105. package/layout/archive.ejs +3 -3
  106. package/layout/category.ejs +8 -3
  107. package/layout/docs.ejs +1 -1
  108. package/layout/friends.ejs +5 -24
  109. package/layout/index.ejs +1 -1
  110. package/layout/layout.ejs +13 -12
  111. package/layout/list.ejs +1 -1
  112. package/layout/page.ejs +1 -1
  113. package/layout/post.ejs +1 -1
  114. package/layout/tag.ejs +8 -3
  115. package/package.json +4 -3
  116. package/scripts/events/index.js +12 -0
  117. package/scripts/events/lib/config.js +27 -8
  118. package/scripts/events/lib/renderStylus.js +78 -0
  119. package/scripts/events/lib/utils.js +76 -0
  120. package/scripts/filters/content-visibility.js +25 -0
  121. package/scripts/{render → filters}/img.js +0 -0
  122. package/scripts/filters/replace.js +15 -0
  123. package/scripts/{z-lazyload → filters/z-lazyload}/index.js +0 -0
  124. package/scripts/{z-lazyload → filters/z-lazyload}/lib/process.js +1 -1
  125. package/scripts/helpers/custom-files/index.js +163 -0
  126. package/scripts/helpers/first-style/index.js +19 -0
  127. package/scripts/helpers/head/autoCanonical.js +15 -0
  128. package/scripts/helpers/head/generate_preload_fontfamily.js +22 -0
  129. package/scripts/helpers/head/generate_seo.js +24 -0
  130. package/scripts/helpers/head/generate_title__keywords__description.js +91 -0
  131. package/scripts/{related_posts → helpers/related_posts}/index.js +1 -1
  132. package/scripts/helpers/structured-data/index.js +2 -0
  133. package/scripts/helpers/structured-data/lib/blogposting.js +65 -0
  134. package/scripts/helpers/structured-data/lib/breadcrumblist.js +128 -0
  135. package/scripts/helpers/structured-data/lib/config.js +31 -0
  136. package/scripts/helpers/structured-data/lib/index.js +38 -0
  137. package/scripts/helpers/structured-data/lib/organization.js +15 -0
  138. package/scripts/helpers/structured-data/lib/person.js +16 -0
  139. package/scripts/helpers/structured-data/lib/website.js +42 -0
  140. package/scripts/helpers/tag-plugins-style/index.js +199 -0
  141. package/scripts/tags/btn.js +6 -1
  142. package/scripts/tags/btns.js +7 -2
  143. package/scripts/tags/checkbox.js +12 -2
  144. package/scripts/tags/contributors.js +100 -0
  145. package/scripts/tags/dropmenu.js +18 -3
  146. package/scripts/tags/fancybox.js +44 -10
  147. package/scripts/tags/folding.js +6 -1
  148. package/scripts/tags/frame.js +6 -1
  149. package/scripts/tags/friends.js +99 -0
  150. package/scripts/tags/ghcard.js +6 -1
  151. package/scripts/tags/image.js +14 -2
  152. package/scripts/tags/link.js +6 -1
  153. package/scripts/tags/md.js +59 -0
  154. package/scripts/tags/media.js +25 -1
  155. package/scripts/tags/note.js +12 -2
  156. package/scripts/tags/site.js +87 -51
  157. package/scripts/tags/span.js +12 -2
  158. package/scripts/tags/swiper.js +38 -0
  159. package/scripts/tags/tabs.js +85 -54
  160. package/scripts/tags/timeline.js +6 -1
  161. package/source/css/Readme.md +28 -0
  162. package/source/css/_defines/AutoPrefixCSS.styl +347 -0
  163. package/source/css/_defines/Readme.md +3 -0
  164. package/source/css/_defines/color.styl +19 -0
  165. package/source/css/_defines/effect.styl +0 -13
  166. package/source/css/_defines/fonts.styl +17 -18
  167. package/source/css/_defines/func.styl +12 -30
  168. package/source/css/_first/base_first.styl +113 -0
  169. package/source/css/_first/{cover.styl → cover_first.styl} +113 -87
  170. package/source/css/_first/dark_first.styl +75 -0
  171. package/source/css/_first/fontfamily_first.styl +17 -0
  172. package/source/css/_first/{navbar.styl → navbar_first.styl} +4 -10
  173. package/source/css/_first/search_first.styl +12 -0
  174. package/source/css/{_base/index.styl → _style/_base/base.styl} +8 -92
  175. package/source/css/_style/_base/fontfamily_async.styl +8 -0
  176. package/source/css/{_layout → _style/_layout}/archive.styl +0 -0
  177. package/source/css/{_layout → _style/_layout}/article.styl +2 -29
  178. package/source/css/{_layout → _style/_layout}/footer.styl +0 -0
  179. package/source/css/_style/_layout/friends-simpleuser.styl +23 -0
  180. package/source/css/_style/_layout/friends-traditional.styl +81 -0
  181. package/source/css/{_layout → _style/_layout}/img.styl +0 -0
  182. package/source/css/_style/_layout/loading.styl +14 -0
  183. package/source/css/{_layout → _style/_layout}/main.styl +17 -7
  184. package/source/css/{_layout → _style/_layout}/md.styl +0 -0
  185. package/source/css/{_layout → _style/_layout}/pagination.styl +1 -1
  186. package/source/css/{_layout → _style/_layout}/posts.styl +2 -0
  187. package/source/css/{_first → _style/_layout}/search.styl +0 -103
  188. package/source/css/{_layout → _style/_layout}/sidebar.styl +24 -3
  189. package/source/css/{_layout → _style/_layout}/snackbar.styl +0 -0
  190. package/source/css/{_layout → _style/_layout}/toc.styl +1 -1
  191. package/source/css/{_layout → _style/_layout}/video.styl +0 -0
  192. package/source/css/_style/_plugins/_dark/dark_async.styl +50 -0
  193. package/source/css/{_plugins/dark.styl → _style/_plugins/_dark/dark_plugins.styl} +80 -76
  194. package/source/css/_style/_plugins/_highlight/highlightjs/clipboard.styl +36 -0
  195. package/source/css/_style/_plugins/_highlight/highlightjs/color.styl +96 -0
  196. package/source/css/_style/_plugins/_highlight/highlightjs/index.styl +102 -0
  197. package/source/css/_style/_plugins/_highlight/highlightjs/language.styl +63 -0
  198. package/source/css/_style/_plugins/_highlight/index.styl +1 -0
  199. package/source/css/_style/_plugins/_highlight/prismjs/clipboard.styl +33 -0
  200. package/source/css/_style/_plugins/_highlight/prismjs/index.styl +8 -0
  201. package/source/css/_style/_plugins/_highlight/prismjs/language.styl +63 -0
  202. package/source/css/_style/_plugins/_rightmenu/reading.styl +56 -0
  203. package/source/css/{_plugins → _style/_plugins/_rightmenu}/rightmenu.styl +20 -1
  204. package/source/css/{_plugins → _style/_plugins}/aplayer.styl +8 -1
  205. package/source/css/{_plugins → _style/_plugins}/cursor.styl +49 -9
  206. package/source/css/_style/_plugins/fontcolor.styl +79 -0
  207. package/source/css/{_plugins → _style/_plugins}/gitalk.styl +0 -0
  208. package/source/css/{_plugins → _style/_plugins}/index.styl +14 -6
  209. package/source/css/{_plugins → _style/_plugins}/mathjax.styl +0 -0
  210. package/source/css/_style/_plugins/message.styl +14 -0
  211. package/source/css/{_plugins → _style/_plugins}/pjaxanimate.styl +0 -0
  212. package/source/css/{_plugins → _style/_plugins}/valine.styl +0 -0
  213. package/source/css/_style/_tag-plugins/Readme.md +9 -0
  214. package/source/css/{_tag-plugins → _style/_tag-plugins}/btns.styl +0 -0
  215. package/source/css/{_tag-plugins → _style/_tag-plugins}/checkbox.styl +0 -0
  216. package/source/css/{_tag-plugins → _style/_tag-plugins}/dropmenu.styl +0 -0
  217. package/source/css/{_plugins → _style/_tag-plugins}/fancybox.styl +8 -9
  218. package/source/css/{_tag-plugins → _style/_tag-plugins}/folding.styl +0 -0
  219. package/source/css/{_tag-plugins → _style/_tag-plugins}/frame.styl +0 -0
  220. package/source/css/_style/_tag-plugins/friends.styl +72 -0
  221. package/source/css/{_tag-plugins → _style/_tag-plugins}/ghcard.styl +0 -0
  222. package/source/css/{_tag-plugins → _style/_tag-plugins}/image.styl +0 -0
  223. package/source/css/{_tag-plugins → _style/_tag-plugins}/link.styl +0 -0
  224. package/source/css/{_tag-plugins → _style/_tag-plugins}/media.styl +0 -0
  225. package/source/css/{_tag-plugins → _style/_tag-plugins}/note.styl +0 -0
  226. package/source/css/_style/_tag-plugins/sites.styl +87 -0
  227. package/source/css/{_tag-plugins → _style/_tag-plugins}/span.styl +0 -0
  228. package/source/css/_style/_tag-plugins/swiper.styl +44 -0
  229. package/source/css/{_tag-plugins → _style/_tag-plugins}/table.styl +0 -0
  230. package/source/css/{_tag-plugins → _style/_tag-plugins}/tabs.styl +0 -0
  231. package/source/css/_style/_tag-plugins/tag.json +35 -0
  232. package/source/css/_style/_tag-plugins/text.styl +31 -0
  233. package/source/css/{_tag-plugins → _style/_tag-plugins}/timeline.styl +0 -0
  234. package/source/css/_style/index.styl +9 -0
  235. package/source/css/first.styl +19 -6
  236. package/source/css/message.css +6 -0
  237. package/source/css/style.styl +5 -4
  238. package/source/js/app.js +1013 -277
  239. package/source/js/plugins/aplayer.js +191 -0
  240. package/source/js/plugins/contributors.js +92 -0
  241. package/source/js/plugins/friends.js +93 -0
  242. package/source/js/plugins/parallax.js +191 -0
  243. package/source/js/plugins/rightMenu.js +560 -0
  244. package/source/js/plugins/sites.js +96 -0
  245. package/source/js/search/hexo.js +178 -374
  246. package/source/js/thirdparty/message.js +6 -0
  247. package/source/js/{valine.js → thirdparty/valine.js} +0 -0
  248. package/source/libs/@fancyapps/ui/LICENSE.md +8 -0
  249. package/source/libs/@fancyapps/ui/README.md +224 -0
  250. package/source/libs/@fancyapps/ui/dist/fancybox.css +1 -0
  251. package/source/libs/@fancyapps/ui/dist/fancybox.umd.js +2 -0
  252. package/source/libs/@fortawesome/fontawesome-free/LICENSE.txt +34 -0
  253. package/source/libs/@fortawesome/fontawesome-free/css/all.min.css +5 -0
  254. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.eot +0 -0
  255. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.svg +3637 -0
  256. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf +0 -0
  257. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff +0 -0
  258. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 +0 -0
  259. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.eot +0 -0
  260. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.svg +805 -0
  261. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf +0 -0
  262. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff +0 -0
  263. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 +0 -0
  264. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.eot +0 -0
  265. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.svg +5015 -0
  266. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf +0 -0
  267. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff +0 -0
  268. package/source/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 +0 -0
  269. package/source/libs/aplayer/LICENSE +21 -0
  270. package/source/libs/aplayer/README.md +123 -0
  271. package/source/libs/aplayer/dist/APlayer.min.css +3 -0
  272. package/source/libs/aplayer/dist/APlayer.min.css.map +1 -0
  273. package/source/libs/aplayer/dist/APlayer.min.js +2 -0
  274. package/source/libs/aplayer/dist/APlayer.min.js.map +1 -0
  275. package/source/libs/busuanzi/LICENSE +21 -0
  276. package/source/libs/busuanzi/README.md +21 -0
  277. package/source/libs/busuanzi/js/busuanzi.pure.mini.js +1 -0
  278. package/source/libs/comment_typing/comment_typing.js +2 -0
  279. package/source/libs/flying-pages/flying-pages.min.js +1 -0
  280. package/source/libs/font-awesome-animation/font-awesome-animation.min.css +2 -0
  281. package/source/libs/github-markdown-css/github-markdown.css +1036 -0
  282. package/source/libs/github-markdown-css/license +9 -0
  283. package/source/libs/github-markdown-css/readme.md +63 -0
  284. package/source/libs/hls.js/LICENSE +28 -0
  285. package/source/libs/hls.js/README.md +442 -0
  286. package/source/libs/hls.js/dist/hls.min.js +2 -0
  287. package/source/libs/hls.js/dist/hls.min.js.map +1 -0
  288. package/source/libs/instant_page/instant_page.js +2 -0
  289. package/source/libs/jquery/LICENSE.txt +20 -0
  290. package/source/libs/jquery/README.md +62 -0
  291. package/source/libs/jquery/dist/jquery.min.js +2 -0
  292. package/source/libs/jquery/dist/jquery.min.map +1 -0
  293. package/source/libs/katex/README.md +119 -0
  294. package/source/libs/katex/contrib/auto-render.min.js +1 -0
  295. package/source/libs/katex/contrib/copy-tex.min.css +1 -0
  296. package/source/libs/katex/contrib/copy-tex.min.js +1 -0
  297. package/source/libs/katex/contrib/mathtex-script-type.min.js +1 -0
  298. package/source/libs/katex/contrib/mhchem.min.js +1 -0
  299. package/source/libs/katex/contrib/render-a11y-string.min.js +1 -0
  300. package/source/libs/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
  301. package/source/libs/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
  302. package/source/libs/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  303. package/source/libs/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  304. package/source/libs/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  305. package/source/libs/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  306. package/source/libs/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  307. package/source/libs/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  308. package/source/libs/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  309. package/source/libs/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  310. package/source/libs/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  311. package/source/libs/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  312. package/source/libs/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  313. package/source/libs/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  314. package/source/libs/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  315. package/source/libs/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
  316. package/source/libs/katex/fonts/KaTeX_Main-Bold.woff +0 -0
  317. package/source/libs/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  318. package/source/libs/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  319. package/source/libs/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  320. package/source/libs/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  321. package/source/libs/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
  322. package/source/libs/katex/fonts/KaTeX_Main-Italic.woff +0 -0
  323. package/source/libs/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  324. package/source/libs/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
  325. package/source/libs/katex/fonts/KaTeX_Main-Regular.woff +0 -0
  326. package/source/libs/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  327. package/source/libs/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  328. package/source/libs/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  329. package/source/libs/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  330. package/source/libs/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
  331. package/source/libs/katex/fonts/KaTeX_Math-Italic.woff +0 -0
  332. package/source/libs/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  333. package/source/libs/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  334. package/source/libs/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  335. package/source/libs/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  336. package/source/libs/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  337. package/source/libs/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  338. package/source/libs/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  339. package/source/libs/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  340. package/source/libs/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  341. package/source/libs/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  342. package/source/libs/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
  343. package/source/libs/katex/fonts/KaTeX_Script-Regular.woff +0 -0
  344. package/source/libs/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  345. package/source/libs/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
  346. package/source/libs/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
  347. package/source/libs/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  348. package/source/libs/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
  349. package/source/libs/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
  350. package/source/libs/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  351. package/source/libs/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
  352. package/source/libs/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
  353. package/source/libs/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  354. package/source/libs/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
  355. package/source/libs/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
  356. package/source/libs/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  357. package/source/libs/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  358. package/source/libs/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  359. package/source/libs/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  360. package/source/libs/katex/katex.min.css +1 -0
  361. package/source/libs/katex/katex.min.js +1 -0
  362. package/source/libs/marked/LICENSE.md +44 -0
  363. package/source/libs/marked/README.md +87 -0
  364. package/source/libs/marked/marked.min.js +6 -0
  365. package/source/libs/mathjax/LICENSE +202 -0
  366. package/source/libs/mathjax/README.md +237 -0
  367. package/source/libs/mathjax/es5/a11y/assistive-mml.js +1 -0
  368. package/source/libs/mathjax/es5/a11y/complexity.js +1 -0
  369. package/source/libs/mathjax/es5/a11y/explorer.js +1 -0
  370. package/source/libs/mathjax/es5/a11y/semantic-enrich.js +1 -0
  371. package/source/libs/mathjax/es5/adaptors/liteDOM.js +1 -0
  372. package/source/libs/mathjax/es5/core.js +1 -0
  373. package/source/libs/mathjax/es5/input/asciimath.js +1 -0
  374. package/source/libs/mathjax/es5/input/mml/entities.js +1 -0
  375. package/source/libs/mathjax/es5/input/mml/extensions/mml3.js +1 -0
  376. package/source/libs/mathjax/es5/input/mml/extensions/mml3.sef.json +1 -0
  377. package/source/libs/mathjax/es5/input/mml.js +1 -0
  378. package/source/libs/mathjax/es5/input/tex/extensions/action.js +1 -0
  379. package/source/libs/mathjax/es5/input/tex/extensions/all-packages.js +34 -0
  380. package/source/libs/mathjax/es5/input/tex/extensions/ams.js +1 -0
  381. package/source/libs/mathjax/es5/input/tex/extensions/amscd.js +1 -0
  382. package/source/libs/mathjax/es5/input/tex/extensions/autoload.js +1 -0
  383. package/source/libs/mathjax/es5/input/tex/extensions/bbox.js +1 -0
  384. package/source/libs/mathjax/es5/input/tex/extensions/boldsymbol.js +1 -0
  385. package/source/libs/mathjax/es5/input/tex/extensions/braket.js +1 -0
  386. package/source/libs/mathjax/es5/input/tex/extensions/bussproofs.js +1 -0
  387. package/source/libs/mathjax/es5/input/tex/extensions/cancel.js +1 -0
  388. package/source/libs/mathjax/es5/input/tex/extensions/centernot.js +1 -0
  389. package/source/libs/mathjax/es5/input/tex/extensions/color.js +1 -0
  390. package/source/libs/mathjax/es5/input/tex/extensions/colortbl.js +1 -0
  391. package/source/libs/mathjax/es5/input/tex/extensions/colorv2.js +1 -0
  392. package/source/libs/mathjax/es5/input/tex/extensions/configmacros.js +1 -0
  393. package/source/libs/mathjax/es5/input/tex/extensions/enclose.js +1 -0
  394. package/source/libs/mathjax/es5/input/tex/extensions/extpfeil.js +1 -0
  395. package/source/libs/mathjax/es5/input/tex/extensions/gensymb.js +1 -0
  396. package/source/libs/mathjax/es5/input/tex/extensions/html.js +1 -0
  397. package/source/libs/mathjax/es5/input/tex/extensions/mathtools.js +1 -0
  398. package/source/libs/mathjax/es5/input/tex/extensions/mhchem.js +34 -0
  399. package/source/libs/mathjax/es5/input/tex/extensions/newcommand.js +1 -0
  400. package/source/libs/mathjax/es5/input/tex/extensions/noerrors.js +1 -0
  401. package/source/libs/mathjax/es5/input/tex/extensions/noundefined.js +1 -0
  402. package/source/libs/mathjax/es5/input/tex/extensions/physics.js +1 -0
  403. package/source/libs/mathjax/es5/input/tex/extensions/require.js +1 -0
  404. package/source/libs/mathjax/es5/input/tex/extensions/setoptions.js +1 -0
  405. package/source/libs/mathjax/es5/input/tex/extensions/tagformat.js +1 -0
  406. package/source/libs/mathjax/es5/input/tex/extensions/textcomp.js +1 -0
  407. package/source/libs/mathjax/es5/input/tex/extensions/textmacros.js +1 -0
  408. package/source/libs/mathjax/es5/input/tex/extensions/unicode.js +1 -0
  409. package/source/libs/mathjax/es5/input/tex/extensions/upgreek.js +1 -0
  410. package/source/libs/mathjax/es5/input/tex/extensions/verb.js +1 -0
  411. package/source/libs/mathjax/es5/input/tex-base.js +1 -0
  412. package/source/libs/mathjax/es5/input/tex-full.js +34 -0
  413. package/source/libs/mathjax/es5/input/tex.js +1 -0
  414. package/source/libs/mathjax/es5/latest.js +1 -0
  415. package/source/libs/mathjax/es5/loader.js +1 -0
  416. package/source/libs/mathjax/es5/mml-chtml.js +1 -0
  417. package/source/libs/mathjax/es5/mml-svg.js +1 -0
  418. package/source/libs/mathjax/es5/node-main.js +1 -0
  419. package/source/libs/mathjax/es5/output/chtml/fonts/tex.js +1 -0
  420. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_AMS-Regular.woff +0 -0
  421. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Bold.woff +0 -0
  422. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Regular.woff +0 -0
  423. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Fraktur-Bold.woff +0 -0
  424. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Fraktur-Regular.woff +0 -0
  425. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Main-Bold.woff +0 -0
  426. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Main-Italic.woff +0 -0
  427. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Main-Regular.woff +0 -0
  428. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Math-BoldItalic.woff +0 -0
  429. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Math-Italic.woff +0 -0
  430. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Math-Regular.woff +0 -0
  431. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Bold.woff +0 -0
  432. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Italic.woff +0 -0
  433. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_SansSerif-Regular.woff +0 -0
  434. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Script-Regular.woff +0 -0
  435. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Size1-Regular.woff +0 -0
  436. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Size2-Regular.woff +0 -0
  437. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Size3-Regular.woff +0 -0
  438. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Size4-Regular.woff +0 -0
  439. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Typewriter-Regular.woff +0 -0
  440. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Vector-Bold.woff +0 -0
  441. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Vector-Regular.woff +0 -0
  442. package/source/libs/mathjax/es5/output/chtml/fonts/woff-v2/MathJax_Zero.woff +0 -0
  443. package/source/libs/mathjax/es5/output/chtml.js +1 -0
  444. package/source/libs/mathjax/es5/output/svg/fonts/tex.js +1 -0
  445. package/source/libs/mathjax/es5/output/svg.js +1 -0
  446. package/source/libs/mathjax/es5/sre/mathmaps/de.js +125 -0
  447. package/source/libs/mathjax/es5/sre/mathmaps/en.js +131 -0
  448. package/source/libs/mathjax/es5/sre/mathmaps/es.js +122 -0
  449. package/source/libs/mathjax/es5/sre/mathmaps/fr.js +125 -0
  450. package/source/libs/mathjax/es5/sre/mathmaps/hi.js +125 -0
  451. package/source/libs/mathjax/es5/sre/mathmaps/it.js +125 -0
  452. package/source/libs/mathjax/es5/sre/mathmaps/nemeth.js +113 -0
  453. package/source/libs/mathjax/es5/sre/sre-node.js +11 -0
  454. package/source/libs/mathjax/es5/sre/sre_browser.js +999 -0
  455. package/source/libs/mathjax/es5/startup.js +1 -0
  456. package/source/libs/mathjax/es5/tex-chtml-full.js +34 -0
  457. package/source/libs/mathjax/es5/tex-chtml.js +1 -0
  458. package/source/libs/mathjax/es5/tex-mml-chtml.js +1 -0
  459. package/source/libs/mathjax/es5/tex-mml-svg.js +1 -0
  460. package/source/libs/mathjax/es5/tex-svg-full.js +34 -0
  461. package/source/libs/mathjax/es5/tex-svg.js +1 -0
  462. package/source/libs/mathjax/es5/ui/lazy.js +1 -0
  463. package/source/libs/mathjax/es5/ui/menu.js +1 -0
  464. package/source/libs/mathjax/es5/ui/safe.js +1 -0
  465. package/source/libs/meting/LICENSE +21 -0
  466. package/source/libs/meting/README.md +125 -0
  467. package/source/libs/meting/dist/Meting.min.js +1 -0
  468. package/source/libs/node-waves/LICENSE +21 -0
  469. package/source/libs/node-waves/README.md +23 -0
  470. package/source/libs/node-waves/dist/waves.min.css +7 -0
  471. package/source/libs/node-waves/dist/waves.min.js +2 -0
  472. package/source/libs/node-waves/dist/waves.min.js.map +1 -0
  473. package/source/libs/nprogress/License.md +19 -0
  474. package/source/libs/nprogress/Readme.md +197 -0
  475. package/source/libs/nprogress/nprogress.js +476 -0
  476. package/source/libs/pjax/LICENSE +20 -0
  477. package/source/libs/pjax/README.md +726 -0
  478. package/source/libs/pjax/pjax.min.js +1 -0
  479. package/source/libs/scrollreveal/README.md +126 -0
  480. package/source/libs/scrollreveal/dist/scrollreveal.min.js +12 -0
  481. package/source/libs/swiper/swiper-bundle.min.css +13 -0
  482. package/source/libs/swiper/swiper-bundle.min.js +14 -0
  483. package/source/libs/swiper/swiper-bundle.min.js.map +1 -0
  484. package/source/libs/vanilla-lazyload/LICENSE +21 -0
  485. package/source/libs/vanilla-lazyload/README.md +874 -0
  486. package/source/libs/vanilla-lazyload/dist/lazyload.min.js +1 -0
  487. package/source/media/cursor/circle.png +0 -0
  488. package/source/media/cursor/left_ptr.png +0 -0
  489. package/source/media/cursor/openhand.png +0 -0
  490. package/source/media/cursor/pointer.png +0 -0
  491. package/source/media/cursor/text.png +0 -0
  492. package/source/media/cursor/zoom-in.png +0 -0
  493. package/source/media/cursor/zoom-out.png +0 -0
  494. package/source/media/fonts/CascadiaCode/Cascadia.ttf +0 -0
  495. package/source/media/fonts/CascadiaCode/CascadiaMono.ttf +0 -0
  496. package/source/media/fonts/CascadiaCode/CascadiaMonoPL.ttf +0 -0
  497. package/source/media/fonts/CascadiaCode/CascadiaPL.ttf +0 -0
  498. package/source/media/fonts/CascadiaCode/README.md +9 -0
  499. package/source/media/fonts/Monaco/Monaco.ttf +0 -0
  500. package/source/media/fonts/UbuntuMono/UbuntuMono-Regular.ttf +0 -0
  501. package/source/media/fonts/VarelaRound/VarelaRound-Regular.ttf +0 -0
  502. package/source/media/org.volantis/README.md +19 -0
  503. package/source/media/org.volantis/blog/Logo-Cover@3x.png +0 -0
  504. package/source/media/org.volantis/blog/Logo-NavBar@3x.png +0 -0
  505. package/source/media/org.volantis/blog/favicon/android-chrome-192x192.png +0 -0
  506. package/source/media/org.volantis/blog/favicon/android-chrome-512x512.png +0 -0
  507. package/source/media/org.volantis/blog/favicon/apple-touch-icon.png +0 -0
  508. package/source/media/org.volantis/blog/favicon/browserconfig.xml +9 -0
  509. package/source/media/org.volantis/blog/favicon/favicon-16x16.png +0 -0
  510. package/source/media/org.volantis/blog/favicon/favicon-32x32.png +0 -0
  511. package/source/media/org.volantis/blog/favicon/favicon.ico +0 -0
  512. package/source/media/org.volantis/blog/favicon/mstile-150x150.png +0 -0
  513. package/source/media/org.volantis/blog/favicon/safari-pinned-tab.svg +26 -0
  514. package/source/media/org.volantis/blog/favicon/site.webmanifest +19 -0
  515. package/source/media/org.volantis/blog/logo/hexo.jpg +0 -0
  516. package/source/media/org.volantis/blog/qrcode/github@volantis.png +0 -0
  517. package/source/media/org.volantis/icon/1322024-social-media/001-google-drive.svg +1 -0
  518. package/source/media/org.volantis/icon/1322024-social-media/002-myspace.svg +1 -0
  519. package/source/media/org.volantis/icon/1322024-social-media/003-reddit.svg +1 -0
  520. package/source/media/org.volantis/icon/1322024-social-media/004-wattpad.svg +1 -0
  521. package/source/media/org.volantis/icon/1322024-social-media/005-dribbble.svg +1 -0
  522. package/source/media/org.volantis/icon/1322024-social-media/006-youtube.svg +1 -0
  523. package/source/media/org.volantis/icon/1322024-social-media/007-forrst.svg +1 -0
  524. package/source/media/org.volantis/icon/1322024-social-media/008-pinterest.svg +1 -0
  525. package/source/media/org.volantis/icon/1322024-social-media/009-flickr.svg +1 -0
  526. package/source/media/org.volantis/icon/1322024-social-media/010-facebook.svg +1 -0
  527. package/source/media/org.volantis/icon/1322024-social-media/011-team-viewer.svg +1 -0
  528. package/source/media/org.volantis/icon/1322024-social-media/012-blogger.svg +1 -0
  529. package/source/media/org.volantis/icon/1322024-social-media/013-grooveshark.svg +1 -0
  530. package/source/media/org.volantis/icon/1322024-social-media/014-whatsapp.svg +1 -0
  531. package/source/media/org.volantis/icon/1322024-social-media/015-instagram.svg +1 -0
  532. package/source/media/org.volantis/icon/1322024-social-media/016-skype.svg +1 -0
  533. package/source/media/org.volantis/icon/1322024-social-media/017-picasa.svg +1 -0
  534. package/source/media/org.volantis/icon/1322024-social-media/018-twitter.svg +1 -0
  535. package/source/media/org.volantis/icon/1322024-social-media/019-yahoo.svg +1 -0
  536. package/source/media/org.volantis/icon/1322024-social-media/020-rss.svg +1 -0
  537. package/source/media/org.volantis/icon/1322024-social-media/021-envato.svg +1 -0
  538. package/source/media/org.volantis/icon/1322024-social-media/022-soundcloud.svg +1 -0
  539. package/source/media/org.volantis/icon/1322024-social-media/023-kickstarter.svg +1 -0
  540. package/source/media/org.volantis/icon/1322024-social-media/024-snapchat.svg +1 -0
  541. package/source/media/org.volantis/icon/1322024-social-media/025-quora.svg +1 -0
  542. package/source/media/org.volantis/icon/1322024-social-media/026-yelp.svg +1 -0
  543. package/source/media/org.volantis/icon/1322024-social-media/027-slideshare.svg +1 -0
  544. package/source/media/org.volantis/icon/1322024-social-media/028-opera.svg +1 -0
  545. package/source/media/org.volantis/icon/1322024-social-media/029-github.svg +1 -0
  546. package/source/media/org.volantis/icon/1322024-social-media/030-last-fm.svg +1 -0
  547. package/source/media/org.volantis/icon/1322024-social-media/031-twitch.svg +1 -0
  548. package/source/media/org.volantis/icon/1322024-social-media/032-tumblr.svg +1 -0
  549. package/source/media/org.volantis/icon/1322024-social-media/033-spotify.svg +1 -0
  550. package/source/media/org.volantis/icon/1322024-social-media/034-foursquare.svg +1 -0
  551. package/source/media/org.volantis/icon/1322024-social-media/035-hangout.svg +1 -0
  552. package/source/media/org.volantis/icon/1322024-social-media/036-dropbox.svg +1 -0
  553. package/source/media/org.volantis/icon/1322024-social-media/037-vine.svg +1 -0
  554. package/source/media/org.volantis/icon/1322024-social-media/038-google-plus.svg +1 -0
  555. package/source/media/org.volantis/icon/1322024-social-media/039-path.svg +1 -0
  556. package/source/media/org.volantis/icon/1322024-social-media/040-vimeo.svg +1 -0
  557. package/source/media/org.volantis/icon/1322024-social-media/041-addthis.svg +1 -0
  558. package/source/media/org.volantis/icon/1322024-social-media/042-xing.svg +1 -0
  559. package/source/media/org.volantis/icon/1322024-social-media/043-stumbleupon.svg +1 -0
  560. package/source/media/org.volantis/icon/1322024-social-media/044-deviantart.svg +1 -0
  561. package/source/media/org.volantis/icon/1322024-social-media/045-telegram.svg +1 -0
  562. package/source/media/org.volantis/icon/1322024-social-media/046-vk.svg +1 -0
  563. package/source/media/org.volantis/icon/1322024-social-media/047-swarm.svg +1 -0
  564. package/source/media/org.volantis/icon/1322024-social-media/048-bebo.svg +1 -0
  565. package/source/media/org.volantis/icon/1322024-social-media/049-technorati.svg +1 -0
  566. package/source/media/org.volantis/icon/1322024-social-media/050-periscope.svg +1 -0
  567. package/source/media/org.volantis/icon/2439351-arrows/001-arrows.svg +1 -0
  568. package/source/media/org.volantis/icon/2439351-arrows/002-arrows.svg +1 -0
  569. package/source/media/org.volantis/icon/2439351-arrows/003-arrows.svg +1 -0
  570. package/source/media/org.volantis/icon/2439351-arrows/004-arrows.svg +1 -0
  571. package/source/media/org.volantis/icon/2439351-arrows/005-arrows.svg +1 -0
  572. package/source/media/org.volantis/icon/2439351-arrows/006-arrows.svg +1 -0
  573. package/source/media/org.volantis/icon/2439351-arrows/007-arrows.svg +1 -0
  574. package/source/media/org.volantis/icon/2439351-arrows/008-arrows.svg +1 -0
  575. package/source/media/org.volantis/icon/2439351-arrows/009-arrows.svg +1 -0
  576. package/source/media/org.volantis/icon/2439351-arrows/010-arrows.svg +1 -0
  577. package/source/media/org.volantis/icon/2439351-arrows/011-arrows.svg +1 -0
  578. package/source/media/org.volantis/icon/2439351-arrows/012-arrows.svg +1 -0
  579. package/source/media/org.volantis/icon/2439351-arrows/013-arrows.svg +1 -0
  580. package/source/media/org.volantis/icon/2439351-arrows/014-arrows.svg +1 -0
  581. package/source/media/org.volantis/icon/2439351-arrows/015-arrows.svg +1 -0
  582. package/source/media/org.volantis/icon/2439351-arrows/016-arrows.svg +1 -0
  583. package/source/media/org.volantis/icon/2439351-arrows/017-arrows.svg +1 -0
  584. package/source/media/org.volantis/icon/2439351-arrows/018-arrows.svg +1 -0
  585. package/source/media/org.volantis/icon/2439351-arrows/019-arrows.svg +1 -0
  586. package/source/media/org.volantis/icon/2439351-arrows/020-arrows.svg +1 -0
  587. package/source/media/org.volantis/icon/2439351-arrows/021-arrows.svg +1 -0
  588. package/source/media/org.volantis/icon/2439351-arrows/022-arrows.svg +1 -0
  589. package/source/media/org.volantis/icon/2439351-arrows/023-arrows.svg +1 -0
  590. package/source/media/org.volantis/icon/2439351-arrows/024-arrows.svg +1 -0
  591. package/source/media/org.volantis/icon/2439351-arrows/025-arrows.svg +1 -0
  592. package/source/media/org.volantis/icon/2439351-arrows/026-arrows.svg +1 -0
  593. package/source/media/org.volantis/icon/2439351-arrows/027-arrows.svg +1 -0
  594. package/source/media/org.volantis/icon/2439351-arrows/028-arrows.svg +1 -0
  595. package/source/media/org.volantis/icon/2439351-arrows/029-arrows.svg +1 -0
  596. package/source/media/org.volantis/icon/2439351-arrows/030-arrows.svg +1 -0
  597. package/source/media/org.volantis/icon/2439351-arrows/031-arrows.svg +1 -0
  598. package/source/media/org.volantis/icon/2439351-arrows/032-arrows.svg +1 -0
  599. package/source/media/org.volantis/icon/2439351-arrows/033-arrows.svg +1 -0
  600. package/source/media/org.volantis/icon/2439351-arrows/034-arrows.svg +1 -0
  601. package/source/media/org.volantis/icon/2439351-arrows/035-arrows.svg +1 -0
  602. package/source/media/org.volantis/icon/2439351-arrows/036-arrows.svg +1 -0
  603. package/source/media/org.volantis/icon/2439351-arrows/037-arrows.svg +1 -0
  604. package/source/media/org.volantis/icon/2439351-arrows/038-arrows.svg +1 -0
  605. package/source/media/org.volantis/icon/2439351-arrows/039-arrows.svg +1 -0
  606. package/source/media/org.volantis/icon/2439351-arrows/040-arrows.svg +1 -0
  607. package/source/media/org.volantis/icon/2439351-arrows/041-arrows.svg +1 -0
  608. package/source/media/org.volantis/icon/2439351-arrows/042-arrows.svg +1 -0
  609. package/source/media/org.volantis/icon/2439351-arrows/043-arrows.svg +1 -0
  610. package/source/media/org.volantis/icon/2439351-arrows/044-arrows.svg +1 -0
  611. package/source/media/org.volantis/icon/2439351-arrows/045-arrows.svg +1 -0
  612. package/source/media/org.volantis/icon/2439351-arrows/046-arrows.svg +1 -0
  613. package/source/media/org.volantis/icon/2439351-arrows/047-arrows.svg +1 -0
  614. package/source/media/org.volantis/icon/2439351-arrows/048-arrows.svg +1 -0
  615. package/source/media/org.volantis/icon/2439351-arrows/049-arrows.svg +1 -0
  616. package/source/media/org.volantis/icon/2439351-arrows/050-arrows.svg +1 -0
  617. package/source/media/org.volantis/icon/2820262-cloud-networking/001-download.svg +1 -0
  618. package/source/media/org.volantis/icon/2820262-cloud-networking/002-upload.svg +1 -0
  619. package/source/media/org.volantis/icon/2820262-cloud-networking/003-cloud.svg +1 -0
  620. package/source/media/org.volantis/icon/2820262-cloud-networking/004-storage.svg +1 -0
  621. package/source/media/org.volantis/icon/2820262-cloud-networking/005-downloading.svg +1 -0
  622. package/source/media/org.volantis/icon/2820262-cloud-networking/006-upload.svg +1 -0
  623. package/source/media/org.volantis/icon/2820262-cloud-networking/007-direct download.svg +1 -0
  624. package/source/media/org.volantis/icon/2820262-cloud-networking/008-button.svg +1 -0
  625. package/source/media/org.volantis/icon/2820262-cloud-networking/009-file.svg +1 -0
  626. package/source/media/org.volantis/icon/2820262-cloud-networking/010-save file.svg +1 -0
  627. package/source/media/org.volantis/icon/2820262-cloud-networking/011-save.svg +1 -0
  628. package/source/media/org.volantis/icon/2820262-cloud-networking/012-image.svg +1 -0
  629. package/source/media/org.volantis/icon/2820262-cloud-networking/013-bar.svg +1 -0
  630. package/source/media/org.volantis/icon/2820262-cloud-networking/014-loading.svg +1 -0
  631. package/source/media/org.volantis/icon/2820262-cloud-networking/015-button.svg +1 -0
  632. package/source/media/org.volantis/icon/2820262-cloud-networking/016-save button.svg +1 -0
  633. package/source/media/org.volantis/icon/2820262-cloud-networking/017-download.svg +1 -0
  634. package/source/media/org.volantis/icon/2820262-cloud-networking/018-upload.svg +1 -0
  635. package/source/media/org.volantis/icon/2820262-cloud-networking/019-download.svg +1 -0
  636. package/source/media/org.volantis/icon/2820262-cloud-networking/020-upload.svg +1 -0
  637. package/source/media/org.volantis/icon/2820262-cloud-networking/021-download.svg +1 -0
  638. package/source/media/org.volantis/icon/2820262-cloud-networking/022-export.svg +1 -0
  639. package/source/media/org.volantis/icon/2820262-cloud-networking/023-download.svg +1 -0
  640. package/source/media/org.volantis/icon/2820262-cloud-networking/024-uploading.svg +1 -0
  641. package/source/media/org.volantis/icon/2820262-cloud-networking/025-download.svg +1 -0
  642. package/source/media/org.volantis/icon/2820262-cloud-networking/026-upload.svg +1 -0
  643. package/source/media/org.volantis/icon/2820262-cloud-networking/027-upload.svg +1 -0
  644. package/source/media/org.volantis/icon/2820262-cloud-networking/028-upload button.svg +1 -0
  645. package/source/media/org.volantis/icon/2820262-cloud-networking/029-up arrow.svg +1 -0
  646. package/source/media/org.volantis/icon/2820262-cloud-networking/030-up arrow.svg +1 -0
  647. package/source/media/org.volantis/icon/2820262-cloud-networking/031-upload button.svg +1 -0
  648. package/source/media/org.volantis/icon/2820262-cloud-networking/032-upload file.svg +1 -0
  649. package/source/media/org.volantis/icon/725277-social-media/001-livejournal.svg +75 -0
  650. package/source/media/org.volantis/icon/725277-social-media/002-linkedin.svg +67 -0
  651. package/source/media/org.volantis/icon/725277-social-media/003-ello.svg +60 -0
  652. package/source/media/org.volantis/icon/725277-social-media/004-hi5.svg +85 -0
  653. package/source/media/org.volantis/icon/725277-social-media/005-skype.svg +90 -0
  654. package/source/media/org.volantis/icon/725277-social-media/006-quora.svg +77 -0
  655. package/source/media/org.volantis/icon/725277-social-media/007-daily-motion.svg +58 -0
  656. package/source/media/org.volantis/icon/725277-social-media/008-air-bnb.svg +77 -0
  657. package/source/media/org.volantis/icon/725277-social-media/009-buzznet.svg +55 -0
  658. package/source/media/org.volantis/icon/725277-social-media/010-meetup.svg +130 -0
  659. package/source/media/org.volantis/icon/725277-social-media/011-diaspora.svg +64 -0
  660. package/source/media/org.volantis/icon/725277-social-media/012-bebo.svg +59 -0
  661. package/source/media/org.volantis/icon/725277-social-media/013-filmaffinity.svg +89 -0
  662. package/source/media/org.volantis/icon/725277-social-media/014-tinder.svg +57 -0
  663. package/source/media/org.volantis/icon/725277-social-media/015-skyrock.svg +74 -0
  664. package/source/media/org.volantis/icon/725277-social-media/016-snapchat.svg +86 -0
  665. package/source/media/org.volantis/icon/725277-social-media/017-nextdoor.svg +54 -0
  666. package/source/media/org.volantis/icon/725277-social-media/018-reverbnation.svg +54 -0
  667. package/source/media/org.volantis/icon/725277-social-media/019-tripadvisor.svg +85 -0
  668. package/source/media/org.volantis/icon/725277-social-media/020-snapfish.svg +72 -0
  669. package/source/media/org.volantis/icon/725277-social-media/021-path.svg +73 -0
  670. package/source/media/org.volantis/icon/725277-social-media/022-etsy.svg +65 -0
  671. package/source/media/org.volantis/icon/725277-social-media/023-medium.svg +63 -0
  672. package/source/media/org.volantis/icon/725277-social-media/024-renren.svg +88 -0
  673. package/source/media/org.volantis/icon/725277-social-media/025-xing.svg +57 -0
  674. package/source/media/org.volantis/icon/725277-social-media/026-tout.svg +61 -0
  675. package/source/media/org.volantis/icon/725277-social-media/027-twitter.svg +75 -0
  676. package/source/media/org.volantis/icon/725277-social-media/028-howcast.svg +64 -0
  677. package/source/media/org.volantis/icon/725277-social-media/029-yelp.svg +88 -0
  678. package/source/media/org.volantis/icon/725277-social-media/030-classmates.svg +105 -0
  679. package/source/media/org.volantis/icon/725277-social-media/031-deviantart.svg +50 -0
  680. package/source/media/org.volantis/icon/725277-social-media/032-foursquare.svg +62 -0
  681. package/source/media/org.volantis/icon/725277-social-media/033-kickstarter.svg +56 -0
  682. package/source/media/org.volantis/icon/725277-social-media/034-dots.svg +76 -0
  683. package/source/media/org.volantis/icon/725277-social-media/035-tagged.svg +67 -0
  684. package/source/media/org.volantis/icon/725277-social-media/036-periscope.svg +65 -0
  685. package/source/media/org.volantis/icon/725277-social-media/037-stumbleupon.svg +66 -0
  686. package/source/media/org.volantis/icon/725277-social-media/038-youtube.svg +62 -0
  687. package/source/media/org.volantis/icon/725277-social-media/039-lastfm.svg +76 -0
  688. package/source/media/org.volantis/icon/725277-social-media/040-reddit.svg +77 -0
  689. package/source/media/org.volantis/icon/725277-social-media/041-weheartit.svg +66 -0
  690. package/source/media/org.volantis/icon/725277-social-media/042-pinterest.svg +81 -0
  691. package/source/media/org.volantis/icon/725277-social-media/043-viadeo.svg +74 -0
  692. package/source/media/org.volantis/icon/725277-social-media/044-taringa.svg +59 -0
  693. package/source/media/org.volantis/icon/725277-social-media/045-google-plus.svg +84 -0
  694. package/source/media/org.volantis/icon/725277-social-media/046-uber.svg +54 -0
  695. package/source/media/org.volantis/icon/725277-social-media/047-sina-weibo.svg +116 -0
  696. package/source/media/org.volantis/icon/725277-social-media/048-vimeo.svg +76 -0
  697. package/source/media/org.volantis/icon/725277-social-media/049-facebook.svg +55 -0
  698. package/source/media/org.volantis/icon/725277-social-media/050-vk.svg +77 -0
  699. package/source/media/org.volantis/icon/725277-social-media/051-badoo.svg +60 -0
  700. package/source/media/org.volantis/icon/725277-social-media/052-dribbble.svg +113 -0
  701. package/source/media/org.volantis/icon/725277-social-media/053-delicious.svg +45 -0
  702. package/source/media/org.volantis/icon/725277-social-media/054-soundcloud.svg +67 -0
  703. package/source/media/org.volantis/icon/725277-social-media/055-tumblr.svg +54 -0
  704. package/source/media/org.volantis/icon/725277-social-media/056-myspace.svg +69 -0
  705. package/source/media/org.volantis/icon/725277-social-media/057-spotify.svg +88 -0
  706. package/source/media/org.volantis/icon/725277-social-media/058-flickr.svg +54 -0
  707. package/source/media/org.volantis/icon/725277-social-media/059-behance.svg +83 -0
  708. package/source/media/org.volantis/icon/725277-social-media/060-instagram.svg +61 -0
  709. package/source/media/org.volantis/icon/ui-interface-21/plus.svg +61 -0
  710. package/source/media/org.volantis/logo/128/facebook.png +0 -0
  711. package/source/media/org.volantis/logo/128/github.png +0 -0
  712. package/source/media/org.volantis/logo/128/google_icon.png +0 -0
  713. package/source/media/org.volantis/logo/128/google_logo.png +0 -0
  714. package/source/media/org.volantis/logo/128/googleplus.png +0 -0
  715. package/source/media/org.volantis/logo/128/linkedin.png +0 -0
  716. package/source/media/org.volantis/logo/128/qq.png +0 -0
  717. package/source/media/org.volantis/logo/128/qrcode.png +0 -0
  718. package/source/media/org.volantis/logo/128/qzone.png +0 -0
  719. package/source/media/org.volantis/logo/128/telegram.png +0 -0
  720. package/source/media/org.volantis/logo/128/twitter.png +0 -0
  721. package/source/media/org.volantis/logo/128/wechat.png +0 -0
  722. package/source/media/org.volantis/logo/128/weibo.png +0 -0
  723. package/source/media/org.volantis/logo/128/youdao.png +0 -0
  724. package/source/media/org.volantis/logo/256/chrome.png +0 -0
  725. package/source/media/org.volantis/logo/256/facebook.png +0 -0
  726. package/source/media/org.volantis/logo/256/firefox.png +0 -0
  727. package/source/media/org.volantis/logo/256/github.png +0 -0
  728. package/source/media/org.volantis/logo/256/google_icon.png +0 -0
  729. package/source/media/org.volantis/logo/256/google_logo.png +0 -0
  730. package/source/media/org.volantis/logo/256/googleplus.png +0 -0
  731. package/source/media/org.volantis/logo/256/linkedin.png +0 -0
  732. package/source/media/org.volantis/logo/256/qq.png +0 -0
  733. package/source/media/org.volantis/logo/256/qrcode.png +0 -0
  734. package/source/media/org.volantis/logo/256/qzone.png +0 -0
  735. package/source/media/org.volantis/logo/256/safari.png +0 -0
  736. package/source/media/org.volantis/logo/256/telegram.png +0 -0
  737. package/source/media/org.volantis/logo/256/twitter.png +0 -0
  738. package/source/media/org.volantis/logo/256/wechat.png +0 -0
  739. package/source/media/org.volantis/logo/256/weibo.png +0 -0
  740. package/source/media/org.volantis/logo/256/youdao.png +0 -0
  741. package/source/media/org.volantis/logo/64/chrome.png +0 -0
  742. package/source/media/org.volantis/logo/64/facebook.png +0 -0
  743. package/source/media/org.volantis/logo/64/firefox.png +0 -0
  744. package/source/media/org.volantis/logo/64/github.png +0 -0
  745. package/source/media/org.volantis/logo/64/google_icon.png +0 -0
  746. package/source/media/org.volantis/logo/64/google_logo.png +0 -0
  747. package/source/media/org.volantis/logo/64/googleplus.png +0 -0
  748. package/source/media/org.volantis/logo/64/linkedin.png +0 -0
  749. package/source/media/org.volantis/logo/64/qq.png +0 -0
  750. package/source/media/org.volantis/logo/64/qrcode.png +0 -0
  751. package/source/media/org.volantis/logo/64/qzone.png +0 -0
  752. package/source/media/org.volantis/logo/64/safari.png +0 -0
  753. package/source/media/org.volantis/logo/64/telegram.png +0 -0
  754. package/source/media/org.volantis/logo/64/twitter.png +0 -0
  755. package/source/media/org.volantis/logo/64/wechat.png +0 -0
  756. package/source/media/org.volantis/logo/64/weibo.png +0 -0
  757. package/source/media/org.volantis/logo/64/youdao.png +0 -0
  758. package/source/media/org.volantis/placeholder/c617bfd2497fcea598e621413e315c368f8d8e.svg +23 -0
  759. package/source/media/org.volantis/placeholder/d570170f4f12e1ee829ca0e85a7dffeb77343a.svg +29 -0
  760. package/source/media/org.volantis/placeholder/f107c4d98691c0e2f4592acf09f83acb46fdf7.svg +20 -0
  761. package/source/media/placeholder/404/1c830bfcd517d.svg +70 -0
  762. package/source/media/placeholder/LICENSE +21 -0
  763. package/source/media/placeholder/README.md +8 -0
  764. package/source/media/placeholder/arrow/064b95430caf4.svg +11 -0
  765. package/source/media/placeholder/arrow/f049bbd4e88ec.svg +11 -0
  766. package/source/media/placeholder/avatar/rect/2922565.svg +1 -0
  767. package/source/media/placeholder/avatar/round/3442055.svg +1 -0
  768. package/source/media/placeholder/avatar/round/3442075.svg +1 -0
  769. package/source/media/placeholder/avatar/round/3442091.svg +1 -0
  770. package/source/media/placeholder/avatar/round/547413.svg +116 -0
  771. package/source/media/placeholder/avatar/round/547420.svg +108 -0
  772. package/source/media/placeholder/avatar/round/rainbow64@2x.webp +0 -0
  773. package/source/media/placeholder/avatar/round/rainbow64@3x.webp +0 -0
  774. package/source/media/placeholder/badge/3279dd441df8b.svg +1 -0
  775. package/source/media/placeholder/cover/76b86c0226ffd.svg +95 -0
  776. package/source/media/placeholder/frame/iphone11.svg +1 -0
  777. package/source/media/placeholder/image/2659360.svg +1 -0
  778. package/source/media/placeholder/link/8f277b4ee0ecd.svg +1 -0
  779. package/source/media/placeholder/social/08a41b181ce68.svg +27 -0
  780. package/source/media/placeholder/social/25678f144c438.svg +65 -0
  781. package/source/media/placeholder/social/3616429.svg +1 -0
  782. package/source/media/placeholder/social/3845874.svg +114 -0
  783. package/source/media/placeholder/social/80c07e4dbb303.svg +1 -0
  784. package/source/media/placeholder/social/8411ed322ced6.svg +21 -0
  785. package/source/media/placeholder/social/942ebbf1a4b91.svg +43 -0
  786. package/source/media/placeholder/social/a1b00e20f425d.svg +39 -0
  787. package/source/media/placeholder/social/b32ef3da1162a.svg +55 -0
  788. package/source/media/placeholder/social/cf1ae151f9e83.svg +110 -0
  789. package/source/media/twemoji/LICENSE +19 -0
  790. package/source/media/twemoji/README.md +256 -0
  791. package/source/media/twemoji/assets/svg/1f389.svg +1 -0
  792. package/source/media/twemoji/assets/svg/1f396.svg +1 -0
  793. package/source/media/twemoji/assets/svg/1f4cc.svg +1 -0
  794. package/source/media/twemoji/assets/svg/1f4f0.svg +1 -0
  795. package/source/media/twemoji/assets/svg/1f516.svg +1 -0
  796. package/source/media/twemoji/assets/svg/1f5c3.svg +1 -0
  797. package/source/media/twemoji/assets/svg/1f9ec.svg +1 -0
  798. package/.eslintrc.json +0 -111
  799. package/layout/_partial/rightmenu.ejs +0 -199
  800. package/layout/_partial/scripts/cover.ejs +0 -45
  801. package/layout/_partial/scripts/darkmode.ejs +0 -85
  802. package/layout/_partial/scripts/issues.ejs +0 -18
  803. package/layout/_partial/scripts/search.ejs +0 -62
  804. package/layout/_partial/snackbar.ejs +0 -22
  805. package/layout/_third-party/aplayer/script.ejs +0 -26
  806. package/layout/_third-party/clipboard/script.ejs +0 -54
  807. package/layout/_third-party/comments/disqus/layout.ejs +0 -5
  808. package/layout/_third-party/comments/disqus/script.ejs +0 -90
  809. package/layout/_third-party/comments/disqusjs/layout.ejs +0 -1
  810. package/layout/_third-party/comments/disqusjs/script.ejs +0 -34
  811. package/layout/_third-party/comments/gitalk/layout.ejs +0 -1
  812. package/layout/_third-party/comments/gitalk/script.ejs +0 -22
  813. package/layout/_third-party/comments/hashover/layout.ejs +0 -2
  814. package/layout/_third-party/comments/hashover/script.ejs +0 -1
  815. package/layout/_third-party/comments/isso/layout.ejs +0 -1
  816. package/layout/_third-party/comments/isso/script.ejs +0 -1
  817. package/layout/_third-party/comments/livere/layout.ejs +0 -3
  818. package/layout/_third-party/comments/livere/script.ejs +0 -10
  819. package/layout/_third-party/comments/minivaline/layout.ejs +0 -3
  820. package/layout/_third-party/comments/minivaline/script.ejs +0 -34
  821. package/layout/_third-party/comments/twikoo/layout.ejs +0 -3
  822. package/layout/_third-party/comments/twikoo/script.ejs +0 -32
  823. package/layout/_third-party/comments/valine/layout.ejs +0 -3
  824. package/layout/_third-party/comments/vssue/layout.ejs +0 -1
  825. package/layout/_third-party/comments/vssue/script.ejs +0 -21
  826. package/layout/_third-party/comments/waline/layout.ejs +0 -3
  827. package/layout/_third-party/comments/waline/script.ejs +0 -33
  828. package/layout/_third-party/fancybox/script.ejs +0 -61
  829. package/layout/_third-party/highlightjs/script.ejs +0 -11
  830. package/layout/_third-party/pjax/index.ejs +0 -78
  831. package/layout/_third-party/pjax/pdata.ejs +0 -53
  832. package/layout/_third-party/scrollreveal/script.ejs +0 -21
  833. package/layout/_third-party/tidio/script.ejs +0 -3
  834. package/layout/artitalk.ejs +0 -13
  835. package/layout/bb.ejs +0 -10
  836. package/package-lock.json +0 -916
  837. package/scripts/tags/issues.js +0 -41
  838. package/source/css/_highlight/index.styl +0 -316
  839. package/source/css/_layout/friends.styl +0 -79
  840. package/source/css/_plugins/clipboard.styl +0 -37
  841. package/source/css/_plugins/darkmode.styl +0 -9
  842. package/source/css/_plugins/twikoo.styl +0 -21
  843. package/source/css/_tag-plugins/simpleuser.styl +0 -21
  844. package/source/css/_tag-plugins/site-card.styl +0 -70
  845. package/source/js/aplayer.js +0 -167
  846. package/source/js/issues.js +0 -186
  847. package/source/js/search/algolia.js +0 -344
  848. package/source/js/search/azure.js +0 -355
  849. package/source/js/search/baidu.js +0 -340
  850. package/source/js/search/google.js +0 -339
package/source/js/app.js CHANGED
@@ -1,186 +1,247 @@
1
- // 函数防抖 (只执行最后一次点击)
2
- var Debounce = (fn, t) => {
3
- const delay = t || 25;
4
- let timer;
5
- return function() {
6
- const args = arguments;
7
- if (timer) {
8
- clearTimeout(timer);
9
- }
10
- timer = setTimeout(() => {
11
- timer = null;
12
- fn.apply(this, args);
13
- },
14
- delay);
15
- };
16
- };
17
-
18
- (function($) {
19
- // 将jQuery对象缓存起来 永远不要让相同的选择器在你的代码里出现多次
20
- // 在jQuery中最快的选择器是ID选择器,尽量使用ID代替Class 时间上大约相差100倍
21
- // 在class前使用tag(标签名)
22
- // 给选择器一个上下文
23
- volantis.$bodyAnchor = $('#safearea'); // 页面主体
24
- volantis.$topBtn = $('#s-top'); // 向上
25
- volantis.$wrapper = $('#wrapper'); // 整个导航栏
26
- volantis.$postsBtn = $('.menu .active'); // 一级导航上的当前激活的按钮
27
- volantis.$titleBtn = $('h1.title', '#header-meta'); // 文章内标题
28
- volantis.$coverAnchor = $('#l_cover .cover-wrapper');
29
- volantis.$switcher = $('#l_header .switcher .s-search'); // 搜索按钮 移动端
30
- volantis.$header = $('#l_header'); // 移动端导航栏
31
- volantis.$headerMenu = $('body .navigation'); // 导航列表
32
- volantis.$search = $('#l_header .m_search'); // 搜索框 桌面端
33
- volantis.$mPhoneList = $('#l_header .m-phone .list-v'); // 手机端 子菜单
34
- const isMobile = /mobile/i.test(window.navigator.userAgent);
1
+ document.addEventListener("DOMContentLoaded", function () {
2
+ volantis.requestAnimationFrame(() => {
3
+ VolantisApp.init();
4
+ VolantisApp.subscribe();
5
+ VolantisFancyBox.init();
6
+ highlightKeyWords.startFromURL();
7
+ locationHash();
35
8
 
36
- // 校正页面定位(被导航栏挡住的区域)
37
- var scrollCorrection = 80; // (header height = 64px) + (gap = 16px)
38
- if (volantis.$header[0]) {
39
- scrollCorrection = volantis.$header[0].clientHeight + 16;
9
+ volantis.pjax.push(() => {
10
+ VolantisApp.pjaxReload();
11
+ VolantisFancyBox.init();
12
+ sessionStorage.setItem("domTitle", document.title);
13
+ highlightKeyWords.startFromURL();
14
+ }, 'app.js');
15
+ volantis.pjax.send(() => {
16
+ volantis.dom.switcher.removeClass('active'); // 关闭移动端激活的搜索框
17
+ volantis.dom.header.removeClass('z_search-open'); // 关闭移动端激活的搜索框
18
+ volantis.dom.wrapper.removeClass('sub'); // 跳转页面时关闭二级导航
19
+ volantis.EventListener.remove() // 移除事件监听器 see: layout/_partial/scripts/global.ejs
20
+ }, 'app.js');
21
+ });
22
+ });
23
+
24
+ /* 锚点定位 */
25
+ const locationHash = () => {
26
+ if (window.location.hash) {
27
+ let locationID = decodeURI(window.location.hash.split('#')[1]).replace(/\ /g, '-');
28
+ let target = document.getElementById(locationID);
29
+ if (target) {
30
+ setTimeout(() => {
31
+ if (window.location.hash.startsWith('#fn')) { // hexo-reference https://github.com/volantis-x/hexo-theme-volantis/issues/647
32
+ volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' })
33
+ } else {
34
+ // 锚点中上半部有大片空白 高度大概是 volantis.dom.header.offsetHeight
35
+ volantis.scroll.to(target, { addTop: 5, behavior: 'instant' })
36
+ }
37
+ }, 1000)
38
+ }
40
39
  }
40
+ }
41
+ Object.freeze(locationHash);
42
+
43
+ /* Main */
44
+ const VolantisApp = (() => {
45
+ const fn = {},
46
+ COPYHTML = '<button class="btn-copy" data-clipboard-snippet=""><i class="fas fa-copy"></i><span>COPY</span></button>';
47
+ let scrollCorrection = 80;
48
+
49
+ fn.init = () => {
50
+ if (volantis.dom.header) {
51
+ scrollCorrection = volantis.dom.header.clientHeight + 16;
52
+ }
41
53
 
42
- // 尝试: 重设数据值
43
- function restData() {
44
- scrollCorrection = 80;
45
- if (volantis.$header[0]) {
46
- scrollCorrection = volantis.$header[0].clientHeight + 16;
54
+ window.onresize = () => {
55
+ if (document.documentElement.clientWidth < 500) {
56
+ volantis.isMobile = 1;
57
+ } else {
58
+ volantis.isMobile = 0;
59
+ }
60
+ if (volantis.isMobile != volantis.isMobileOld) {
61
+ fn.setGlobalHeaderMenuEvent();
62
+ fn.setHeader();
63
+ fn.setHeaderSearch();
64
+ }
47
65
  }
48
- volantis.$headerMenu = $('body .navigation');
66
+ volantis.scroll.push(fn.scrollEventCallBack, "scrollEventCallBack")
49
67
  }
50
68
 
51
- // 校正页面定位(被导航栏挡住的区域)
52
- function scrolltoElement(elem, correction = scrollCorrection) {
53
- const $elem = elem.href ? $(decodeURI(elem.getAttribute('href'))) : $(elem);
54
- window.scrollTo({
55
- top : $elem.offset().top - correction,
56
- behavior: 'smooth'
69
+ fn.event = () => {
70
+ volantis.dom.$(document.getElementById("scroll-down")).on('click', function () {
71
+ fn.scrolltoElement(volantis.dom.bodyAnchor);
57
72
  });
58
- }
59
73
 
60
- // 设置滚动锚点
61
- function setScrollAnchor() {
62
- if (volantis.$postsBtn.length && volantis.$bodyAnchor) {
63
- volantis.$postsBtn.click(e => {
64
- e.preventDefault();
65
- e.stopPropagation();
66
- if (volantis.$postsBtn.attr('href') != '/') // TODO: fix it
67
- { scrolltoElement(volantis.$bodyAnchor); }
68
- e.stopImmediatePropagation();
69
- volantis.$postsBtn.unbind('click');
70
- });
74
+ // 站点信息 最后活动日期
75
+ if (volantis.THEMECONFIG.sidebar.for_page.includes('webinfo') || volantis.THEMECONFIG.sidebar.for_post.includes('webinfo')) {
76
+ const lastupd = volantis.THEMECONFIG.sidebar.widget_library.webinfo.type.lastupd;
77
+ if (!!document.getElementById('last-update-show') && lastupd.enable && lastupd.friendlyShow) {
78
+ document.getElementById('last-update-show').innerHTML = fn.utilTimeAgo(volantis.LASTUPDATE);
79
+ }
71
80
  }
72
- if (volantis.$titleBtn.length && volantis.$bodyAnchor) {
73
- volantis.$titleBtn.click(e => {
74
- e.preventDefault();
75
- e.stopPropagation();
76
- scrolltoElement(volantis.$bodyAnchor);
77
- e.stopImmediatePropagation();
78
- volantis.$titleBtn.unbind('click');
79
- });
81
+
82
+ // 消息提示 复制时弹出
83
+ if (volantis.THEMECONFIG.plugins.message.enable
84
+ && volantis.THEMECONFIG.plugins.message.copyright.enable) {
85
+ document.body.oncopy = function () {
86
+ VolantisApp.message(volantis.THEMECONFIG.plugins.message.copyright.title,
87
+ volantis.THEMECONFIG.plugins.message.copyright.message, {
88
+ icon: volantis.THEMECONFIG.plugins.message.copyright.icon
89
+ });
90
+ };
80
91
  }
81
- if (volantis.$topBtn.length && volantis.$bodyAnchor) {
82
- volantis.$topBtn.click(e => {
83
- e.preventDefault();
84
- e.stopPropagation();
85
- scrolltoElement(volantis.$bodyAnchor);
86
- e.stopImmediatePropagation();
87
- });
92
+ }
93
+
94
+ fn.restData = () => {
95
+ scrollCorrection = volantis.dom.header ? volantis.dom.header.clientHeight + 16 : 80;
96
+ }
97
+
98
+ fn.setIsMobile = () => {
99
+ if (document.documentElement.clientWidth < 500) {
100
+ volantis.isMobile = 1;
101
+ volantis.isMobileOld = 1;
102
+ } else {
103
+ volantis.isMobile = 0;
104
+ volantis.isMobileOld = 0;
88
105
  }
106
+ }
107
+
108
+ // 校正页面定位(被导航栏挡住的区域)
109
+ fn.scrolltoElement = (elem, correction = scrollCorrection) => {
110
+ volantis.scroll.to(elem, {
111
+ top: elem.offsetTop - correction
112
+ })
113
+ }
114
+
115
+ // 滚动事件回调们
116
+ fn.scrollEventCallBack = () => {
117
+ // 【移动端 PC】//////////////////////////////////////////////////////////////////////
118
+
119
+ // 显示/隐藏 Header导航 topBtn 【移动端 PC】
120
+ const showHeaderPoint = volantis.dom.bodyAnchor.offsetTop - scrollCorrection;
121
+ const scrollTop = volantis.scroll.getScrollTop(); // 滚动条距离顶部的距离
89
122
 
90
- //==========================================
91
- var showHeaderPoint = volantis.$bodyAnchor.offset().top - scrollCorrection;
92
- var pos = document.body.scrollTop;
93
- $(document, window).scroll(Debounce(() => {
94
- const scrollTop = $(window).scrollTop(); // 滚动条距离顶部的距离
95
- const del = scrollTop - pos;
96
- pos = scrollTop;
97
- if (scrollTop > volantis.$bodyAnchor.offset().top) {
98
- volantis.$topBtn.addClass('show');
99
- if (del > 0) {
100
- volantis.$topBtn.removeClass('hl');
123
+ // topBtn
124
+ if (volantis.dom.topBtn) {
125
+ if (scrollTop > volantis.dom.bodyAnchor.offsetTop) {
126
+ volantis.dom.topBtn.addClass('show');
127
+ // 向上滚动高亮 topBtn
128
+ if (volantis.scroll.del > 0) {
129
+ volantis.dom.topBtn.removeClass('hl');
101
130
  } else {
102
- volantis.$topBtn.addClass('hl');
131
+ volantis.dom.topBtn.addClass('hl');
103
132
  }
104
133
  } else {
105
- volantis.$topBtn.removeClass('show').removeClass('hl');
134
+ volantis.dom.topBtn.removeClass('show').removeClass('hl');
106
135
  }
136
+ }
137
+
138
+ // Header导航
139
+ if (volantis.dom.header) {
107
140
  if (scrollTop - showHeaderPoint > -1) {
108
- volantis.$header.addClass('show');
141
+ volantis.dom.header.addClass('show');
109
142
  } else {
110
- volantis.$header.removeClass('show');
143
+ volantis.dom.header.removeClass('show');
111
144
  }
112
- }));
113
- //==========================================
114
- }
145
+ }
115
146
 
116
- // 设置导航栏
117
- function setHeader() {
118
- if (pdata.ispage) {
119
- window.subData = {
120
- title: pdata.postTitle,
121
- tools: true
122
- };
147
+ // 决定一二级导航栏的切换 【向上滚动切换为一级导航栏;向下滚动切换为二级导航栏】 【移动端 PC】
148
+ if (pdata.ispage && volantis.dom.wrapper) {
149
+ if (volantis.scroll.del > 0 && scrollTop > 100) { // 向下滚动
150
+ volantis.dom.wrapper.addClass('sub'); // <---- 二级导航显示
151
+ } else if (volantis.scroll.del < 0) { // 向上滚动
152
+ volantis.dom.wrapper.removeClass('sub'); // <---- 取消二级导航显示 一级导航显示
153
+ }
123
154
  }
124
- if (!window.subData) return;
125
- volantis.$comment = $('#s-comment'); // 评论按钮 桌面端 移动端
126
- volantis.$toc = $('#s-toc'); // 目录按钮 仅移动端
127
- volantis.$commentTarget = $('#l_body article#comments'); // 评论区域
128
- volantis.$wrapper.find('.nav-sub .title').text(window.subData.title); // 二级导航文章标题
129
- // 决定一二级导航栏的切换
130
- let pos = document.body.scrollTop;
131
- $(document, window).scroll(Debounce(() => {
132
- const scrollTop = $(window).scrollTop();
133
- const del = scrollTop - pos;
134
- if (del >= 50 && scrollTop > 100) {
135
- pos = scrollTop;
136
- volantis.$wrapper.addClass('sub');
137
- } else if (del <= -50) {
138
- pos = scrollTop;
139
- volantis.$wrapper.removeClass('sub'); // <---- 取消二级导航显示
155
+
156
+ // 【移动端】//////////////////////////////////////////////////////////////////////
157
+ if (volantis.isMobile) {
158
+ // 【移动端】 页面滚动 隐藏 移动端toc目录按钮
159
+ if (pdata.ispage && volantis.dom.tocTarget && volantis.dom.toc) {
160
+ volantis.dom.tocTarget.removeClass('active');
161
+ volantis.dom.toc.removeClass('active');
162
+ }
163
+ // 【移动端】 滚动时隐藏子菜单
164
+ if (volantis.dom.mPhoneList) {
165
+ volantis.dom.mPhoneList.forEach(function (e) {
166
+ volantis.dom.$(e).hide();
167
+ })
140
168
  }
141
- }));
169
+ }
170
+ }
142
171
 
143
- // bind events to every btn
144
- if (volantis.$commentTarget.length) {
145
- volantis.$comment.click(e => { // 评论按钮点击后 跳转到评论区域
172
+ // 设置滚动锚点
173
+ fn.setScrollAnchor = () => {
174
+ // click topBtn 滚动至bodyAnchor 【移动端 PC】
175
+ if (volantis.dom.topBtn && volantis.dom.bodyAnchor) {
176
+ volantis.dom.topBtn.click(e => {
146
177
  e.preventDefault();
147
178
  e.stopPropagation();
148
- scrolltoElement(volantis.$commentTarget);
179
+ fn.scrolltoElement(volantis.dom.bodyAnchor);
149
180
  e.stopImmediatePropagation();
150
181
  });
151
- } else volantis.$comment.remove(); // 关闭了评论,则隐藏
152
- volantis.$tocTarget = $('#l_body .toc-wrapper'); // 侧边栏的目录列表 PC
153
- if (volantis.$tocTarget.length && volantis.$tocTarget.children().length) {
154
- volantis.$toc.click((e) => {
155
- e.stopPropagation();
156
- volantis.$tocTarget.toggleClass('active');
157
- volantis.$toc.toggleClass('active');
158
- });
159
- $(document).click(function(e) {
182
+ }
183
+
184
+ }
185
+
186
+ // 设置导航栏
187
+ fn.setHeader = () => {
188
+ // !!! 此处的Dom对象需要重载 !!!
189
+ if (!pdata.ispage) return;
190
+
191
+ // 填充二级导航文章标题 【移动端 PC】
192
+ volantis.dom.wrapper.find('.nav-sub .title').html(pdata.postTitle);
193
+
194
+ // ====== bind events to every btn =========
195
+ // 评论按钮 【移动端 PC】
196
+ volantis.dom.comment = volantis.dom.$(document.getElementById("s-comment")); // 评论按钮 桌面端 移动端
197
+ volantis.dom.commentTarget = volantis.dom.$(document.querySelector('#l_main article#comments')); // 评论区域
198
+ if (volantis.dom.commentTarget) {
199
+ volantis.dom.comment.click(e => { // 评论按钮点击后 跳转到评论区域
200
+ e.preventDefault();
160
201
  e.stopPropagation();
161
- volantis.$tocTarget.removeClass('active');
162
- volantis.$toc.removeClass('active');
202
+ fn.scrolltoElement(volantis.dom.commentTarget);
203
+ e.stopImmediatePropagation();
163
204
  });
164
- $(document, window).scroll(Debounce(() => {
165
- volantis.$tocTarget.removeClass('active');
166
- volantis.$toc.removeClass('active');
167
- },
168
- 100));
169
- } else volantis.$toc.remove();
205
+ } else volantis.dom.comment.style.display = 'none'; // 关闭了评论,则隐藏评论按钮
206
+
207
+ // 移动端toc目录按钮 【移动端】
208
+ if (volantis.isMobile) {
209
+ volantis.dom.toc = volantis.dom.$(document.getElementById("s-toc")); // 目录按钮 仅移动端
210
+ volantis.dom.tocTarget = volantis.dom.$(document.querySelector('#l_side .toc-wrapper')); // 侧边栏的目录列表
211
+ if (volantis.dom.tocTarget) {
212
+ // 点击移动端目录按钮 激活目录按钮 显示侧边栏的目录列表
213
+ volantis.dom.toc.click((e) => {
214
+ e.stopPropagation();
215
+ volantis.dom.tocTarget.toggleClass('active');
216
+ volantis.dom.toc.toggleClass('active');
217
+ });
218
+ // 点击空白 隐藏
219
+ volantis.dom.$(document).click(function (e) {
220
+ e.stopPropagation();
221
+ if (volantis.dom.tocTarget) {
222
+ volantis.dom.tocTarget.removeClass('active');
223
+ }
224
+ volantis.dom.toc.removeClass('active');
225
+ });
226
+ } else volantis.dom.toc.style.display = 'none'; // 隐藏toc目录按钮
227
+ }
170
228
  }
171
229
 
172
- // 设置导航栏菜单选中状态
173
- function setHeaderMenuSelection() {
230
+ // 设置导航栏菜单选中状态 【移动端 PC】
231
+ fn.setHeaderMenuSelection = () => {
232
+ // !!! 此处的Dom对象需要重载 !!!
233
+ volantis.dom.headerMenu = volantis.dom.$(document.querySelectorAll('#l_header .navigation,#l_cover .navigation,#l_side .navigation')); // 导航列表
234
+
174
235
  // 先把已经激活的取消激活
175
- volantis.$headerMenu.find('li a.active').removeClass('active');
176
- volantis.$headerMenu.find('div a.active').removeClass('active');
177
- function setUnderline($item) {
178
- if ($item && $item.length) {
179
- $item.addClass('active').siblings().removeClass('active');
180
- }
181
- }
182
- //set current active nav
183
- var $active_link = null;
236
+ volantis.dom.headerMenu.forEach(element => {
237
+ let li = volantis.dom.$(element).find('li a.active')
238
+ if (li)
239
+ li.removeClass('active')
240
+ let div = volantis.dom.$(element).find('div a.active')
241
+ if (div)
242
+ div.removeClass('active')
243
+ });
244
+
184
245
  // replace '%' '/' '.'
185
246
  var idname = location.pathname.replace(/\/|%|\./g, '');
186
247
  if (idname.length == 0) {
@@ -198,158 +259,833 @@ var Debounce = (fn, t) => {
198
259
  }
199
260
  // 转义字符如 [, ], ~, #, @
200
261
  idname = idname.replace(/(\[|\]|~|#|@)/g, '\\$1');
201
- if (idname && volantis.$headerMenu) {
202
- $active_link = $('#' + idname, volantis.$headerMenu);
203
- setUnderline($active_link);
262
+ if (idname && volantis.dom.headerMenu) {
263
+ volantis.dom.headerMenu.forEach(element => {
264
+ // idname 不能为数字开头, 加一个 action- 前缀
265
+ let id = element.querySelector("[active-action=action-" + idname + "]")
266
+ if (id) {
267
+ volantis.dom.$(id).addClass('active')
268
+ }
269
+ });
204
270
  }
205
271
  }
206
272
 
207
273
  // 设置全局事件
208
- function setGlobalHeaderMenuEvent() {
209
- if (isMobile) {
210
- // 手机端 点击展开子菜单
211
- $('#l_header .m-phone li').click(function(e) {
212
- e.stopPropagation();
213
- $($(e.currentTarget).children('ul')).show();
214
- });
215
- } else {
216
- // PC端 hover时展开子菜单,点击时隐藏子菜单
217
- $('#wrapper .m-pc li > a[href]').parent().click(function(e) {
218
- e.stopPropagation();
219
- if (e.target.origin == e.target.baseURI) {
220
- $('#wrapper .m-pc .list-v').hide();
274
+ fn.setGlobalHeaderMenuEvent = () => {
275
+ if (volantis.isMobile) {
276
+ // 【移动端】 关闭已经展开的子菜单 点击展开子菜单
277
+ document.querySelectorAll('#l_header .m-phone li').forEach(function (e) {
278
+ if (e.querySelector(".list-v")) {
279
+ // 点击菜单
280
+ volantis.dom.$(e).click(function (e) {
281
+ e.stopPropagation();
282
+ // 关闭已经展开的子菜单
283
+ e.currentTarget.parentElement.childNodes.forEach(function (e) {
284
+ if (Object.prototype.toString.call(e) == '[object HTMLLIElement]') {
285
+ e.childNodes.forEach(function (e) {
286
+ if (Object.prototype.toString.call(e) == '[object HTMLUListElement]') {
287
+ volantis.dom.$(e).hide()
288
+ }
289
+ })
290
+ }
291
+ })
292
+ // 点击展开子菜单
293
+ let array = e.currentTarget.children
294
+ for (let index = 0; index < array.length; index++) {
295
+ const element = array[index];
296
+ if (volantis.dom.$(element).title === 'menu') { // 移动端菜单栏异常
297
+ volantis.dom.$(element).display = "flex" // https://github.com/volantis-x/hexo-theme-volantis/issues/706
298
+ } else {
299
+ volantis.dom.$(element).show()
300
+ }
301
+ }
302
+ }, 0);
221
303
  }
222
- });
304
+ })
305
+ } else {
306
+ // 【PC端】 hover时展开子菜单,点击时[target.baseURI==origin时]隐藏子菜单? 现有逻辑大部分情况不隐藏子菜单
307
+ document.querySelectorAll('#wrapper .m-pc li > a[href]').forEach(function (e) {
308
+ volantis.dom.$(e.parentElement).click(function (e) {
309
+ e.stopPropagation();
310
+ if (e.target.origin == e.target.baseURI) {
311
+ document.querySelectorAll('#wrapper .m-pc .list-v').forEach(function (e) {
312
+ volantis.dom.$(e).hide(); // 大概率不会执行
313
+ })
314
+ }
315
+ }, 0);
316
+ })
223
317
  }
224
- setPageHeaderMenuEvent();
318
+ fn.setPageHeaderMenuEvent();
225
319
  }
226
320
 
227
- function setPageHeaderMenuEvent() {
228
- if (!isMobile) return;
229
- // 手机端 点击空白处隐藏子菜单
230
- $(document).click(function(e) {
231
- volantis.$mPhoneList.hide();
232
- });
233
- // 手机端 滚动时隐藏子菜单
234
- $(window).scroll(Debounce(() => {
235
- volantis.$mPhoneList.hide();
236
- }));
237
- }
238
- // 设置导航栏搜索框 fix √
239
- function setHeaderSearch() {
240
- if (volantis.$switcher.length === 0) return;
241
- volantis.$switcher.click(function(e) {
242
- e.stopPropagation();
243
- volantis.$header.toggleClass('z_search-open'); // 激活移动端搜索框
244
- volantis.$switcher.toggleClass('active'); // 搜索按钮
245
- volantis.$search.find('input').focus();
246
- });
247
- $(document).click(function(e) {
248
- volantis.$header.removeClass('z_search-open');
249
- volantis.$switcher.removeClass('active');
321
+ // 【移动端】隐藏子菜单
322
+ fn.setPageHeaderMenuEvent = () => {
323
+ if (!volantis.isMobile) return
324
+ // 【移动端】 点击空白处隐藏子菜单
325
+ volantis.dom.$(document).click(function (e) {
326
+ volantis.dom.mPhoneList.forEach(function (e) {
327
+ volantis.dom.$(e).hide();
328
+ })
250
329
  });
330
+ }
251
331
 
252
- volantis.$search.click(function(e) {
332
+ // 设置导航栏搜索框 【移动端】
333
+ fn.setHeaderSearch = () => {
334
+ if (!volantis.isMobile) return;
335
+ if (!volantis.dom.switcher) return;
336
+ // 点击移动端搜索按钮
337
+ volantis.dom.switcher.click(function (e) {
253
338
  e.stopPropagation();
254
- });
255
- volantis.$header.ready(function() {
256
- volantis.$header.bind('keydown',
257
- function(event) {
258
- if (event.keyCode == 9) {
259
- return false;
260
- }
261
- var isie = !!document.all;
262
- var key,ev;
263
- if (isie) { //IE浏览器
264
- key = window.event.keyCode;
265
- ev = window.event;
266
- } else { //火狐浏览器
267
- key = event.which;
268
- ev = event;
269
- }
270
- if (key == 9) { //IE浏览器
271
- if (isie) {
272
- ev.keyCode = 0;
273
- ev.returnValue = false;
274
- } else { //火狐浏览器
275
- ev.which = 0;
276
- ev.preventDefault();
277
- }
278
- }
339
+ volantis.dom.header.toggleClass('z_search-open'); // 激活移动端搜索框
340
+ volantis.dom.switcher.toggleClass('active'); // 移动端搜索按钮
341
+ }, false); // false : pjax 不移除监听
342
+ // 点击空白取消激活
343
+ volantis.dom.$(document).click(function (e) {
344
+ volantis.dom.header.removeClass('z_search-open');
345
+ volantis.dom.switcher.removeClass('active');
346
+ }, false); // false : pjax 不移除监听
347
+ // 移动端点击搜索框 停止事件传播
348
+ volantis.dom.search.click(function (e) {
349
+ e.stopPropagation();
350
+ }, false); // false : pjax 不移除监听
351
+ }
279
352
 
353
+ // 设置 tabs 标签 【移动端 PC】
354
+ fn.setTabs = () => {
355
+ let tabs = document.querySelectorAll('#l_main .tabs .nav-tabs')
356
+ if (!tabs) return
357
+ tabs.forEach(function (e) {
358
+ e.querySelectorAll('a').forEach(function (e) {
359
+ volantis.dom.$(e).on('click', (e) => {
360
+ e.preventDefault();
361
+ e.stopPropagation();
362
+ const $tab = volantis.dom.$(e.target.parentElement.parentElement.parentElement);
363
+ $tab.find('.nav-tabs .active').removeClass('active');
364
+ volantis.dom.$(e.target.parentElement).addClass('active');
365
+ $tab.find('.tab-content .active').removeClass('active');
366
+ $tab.find(e.target.className).addClass('active');
367
+ return false;
280
368
  });
281
- });
369
+ })
370
+ })
282
371
  }
283
372
 
284
- // 设置 tabs 标签
285
- function setTabs() {
286
- $('.tabs .nav-tabs').on('click', 'a', (e) => {
287
- e.preventDefault();
288
- e.stopPropagation();
289
- const $tab = $(e.target.parentElement.parentElement.parentElement);
290
- $tab.find('.nav-tabs .active').removeClass('active');
291
- $tab.find(e.target.parentElement).addClass('active');
292
- $tab.find('.tab-content .active').removeClass('active');
293
- $tab.find($(e.target).attr('class')).addClass('active');
294
- return false;
295
- });
373
+ // hexo-reference 页脚跳转 https://github.com/volantis-x/hexo-theme-volantis/issues/647
374
+ fn.footnotes = () => {
375
+ let ref = document.querySelectorAll('#l_main .footnote-backref, #l_main .footnote-ref > a');
376
+ ref.forEach(function (e, i) {
377
+ ref[i].click = () => { }; // 强制清空原 click 事件
378
+ volantis.dom.$(e).on('click', (e) => {
379
+ e.stopPropagation();
380
+ e.preventDefault();
381
+ let targetID = decodeURI(e.target.hash.split('#')[1]).replace(/\ /g, '-');
382
+ let target = document.getElementById(targetID);
383
+ if (target) {
384
+ volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' })
385
+ }
386
+ });
387
+ })
296
388
  }
297
389
 
298
- $(function() {
299
- setHeader();
300
- setHeaderMenuSelection();
301
- setGlobalHeaderMenuEvent();
302
- setHeaderSearch();
303
- setScrollAnchor();
304
- setTabs();
390
+ // 工具类:代码块复制
391
+ fn.utilCopyCode = (Selector) => {
392
+ document.querySelectorAll(Selector).forEach(node => {
393
+ const test = node.insertAdjacentHTML("beforebegin", COPYHTML);
394
+ const _BtnCopy = node.previousSibling;
395
+ _BtnCopy.onclick = e => {
396
+ e.stopPropagation();
397
+ const _icon = _BtnCopy.querySelector('i');
398
+ const _span = _BtnCopy.querySelector('span');
399
+
400
+ node.focus();
401
+ const range = new Range();
402
+ range.selectNodeContents(node);
403
+ document.getSelection().removeAllRanges();
404
+ document.getSelection().addRange(range);
305
405
 
306
- // 全屏封面底部箭头
307
- $('#scroll-down').on('click', function() {
308
- scrolltoElement(volantis.$bodyAnchor);
406
+ const str = document.getSelection().toString();
407
+ fn.utilWriteClipText(str).then(() => {
408
+ fn.messageCopyright();
409
+ _BtnCopy.classList.add('copied');
410
+ _icon.classList.remove('fa-copy');
411
+ _icon.classList.add('fa-check-circle');
412
+ _span.innerText = "COPIED";
413
+ setTimeout(() => {
414
+ _icon.classList.remove('fa-check-circle');
415
+ _icon.classList.add('fa-copy');
416
+ _span.innerText = "COPY";
417
+ }, 2000)
418
+ }).catch(e => {
419
+ VolantisApp.message('系统提示', e, {
420
+ icon: 'fa fa-exclamation-circle red'
421
+ });
422
+ _BtnCopy.classList.add('copied-failed');
423
+ _icon.classList.remove('fa-copy');
424
+ _icon.classList.add('fa-exclamation-circle');
425
+ _span.innerText = "COPY FAILED";
426
+ setTimeout(() => {
427
+ _icon.classList.remove('fa-exclamation-circle');
428
+ _icon.classList.add('fa-copy');
429
+ _span.innerText = "COPY";
430
+ })
431
+ })
432
+ }
309
433
  });
434
+ }
310
435
 
436
+ // 工具类:复制字符串到剪切板
437
+ fn.utilWriteClipText = (str) => {
311
438
  try {
312
- // addEventListener是先绑定先执行,此处的绑定后执行
313
- document.addEventListener('pjax:complete',
314
- function() {
315
- $(function() {
316
- restData();
317
- setHeader();
318
- setHeaderMenuSelection();
319
- setPageHeaderMenuEvent();
320
- setScrollAnchor();
321
- setTabs();
322
- // 全屏封面底部箭头
323
- $('#scroll-down').on('click', function() {
324
- scrolltoElement(volantis.$bodyAnchor);
325
- });
326
- // 处理点击事件 setHeaderSearch 没有重载,需要重新绑定单个事件
327
- if (volantis.$switcher.length !== 0) {
328
- $(document).click(function(e) {
329
- volantis.$header.removeClass('z_search-open');
330
- volantis.$switcher.removeClass('active');
331
- });
332
- }
333
- });
439
+ return navigator.clipboard
440
+ .writeText(str)
441
+ .then(() => {
442
+ return Promise.resolve()
443
+ })
444
+ .catch(err => {
445
+ return Promise.reject(err || '复制文本失败!')
446
+ })
447
+ } catch (e) {
448
+ const input = document.createElement('input');
449
+ input.setAttribute('readonly', 'readonly');
450
+ document.body.appendChild(input);
451
+ input.setAttribute('value', str);
452
+ input.select();
453
+ try {
454
+ let result = document.execCommand('copy')
455
+ document.body.removeChild(input);
456
+ if (!result || result === 'unsuccessful') {
457
+ return Promise.reject('复制文本失败!')
458
+ } else {
459
+ return Promise.resolve()
460
+ }
461
+ } catch (e) {
462
+ document.body.removeChild(input);
463
+ return Promise.reject(
464
+ '当前浏览器不支持复制功能,请检查更新或更换其他浏览器操作!'
465
+ )
466
+ }
467
+ }
468
+ }
334
469
 
335
- }, {passive: true});
336
- } catch (error) {
337
- // console.log(error);
470
+ // 工具类:返回时间间隔
471
+ fn.utilTimeAgo = (dateTimeStamp) => {
472
+ const minute = 1e3 * 60, hour = minute * 60, day = hour * 24, week = day * 7, month = day * 30;
473
+ const now = new Date().getTime();
474
+ const diffValue = now - dateTimeStamp;
475
+ const minC = diffValue / minute,
476
+ hourC = diffValue / hour,
477
+ dayC = diffValue / day,
478
+ weekC = diffValue / week,
479
+ monthC = diffValue / month;
480
+ if (diffValue < 0) {
481
+ result = ""
482
+ } else if (monthC >= 1 && monthC < 7) {
483
+ result = " " + parseInt(monthC) + " 月前"
484
+ } else if (weekC >= 1 && weekC < 4) {
485
+ result = " " + parseInt(weekC) + " 周前"
486
+ } else if (dayC >= 1 && dayC < 7) {
487
+ result = " " + parseInt(dayC) + " 天前"
488
+ } else if (hourC >= 1 && hourC < 24) {
489
+ result = " " + parseInt(hourC) + " 小时前"
490
+ } else if (minC >= 1 && minC < 60) {
491
+ result = " " + parseInt(minC) + " 分钟前"
492
+ } else if (diffValue >= 0 && diffValue <= minute) {
493
+ result = "刚刚"
494
+ } else {
495
+ const datetime = new Date();
496
+ datetime.setTime(dateTimeStamp);
497
+ const Nyear = datetime.getFullYear();
498
+ const Nmonth = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
499
+ const Ndate = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
500
+ const Nhour = datetime.getHours() < 10 ? "0" + datetime.getHours() : datetime.getHours();
501
+ const Nminute = datetime.getMinutes() < 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
502
+ const Nsecond = datetime.getSeconds() < 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
503
+ result = Nyear + "-" + Nmonth + "-" + Ndate
338
504
  }
505
+ return result;
506
+ }
339
507
 
340
- });
508
+ // 消息提示:标准
509
+ fn.message = (title, message, option = {}, done = null) => {
510
+ if (typeof iziToast === "undefined") {
511
+ volantis.css(volantis.THEMECONFIG.cdn.map.css.message)
512
+ volantis.js(volantis.THEMECONFIG.cdn.map.js.message, () => {
513
+ tozashMessage(title, message, option, done);
514
+ });
515
+ } else {
516
+ tozashMessage(title, message, option, done);
517
+ }
518
+ function tozashMessage(title, message, option, done) {
519
+ const {
520
+ icon,
521
+ time,
522
+ position,
523
+ transitionIn,
524
+ transitionOut,
525
+ messageColor,
526
+ titleColor,
527
+ backgroundColor,
528
+ zindex,
529
+ displayMode
530
+ } = option;
531
+ iziToast.show({
532
+ layout: '2',
533
+ icon: 'Fontawesome',
534
+ closeOnEscape: 'true',
535
+ displayMode: displayMode || 'replace',
536
+ transitionIn: transitionIn || volantis.THEMECONFIG.plugins.message.transitionIn,
537
+ transitionOut: transitionOut || volantis.THEMECONFIG.plugins.message.transitionOut,
538
+ messageColor: messageColor || volantis.THEMECONFIG.plugins.message.messageColor,
539
+ titleColor: titleColor || volantis.THEMECONFIG.plugins.message.titleColor,
540
+ backgroundColor: backgroundColor || volantis.THEMECONFIG.plugins.message.backgroundColor,
541
+ zindex: zindex || volantis.THEMECONFIG.plugins.message.zindex,
542
+ icon: icon || volantis.THEMECONFIG.plugins.message.icon.default,
543
+ timeout: time || volantis.THEMECONFIG.plugins.message.time.default,
544
+ position: position || volantis.THEMECONFIG.plugins.message.position,
545
+ title: title,
546
+ message: message,
547
+ onClosed: () => {
548
+ if (done) done();
549
+ },
550
+ });
551
+ }
552
+ }
341
553
 
342
- /*锚点定位*/
343
- if (window.location.hash) {
344
- var checkExist = setInterval(function() {
345
- if ($('#' + decodeURI(window.location.hash.split('#')[1]).replace(/\ /g, '-')).length) {
346
- $('html, body').animate({
347
- scrollTop: $('#' + decodeURI(window.location.hash.split('#')[1]).replace(/\ /g, '-')).offset().top - 40
554
+ // 消息提示:询问
555
+ fn.question = (title, message, option = {}, success = null, cancel = null, done = null) => {
556
+ if (typeof iziToast === "undefined") {
557
+ volantis.css(volantis.THEMECONFIG.cdn.map.css.message)
558
+ volantis.js(volantis.THEMECONFIG.cdn.map.js.message, () => {
559
+ tozashQuestion(title, message, option, success, cancel, done);
560
+ });
561
+ } else {
562
+ tozashQuestion(title, message, option, success, cancel, done);
563
+ }
564
+
565
+ function tozashQuestion(title, message, option, success, cancel, done) {
566
+ const {
567
+ icon,
568
+ time,
569
+ position,
570
+ transitionIn,
571
+ transitionOut,
572
+ messageColor,
573
+ titleColor,
574
+ backgroundColor,
575
+ zindex
576
+ } = option;
577
+ iziToast.question({
578
+ id: 'question',
579
+ icon: 'Fontawesome',
580
+ close: false,
581
+ overlay: true,
582
+ displayMode: 'once',
583
+ position: 'center',
584
+ messageColor: messageColor || volantis.THEMECONFIG.plugins.message.messageColor,
585
+ titleColor: titleColor || volantis.THEMECONFIG.plugins.message.titleColor,
586
+ backgroundColor: backgroundColor || volantis.THEMECONFIG.plugins.message.backgroundColor,
587
+ zindex: zindex || volantis.THEMECONFIG.plugins.message.zindex,
588
+ icon: icon || volantis.THEMECONFIG.plugins.message.icon.quection,
589
+ timeout: time || volantis.THEMECONFIG.plugins.message.time.quection,
590
+ title: title,
591
+ message: message,
592
+ buttons: [
593
+ ['<button><b>是</b></button>', (instance, toast) => {
594
+ instance.hide({ transitionOut: transitionOut || 'fadeOut' }, toast, 'button');
595
+ if (success) success(instance, toast)
596
+ }],
597
+ ['<button><b>否</b></button>', (instance, toast) => {
598
+ instance.hide({ transitionOut: transitionOut || 'fadeOut' }, toast, 'button');
599
+ if (cancel) cancel(instance, toast)
600
+ }]
601
+ ],
602
+ onClosed: (instance, toast, closedBy) => {
603
+ if (done) done(instance, toast, closedBy);
604
+ }
605
+ });
606
+ }
607
+ }
608
+
609
+ // 消息提示:隐藏
610
+ fn.hideMessage = (done = null) => {
611
+ const toast = document.querySelector('.iziToast');
612
+ if (!toast) {
613
+ if (done) done()
614
+ return;
615
+ }
616
+
617
+ if (typeof iziToast === "undefined") {
618
+ volantis.css(volantis.THEMECONFIG.cdn.map.css.message)
619
+ volantis.js(volantis.THEMECONFIG.cdn.map.js.message, () => {
620
+ hideMessage(done);
621
+ });
622
+ } else {
623
+ hideMessage(done);
624
+ }
625
+
626
+ function hideMessage(done) {
627
+ iziToast.hide({}, toast);
628
+ if (done) done();
629
+ }
630
+ }
631
+
632
+ // 消息提示:复制
633
+ fn.messageCopyright = () => {
634
+ // 消息提示 复制时弹出
635
+ if (volantis.THEMECONFIG.plugins.message.enable
636
+ && volantis.THEMECONFIG.plugins.message.copyright.enable) {
637
+ VolantisApp.message(volantis.THEMECONFIG.plugins.message.copyright.title,
638
+ volantis.THEMECONFIG.plugins.message.copyright.message, {
639
+ icon: volantis.THEMECONFIG.plugins.message.copyright.icon
640
+ });
641
+ }
642
+ }
643
+
644
+ return {
645
+ init: () => {
646
+ fn.init();
647
+ fn.event();
648
+ },
649
+ subscribe: () => {
650
+ fn.setIsMobile();
651
+ fn.setHeader();
652
+ fn.setHeaderMenuSelection();
653
+ fn.setGlobalHeaderMenuEvent();
654
+ fn.setHeaderSearch();
655
+ fn.setScrollAnchor();
656
+ fn.setTabs();
657
+ fn.footnotes();
658
+ },
659
+ pjaxReload: () => {
660
+ fn.event();
661
+ fn.restData();
662
+ fn.setHeader();
663
+ fn.setHeaderMenuSelection();
664
+ fn.setPageHeaderMenuEvent();
665
+ fn.setScrollAnchor();
666
+ fn.setTabs();
667
+ fn.footnotes();
668
+
669
+ // 移除小尾巴的移除
670
+ document.querySelector("#l_header .nav-main").querySelectorAll('.list-v:not(.menu-phone)').forEach(function (e) {
671
+ e.removeAttribute("style")
672
+ })
673
+ document.querySelector("#l_header .menu-phone.list-v").removeAttribute("style")
674
+ },
675
+ utilCopyCode: fn.utilCopyCode,
676
+ utilWriteClipText: fn.utilWriteClipText,
677
+ utilTimeAgo: fn.utilTimeAgo,
678
+ message: fn.message,
679
+ question: fn.question,
680
+ hideMessage: fn.hideMessage,
681
+ messageCopyright: fn.messageCopyright
682
+ }
683
+ })()
684
+ Object.freeze(VolantisApp);
685
+
686
+ /* FancyBox */
687
+ const VolantisFancyBox = (() => {
688
+ const fn = {};
689
+
690
+ fn.loadFancyBox = (done) => {
691
+ volantis.css(volantis.THEMECONFIG.plugins.fancybox.css);
692
+ volantis.js(volantis.THEMECONFIG.plugins.fancybox.js).then(() => {
693
+ if (done) done();
694
+ })
695
+ }
696
+
697
+ /**
698
+ * 加载及处理
699
+ *
700
+ * @param {*} checkMain 是否只处理文章区域的文章
701
+ * @param {*} done FancyBox 加载完成后的动作,默认执行分组绑定
702
+ * @returns
703
+ */
704
+ fn.init = (checkMain = true, done = fn.groupBind) => {
705
+ if (!document.querySelector(".md .gallery img, .fancybox") && checkMain) return;
706
+ if (typeof Fancybox === "undefined") {
707
+ fn.loadFancyBox(done);
708
+ } else {
709
+ done();
710
+ }
711
+ }
712
+
713
+ /**
714
+ * 图片元素预处理
715
+ *
716
+ * @param {*} selectors 选择器
717
+ * @param {*} name 分组
718
+ */
719
+ fn.elementHandling = (selectors, name) => {
720
+ const nodeList = document.querySelectorAll(selectors);
721
+ nodeList.forEach($item => {
722
+ if ($item.hasAttribute('fancybox')) return;
723
+ $item.setAttribute('fancybox', '');
724
+ const $link = document.createElement('a');
725
+ $link.setAttribute('href', $item.src);
726
+ $link.setAttribute('data-caption', $item.alt);
727
+ $link.setAttribute('data-fancybox', name);
728
+ $link.classList.add('fancybox');
729
+ $link.append($item.cloneNode());
730
+ $item.replaceWith($link);
731
+ })
732
+ }
733
+
734
+ /**
735
+ * 原生绑定
736
+ *
737
+ * @param {*} selectors 选择器
738
+ */
739
+ fn.bind = (selectors) => {
740
+ fn.init(false, () => {
741
+ Fancybox.bind(selectors, {
742
+ groupAll: true,
743
+ Hash: false,
744
+ hideScrollbar: false,
745
+ Thumbs: {
746
+ autoStart: false,
348
747
  },
349
- 500);
350
- clearInterval(checkExist);
748
+ caption: function (fancybox, carousel, slide) {
749
+ return slide.$trigger.alt || null
750
+ }
751
+ });
752
+ });
753
+ }
754
+
755
+ /**
756
+ * 分组绑定
757
+ *
758
+ * @param {*} groupName 分组名称
759
+ */
760
+ fn.groupBind = (groupName = null) => {
761
+ const group = new Set();
762
+
763
+ document.querySelectorAll(".gallery").forEach(ele => {
764
+ if (ele.querySelector("img")) {
765
+ group.add(ele.getAttribute('data-group') || 'default');
766
+ }
767
+ })
768
+
769
+ if (!!groupName) group.add(groupName);
770
+
771
+ for (const iterator of group) {
772
+ Fancybox.unbind('[data-fancybox="' + iterator + '"]');
773
+ Fancybox.bind('[data-fancybox="' + iterator + '"]', {
774
+ Hash: false,
775
+ hideScrollbar: false,
776
+ Thumbs: {
777
+ autoStart: false,
778
+ }
779
+ });
780
+ }
781
+ }
782
+
783
+ return {
784
+ init: fn.init,
785
+ bind: fn.bind,
786
+ groupBind: (selectors, groupName = 'default') => {
787
+ try {
788
+ fn.elementHandling(selectors, groupName);
789
+ fn.init(false, () => {
790
+ fn.groupBind(groupName)
791
+ });
792
+ } catch (error) {
793
+ console.error(error)
794
+ }
795
+ }
796
+ }
797
+ })()
798
+ Object.freeze(VolantisFancyBox);
799
+
800
+ // highlightKeyWords 与 搜索功能搭配 https://github.com/next-theme/hexo-theme-next/blob/eb194a7258058302baf59f02d4b80b6655338b01/source/js/third-party/search/local-search.js
801
+ // Question: 锚点稳定性未知
802
+ // ToDo: 查找模式
803
+ // 0. (/////////要知道浏览器自带全页面查找功能 CTRL + F)
804
+ // 1. 右键开启查找模式 / 导航栏菜单开启?? / CTRL + F ???
805
+ // 2. 查找模式面板 (可拖动? or 固定?)
806
+ // 3. keyword mark id 从 0 开始编号 查找下一处 highlightKeyWords.scrollToNextHighlightKeywordMark() 查找上一处 scrollToPrevHighlightKeywordMark() 循环查找(取模%)
807
+ // 4. 可输入修改 查找关键词 keywords(type:list)
808
+ // 5. 区分大小写 caseSensitive (/ 全字匹配?? / 正则匹配??)
809
+ // 6. 在选定区域中查找 querySelector ??
810
+ // 7. 关闭查找模式
811
+ // 8. 搜索跳转 (URL 入口) 自动开启查找模式 调用 scrollToNextHighlightKeywordMark()
812
+ const highlightKeyWords = (() => {
813
+ let fn = {}
814
+ fn.markNum = 0
815
+ fn.markNextId = -1
816
+ fn.startFromURL = () => {
817
+ const params = decodeURI(new URL(location.href).searchParams.get('keyword'));
818
+ const keywords = params ? params.split(' ') : [];
819
+ const post = document.querySelector('#l_main');
820
+ if (keywords.length == 1 && keywords[0] == "null") {
821
+ return;
822
+ }
823
+ fn.start(keywords, post); // 渲染耗时较长
824
+ fn.scrollToFirstHighlightKeywordMark()
825
+ }
826
+ fn.scrollToFirstHighlightKeywordMark = () => {
827
+ let target = fn.scrollToNextHighlightKeywordMark("0");
828
+ if (!target) {
829
+ volantis.requestAnimationFrame(fn.scrollToFirstHighlightKeywordMark)
830
+ }
831
+ }
832
+ fn.scrollToNextHighlightKeywordMark = (id) => {
833
+ // Next Id
834
+ let input = id || (fn.markNextId + 1) % fn.markNum;
835
+ fn.markNextId = parseInt(input)
836
+ let target = document.getElementById("keyword-mark-" + fn.markNextId);
837
+ if (!target) {
838
+ fn.markNextId = (fn.markNextId + 1) % fn.markNum;
839
+ target = document.getElementById("keyword-mark-" + fn.markNextId);
840
+ }
841
+ if (target) {
842
+ volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' })
843
+ }
844
+ // Current target
845
+ return target
846
+ }
847
+ fn.scrollToPrevHighlightKeywordMark = (id) => {
848
+ // Prev Id
849
+ let input = id || (fn.markNextId - 1 + fn.markNum) % fn.markNum;
850
+ fn.markNextId = parseInt(input)
851
+ let target = document.getElementById("keyword-mark-" + fn.markNextId);
852
+ if (!target) {
853
+ fn.markNextId = (fn.markNextId - 1 + fn.markNum) % fn.markNum;
854
+ target = document.getElementById("keyword-mark-" + fn.markNextId);
855
+ }
856
+ if (target) {
857
+ volantis.scroll.to(target, { addTop: - volantis.dom.header.offsetHeight - 5, behavior: 'instant' })
858
+ }
859
+ // Current target
860
+ return target
861
+ }
862
+ fn.start = (keywords, querySelector) => {
863
+ fn.markNum = 0
864
+ if (!keywords.length || !querySelector || (keywords.length == 1 && keywords[0] == "null")) return;
865
+ console.log(keywords);
866
+ const walk = document.createTreeWalker(querySelector, NodeFilter.SHOW_TEXT, null);
867
+ const allNodes = [];
868
+ while (walk.nextNode()) {
869
+ if (!walk.currentNode.parentNode.matches('button, select, textarea')) allNodes.push(walk.currentNode);
870
+ }
871
+ allNodes.forEach(node => {
872
+ const [indexOfNode] = fn.getIndexByWord(keywords, node.nodeValue);
873
+ if (!indexOfNode.length) return;
874
+ const slice = fn.mergeIntoSlice(0, node.nodeValue.length, indexOfNode);
875
+ fn.highlightText(node, slice, 'keyword');
876
+ fn.highlightStyle()
877
+ });
878
+ }
879
+ fn.getIndexByWord = (words, text, caseSensitive = false) => {
880
+ const index = [];
881
+ const included = new Set();
882
+ words.forEach(word => {
883
+ const div = document.createElement('div');
884
+ div.innerText = word;
885
+ word = div.innerHTML;
886
+
887
+ const wordLen = word.length;
888
+ if (wordLen === 0) return;
889
+ let startPosition = 0;
890
+ let position = -1;
891
+ if (!caseSensitive) {
892
+ text = text.toLowerCase();
893
+ word = word.toLowerCase();
894
+ }
895
+ while ((position = text.indexOf(word, startPosition)) > -1) {
896
+ index.push({ position, word });
897
+ included.add(word);
898
+ startPosition = position + wordLen;
351
899
  }
900
+ });
901
+ index.sort((left, right) => {
902
+ if (left.position !== right.position) {
903
+ return left.position - right.position;
904
+ }
905
+ return right.word.length - left.word.length;
906
+ });
907
+ return [index, included];
908
+ };
909
+ fn.mergeIntoSlice = (start, end, index) => {
910
+ let item = index[0];
911
+ let { position, word } = item;
912
+ const hits = [];
913
+ const count = new Set();
914
+ while (position + word.length <= end && index.length !== 0) {
915
+ count.add(word);
916
+ hits.push({
917
+ position,
918
+ length: word.length
919
+ });
920
+ const wordEnd = position + word.length;
921
+
922
+ index.shift();
923
+ while (index.length !== 0) {
924
+ item = index[0];
925
+ position = item.position;
926
+ word = item.word;
927
+ if (wordEnd > position) {
928
+ index.shift();
929
+ } else {
930
+ break;
931
+ }
932
+ }
933
+ }
934
+ return {
935
+ hits,
936
+ start,
937
+ end,
938
+ count: count.size
939
+ };
940
+ };
941
+ fn.highlightText = (node, slice, className) => {
942
+ const val = node.nodeValue;
943
+ let index = slice.start;
944
+ const children = [];
945
+ for (const { position, length } of slice.hits) {
946
+ const text = document.createTextNode(val.substring(index, position));
947
+ index = position + length;
948
+ let mark = document.createElement('mark');
949
+ mark.className = className;
950
+ mark = fn.highlightStyle(mark)
951
+ mark.appendChild(document.createTextNode(val.substr(position, length)));
952
+ children.push(text, mark);
953
+ }
954
+ node.nodeValue = val.substring(index, slice.end);
955
+ children.forEach(element => {
956
+ node.parentNode.insertBefore(element, node);
957
+ });
958
+ }
959
+ fn.highlightStyle = (mark) => {
960
+ if (!mark) return;
961
+ mark.id = "keyword-mark-" + fn.markNum;
962
+ fn.markNum++;
963
+ mark.style.background = "transparent";
964
+ mark.style["border-bottom"] = "1px dashed #ff2a2a";
965
+ mark.style["color"] = "#ff2a2a";
966
+ mark.style["font-weight"] = "bold";
967
+ return mark
968
+ }
969
+ fn.cleanHighlightStyle = () => {
970
+ document.querySelectorAll(".keyword").forEach(mark => {
971
+ mark.style.background = "transparent";
972
+ mark.style["border-bottom"] = null;
973
+ mark.style["color"] = null;
974
+ mark.style["font-weight"] = null;
975
+ })
976
+ }
977
+ return {
978
+ start: (keywords, querySelector) => {
979
+ fn.start(keywords, querySelector)
980
+ },
981
+ startFromURL: () => {
982
+ fn.startFromURL()
983
+ },
984
+ scrollToNextHighlightKeywordMark: (id) => {
985
+ fn.scrollToNextHighlightKeywordMark(id)
986
+ },
987
+ scrollToPrevHighlightKeywordMark: (id) => {
988
+ fn.scrollToPrevHighlightKeywordMark(id)
352
989
  },
353
- 100);
990
+ cleanHighlightStyle: () => {
991
+ fn.cleanHighlightStyle()
992
+ },
993
+ }
994
+ })()
995
+ Object.freeze(highlightKeyWords);
996
+
997
+ /* DOM 控制 */
998
+ const DOMController = {
999
+ /**
1000
+ * 控制元素显隐
1001
+ */
1002
+ visible: (ele, type = true) => {
1003
+ if (ele) ele.style.display = type === true ? 'block' : 'none';
1004
+ },
1005
+
1006
+ /**
1007
+ * 移除元素
1008
+ */
1009
+ remove: (param) => {
1010
+ const node = document.querySelectorAll(param);
1011
+ node.forEach(ele => {
1012
+ ele.remove();
1013
+ })
1014
+ },
1015
+
1016
+ /**
1017
+ * 设置属性
1018
+ */
1019
+ setAttribute: (param, attrName, attrValue) => {
1020
+ const node = document.querySelectorAll(param);
1021
+ node.forEach(ele => {
1022
+ ele.setAttribute(attrName, attrValue)
1023
+ })
1024
+ },
1025
+
1026
+ /**
1027
+ * 设置样式
1028
+ */
1029
+ setStyle: (param, styleName, styleValue) => {
1030
+ const node = document.querySelectorAll(param);
1031
+ node.forEach(ele => {
1032
+ ele.style[styleName] = styleValue;
1033
+ })
1034
+ },
1035
+
1036
+ fadeIn: (e) => {
1037
+ if (!e) return;
1038
+ e.style.visibility = "visible";
1039
+ e.style.opacity = 1;
1040
+ e.style.display = "block";
1041
+ e.style.transition = "all 0.5s linear";
1042
+ return e
1043
+ },
1044
+
1045
+ fadeOut: (e) => {
1046
+ if (!e) return;
1047
+ e.style.visibility = "hidden";
1048
+ e.style.opacity = 0;
1049
+ e.style.display = "none";
1050
+ e.style.transition = "all 0.5s linear";
1051
+ return e
1052
+ },
1053
+
1054
+ fadeToggle: (e) => {
1055
+ if (!e) return;
1056
+ if (e.style.visibility == "hidden") {
1057
+ e = DOMController.fadeIn(e)
1058
+ } else {
1059
+ e = DOMController.fadeOut(e)
1060
+ }
1061
+ return e
1062
+ },
1063
+
1064
+ hasClass: (e, c) => {
1065
+ if (!e) return;
1066
+ return e.className.match(new RegExp('(\\s|^)' + c + '(\\s|$)'));
1067
+ },
1068
+
1069
+ addClass: (e, c) => {
1070
+ if (!e) return;
1071
+ e.classList.add(c);
1072
+ return e
1073
+ },
1074
+
1075
+ removeClass: (e, c) => {
1076
+ if (!e) return;
1077
+ e.classList.remove(c);
1078
+ return e
1079
+ },
1080
+
1081
+ toggleClass: (e, c) => {
1082
+ if (!e) return;
1083
+ if (DOMController.hasClass(e, c)) {
1084
+ DOMController.removeClass(e, c)
1085
+ } else {
1086
+ DOMController.addClass(e, c)
1087
+ }
1088
+ return e
354
1089
  }
355
- })(jQuery);
1090
+ }
1091
+ Object.freeze(DOMController);