hexo-theme-stellar 1.44.0 → 2.0.0-rc.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 (377) hide show
  1. package/CHANGELOG.md +63 -5
  2. package/CONTRIBUTING.md +29 -120
  3. package/README.md +66 -73
  4. package/README_EN.md +66 -73
  5. package/_config.yml +890 -743
  6. package/_data/icons.yml +43 -171
  7. package/_data/widgets.yml +1 -1
  8. package/assets/icon-v2-x512.webp +0 -0
  9. package/languages/en.yml +59 -2
  10. package/languages/zh-CN.yml +59 -2
  11. package/languages/zh-TW.yml +59 -2
  12. package/layout/404.ejs +7 -4
  13. package/layout/_partial/comments/artalk/layout.ejs +3 -2
  14. package/layout/_partial/comments/beaudar/layout.ejs +2 -2
  15. package/layout/_partial/comments/giscus/layout.ejs +2 -5
  16. package/layout/_partial/comments/layout.ejs +11 -40
  17. package/layout/_partial/comments/twikoo/layout.ejs +3 -2
  18. package/layout/_partial/comments/utterances/layout.ejs +2 -2
  19. package/layout/_partial/comments/waline/layout.ejs +3 -2
  20. package/layout/_partial/components/collection-item.ejs +30 -13
  21. package/layout/_partial/components/collection.ejs +2 -2
  22. package/layout/_partial/cover/index.ejs +5 -2
  23. package/layout/_partial/cover/wiki_cover.ejs +39 -28
  24. package/layout/_partial/dropdown.ejs +26 -14
  25. package/layout/_partial/head.ejs +96 -69
  26. package/layout/_partial/main/article/contributors.ejs +12 -9
  27. package/layout/_partial/main/article/post_footer.ejs +47 -0
  28. package/layout/_partial/main/article/post_read_next.ejs +22 -0
  29. package/layout/_partial/main/article/post_related.ejs +14 -0
  30. package/layout/_partial/main/article/post_tags.ejs +12 -0
  31. package/layout/_partial/main/article/share.ejs +55 -0
  32. package/layout/_partial/main/footer.ejs +11 -10
  33. package/layout/_partial/main/{navbar/nav_tabs_blog.ejs → listing_nav/blog.ejs} +21 -18
  34. package/layout/_partial/main/listing_nav/wiki.ejs +56 -0
  35. package/layout/_partial/main/navbar/article_banner.ejs +39 -35
  36. package/layout/_partial/main/navbar/breadcrumb/blog.ejs +15 -28
  37. package/layout/_partial/main/navbar/breadcrumb/note.ejs +12 -5
  38. package/layout/_partial/main/navbar/breadcrumb/wiki.ejs +15 -11
  39. package/layout/_partial/main/navbar/dateinfo.ejs +28 -12
  40. package/layout/_partial/main/navbar/ghinfo.ejs +5 -3
  41. package/layout/_partial/main/notebook/note_card.ejs +12 -17
  42. package/layout/_partial/main/notebook/note_tags.ejs +3 -4
  43. package/layout/_partial/main/notebook/notebook_card.ejs +11 -4
  44. package/layout/_partial/main/pin_slider.ejs +48 -43
  45. package/layout/_partial/main/post_list/archive_item.ejs +8 -4
  46. package/layout/_partial/main/post_list/latest_post_card.ejs +10 -4
  47. package/layout/_partial/main/post_list/post_card.ejs +39 -90
  48. package/layout/_partial/main/post_list/topic_card.ejs +7 -5
  49. package/layout/_partial/main/post_list/wiki_card.ejs +16 -13
  50. package/layout/_partial/menubtn.ejs +3 -3
  51. package/layout/_partial/primitives/item.ejs +8 -0
  52. package/layout/_partial/primitives/navigation.ejs +17 -0
  53. package/layout/_partial/primitives/region.ejs +16 -0
  54. package/layout/_partial/primitives/section.ejs +8 -0
  55. package/layout/_partial/primitives/shell.ejs +35 -0
  56. package/layout/_partial/regions/widgets.ejs +84 -0
  57. package/layout/_partial/scripts/defines.ejs +46 -76
  58. package/layout/_partial/scripts/runtime.ejs +55 -0
  59. package/layout/_partial/scripts.ejs +18 -42
  60. package/layout/_partial/search/dialog.ejs +33 -0
  61. package/layout/_partial/search/shortcut.ejs +1 -0
  62. package/layout/_partial/sidebar/brand.ejs +127 -0
  63. package/layout/_partial/sidebar/menu.ejs +59 -14
  64. package/layout/_partial/sidebar/search.ejs +58 -41
  65. package/layout/_partial/widgets/actions.ejs +25 -0
  66. package/layout/_partial/widgets/author.ejs +9 -5
  67. package/layout/_partial/widgets/components/linklist.ejs +1 -2
  68. package/layout/_partial/widgets/ghissues.ejs +7 -10
  69. package/layout/_partial/widgets/ghrepo.ejs +23 -16
  70. package/layout/_partial/widgets/ghuser.ejs +3 -3
  71. package/layout/_partial/widgets/recent.ejs +25 -21
  72. package/layout/_partial/widgets/related.ejs +25 -34
  73. package/layout/_partial/widgets/settings.ejs +17 -0
  74. package/layout/_partial/widgets/tagtree.ejs +18 -10
  75. package/layout/_partial/widgets/toc.ejs +17 -9
  76. package/layout/_partial/widgets/tree.ejs +12 -13
  77. package/layout/archive.ejs +20 -13
  78. package/layout/categories.ejs +4 -3
  79. package/layout/collection-preview.ejs +8 -9
  80. package/layout/index.ejs +32 -43
  81. package/layout/index_topic.ejs +6 -13
  82. package/layout/index_wiki.ejs +17 -34
  83. package/layout/layout.ejs +195 -65
  84. package/layout/notebooks.ejs +3 -3
  85. package/layout/notes.ejs +4 -4
  86. package/layout/page.ejs +95 -50
  87. package/layout/settings.ejs +109 -0
  88. package/layout/tags.ejs +4 -3
  89. package/{THIRD-PARTY-NOTICES.md → legal/THIRD-PARTY-NOTICES.md} +8 -4
  90. package/package.json +28 -6
  91. package/scripts/commands/stellar.js +55 -0
  92. package/scripts/events/index.js +15 -9
  93. package/scripts/events/lib/authors.js +9 -7
  94. package/scripts/events/lib/config-hot-reload.js +65 -0
  95. package/scripts/events/lib/config-schema.js +20 -0
  96. package/scripts/events/lib/config.js +22 -63
  97. package/scripts/events/lib/content-config.js +5 -0
  98. package/scripts/events/lib/doc_tree.js +99 -9
  99. package/scripts/events/lib/links.js +6 -3
  100. package/scripts/events/lib/notebooks.js +200 -8
  101. package/scripts/events/lib/utils.js +4 -4
  102. package/scripts/events/lib/version-check.js +57 -3
  103. package/scripts/filters/index.js +2 -27
  104. package/scripts/filters/lib/img_lazyload.js +4 -126
  105. package/scripts/filters/lib/img_onerror.js +14 -17
  106. package/scripts/filters/lib/page-view-model.js +152 -0
  107. package/scripts/generators/404.js +13 -8
  108. package/scripts/generators/author.js +16 -11
  109. package/scripts/generators/notebooks.js +68 -39
  110. package/scripts/generators/search.js +62 -67
  111. package/scripts/generators/settings.js +43 -0
  112. package/scripts/generators/stellar-icons.js +13 -5
  113. package/scripts/generators/topic.js +24 -13
  114. package/scripts/generators/wiki.js +49 -21
  115. package/scripts/helpers/ai_label.js +6 -12
  116. package/scripts/helpers/brand.js +17 -0
  117. package/scripts/helpers/browser_runtime_manifest.js +12 -0
  118. package/scripts/helpers/caption.js +8 -0
  119. package/scripts/helpers/category_color.js +13 -13
  120. package/scripts/helpers/collection.js +18 -0
  121. package/scripts/helpers/comments_model.js +14 -0
  122. package/scripts/helpers/extension_assets.js +8 -0
  123. package/scripts/helpers/json_ld.js +16 -7
  124. package/scripts/helpers/mdrender.js +3 -9
  125. package/scripts/helpers/menu.js +9 -0
  126. package/scripts/helpers/post_view_model.js +23 -0
  127. package/scripts/helpers/regions.js +37 -0
  128. package/scripts/helpers/scrollreveal.js +7 -7
  129. package/scripts/helpers/search_domain.js +34 -0
  130. package/scripts/helpers/service_provider.js +9 -0
  131. package/scripts/helpers/settings.js +16 -0
  132. package/scripts/helpers/share_action.js +8 -0
  133. package/scripts/helpers/stellar_config.js +12 -0
  134. package/scripts/helpers/stellar_data.js +8 -0
  135. package/scripts/helpers/stellar_info.js +21 -16
  136. package/scripts/helpers/stellar_inject.js +9 -0
  137. package/scripts/helpers/ui_classes.js +12 -0
  138. package/scripts/lib/ai_label.js +14 -11
  139. package/scripts/lib/brand.js +41 -0
  140. package/scripts/lib/browser-runtime.js +115 -0
  141. package/scripts/lib/caption.js +21 -0
  142. package/scripts/lib/collection-pipeline/adapters/notebook.js +62 -0
  143. package/scripts/lib/collection-pipeline/adapters/post.js +20 -0
  144. package/scripts/lib/collection-pipeline/adapters/topic.js +82 -0
  145. package/scripts/lib/collection-pipeline/adapters/wiki.js +20 -0
  146. package/scripts/lib/collection-pipeline/index.js +169 -0
  147. package/scripts/lib/collection-pipeline/registry.js +27 -0
  148. package/scripts/lib/collection-pipeline/shared.js +164 -0
  149. package/scripts/lib/comments.js +60 -0
  150. package/scripts/lib/config-inject.js +20 -0
  151. package/scripts/lib/config-schema.js +1095 -0
  152. package/scripts/lib/content-config.js +157 -0
  153. package/scripts/lib/content-defaults.js +56 -0
  154. package/scripts/lib/content-membership.js +233 -0
  155. package/scripts/lib/contribution-contract.js +165 -0
  156. package/scripts/lib/contribution-registry.js +429 -0
  157. package/scripts/lib/doc_tree.js +46 -44
  158. package/scripts/lib/doctor.js +296 -0
  159. package/scripts/lib/front-matter.js +29 -0
  160. package/scripts/lib/hero-effect-registry.js +262 -0
  161. package/scripts/lib/html-images.js +128 -0
  162. package/scripts/lib/internal-constants.js +152 -0
  163. package/scripts/lib/layout-config.js +62 -0
  164. package/scripts/lib/mdrender_html.js +36 -23
  165. package/scripts/lib/menu.js +36 -0
  166. package/scripts/lib/model-schema.js +90 -0
  167. package/scripts/lib/models/index.js +1542 -0
  168. package/scripts/lib/new-note.js +172 -0
  169. package/scripts/lib/page-view-model-registry.js +103 -0
  170. package/scripts/lib/regions.js +132 -0
  171. package/scripts/lib/runtime-data.js +23 -0
  172. package/scripts/lib/safe-path.js +44 -0
  173. package/scripts/lib/search-domain.js +59 -0
  174. package/scripts/lib/seo.js +10 -10
  175. package/scripts/lib/service-provider.js +12 -0
  176. package/scripts/lib/settings.js +16 -0
  177. package/scripts/lib/share-services.js +96 -0
  178. package/scripts/lib/source-config.js +27 -0
  179. package/scripts/lib/theme-metadata.js +22 -0
  180. package/scripts/lib/ui-capabilities.js +32 -0
  181. package/scripts/lib/widget-registry.js +150 -0
  182. package/scripts/lib/wiki_readme.js +15 -11
  183. package/scripts/schema/config-rules.js +290 -0
  184. package/scripts/schema/config-schema.js +163 -0
  185. package/scripts/schema/content-config-rules.js +264 -0
  186. package/scripts/schema/content-config-schema.js +321 -0
  187. package/scripts/schema/model-schema.js +971 -0
  188. package/scripts/schema/schema-utils.js +48 -0
  189. package/scripts/tags/index.js +2 -3
  190. package/scripts/tags/lib/albums.js +6 -6
  191. package/scripts/tags/lib/banner.js +10 -4
  192. package/scripts/tags/lib/box.js +1 -1
  193. package/scripts/tags/lib/button.js +1 -1
  194. package/scripts/tags/lib/chat.js +9 -31
  195. package/scripts/tags/lib/checkbox.js +6 -1
  196. package/scripts/tags/lib/copy.js +4 -1
  197. package/scripts/tags/lib/dropdown.js +6 -4
  198. package/scripts/tags/lib/emoji.js +5 -10
  199. package/scripts/tags/lib/friends.js +4 -4
  200. package/scripts/tags/lib/gallery.js +7 -7
  201. package/scripts/tags/lib/ghcard.js +5 -3
  202. package/scripts/tags/lib/gist.js +16 -0
  203. package/scripts/tags/lib/grid.js +4 -2
  204. package/scripts/tags/lib/hashtag.js +1 -1
  205. package/scripts/tags/lib/icon.js +1 -1
  206. package/scripts/tags/lib/image.js +1 -1
  207. package/scripts/tags/lib/link.js +6 -3
  208. package/scripts/tags/lib/mark.js +8 -3
  209. package/scripts/tags/lib/md.js +1 -1
  210. package/scripts/tags/lib/note.js +1 -1
  211. package/scripts/tags/lib/okr.js +18 -1
  212. package/scripts/tags/lib/posters.js +6 -6
  213. package/scripts/tags/lib/quot.js +15 -5
  214. package/scripts/tags/lib/rating.js +7 -4
  215. package/scripts/tags/lib/sites.js +8 -6
  216. package/scripts/tags/lib/tip.js +6 -6
  217. package/scripts/tags/lib/toc.js +2 -2
  218. package/scripts/tags/lib/vote.js +8 -5
  219. package/source/css/_appearances/_mixins.styl +258 -0
  220. package/source/css/_appearances/card.styl +30 -0
  221. package/source/css/_appearances/flat.styl +44 -0
  222. package/source/css/_appearances/glass.styl +138 -0
  223. package/source/css/_appearances/minimal.styl +325 -0
  224. package/source/css/_common/base.styl +5 -9
  225. package/source/css/_common/blockquote.styl +0 -1
  226. package/source/css/_common/button.styl +1 -1
  227. package/source/css/_common/device.styl +24 -42
  228. package/source/css/_common/dropdown.styl +20 -14
  229. package/source/css/_common/highlight.styl +5 -12
  230. package/source/css/_common/icon.styl +38 -0
  231. package/source/css/_common/input.styl +33 -0
  232. package/source/css/_common/loading.styl +2 -2
  233. package/source/css/_common/svg.styl +0 -8
  234. package/source/css/_components/collection.styl +21 -64
  235. package/source/css/_components/layout.styl +524 -84
  236. package/source/css/_components/list.styl +36 -22
  237. package/source/css/_components/main.styl +16 -19
  238. package/source/css/_components/md.styl +8 -13
  239. package/source/css/_components/pages/article-indent.styl +1 -1
  240. package/source/css/_components/pages/article-story.styl +7 -6
  241. package/source/css/_components/pages/article-tech.styl +5 -5
  242. package/source/css/_components/pages/collection-preview.styl +1 -5
  243. package/source/css/_components/pages/settings.styl +184 -0
  244. package/source/css/_components/partial/article-banner.styl +2 -2
  245. package/source/css/_components/partial/article-footer.styl +0 -32
  246. package/source/css/_components/partial/article-share.styl +48 -0
  247. package/source/css/_components/partial/article-tags.styl +1 -1
  248. package/source/css/_components/partial/cover.styl +13 -13
  249. package/source/css/_components/partial/listing-nav.styl +68 -0
  250. package/source/css/_components/partial/paginator.styl +1 -1
  251. package/source/css/_components/pin-slider.styl +3 -3
  252. package/source/css/_components/sidebar/brand.styl +135 -0
  253. package/source/css/_components/sidebar/footer.styl +14 -31
  254. package/source/css/_components/sidebar/nav-area.styl +4 -0
  255. package/source/css/_components/sidebar/search.styl +176 -26
  256. package/source/css/_components/sidebar/sidebar.styl +76 -110
  257. package/source/css/_components/tag-plugins/banner.styl +16 -28
  258. package/source/css/_components/tag-plugins/checkbox.styl +7 -22
  259. package/source/css/_components/tag-plugins/copy.styl +3 -5
  260. package/source/css/_components/tag-plugins/gallery.styl +2 -2
  261. package/source/css/_components/tag-plugins/grid.styl +3 -0
  262. package/source/css/_components/tag-plugins/image.styl +2 -1
  263. package/source/css/_components/tag-plugins/link.styl +0 -1
  264. package/source/css/_components/tag-plugins/mark.styl +19 -4
  265. package/source/css/_components/tag-plugins/mdrender.styl +2 -2
  266. package/source/css/_components/tag-plugins/navbar.styl +23 -17
  267. package/source/css/_components/tag-plugins/note.styl +2 -2
  268. package/source/css/_components/tag-plugins/okr.styl +1 -2
  269. package/source/css/_components/tag-plugins/quot.styl +5 -0
  270. package/source/css/_components/tag-plugins/rating.styl +3 -2
  271. package/source/css/_components/tag-plugins/timeline.styl +1 -1
  272. package/source/css/_components/tag-plugins/tip.styl +1 -1
  273. package/source/css/_components/tag-plugins/vote.styl +3 -2
  274. package/source/css/_components/widgets/ghrepo.styl +2 -1
  275. package/source/css/_components/widgets/ghuser.styl +4 -6
  276. package/source/css/_components/widgets/settings.styl +49 -0
  277. package/source/css/_components/widgets/timeline.styl +2 -2
  278. package/source/css/_components/widgets/toc.styl +12 -33
  279. package/source/css/_components/widgets/widgets.styl +14 -19
  280. package/source/css/_components/wiki-card.styl +2 -2
  281. package/source/css/_custom.styl +26 -32
  282. package/source/css/_defines/func.styl +47 -37
  283. package/source/css/_defines/theme_base.styl +8 -10
  284. package/source/css/_plugins/card-hover.styl +1 -1
  285. package/source/css/_plugins/copycode.styl +16 -19
  286. package/source/css/_plugins/index.styl +3 -8
  287. package/source/css/_plugins/lazyload.styl +1 -1
  288. package/source/css/main.styl +12 -0
  289. package/source/js/main.js +302 -59
  290. package/source/js/plugins/adaptive-text.js +33 -16
  291. package/source/js/plugins/card-hover.js +2 -24
  292. package/source/js/plugins/copycode.js +10 -16
  293. package/source/js/plugins/voice.js +51 -48
  294. package/source/js/profile.js +316 -0
  295. package/source/js/runtime/asset-loader.js +61 -0
  296. package/source/js/runtime/extension-registry.js +149 -0
  297. package/source/js/runtime/extensions/card-hover.js +5 -0
  298. package/source/js/runtime/extensions/color-scheme-switch.js +101 -0
  299. package/source/js/runtime/extensions/comments.js +200 -0
  300. package/source/js/runtime/extensions/deferred-icons.js +53 -0
  301. package/source/js/{plugins → runtime/extensions}/dropdown.js +69 -30
  302. package/source/js/runtime/extensions/feature.js +200 -0
  303. package/source/js/runtime/extensions/hero-effect.js +179 -0
  304. package/source/js/runtime/extensions/reveal.js +80 -0
  305. package/source/js/runtime/extensions/search.js +23 -0
  306. package/source/js/{services.js → runtime/extensions/services.js} +67 -54
  307. package/source/js/runtime/extensions/settings.js +235 -0
  308. package/source/js/runtime/hero-effects/ferrofluid.js +385 -0
  309. package/source/js/{plugins → runtime/hero-effects}/galaxy.js +53 -177
  310. package/source/js/runtime/hero-effects/light-rays.js +293 -0
  311. package/source/js/runtime/index.js +75 -0
  312. package/source/js/runtime/legacy-request-adapter.js +47 -0
  313. package/source/js/runtime/request-cache.js +219 -0
  314. package/source/js/search/algolia-search.js +76 -51
  315. package/source/js/search/highlight.js +1 -1
  316. package/source/js/search/local-search.js +96 -57
  317. package/source/js/search/shortcut.js +31 -20
  318. package/source/js/services/friends_and_posts.js +6 -1
  319. package/source/js/services/rating.js +14 -6
  320. package/source/js/services/siteinfo.js +3 -7
  321. package/source/js/services/timeline.js +1 -1
  322. package/source/js/services/vote.js +7 -5
  323. package/source/js/services/weibo.js +1 -1
  324. package/source/js/utils.js +19 -444
  325. package/.claude/skills/stellar-theme-dev/SKILL.md +0 -51
  326. package/_data/chat_users.yml +0 -0
  327. package/layout/_partial/comments/artalk/script.ejs +0 -76
  328. package/layout/_partial/comments/beaudar/script.ejs +0 -33
  329. package/layout/_partial/comments/giscus/script.ejs +0 -31
  330. package/layout/_partial/comments/script.ejs +0 -3
  331. package/layout/_partial/comments/twikoo/script.ejs +0 -25
  332. package/layout/_partial/comments/utterances/script.ejs +0 -33
  333. package/layout/_partial/comments/waline/script.ejs +0 -43
  334. package/layout/_partial/main/article/article_footer.ejs +0 -164
  335. package/layout/_partial/main/article/article_tags.ejs +0 -16
  336. package/layout/_partial/main/article/read_next.ejs +0 -63
  337. package/layout/_partial/main/article/related_posts.ejs +0 -16
  338. package/layout/_partial/main/navbar/nav_tabs_wiki.ejs +0 -52
  339. package/layout/_partial/scripts/bootstrap.ejs +0 -37
  340. package/layout/_partial/scripts/lazyload.ejs +0 -89
  341. package/layout/_partial/sidebar/grad-def.ejs +0 -26
  342. package/layout/_partial/sidebar/index_leftbar.ejs +0 -191
  343. package/layout/_partial/sidebar/index_rightbar.ejs +0 -94
  344. package/layout/_partial/sidebar/logo.ejs +0 -99
  345. package/layout/_plugins/adaptive_text.ejs +0 -11
  346. package/layout/_plugins/card_hover.ejs +0 -32
  347. package/layout/_plugins/copycode.ejs +0 -17
  348. package/layout/_plugins/fancybox.ejs +0 -53
  349. package/layout/_plugins/heti.ejs +0 -21
  350. package/layout/_plugins/index.ejs +0 -50
  351. package/layout/_plugins/mathjax.ejs +0 -49
  352. package/layout/_plugins/mermaid.ejs +0 -33
  353. package/layout/_plugins/preload.ejs +0 -9
  354. package/layout/_plugins/scrollreveal.ejs +0 -102
  355. package/layout/_plugins/search/algolia_search.ejs +0 -12
  356. package/layout/_plugins/search/local_search.ejs +0 -9
  357. package/layout/_plugins/swiper.ejs +0 -27
  358. package/layout/_plugins/tianli_gpt.ejs +0 -14
  359. package/scripts/commands/new-note.js +0 -49
  360. package/scripts/events/lib/merge_posts.js +0 -48
  361. package/scripts/events/lib/topic_tree.js +0 -48
  362. package/scripts/helpers/related_posts.js +0 -51
  363. package/scripts/helpers/subtitle.js +0 -8
  364. package/scripts/lib/notebooks.js +0 -181
  365. package/scripts/lib/subtitle.js +0 -28
  366. package/scripts/tags/lib/about.js +0 -48
  367. package/source/css/_components/page-transition.styl +0 -22
  368. package/source/css/_components/partial/navbar.styl +0 -51
  369. package/source/css/_components/sidebar/logo.styl +0 -111
  370. package/source/css/_components/tag-plugins/about.styl +0 -56
  371. package/source/css/_components/widgets/tree.styl +0 -0
  372. package/source/css/_plugins/scrollreveal.styl +0 -6
  373. package/source/css/_plugins/tianli_gpt.styl +0 -213
  374. package/source/css/plugins/mermaid.styl +0 -137
  375. package/source/js/icons.js +0 -60
  376. package/source/js/services/fcircle.js +0 -35
  377. package/source/js/theme.js +0 -61
@@ -1,54 +1,71 @@
1
1
  <%
2
- const notebook = theme.notebooks.tree[page.notebook]
3
- if (item.filter == null) {
4
- item.filter = 'auto'
5
- }
6
- if (item.placeholder == null && item.filter == 'auto') {
7
- if (theme.wiki.tree[page.wiki]?.name) {
8
- item.placeholder = __('search.search_in', theme.wiki.tree[page.wiki]?.name)
9
- } else if (notebook) {
10
- item.placeholder = __('search.search_in', notebook.name || __('btn.notebook'))
11
- item.filter = notebook.base_dir
12
- }
2
+ var wikiViewModel = typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'wiki'
3
+ ? viewModel
4
+ : null
5
+ var notebookViewModel = typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'notebook'
6
+ ? viewModel
7
+ : null
8
+ var notebookIndex = page.notebookIndex?.mode === 'notes' ? page.notebookIndex.collection : null
9
+ item = item && typeof item === 'object' ? Object.assign({}, item) : {}
10
+ if (item.algoliaFilterPath == null) {
11
+ item.algoliaFilterPath = 'auto'
13
12
  }
14
13
  function layoutDiv() {
15
- var el = ''
16
- if (page.search == false) {
17
- return el
14
+ if (typeof disabled !== 'undefined' && disabled === true) {
15
+ return ''
18
16
  }
19
- el += `<div class="search-wrapper" id="search-wrapper">`
20
- el += `<div class="search-form" role="search">`
21
- var filter = ''
22
- if (item.filter == 'auto') {
23
- if (page.wiki) {
24
- let matches = page.path.match(/(.*?)\/(.*?)\//i)
25
- if (matches?.length > 0) {
26
- filter = matches[0]
27
- }
17
+ var rawInstanceId = typeof instanceId === 'string' && instanceId.length > 0 ? instanceId : 'default'
18
+ var algoliaFilterPath = ''
19
+ if (item.algoliaFilterPath == 'auto') {
20
+ if (wikiViewModel) {
21
+ algoliaFilterPath = wikiViewModel.render.layout.algoliaFilterPath
22
+ } else if (notebookViewModel) {
23
+ algoliaFilterPath = notebookViewModel.render.layout.algoliaFilterPath
24
+ } else if (notebookIndex) {
25
+ algoliaFilterPath = notebookIndex.layout.algoliaFilterPath
28
26
  }
29
27
  } else {
30
- if (item.filter?.length > 0) {
31
- filter = item.filter
28
+ if (item.algoliaFilterPath?.length > 0) {
29
+ algoliaFilterPath = item.algoliaFilterPath
32
30
  }
33
31
  }
34
- if (filter.length > 0 && !filter.startsWith('/')) {
35
- filter = '/' + filter
32
+ if (algoliaFilterPath.length > 0 && !algoliaFilterPath.startsWith('/')) {
33
+ algoliaFilterPath = '/' + algoliaFilterPath
34
+ }
35
+ var searchTitle = __('btn.search')
36
+ var searchScope = search_scope(page, typeof viewModel !== 'undefined' ? viewModel : null)
37
+ var searchPresentation = typeof presentation === 'string' ? presentation : 'leftbar'
38
+ var iconOnly = searchPresentation === 'topbar' || searchPresentation === 'wiki-toolbar'
39
+ var searchClassName = typeof hoverSurface !== 'undefined' && hoverSurface === true
40
+ ? 'search-trigger has-hover-surface'
41
+ : 'search-trigger'
42
+ var searchAttrs = {
43
+ title: searchTitle,
44
+ 'aria-label': searchTitle,
45
+ 'data-shell-action': 'open-search',
46
+ 'data-search-instance': rawInstanceId
47
+ }
48
+ if (stellar_config('search.provider') === 'algolia' && algoliaFilterPath.length > 0) {
49
+ searchAttrs['data-algolia-filter-path'] = algoliaFilterPath
36
50
  }
37
- var placeholder = item.placeholder || (filter.length > 0 ? __('search.search_in', filter) : __('search.search'))
38
- var escapedPlaceholder = escape_html(placeholder)
39
- el += `<label class="search-button" for="search-input" aria-hidden="true">`
40
- el += icon('default:search', '', true)
41
- el += `</label>`
42
- el += `<input type="search" class="search-input" id="search-input" aria-label="${escapedPlaceholder}"`
43
- if (filter.length > 0) {
44
- el += ` data-filter="${escape_html(filter)}"`
51
+ if (searchScope) {
52
+ searchAttrs['data-search-domain'] = searchScope.current
53
+ searchAttrs['data-search-domain-label'] = searchScope.currentLabel
54
+ searchAttrs['data-search-domain-blog'] = searchScope.hasBlog ? 'true' : 'false'
45
55
  }
46
- el += ` placeholder="${escapedPlaceholder}">`
47
- el += `</div>`
48
- el += `<div id="search-result"></div>`
49
- el += `<div class="search-no-result">${__('search.no_results')}</div>`
50
- el += `</div>`
51
- return el
56
+ return partial('_partial/components/collection', {options: {
57
+ layout: 'list',
58
+ variant: 'nav',
59
+ items: [{
60
+ type: 'button',
61
+ title: searchTitle,
62
+ icon: 'default:search',
63
+ iconOnly: iconOnly,
64
+ className: searchClassName,
65
+ after: iconOnly ? '' : partial('_partial/search/shortcut'),
66
+ attrs: searchAttrs
67
+ }]
68
+ }})
52
69
  }
53
70
  %>
54
71
  <%- layoutDiv() %>
@@ -0,0 +1,25 @@
1
+ <%
2
+ var actionItems = Array.isArray(actions) ? actions : []
3
+ function renderActions() {
4
+ if (actionItems.length === 0) return ''
5
+ var el = '<div class="region-actions social-wrap ui-collection" data-layout="inline" data-variant="nav" data-density="compact">'
6
+ for (var action of actionItems) {
7
+ if (action.type === 'spacer') {
8
+ el += '<span class="social-spacer" aria-hidden="true"></span>'
9
+ } else if (action.type === 'dropdown') {
10
+ el += partial('../dropdown', {item: action, rootClass: 'social-dropdown', triggerClass: ui_classes('social', 'collectionItem', 'is-icon-only'), showTitle: false})
11
+ } else if (action.type === 'link') {
12
+ el += `<a class="${ui_classes('social', 'collectionItem', 'is-icon-only')}"${action.title ? ` title="${escape_html(action.title)}"` : ''}`
13
+ if (action.url) {
14
+ el += ` href="${escape_html(url_for(action.url))}"`
15
+ el += action.url.includes('://') ? ' target="_blank" rel="external nofollow noopener noreferrer"' : ' rel="noopener noreferrer"'
16
+ }
17
+ el += `><span class="ui-icon">${icon(action.icon, 'no-lazy')}</span></a>`
18
+ } else if (action.type === 'button') {
19
+ el += `<button type="button" class="${ui_classes('social', 'collectionItem', 'is-icon-only')}" title="${escape_html(action.title)}" aria-label="${escape_html(action.title)}" onclick="${escape_html(action.onclick)}"><span class="ui-icon">${icon(action.icon, 'no-lazy')}</span></button>`
20
+ }
21
+ }
22
+ return el + '</div>'
23
+ }
24
+ %>
25
+ <%- renderActions() %>
@@ -1,11 +1,15 @@
1
1
  <%
2
2
 
3
3
  var author = null
4
- if (theme.authors) {
5
- if (page.author?.length > 0 && theme.authors[page.author] != null) {
6
- author = theme.authors[page.author]
4
+ var activeViewModel = typeof viewModel !== 'undefined' ? viewModel : null
5
+ var authorId = ['post', 'topic'].includes(activeViewModel?.collection?.profile)
6
+ ? activeViewModel.render.listing.authorId
7
+ : content_config(page).article?.author
8
+ if (stellar_data('authors')) {
9
+ if (authorId?.length > 0 && stellar_data('authors')[authorId] != null) {
10
+ author = stellar_data('authors')[authorId]
7
11
  } else {
8
- author = theme.default_author
12
+ author = stellar_data('defaultAuthor')
9
13
  }
10
14
  }
11
15
 
@@ -26,7 +30,7 @@ function layoutDiv() {
26
30
 
27
31
  // homepage
28
32
  el += `<a class="follow" href="${url_for(author.path)}">`
29
- el += icon('default:documents')
33
+ el += '<span class="ui-icon">' + icon('default:documents') + '</span>'
30
34
  el += __('btn.all_posts')
31
35
  el += `</a>`
32
36
  el += `</div>`
@@ -14,8 +14,7 @@ function layoutDiv(linklist) {
14
14
  title: link.title,
15
15
  icon: link.icon,
16
16
  active: pretty_url(link.url) == pretty_url(page.path),
17
- showTitle: showTitle,
18
- gradientRef: 'leftbar-active-icon-grad'
17
+ showTitle: showTitle
19
18
  })
20
19
  }
21
20
  return partial('_partial/components/collection', {options: {
@@ -2,20 +2,17 @@
2
2
  function layoutDiv() {
3
3
  var el = '';
4
4
  var repo;
5
- var branch = 'main';
6
- if (page.repo) {
7
- repo = page.repo
8
- } else if (theme.wiki.tree[page.wiki]?.repo) {
9
- const proj = theme.wiki.tree[page.wiki]
10
- repo = proj.repo
11
- if (proj.branch != undefined) {
12
- branch = proj.branch
13
- }
5
+ var pageConfig = content_config(page);
6
+ var wikiViewModel = typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'wiki' ? viewModel : null
7
+ if (wikiViewModel?.render?.listing?.repository) {
8
+ repo = wikiViewModel.render.listing.repository
9
+ } else if (pageConfig.source?.repository) {
10
+ repo = pageConfig.source.repository
14
11
  }
15
12
  if (repo == undefined) {
16
13
  return el;
17
14
  }
18
- item.api = `https://${theme.api_host.ghapi}/repos/${repo}/issues?per_page=${item.limit}`;
15
+ item.api = `${stellar_config('services.github.apiUrl')}/repos/${repo}/issues?per_page=${item.limit}`;
19
16
  if (item.labels) {
20
17
  item.api += '&labels=' + item.labels;
21
18
  }
@@ -2,41 +2,48 @@
2
2
  function layoutDiv() {
3
3
  var el = '';
4
4
  var repo;
5
- var branch = 'main';
6
- if (page.repo) {
7
- repo = page.repo
8
- } else if (theme.wiki.tree[page.wiki]?.repo) {
9
- const proj = theme.wiki.tree[page.wiki]
10
- repo = proj.repo
11
- if (proj.branch != undefined) {
12
- branch = proj.branch
13
- }
5
+ var repoApi;
6
+ var tagsApi;
7
+ var pageConfig = content_config(page);
8
+ var wikiViewModel = typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'wiki'
9
+ ? viewModel
10
+ : null
11
+ if (wikiViewModel) {
12
+ repo = wikiViewModel.render.listing.repository
13
+ repoApi = wikiViewModel.render.listing.repositoryApi
14
+ tagsApi = repoApi ? repoApi + '/tags' : ''
15
+ } else if (pageConfig.source?.repository) {
16
+ repo = pageConfig.source.repository
14
17
  }
15
- if (repo == undefined) {
18
+ if (!repo) {
16
19
  return el;
17
20
  }
21
+ if (!wikiViewModel) {
22
+ repoApi = stellar_config('services.github.apiUrl') + '/repos/' + repo
23
+ tagsApi = repoApi + '/tags'
24
+ }
18
25
  // 布局
19
26
  el += `<widget class="widget-wrapper${scrollreveal(' ')} ghrepo">`
20
27
  // body
21
28
  el += '<div class="widget-body">';
22
- el += '<div class="items data-service ds-ghinfo" data-api="https://' + theme.api_host.ghapi + '/repos/' + repo + '">';
29
+ el += '<div class="items data-service ds-ghinfo" data-api="' + escape_html(repoApi) + '">';
23
30
  el += '<a class="repo" href="https://github.com/' + repo + '" target="_blank" rel="external nofollow noopener noreferrer">';
24
31
  el += '<div class="repo-name flex-row">';
25
- el += icon('github:repo')
32
+ el += '<span class="ui-icon">' + icon('github:repo') + '</span>'
26
33
  el += repo;
27
34
  el += '</div>';
28
35
  el += '<div class="repo-desc"><span type="text" id="description">&nbsp;</span></div>';
29
36
  el += '<div class="grid">';
30
37
  el += '<div class="flex-row">';
31
- el += icon('github:star')
38
+ el += '<span class="ui-icon">' + icon('github:star') + '</span>'
32
39
  el += '<span type="text" id="stargazers_count"></span>';
33
40
  el += '</div>';
34
41
  el += '<div class="flex-row">';
35
- el += icon('github:fork')
42
+ el += '<span class="ui-icon">' + icon('github:fork') + '</span>'
36
43
  el += '<span type="text" id="forks_count"></span>';
37
44
  el += '</div>';
38
- el += '<div class="flex-row data-service ds-ghinfo" index="0" data-api="https://' + theme.api_host.ghapi + '/repos/' + repo + '/tags">';
39
- el += icon('github:tag')
45
+ el += '<div class="flex-row data-service ds-ghinfo" index="0" data-api="' + escape_html(tagsApi) + '">';
46
+ el += '<span class="ui-icon">' + icon('github:tag') + '</span>'
40
47
  el += '<span type="text" id="latest-tag-name">0</span>';
41
48
  el += '</div>';
42
49
  el += '</div>';
@@ -30,13 +30,13 @@ function layoutDiv() {
30
30
  if (item.header) {
31
31
  el += `<div class="widget-header">`
32
32
  el += `<a class="gh-url" href="https://github.com/${item.username}">
33
- ${icon('github:logo-alt')}
33
+ <span class="ui-icon">${icon('github:logo-alt')}</span>
34
34
  <span>github/${item.username}</span>
35
35
  </a>`
36
36
  el += `</div>`
37
37
  }
38
38
  // body
39
- el += '<div class="widget-body data-service ds-ghinfo" data-api="https://' + theme.api_host.ghapi + '/users/' + item.username + '">';
39
+ el += '<div class="widget-body data-service ds-ghinfo" data-api="' + stellar_config('services.github.apiUrl') + '/users/' + item.username + '">';
40
40
  if (item.avatar) {
41
41
  el += '<div class="avatar" ><img no-lazy type="img" id="avatar_url" src="' + config.avatar + '"></div>';
42
42
  }
@@ -55,7 +55,7 @@ function layoutDiv() {
55
55
  // follow
56
56
  if (item.follow) {
57
57
  el += '<a class="follow" href="https://github.com/' + item.username + '">';
58
- el += icon('github:logo')
58
+ el += '<span class="ui-icon">' + icon('github:logo') + '</span>'
59
59
  el += 'Follow';
60
60
  el += '</a>';
61
61
  }
@@ -2,15 +2,27 @@
2
2
  function layoutDiv() {
3
3
  var action = ''
4
4
  if (item.rss) {
5
- action += '<a class="cap-action" id="rss" title="Subscribe" href="' + escape_html(item.rss) + '">'
6
- action += icon('default:rss')
5
+ action += '<a class="' + ui_classes('cap-action') + '" id="rss" title="Subscribe" href="' + escape_html(item.rss) + '">'
6
+ action += '<span class="ui-icon">' + icon('default:rss') + '</span>'
7
7
  action += '</a>'
8
8
  }
9
9
  var arr = []
10
- if (page.menu_id == 'wiki') {
11
- arr = theme.wiki.all_pages.filter(function(p) {
12
- if (p.wiki) {
13
- var proj = theme.wiki.tree[p.wiki]
10
+ var notebookViewModel = typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'notebook'
11
+ ? viewModel
12
+ : null
13
+ var notebookItems = notebookViewModel
14
+ ? notebookViewModel.render.layout.recentItems
15
+ : page.notebookIndex?.mode === 'collections'
16
+ ? page.notebookIndex.recentItems
17
+ : page.notebookIndex?.mode === 'notes'
18
+ ? page.notebookIndex.collection.recentItems
19
+ : null
20
+ if (notebookItems) {
21
+ arr = notebookItems.slice()
22
+ } else if (content_config(page).activeMenu == 'wiki') {
23
+ arr = stellar_data('wiki').all_pages.filter(function(p) {
24
+ if (p.collectionId) {
25
+ var proj = stellar_data('wiki').tree[p.collectionId]
14
26
  return proj?.index != false
15
27
  }
16
28
  return false
@@ -18,14 +30,6 @@ function layoutDiv() {
18
30
  arr = arr.sort(function(p1, p2) {
19
31
  return p1.updated > p2.updated ? -1 : 1
20
32
  })
21
- } else if (page.layout === 'notebooks') {
22
- arr = site.pages.filter(function(p) {
23
- return p.notebook
24
- }).sort('-updated')
25
- } else if (page.notebook) {
26
- arr = site.pages.filter(function(p) {
27
- return p.notebook === page.notebook
28
- }).sort('-updated')
29
33
  } else {
30
34
  arr = site.posts.filter(function(p) {
31
35
  return p.title && p.title.length > 0
@@ -41,15 +45,15 @@ function layoutDiv() {
41
45
  return
42
46
  }
43
47
  var prefix = ''
44
- if (post.wiki) {
45
- var proj = theme.wiki.tree[post.wiki]
46
- prefix = proj?.name || post.wiki || ''
47
- } else if (page.layout === 'notebooks') {
48
- var notebook = theme.notebooks.tree[post.notebook]
49
- prefix = notebook?.name || post.notebook || ''
48
+ var wikiId = notebookItems ? null : collection_id(post, 'wiki') || post.collectionId
49
+ if (wikiId) {
50
+ var proj = stellar_data('wiki').tree[wikiId]
51
+ prefix = proj?.name || wikiId
52
+ } else if (notebookItems && page.notebookIndex?.mode === 'collections') {
53
+ prefix = post.collectionName || post.collectionId || ''
50
54
  }
51
55
  entries.push({
52
- href: pretty_url(post.link || post.path),
56
+ href: pretty_url(notebookItems ? post.href : post.link || post.path),
53
57
  title: post.title,
54
58
  prefix: prefix,
55
59
  indicator: false
@@ -1,20 +1,16 @@
1
1
  <%
2
2
  function relatedPostsInTopic() {
3
- if (page.topic?.length == 0) {
4
- return ''
5
- }
6
- var topic = theme.topic.tree[page.topic]
7
- if (topic == null) {
8
- return ''
9
- }
10
- var entries = []
11
- for (var post of topic.pages) {
12
- entries.push({
3
+ var topicViewModel = typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'topic'
4
+ ? viewModel
5
+ : null
6
+ if (!topicViewModel) return ''
7
+ var entries = topicViewModel.collection.navigation.series.map(function(post) {
8
+ return {
13
9
  href: pretty_url(post.path),
14
10
  title: post.title,
15
- active: post.path == page.path
16
- })
17
- }
11
+ active: post.current
12
+ }
13
+ })
18
14
  var body = partial('_partial/components/collection', {options: {
19
15
  layout: 'list',
20
16
  variant: 'nav',
@@ -23,32 +19,27 @@ function relatedPostsInTopic() {
23
19
  }})
24
20
  return partial('_partial/components/widget-frame', {
25
21
  className: 'related-widget',
26
- title: __('btn.topic') + __('symbol.colon') + (topic.name || topic.title),
22
+ title: __('btn.topic') + __('symbol.colon') + (topicViewModel.collection.identity.headline || topicViewModel.collection.identity.name),
27
23
  body: body,
28
24
  reveal: false
29
25
  })
30
26
  }
31
27
 
32
28
  function relatedWiki() {
33
- var thisItemObject = theme.wiki.tree[page.wiki]
34
- if (thisItemObject == null) {
35
- return ''
36
- }
37
- var relatedItems = thisItemObject.relatedItems || []
29
+ var wikiViewModel = typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'wiki'
30
+ ? viewModel
31
+ : null
32
+ if (!wikiViewModel) return ''
38
33
  var el = ''
39
- for (var relatedItem of relatedItems) {
40
- var entries = []
41
- for (var id of relatedItem.items) {
42
- var relatedProject = theme.wiki.tree[id]
43
- if (relatedProject) {
44
- entries.push({
45
- href: pretty_url(relatedProject.homepage?.path),
46
- title: relatedProject.title,
47
- description: relatedProject.description,
48
- indicator: false
49
- })
34
+ for (var relatedItem of wikiViewModel.render.article.related) {
35
+ var entries = relatedItem.items.map(function(project) {
36
+ return {
37
+ href: pretty_url(project.href),
38
+ title: project.title,
39
+ description: project.description,
40
+ indicator: false
50
41
  }
51
- }
42
+ })
52
43
  var body = partial('_partial/components/collection', {options: {
53
44
  layout: 'list',
54
45
  variant: 'summary',
@@ -65,10 +56,10 @@ function relatedWiki() {
65
56
  }
66
57
 
67
58
  function layoutDiv() {
68
- if (page.wiki?.length > 0) {
69
- return relatedWiki()
70
- } else if (page.topic?.length > 0) {
59
+ if (typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'topic') {
71
60
  return relatedPostsInTopic()
61
+ } else if (typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'wiki') {
62
+ return relatedWiki()
72
63
  }
73
64
  return ''
74
65
  }
@@ -0,0 +1,17 @@
1
+ <%
2
+ var settingsPlacement = typeof placement === 'string' ? placement : 'leftbar'
3
+ var provider = stellar_config('comments.provider') || ''
4
+ var supportedProvider = ['artalk', 'waline', 'twikoo'].includes(provider.toLowerCase())
5
+ var identityEnabled = supportedProvider
6
+ var settingsName = __('settings.label')
7
+ var settingsProfile = stellar_config('profiles.settings')
8
+ var settingsUrl = settingsProfile?.path || '/settings/'
9
+ var fallbackAvatar = stellar_config('fallbacks.avatar') || ''
10
+ var fallbackAvatarUrl = fallbackAvatar ? url_for(fallbackAvatar) : ''
11
+ %>
12
+ <a class="<%- ui_classes('settings-widget', 'collectionItem') %>" href="<%- escape_html(url_for(settingsUrl)) %>" data-profile-provider="<%- escape_html(provider) %>" data-profile-identity-enabled="<%- identityEnabled ? 'true' : 'false' %>" data-profile-fallback-avatar="<%- escape_html(fallbackAvatarUrl) %>" data-settings-placement="<%- escape_html(settingsPlacement) %>" data-settings-label="<%- escape_html(settingsName) %>" aria-label="<%- escape_html(settingsName) %>" title="<%- escape_html(settingsName) %>">
13
+ <span class="settings-widget__avatar" aria-hidden="true">
14
+ <span class="ui-icon"><%- icon('default:settings', '', true) %></span>
15
+ </span>
16
+ <span class="settings-widget__name ui-collection__title"><%- settingsName %></span>
17
+ </a>
@@ -1,18 +1,26 @@
1
1
  <%
2
- var notebook = theme.notebooks.tree[page.notebook]
3
- var tagTree = notebook?.tagTree
2
+ var notebookViewModel = typeof viewModel !== 'undefined' && viewModel?.collection?.profile === 'notebook'
3
+ ? viewModel
4
+ : null
5
+ var notebookIndex = page.notebookIndex?.mode === 'notes' ? page.notebookIndex : null
6
+ var tagTreeItems = notebookViewModel
7
+ ? notebookViewModel.render.layout.tagTree
8
+ : notebookIndex?.tags || []
9
+ var tagTree = new Map(tagTreeItems.map(tag => [tag.id, tag]))
10
+ var activeTag = notebookIndex?.activeTag || ''
11
+ var notebookId = notebookViewModel?.collection.id || notebookIndex?.collection.id || ''
4
12
 
5
13
  function isLeaf(tag) {
6
14
  return tag.id === '' || tag.children.length === 0
7
15
  }
8
16
 
9
17
  function getTagcon(tag) {
10
- var tagcons = theme.notebook.tagcons || {}
11
- return tagcons[tag.name] || tagcons[tag.id] || tagcons[tag.part] || tagcons[tag.part.toLowerCase()] || tagcons['']
18
+ var tagIcons = stellar_config('profiles.notebook.tagIcons') || {}
19
+ return tagIcons[tag.name] || tagIcons[tag.id] || tagIcons[tag.label] || tagIcons[tag.label.toLowerCase()] || 'quot:hashtag'
12
20
  }
13
21
 
14
22
  function layoutTag(tag, level) {
15
- var active = page.activeTag === tag.id
23
+ var active = activeTag === tag.id
16
24
  var tagcon = tag.id !== '' && item.show_tagcon ? getTagcon(tag) : ''
17
25
  var trailing = ''
18
26
  if (!isLeaf(tag)) {
@@ -21,7 +29,7 @@ function layoutTag(tag, level) {
21
29
  return partial('_partial/components/collection-item', {
22
30
  item: {
23
31
  href: pretty_url(tag.path),
24
- title: tag.id === '' ? __('meta.all_notes') : tag.part,
32
+ title: tag.id === '' ? __('meta.all_notes') : tag.label,
25
33
  icon: tagcon,
26
34
  active: active,
27
35
  indicator: false,
@@ -36,8 +44,8 @@ function tagAndSub(tag, level) {
36
44
  if (!tag) {
37
45
  return ''
38
46
  }
39
- var active = page.activeTag === tag.id
40
- var expanded = item.expand_all || (item.expand_active && active) || page.activeTag?.startsWith(tag.id + '/')
47
+ var active = activeTag === tag.id
48
+ var expanded = item.expand_all || (item.expand_active && active) || activeTag.startsWith(tag.id + '/')
41
49
  var classes = isLeaf(tag) ? ' is-leaf' : ' is-parent'
42
50
  if (expanded) {
43
51
  classes += ' is-expanded'
@@ -54,7 +62,7 @@ function tagAndSub(tag, level) {
54
62
  }
55
63
 
56
64
  function layoutDiv() {
57
- if (!tagTree) {
65
+ if (!tagTree.has('')) {
58
66
  return ''
59
67
  }
60
68
  var body = '<div class="ui-collection tag-tree" data-layout="list" data-variant="nav" data-density="compact">'
@@ -67,7 +75,7 @@ function layoutDiv() {
67
75
  className: 'tag-tree-widget',
68
76
  title: __('meta.tag_tree'),
69
77
  body: body,
70
- attrs: {'data-notebook': page.notebook}
78
+ attrs: {'data-notebook': notebookId}
71
79
  })
72
80
  }
73
81
  %>
@@ -1,6 +1,8 @@
1
1
  <%
2
2
  function layoutTocBody() {
3
- var tocBody = toc(page.content, {
3
+ var activeViewModel = typeof viewModel !== 'undefined' ? viewModel : null
4
+ var content = activeViewModel ? activeViewModel.item.content : page.content
5
+ var tocBody = toc(content, {
4
6
  list_number: item.list_number,
5
7
  min_depth: item.min_depth,
6
8
  max_depth: item.max_depth
@@ -8,21 +10,23 @@ function layoutTocBody() {
8
10
  if (tocBody.length === 0) {
9
11
  return ''
10
12
  }
11
- return tocBody.replace('class="toc"', 'class="toc ui-collection-adapter"')
13
+ return tocBody
14
+ .replace('class="toc"', 'class="toc ui-collection-adapter"')
15
+ .replace(/class="toc-link/g, 'class="' + ui_classes('toc-link', 'interactive'))
12
16
  }
13
17
 
14
18
  function layoutTocAction() {
15
- return '<a class="cap-action" onclick="sidebar.toggleTOC()">' + icon('default:rightbar', '', true) + '</a>'
19
+ return '<button type="button" class="' + ui_classes('cap-action') + '" data-shell-action="toggle-toc" aria-label="Toggle table of contents" aria-pressed="false"><span class="ui-icon">' + icon('default:rightbar', '', true) + '</span></button>'
16
20
  }
17
21
 
18
22
  function layoutFooter(hasComments) {
19
23
  var footer = '<div class="widget-footer">'
20
- footer += '<a class="top" onclick="util.scrollTop()">'
21
- footer += icon('default:upup', '', true)
24
+ footer += '<a class="' + ui_classes('top', 'interactive') + '" onclick="util.scrollTop()">'
25
+ footer += '<span class="ui-icon">' + icon('default:to-top', '', true) + '</span>'
22
26
  footer += '<span>' + __('btn.top') + '</span></a>'
23
27
  if (hasComments) {
24
- footer += '<a class="buttom" onclick="util.scrollComment()">'
25
- footer += icon('default:tocomment', '', true)
28
+ footer += '<a class="' + ui_classes('buttom', 'interactive') + '" onclick="util.scrollComment()">'
29
+ footer += '<span class="ui-icon">' + icon('default:to-comment', '', true) + '</span>'
26
30
  footer += '<span>' + __('btn.comments') + '</span></a>'
27
31
  }
28
32
  footer += '</div>'
@@ -30,10 +34,14 @@ function layoutFooter(hasComments) {
30
34
  }
31
35
 
32
36
  function layoutDiv() {
37
+ var activeViewModel = typeof viewModel !== 'undefined' ? viewModel : null
38
+ var wikiViewModel = activeViewModel?.collection?.profile === 'wiki' ? activeViewModel : null
33
39
  var tocBody = layoutTocBody()
34
40
  var hasToc = tocBody.trim().length > 0
35
- var hasRemoteMd = has_remote_md(page)
36
- var hasComments = page.cmt_rendered === true
41
+ var hasRemoteMd = wikiViewModel ? wikiViewModel.render.article.readmeHtml.length > 0 : has_remote_md(page)
42
+ var hasComments = activeViewModel
43
+ ? activeViewModel.render.article.comments.enabled
44
+ : comments_model(page).enabled
37
45
  if (!hasToc && !hasRemoteMd && !hasComments) {
38
46
  return ''
39
47
  }