hexo-theme-redefine-x 2.8.5

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 (319) hide show
  1. package/.github/ISSUE_TEMPLATE/bug-chinese.yml +115 -0
  2. package/.github/ISSUE_TEMPLATE/bug-english.yml +106 -0
  3. package/.github/ISSUE_TEMPLATE/enhancement-chinese.yml +55 -0
  4. package/.github/ISSUE_TEMPLATE/enhancement-english.yml +55 -0
  5. package/.github/workflows/build-and-commit.yml +49 -0
  6. package/.github/workflows/npm-publish.yml +34 -0
  7. package/.github/workflows/stale-issues.yml +20 -0
  8. package/CHANGELOG_REDEFINE_X.md +236 -0
  9. package/CODE_OF_CONDUCT.md +128 -0
  10. package/CONTRIBUTING.md +51 -0
  11. package/DONATION.md +82 -0
  12. package/LICENSE +674 -0
  13. package/README.md +135 -0
  14. package/README_zh-CN.md +138 -0
  15. package/README_zh-TW.md +137 -0
  16. package/TODO.md +215 -0
  17. package/_config.yml +489 -0
  18. package/languages/en.yml +93 -0
  19. package/languages/es.yml +92 -0
  20. package/languages/fr.yml +92 -0
  21. package/languages/ja.yml +92 -0
  22. package/languages/zh-CN.yml +95 -0
  23. package/languages/zh-TW.yml +94 -0
  24. package/layout/404.ejs +1 -0
  25. package/layout/archive.ejs +1 -0
  26. package/layout/category.ejs +1 -0
  27. package/layout/components/comments/comment.ejs +22 -0
  28. package/layout/components/comments/giscus.ejs +42 -0
  29. package/layout/components/comments/gitalk.ejs +47 -0
  30. package/layout/components/comments/twikoo.ejs +50 -0
  31. package/layout/components/comments/waline.ejs +34 -0
  32. package/layout/components/footer/footer.ejs +99 -0
  33. package/layout/components/header/head.ejs +222 -0
  34. package/layout/components/header/navbar.ejs +163 -0
  35. package/layout/components/header/preloader.ejs +148 -0
  36. package/layout/components/header/progress-bar.ejs +12 -0
  37. package/layout/components/plugins/aplayer.ejs +3 -0
  38. package/layout/components/scripts.ejs +90 -0
  39. package/layout/components/sidebar/author.ejs +6 -0
  40. package/layout/components/sidebar/avatar.ejs +3 -0
  41. package/layout/components/sidebar/statistics.ejs +14 -0
  42. package/layout/components/swup.ejs +27 -0
  43. package/layout/index.ejs +1 -0
  44. package/layout/layout.ejs +13 -0
  45. package/layout/page.ejs +57 -0
  46. package/layout/pages/archive/archive.ejs +3 -0
  47. package/layout/pages/bookmarks/bookmarks.ejs +68 -0
  48. package/layout/pages/category/categories.ejs +11 -0
  49. package/layout/pages/category/category-detail.ejs +6 -0
  50. package/layout/pages/friends/friends-link.ejs +59 -0
  51. package/layout/pages/home/home-article.ejs +52 -0
  52. package/layout/pages/home/home-background.ejs +33 -0
  53. package/layout/pages/home/home-banner.ejs +234 -0
  54. package/layout/pages/home/home-content.ejs +62 -0
  55. package/layout/pages/home/home-sidebar.ejs +78 -0
  56. package/layout/pages/masonry/masonry.ejs +28 -0
  57. package/layout/pages/notfound/notfound.ejs +8 -0
  58. package/layout/pages/page-template.ejs +23 -0
  59. package/layout/pages/post/article-content.ejs +153 -0
  60. package/layout/pages/post/article-copyright.ejs +69 -0
  61. package/layout/pages/post/article-info.ejs +78 -0
  62. package/layout/pages/post/post-tools.ejs +17 -0
  63. package/layout/pages/post/toc.ejs +15 -0
  64. package/layout/pages/shuoshuo/essays.ejs +23 -0
  65. package/layout/pages/tag/tag-detail.ejs +6 -0
  66. package/layout/pages/tag/tags.ejs +24 -0
  67. package/layout/post.ejs +1 -0
  68. package/layout/tag.ejs +1 -0
  69. package/layout/tags.ejs +1 -0
  70. package/layout/utils/image-viewer.ejs +3 -0
  71. package/layout/utils/local-search.ejs +20 -0
  72. package/layout/utils/paginator.ejs +8 -0
  73. package/layout/utils/posts-list.ejs +28 -0
  74. package/layout/utils/side-tools.ejs +51 -0
  75. package/package.json +45 -0
  76. package/scripts/config-export.js +66 -0
  77. package/scripts/data-handle.js +37 -0
  78. package/scripts/events/404.js +16 -0
  79. package/scripts/events/welcome.js +141 -0
  80. package/scripts/filters/delete-mask-handle.js +27 -0
  81. package/scripts/filters/encrypt.js +202 -0
  82. package/scripts/filters/img-handle.js +9 -0
  83. package/scripts/filters/lazyload-handle.js +350 -0
  84. package/scripts/filters/lib/hbe.default.js +15 -0
  85. package/scripts/filters/link-handle.js +42 -0
  86. package/scripts/filters/stylus-handle.js +9 -0
  87. package/scripts/filters/table-handle.js +11 -0
  88. package/scripts/helpers/meta-helpers.js +38 -0
  89. package/scripts/helpers/page-helpers.js +153 -0
  90. package/scripts/helpers/recommendation-helpers.js +367 -0
  91. package/scripts/helpers/theme-helpers.js +251 -0
  92. package/scripts/helpers/waline-helpers.js +33 -0
  93. package/scripts/modules/btn.js +85 -0
  94. package/scripts/modules/btns.js +71 -0
  95. package/scripts/modules/folding.js +34 -0
  96. package/scripts/modules/note-large.js +72 -0
  97. package/scripts/modules/note.js +64 -0
  98. package/scripts/modules/tabs.js +99 -0
  99. package/source/assets/hbe.style.css +220 -0
  100. package/source/assets/odometer-theme-minimal.css +81 -0
  101. package/source/css/build/tailwind.css +2 -0
  102. package/source/css/common/animated.styl +71 -0
  103. package/source/css/common/basic.styl +239 -0
  104. package/source/css/common/codeblock/code-block.styl +158 -0
  105. package/source/css/common/codeblock/code-theme.styl +82 -0
  106. package/source/css/common/codeblock/highlight.styl +189 -0
  107. package/source/css/common/codeblock/hljs-themes/dark/a11y-dark.styl +18 -0
  108. package/source/css/common/codeblock/hljs-themes/dark/agate.styl +18 -0
  109. package/source/css/common/codeblock/hljs-themes/dark/atom-one-dark.styl +18 -0
  110. package/source/css/common/codeblock/hljs-themes/dark/github-dark.styl +18 -0
  111. package/source/css/common/codeblock/hljs-themes/dark/monokai-sublime.styl +18 -0
  112. package/source/css/common/codeblock/hljs-themes/dark/night-owl.styl +18 -0
  113. package/source/css/common/codeblock/hljs-themes/dark/nord.styl +18 -0
  114. package/source/css/common/codeblock/hljs-themes/dark/tokyo-night-dark.styl +18 -0
  115. package/source/css/common/codeblock/hljs-themes/dark/vs2015.styl +18 -0
  116. package/source/css/common/codeblock/hljs-themes/light/atom-one-light.styl +18 -0
  117. package/source/css/common/codeblock/hljs-themes/light/default.styl +18 -0
  118. package/source/css/common/codeblock/hljs-themes/light/github.styl +18 -0
  119. package/source/css/common/colors.styl +112 -0
  120. package/source/css/common/markdown.styl +337 -0
  121. package/source/css/common/redefine-theme.styl +65 -0
  122. package/source/css/common/theme.styl +72 -0
  123. package/source/css/common/variables.styl +145 -0
  124. package/source/css/layout/_modules/aplayer.styl +799 -0
  125. package/source/css/layout/_modules/buttons.styl +42 -0
  126. package/source/css/layout/_modules/folding.styl +180 -0
  127. package/source/css/layout/_modules/notes.styl +181 -0
  128. package/source/css/layout/_modules/tabs.styl +105 -0
  129. package/source/css/layout/_partials/404.styl +14 -0
  130. package/source/css/layout/_partials/archive-list.styl +49 -0
  131. package/source/css/layout/_partials/article-copyright-info.styl +27 -0
  132. package/source/css/layout/_partials/article-meta-info.styl +62 -0
  133. package/source/css/layout/_partials/comments/comment.styl +11 -0
  134. package/source/css/layout/_partials/comments/gitalk.styl +529 -0
  135. package/source/css/layout/_partials/comments/twikoo.styl +62 -0
  136. package/source/css/layout/_partials/comments/waline.styl +1151 -0
  137. package/source/css/layout/_partials/footer.styl +59 -0
  138. package/source/css/layout/_partials/home-banner.styl +48 -0
  139. package/source/css/layout/_partials/image-viewer.styl +37 -0
  140. package/source/css/layout/_partials/local-search.styl +137 -0
  141. package/source/css/layout/_partials/navbar.styl +309 -0
  142. package/source/css/layout/_partials/page-template.styl +147 -0
  143. package/source/css/layout/_partials/paginator.styl +65 -0
  144. package/source/css/layout/_partials/post-tools.styl +43 -0
  145. package/source/css/layout/_partials/progress-bar.styl +33 -0
  146. package/source/css/layout/_partials/side-tools.styl +87 -0
  147. package/source/css/layout/_partials/tagcloud.styl +136 -0
  148. package/source/css/layout/_partials/toc.styl +105 -0
  149. package/source/css/layout/animations.styl +42 -0
  150. package/source/css/layout/archive-content.styl +8 -0
  151. package/source/css/layout/article-content.styl +257 -0
  152. package/source/css/layout/bookmarks.styl +8 -0
  153. package/source/css/layout/category-content.styl +21 -0
  154. package/source/css/layout/category-list.styl +119 -0
  155. package/source/css/layout/home-content.styl +114 -0
  156. package/source/css/layout/home-sidebar.styl +126 -0
  157. package/source/css/layout/page.styl +144 -0
  158. package/source/css/layout/tag-content.styl +30 -0
  159. package/source/css/style.styl +26 -0
  160. package/source/css/tailwind.source.css +236 -0
  161. package/source/fontawesome/all.min.css +6 -0
  162. package/source/fontawesome/brands.min.css +6 -0
  163. package/source/fontawesome/duotone.min.css +6 -0
  164. package/source/fontawesome/fontawesome.min.css +6 -0
  165. package/source/fontawesome/light.min.css +6 -0
  166. package/source/fontawesome/regular.min.css +6 -0
  167. package/source/fontawesome/sharp-solid.min.css +6 -0
  168. package/source/fontawesome/solid.min.css +6 -0
  169. package/source/fontawesome/svg-with-js.min.css +6 -0
  170. package/source/fontawesome/thin.min.css +6 -0
  171. package/source/fontawesome/v4-font-face.min.css +6 -0
  172. package/source/fontawesome/v4-shims.min.css +6 -0
  173. package/source/fontawesome/v5-font-face.min.css +6 -0
  174. package/source/fonts/Chillax/Chillax-Variable.eot +0 -0
  175. package/source/fonts/Chillax/Chillax-Variable.ttf +0 -0
  176. package/source/fonts/Chillax/Chillax-Variable.woff +0 -0
  177. package/source/fonts/Chillax/Chillax-Variable.woff2 +0 -0
  178. package/source/fonts/Chillax/chillax.css +39 -0
  179. package/source/fonts/Geist/GeistVF.ttf +0 -0
  180. package/source/fonts/Geist/GeistVF.woff +0 -0
  181. package/source/fonts/Geist/GeistVF.woff2 +0 -0
  182. package/source/fonts/Geist/geist.css +16 -0
  183. package/source/fonts/GeistMono/GeistMonoVF.ttf +0 -0
  184. package/source/fonts/GeistMono/GeistMonoVF.woff +0 -0
  185. package/source/fonts/GeistMono/GeistMonoVF.woff2 +0 -0
  186. package/source/fonts/GeistMono/geist-mono.css +16 -0
  187. package/source/images/bookmark-placeholder.svg +9 -0
  188. package/source/images/loading.svg +5 -0
  189. package/source/images/redefine-avatar.svg +1 -0
  190. package/source/images/redefine-favicon.svg +1 -0
  191. package/source/images/redefine-logo.svg +1 -0
  192. package/source/images/redefine-logo.webp +0 -0
  193. package/source/images/redefine-og.webp +0 -0
  194. package/source/images/wallhaven-wqery6-dark.webp +0 -0
  195. package/source/images/wallhaven-wqery6-light.webp +0 -0
  196. package/source/js/build/layouts/bookmarkNav.js +2 -0
  197. package/source/js/build/layouts/bookmarkNav.js.map +1 -0
  198. package/source/js/build/layouts/categoryList.js +2 -0
  199. package/source/js/build/layouts/categoryList.js.map +1 -0
  200. package/source/js/build/layouts/essays.js +2 -0
  201. package/source/js/build/layouts/essays.js.map +1 -0
  202. package/source/js/build/layouts/lazyload.js +2 -0
  203. package/source/js/build/layouts/lazyload.js.map +1 -0
  204. package/source/js/build/layouts/navbarShrink.js +2 -0
  205. package/source/js/build/layouts/navbarShrink.js.map +1 -0
  206. package/source/js/build/layouts/toc.js +2 -0
  207. package/source/js/build/layouts/toc.js.map +1 -0
  208. package/source/js/build/libs/APlayer.min.js +2 -0
  209. package/source/js/build/libs/Swup.min.js +2 -0
  210. package/source/js/build/libs/SwupPreloadPlugin.min.js +1 -0
  211. package/source/js/build/libs/SwupProgressPlugin.min.js +1 -0
  212. package/source/js/build/libs/SwupScriptsPlugin.min.js +1 -0
  213. package/source/js/build/libs/SwupScrollPlugin.min.js +1 -0
  214. package/source/js/build/libs/SwupSlideTheme.min.js +1 -0
  215. package/source/js/build/libs/Typed.min.js +10 -0
  216. package/source/js/build/libs/anime.min.js +8 -0
  217. package/source/js/build/libs/mermaid.min.js +2314 -0
  218. package/source/js/build/libs/minimasonry.min.js +1 -0
  219. package/source/js/build/libs/moment-with-locales.min.js +2 -0
  220. package/source/js/build/libs/moment.min.js +2 -0
  221. package/source/js/build/libs/odometer.min.js +2 -0
  222. package/source/js/build/libs/pangu.min.js +9 -0
  223. package/source/js/build/libs/pjax.min.js +1 -0
  224. package/source/js/build/libs/waline.js +84 -0
  225. package/source/js/build/main.js +2 -0
  226. package/source/js/build/main.js.map +1 -0
  227. package/source/js/build/plugins/aplayer.js +2 -0
  228. package/source/js/build/plugins/aplayer.js.map +1 -0
  229. package/source/js/build/plugins/hbe.js +2 -0
  230. package/source/js/build/plugins/hbe.js.map +1 -0
  231. package/source/js/build/plugins/masonry.js +2 -0
  232. package/source/js/build/plugins/masonry.js.map +1 -0
  233. package/source/js/build/plugins/mermaid.js +2 -0
  234. package/source/js/build/plugins/mermaid.js.map +1 -0
  235. package/source/js/build/plugins/pangu.js +2 -0
  236. package/source/js/build/plugins/pangu.js.map +1 -0
  237. package/source/js/build/plugins/tabs.js +2 -0
  238. package/source/js/build/plugins/tabs.js.map +1 -0
  239. package/source/js/build/plugins/typed.js +2 -0
  240. package/source/js/build/plugins/typed.js.map +1 -0
  241. package/source/js/build/tools/codeBlock.js +2 -0
  242. package/source/js/build/tools/codeBlock.js.map +1 -0
  243. package/source/js/build/tools/imageViewer.js +2 -0
  244. package/source/js/build/tools/imageViewer.js.map +1 -0
  245. package/source/js/build/tools/lightDarkSwitch.js +2 -0
  246. package/source/js/build/tools/lightDarkSwitch.js.map +1 -0
  247. package/source/js/build/tools/localSearch.js +2 -0
  248. package/source/js/build/tools/localSearch.js.map +1 -0
  249. package/source/js/build/tools/runtime.js +2 -0
  250. package/source/js/build/tools/runtime.js.map +1 -0
  251. package/source/js/build/tools/scrollTopBottom.js +2 -0
  252. package/source/js/build/tools/scrollTopBottom.js.map +1 -0
  253. package/source/js/build/tools/tocToggle.js +2 -0
  254. package/source/js/build/tools/tocToggle.js.map +1 -0
  255. package/source/js/build/utils.js +2 -0
  256. package/source/js/build/utils.js.map +1 -0
  257. package/source/js/build.js +148 -0
  258. package/source/js/layouts/bookmarkNav.js +65 -0
  259. package/source/js/layouts/categoryList.js +53 -0
  260. package/source/js/layouts/essays.js +25 -0
  261. package/source/js/layouts/lazyload.js +199 -0
  262. package/source/js/layouts/navbarShrink.js +135 -0
  263. package/source/js/layouts/toc.js +115 -0
  264. package/source/js/libs/APlayer.min.js +2 -0
  265. package/source/js/libs/APlayer.min.js.map +1 -0
  266. package/source/js/libs/Swup.min.js +2 -0
  267. package/source/js/libs/Swup.min.js.map +1 -0
  268. package/source/js/libs/SwupPreloadPlugin.min.js +1 -0
  269. package/source/js/libs/SwupPreloadPlugin.min.js.map +1 -0
  270. package/source/js/libs/SwupProgressPlugin.min.js +1 -0
  271. package/source/js/libs/SwupScriptsPlugin.min.js +1 -0
  272. package/source/js/libs/SwupScrollPlugin.min.js +1 -0
  273. package/source/js/libs/SwupScrollPlugin.min.js.map +1 -0
  274. package/source/js/libs/SwupSlideTheme.min.js +1 -0
  275. package/source/js/libs/Typed.min.js +10 -0
  276. package/source/js/libs/anime.min.js +8 -0
  277. package/source/js/libs/mermaid.min.js +2314 -0
  278. package/source/js/libs/mermaid.min.js.map +7 -0
  279. package/source/js/libs/minimasonry.min.js +1 -0
  280. package/source/js/libs/moment-with-locales.min.js +2 -0
  281. package/source/js/libs/moment.min.js +2 -0
  282. package/source/js/libs/odometer.min.js +2 -0
  283. package/source/js/libs/pangu.min.js +9 -0
  284. package/source/js/libs/pjax.min.js +1 -0
  285. package/source/js/libs/waline.js +84 -0
  286. package/source/js/libs/waline.js.map +1 -0
  287. package/source/js/main.js +95 -0
  288. package/source/js/plugins/aplayer.js +33 -0
  289. package/source/js/plugins/hbe.js +350 -0
  290. package/source/js/plugins/masonry.js +115 -0
  291. package/source/js/plugins/mermaid.js +7 -0
  292. package/source/js/plugins/pangu.js +12 -0
  293. package/source/js/plugins/tabs.js +29 -0
  294. package/source/js/plugins/typed.js +62 -0
  295. package/source/js/tools/codeBlock.js +48 -0
  296. package/source/js/tools/imageViewer.js +194 -0
  297. package/source/js/tools/lightDarkSwitch.js +165 -0
  298. package/source/js/tools/localSearch.js +327 -0
  299. package/source/js/tools/runtime.js +28 -0
  300. package/source/js/tools/scrollTopBottom.js +34 -0
  301. package/source/js/tools/tocToggle.js +58 -0
  302. package/source/js/utils.js +383 -0
  303. package/source/webfonts/fa-brands-400.ttf +0 -0
  304. package/source/webfonts/fa-brands-400.woff2 +0 -0
  305. package/source/webfonts/fa-duotone-900.ttf +0 -0
  306. package/source/webfonts/fa-duotone-900.woff2 +0 -0
  307. package/source/webfonts/fa-light-300.ttf +0 -0
  308. package/source/webfonts/fa-light-300.woff2 +0 -0
  309. package/source/webfonts/fa-regular-400.ttf +0 -0
  310. package/source/webfonts/fa-regular-400.woff2 +0 -0
  311. package/source/webfonts/fa-sharp-solid-900.ttf +0 -0
  312. package/source/webfonts/fa-sharp-solid-900.woff2 +0 -0
  313. package/source/webfonts/fa-solid-900.ttf +0 -0
  314. package/source/webfonts/fa-solid-900.woff2 +0 -0
  315. package/source/webfonts/fa-thin-100.ttf +0 -0
  316. package/source/webfonts/fa-thin-100.woff2 +0 -0
  317. package/source/webfonts/fa-v4compatibility.ttf +0 -0
  318. package/source/webfonts/fa-v4compatibility.woff2 +0 -0
  319. package/vercel.json +7 -0
@@ -0,0 +1,27 @@
1
+ <%- renderJS([
2
+ 'libs/Swup.min.js',
3
+ 'libs/SwupSlideTheme.min.js',
4
+ 'libs/SwupScriptsPlugin.min.js',
5
+ 'libs/SwupProgressPlugin.min.js',
6
+ 'libs/SwupScrollPlugin.min.js',
7
+ 'libs/SwupPreloadPlugin.min.js']
8
+ ) %>
9
+ <script>
10
+ const swup = new Swup({
11
+ plugins: [
12
+ new SwupScriptsPlugin({
13
+ optin: true,
14
+ }),
15
+ new SwupProgressPlugin(),
16
+ new SwupScrollPlugin({
17
+ offset: 80,
18
+ }),
19
+ new SwupSlideTheme({
20
+ mainElement: ".main-content-body",
21
+ }),
22
+ new SwupPreloadPlugin(),
23
+ ],
24
+ containers: ["#swup"],
25
+ });
26
+ </script>
27
+
@@ -0,0 +1 @@
1
+ <%- partial('page') %>
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= config.language %>">
3
+ <%- partial('components/header/head') %>
4
+
5
+ <body>
6
+ <%- body %>
7
+ <%- partial('components/scripts') %>
8
+ <% if (theme.plugins.aplayer.enable) { %>
9
+ <%- partial('components/plugins/aplayer') %>
10
+ <% } %>
11
+ </body>
12
+
13
+ </html>
@@ -0,0 +1,57 @@
1
+ <%- partial('components/header/progress-bar') %>
2
+ <% if (theme.global.preloader === true || theme.global.preloader.enable === true) { %>
3
+ <%- partial('components/header/preloader') %>
4
+ <% } %>
5
+ <main class="page-container" id="swup">
6
+
7
+ <% if (theme.home_banner.enable === true && is_home() && !page.prev) { %>
8
+ <%- partial('pages/home/home-banner') %>
9
+ <% } else if (theme.home_banner.enable === true && is_home() && page.prev && theme.home_banner.style === "fixed") { %>
10
+ <%- partial('pages/home/home-background') %>
11
+ <% } %>
12
+
13
+ <div class="main-content-container flex flex-col justify-between min-h-dvh">
14
+ <div class="main-content-header">
15
+ <%- partial('components/header/navbar') %>
16
+ </div>
17
+
18
+ <div class="main-content-body transition-fade-up">
19
+ <% if (is_home() && theme.home.sidebar.enable === true && theme.home.sidebar.position === "left") { %>
20
+ <%- partial('pages/home/home-sidebar') %>
21
+ <% } %>
22
+
23
+ <div class="main-content">
24
+ <%- partial(getPagePartialPath(page)) %>
25
+ </div>
26
+
27
+ <% if (is_home() && theme.home.sidebar.enable === true && theme.home.sidebar.position === "right") { %>
28
+ <%- partial('pages/home/home-sidebar') %>
29
+ <% } %>
30
+ </div>
31
+
32
+ <div class="main-content-footer">
33
+ <%- partial('components/footer/footer') %>
34
+ </div>
35
+ </div>
36
+
37
+ <% if (is_post()) { %>
38
+ <div class="post-tools">
39
+ <%- partial('pages/post/post-tools') %>
40
+ </div>
41
+ <% } %>
42
+
43
+ <div class="right-side-tools-container">
44
+ <%- partial('utils/side-tools') %>
45
+ </div>
46
+
47
+ <%- partial('utils/image-viewer') %>
48
+
49
+ <% if (theme.navbar.search.enable) { %>
50
+ <%- partial('utils/local-search') %>
51
+ <% } %>
52
+
53
+ </main>
54
+
55
+ <% if (theme.global.single_page !== false) { %>
56
+ <%- partial('components/swup') %>
57
+ <% } %>
@@ -0,0 +1,3 @@
1
+ <div class="archive-container shadow-none hover:shadow-none sm:shadow-redefine sm:hover:shadow-redefine-hover">
2
+ <%- partial('utils/posts-list', {posts: site.posts}) %>
3
+ </div>
@@ -0,0 +1,68 @@
1
+ <div class="py-8 sm:py-0">
2
+
3
+
4
+ <h1 class="page-title-header">
5
+ <%- getPageTitle(page) %>
6
+ </h1>
7
+ <div class="flex flex-col md:flex-row gap-6 md:gap-12 w-full">
8
+
9
+
10
+ <!-- Left Sidebar - Categories -->
11
+ <div class="w-full md:w-48 shrink-0 md:sticky md:top-[var(--navbar-height)] h-fit sm:py-6">
12
+ <nav class="flex md:block overflow-x-auto scrollbar-hide pb-4 md:pb-0 gap-2">
13
+ <% for (const category of theme.bookmarks) { %>
14
+ <a href="#<%= category.category.toLowerCase().replace(/\s+/g, '-') %>" class="whitespace-nowrap md:whitespace-normal block px-3 py-2 rounded-lg
15
+ hover:bg-second-background-color hover:text-primary hover:scale-102
16
+ transition-all duration-200 border border-transparent
17
+ hover:border-second-background-color
18
+ shrink-0 font-medium
19
+ bookmark-nav-item"
20
+ data-category="<%= category.category.toLowerCase().replace(/\s+/g, '-') %>">
21
+ <i class="fa-regular <%= category.icon %> mr-2 w-6 h-6"></i>
22
+ <%= category.category %>
23
+ </a>
24
+ <% } %>
25
+ </nav>
26
+ </div>
27
+
28
+ <!-- Right Content - Bookmarks -->
29
+ <div class="flex-1 max-w-full">
30
+ <% for (const category of theme.bookmarks) { %>
31
+ <section id="<%= category.category.toLowerCase().replace(/\s+/g, '-') %>" class="mb-12">
32
+ <h2 class="text-2xl font-semibold text-second-text-color mb-4 pb-2 border-b border-border-color">
33
+ <%= category.category %>
34
+ </h2>
35
+
36
+ <div class="grid gap-6 lg:grid-cols-2">
37
+ <% for (const item of category.items) { %>
38
+ <a href="<%= item.link %>" target="_blank" rel="noopener noreferrer" class="group block">
39
+ <div class="p-5 rounded-xl redefine-box-shadow-flat transition-all duration-300
40
+ hover:transform hover:-translate-y-1">
41
+ <div class="flex items-center gap-5">
42
+ <div class="w-12 h-12 rounded-xl overflow-hidden bg-second-background-color shrink-0
43
+ transform group-hover:scale-105 transition-transform duration-300">
44
+ <img src="<%= item.image %>" alt="<%= item.name %>" class="w-full h-full object-cover" onerror="this.src='/images/bookmark-placeholder.svg'">
45
+ </div>
46
+ <div class="flex-1 min-w-0 flex flex-col gap-1">
47
+ <div class="flex items-center justify-between">
48
+ <h3 class="font-medium text-second-text-color group-hover:text-primary transition-colors">
49
+ <%= item.name %>
50
+ </h3>
51
+ <i class="fa-regular fa-arrow-right text-third-text-color opacity-0 group-hover:opacity-100 -translate-x-1
52
+ group-hover:translate-x-0 transition-all duration-300"></i>
53
+ </div>
54
+ <p class="text-sm text-third-text-color line-clamp-2">
55
+ <%= item.description %>
56
+ </p>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </a>
61
+ <% } %>
62
+ </div>
63
+ </section>
64
+ <% } %>
65
+ </div>
66
+ </div>
67
+
68
+ </div>
@@ -0,0 +1,11 @@
1
+ <h1 class="page-title-header">
2
+ <%- getPageTitle(page) %>
3
+ </h1>
4
+ <div class="category-list-content">
5
+ <%- list_categories(site.categories, { class: 'all-category', depth: 5,
6
+ style: 'list' }) %>
7
+ </div>
8
+ <div class="category-comments">
9
+ <% if (page.comment) { %> <%- partial('components/comments/comment') %>
10
+ <% } %>
11
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="category-name">
2
+ <i class="fa-solid fa-folder"></i>&nbsp;<%= page.category %>
3
+ </div>
4
+ <div class="category-post-list">
5
+ <%- partial('utils/posts-list', {posts: page.posts}) %>
6
+ </div>
@@ -0,0 +1,59 @@
1
+ <div class="friends-link-container flex flex-col">
2
+ <h1 class="text-[3.2rem] mt-1.5 mb-5 font-bold leading-[1]"><%= page.title %></h1>
3
+ <% for (const category of theme.links) { %>
4
+ <div class="mt-2 mb-4">
5
+ <h2 class="text-2xl font-bold"><%= category.links_category %></h2>
6
+ </div>
7
+ <% if (category.has_thumbnail == true) { %>
8
+ <ul class="grid grid-cols-2 mb-6 w-full gap-4">
9
+ <% for (const f of category.list) { %>
10
+ <li class="group transform scale-100 transition-transform duration-100 ease-linear active:scale-95">
11
+ <a href="<%= f.link %>">
12
+ <div class="content rounded-lg redefine-box-shadow-flat">
13
+ <div class="thumbnail rounded-t-lg h-32 md:h-44 overflow-hidden">
14
+ <img class="rounded-t-lg object-cover w-full h-full" src="<%= f.thumbnail %>" />
15
+ </div>
16
+ <div class="avainfo flex flex-row items-center gap-1 sm:gap-2 overflow-hidden min-w-0">
17
+ <div class="avatar h-16 w-16 rounded-bl-lg bg-third-background-color">
18
+ <% if (f.avatar) { %>
19
+ <img class="rounded-bl-lg h-16 w-16 max-w-none" src="<%= f.avatar %>" onerror="this.style.display='none'">
20
+ <% } else { %>
21
+ <i class="fa-solid fa-user-group"></i>
22
+ <% } %>
23
+ </div>
24
+ <div class="flex flex-col min-w-0">
25
+ <div class="text-lg text-second-text-color ellipsis group-hover:!text-primary"><%= f.name %></div>
26
+ <div class="text-third-text-color ellipsis"><%= f.description %></div>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </a>
31
+ </li>
32
+ <% } %>
33
+ </ul>
34
+ <% } else { %>
35
+ <ul class="grid mb-6 gap-4 <%= theme.page_templates.friends_column === 3 ? "grid-cols-2 sm:grid-cols-3" : "grid-cols-2" %>">
36
+ <% for (const f of category.list) { %>
37
+ <li class="group transform scale-100 transition-transform duration-100 ease-linear active:scale-95">
38
+ <a href="<%= f.link %>">
39
+ <div class="flex flex-row items-center gap-1 sm:gap-2 overflow-hidden min-w-0 rounded-lg shadow-redefine-flat">
40
+ <div class="h-16 w-16 rounded-bl-lg bg-third-background-color">
41
+ <% if (f.avatar) { %>
42
+ <img class="rounded-l-lg h-16 w-16 max-w-none" src="<%= f.avatar %>" onerror="this.style.display='none'">
43
+ <% } else { %>
44
+ <i class="fa-solid fa-user-group"></i>
45
+ <% } %>
46
+ </div>
47
+ <div class="flex flex-col min-w-0">
48
+ <div class="text-lg text-second-text-color ellipsis group-hover:!text-primary"><%= f.name %></div>
49
+ <div class="text-third-text-color ellipsis"><%= f.description %></div>
50
+ </div>
51
+ </div>
52
+ </a>
53
+ </li>
54
+ <% } %>
55
+ </ul>
56
+ <% } %>
57
+ <% } %>
58
+ <div class="clear"></div>
59
+ </div>
@@ -0,0 +1,52 @@
1
+ <div class="home-article-meta-info-container">
2
+ <div class="home-article-meta-info">
3
+ <span><i class="fa-solid fa-calendars"></i>&nbsp;
4
+ <span class="home-article-date" data-date="<%= post.date %>">
5
+ <% if (theme.home.article_date_format == 'auto' || theme.home.article_date_format == 'relative') { %>
6
+ <%= date(post.date, config.date_format) %>
7
+ <% } else { %>
8
+ <%= date(post.date, theme.home.article_date_format) %>
9
+ <% } %>
10
+ </span>
11
+ </span>
12
+ <% if (post.categories.length && theme.home.categories.enable === true) { %>
13
+ <span class="home-article-category">
14
+ <i class="fa-solid fa-folders"></i>&nbsp;
15
+ <ul>
16
+ <% let previousParentId = null; %>
17
+ <% post.categories.forEach((category, i) => { %>
18
+ <% if (previousParentId !== category.parent) { %>
19
+ <% if (previousParentId !== null) { %>
20
+ <li>></li>
21
+ <% } %>
22
+ <li>
23
+ <a href="<%- url_for(category.path) %>"><%= category.name %></a>&nbsp;
24
+ </li>
25
+ <% } else { %>
26
+ <li>
27
+ | <a href="<%- url_for(category.path) %>"><%= category.name %></a>&nbsp;
28
+ </li>
29
+ <% } %>
30
+ <% previousParentId = category.parent; %>
31
+ <% }); %>
32
+ </ul>
33
+ </span>
34
+ <% } %>
35
+ <% if (post.tags.length && theme.home.tags.enable === true) { %>
36
+ <span class="home-article-tag">
37
+ <i class="fa-solid fa-tags"></i>&nbsp;
38
+ <ul>
39
+ <% post.tags.forEach((tag, i) => {
40
+ if (theme.home.tags.limit === 0 || i + 1 <= theme.home.tags.limit) { %>
41
+ <li>
42
+ <%= i === 0 ? '' : '| ' %>
43
+ <a href="<%- url_for(tag.path) %>"><%= tag.name %></a>&nbsp;
44
+ </li>
45
+ <% }}); %>
46
+ </ul>
47
+ </span>
48
+ <% } %>
49
+ </div>
50
+
51
+ <a href="<%- url_for(post.path) %>"><%- __('read_more') %><span class="seo-reader-text"><%= post.title %></span>&nbsp;<i class="fa-solid fa-angle-right"></i></a>
52
+ </div>
@@ -0,0 +1,33 @@
1
+ <style>
2
+ .home-article-item,
3
+ .sidebar-links,
4
+ .sidebar-content,
5
+ a.page-number,
6
+ a.extend,
7
+ .sidebar-links .links:hover,
8
+ .right-bottom-tools,
9
+ footer.footer {
10
+ background-color: var(--background-color-transparent-80) !important;
11
+ }
12
+ .right-bottom-tools:hover,
13
+ a.page-number:hover,
14
+ a.extend:hover {
15
+ background-color: var(--primary-color) !important;
16
+ }
17
+ .site-info,
18
+ .home-article-sticky-label {
19
+ background-color: var(--background-color-transparent-15) !important;
20
+ }
21
+ .home-article-sticky-label {
22
+ backdrop-filter: none !important;
23
+ }
24
+ .home-banner-background {
25
+ filter: blur(15px);
26
+ }
27
+ </style>
28
+
29
+ <div class="home-banner-background transition-fade fixed top-0 left-0 w-screen h-screen scale-125 sm:scale-110 box-border will-change-transform bg-cover">
30
+ <img src="<%- url_for(theme.home_banner.image.light) %>" alt="home-banner-background" class="w-full h-full object-cover dark:hidden">
31
+ <img src="<%- url_for(theme.home_banner.image.dark) %>" alt="home-banner-background" class="w-full h-full object-cover hidden dark:block">
32
+ </div>
33
+
@@ -0,0 +1,234 @@
1
+ <% if (theme.home_banner.style === "fixed") { %>
2
+ <style>
3
+ .home-banner-container {
4
+ background: none !important;
5
+ }
6
+ .home-article-item,
7
+ .sidebar-links,
8
+ .sidebar-content,
9
+ a.page-number,
10
+ a.extend,
11
+ .sidebar-links .links:hover,
12
+ .right-bottom-tools,
13
+ footer.footer {
14
+ background-color: var(--background-color-transparent-80) !important;
15
+ }
16
+ .right-bottom-tools:hover,
17
+ a.page-number:hover,
18
+ a.extend:hover {
19
+ background-color: var(--primary-color) !important;
20
+ }
21
+ .site-info,
22
+ .home-article-sticky-label {
23
+ background-color: var(--background-color-transparent-15) !important;
24
+ }
25
+ .home-article-sticky-label {
26
+ backdrop-filter: none !important;
27
+ }
28
+ </style>
29
+ <div class="home-banner-background transition-fade fixed top-0 left-0 w-screen h-screen scale-125 sm:scale-110 box-border will-change-transform bg-cover">
30
+ <img src="<%- url_for(theme.home_banner.image.light) %>" alt="home-banner-background" class="w-full h-full object-cover dark:hidden">
31
+ <img src="<%- url_for(theme.home_banner.image.dark) %>" alt="home-banner-background" class="w-full h-full object-cover hidden dark:block">
32
+ </div>
33
+ <% } %>
34
+
35
+ <div class="home-banner-container flex justify-center items-center transition-fade relative">
36
+ <% if (theme.home_banner.style !== "fixed") {%>
37
+ <div class="home-banner-background transition-fade absolute top-0 left-0 w-screen h-screen scale-125 sm:scale-110 box-border will-change-transform bg-cover">
38
+ <img src="<%- url_for(theme.home_banner.image.light) %>" alt="home-banner-background" class="w-full h-full object-cover dark:hidden">
39
+ <img src="<%- url_for(theme.home_banner.image.dark) %>" alt="home-banner-background" class="w-full h-full object-cover hidden dark:block">
40
+ </div>
41
+ <% } %>
42
+ <div class="content mt-8 flex flex-col justify-center items-center transition-fade-down">
43
+ <div class="description flex flex-col justify-center items-center w-screen font-medium text-center"
44
+ <% if (theme.home_banner.custom_font.enable) { %>
45
+ style="font-family: '<%- theme.home_banner.custom_font.family %>', sans-serif; !important;"
46
+ <% } %>
47
+ >
48
+ <%- theme.home_banner.title || theme.style.first_screen.description || config.description %>
49
+ <%# theme.style.first_screen.description is deprecated %>
50
+ <% if (theme.home_banner.subtitle.length !== 0) { %>
51
+ <p><i id="subtitle"></i></p>
52
+ <% } %>
53
+ </div>
54
+ <% if (theme.home_banner.social_links.enable) { %>
55
+ <%
56
+ const flexDirection = theme.home_banner.social_links.style === "reverse" ? "flex-row-reverse" : "flex-row";
57
+ const justify = theme.home_banner.social_links.style === "center" ? "justify-center" : "justify-between";
58
+ const display = theme.home_banner.social_links.style === "center" ? "hidden" : "flex";
59
+ %>
60
+ <div class="absolute bottom-0.5 flex <%- flexDirection %> <%- justify %> max-w-[1340px] items-center w-full px-8 sm:px-12">
61
+ <div class="<%- display %> p-3 bg-gray-300/50 dark:bg-gray-500/40 backdrop-blur-lg border border-white/20 dark:border-gray-500/30 group rounded-full cursor-pointer flex justify-center items-center aspect-square h-full shadow-redefine-flat hover:shadow-redefine-flat-hover transition-shadow" onclick="scrollToMain()" >
62
+ <i class="fa-solid fa-arrow-down fa-fw fa-lg group-hover:translate-y-1 transition-transform"></i>
63
+ </div>
64
+ <div class="social-contacts px-6 py-3 bg-gray-300/50 dark:bg-gray-500/40 backdrop-blur-lg border border-white/20 dark:border-gray-500/30 shadow-redefine-flat rounded-full flex flex-row gap-3 items-center">
65
+ <% for (const key in theme.home_banner.social_links.links) { %>
66
+ <% if(theme.home_banner.social_links.links[key]) { %>
67
+ <% if(key === 'email') { %>
68
+ <span class="social-contact-item <%= key %> ">
69
+ <a href="mailto:<%- theme.home_banner.social_links.links[key] %>">
70
+ <i class="fa-solid fa-fw fa-at fa-lg"></i>
71
+ </a>
72
+ </span>
73
+ <% } else if(key.includes("fa-")) { %>
74
+ <span class="social-contact-item">
75
+ <a target="_blank" href="<%- theme.home_banner.social_links.links[key] %>">
76
+ <i class="<%= key %> fa-fw fa-lg"></i>
77
+ </a>
78
+ </span>
79
+ <% } else if(key.startsWith('/') || key.startsWith('http')) { %>
80
+ <span class="social-contact-item">
81
+ <a target="_blank" href="<%- theme.home_banner.social_links.links[key] %>">
82
+ <img src="<%- url_for(key) %>" alt="social-icon" class="w-5 h-5 object-contain">
83
+ </a>
84
+ </span>
85
+ <% } else { %>
86
+ <span class="social-contact-item <%= key %>">
87
+ <a target="_blank" href="<%- theme.home_banner.social_links.links[key] %>">
88
+ <i class="fa-brands fa-fw fa-lg fa-<%= key %>"></i>
89
+ </a>
90
+ </span>
91
+ <% } %>
92
+ <% } %>
93
+ <% } %>
94
+ <%
95
+ let qrs = theme.home_banner.social_links.qrs;
96
+ let qrCount = 0;
97
+ for (const key in qrs) {
98
+ if(qrs[key]) {
99
+ qrCount++;
100
+ }
101
+ }
102
+ if (qrs && qrCount >= 1) { %>
103
+
104
+ <div class="social-links-divider vertical-separator w-[1px] h-4 bg-third-text-color mx-0.5"></div>
105
+
106
+ <% for (const key in qrs) { %>
107
+ <% if(qrs[key]) { %>
108
+ <% if(key.includes("fa-")) { %>
109
+ <span class="social-contact-item-qr cursor-pointer group qr-toggle-item">
110
+ <a target="_blank">
111
+ <i class="<%= key %> fa-fw fa-lg qr-trigger"></i>
112
+ <div class="social-qr-container absolute h-auto bg-background-color-transparent-40 border border-white/20 dark:border-gray-500/30 overflow-hidden rounded-2xl bottom-0 mb-14 right-0 invisible group-hover:visible group-active:visible opacity-0 group-hover:opacity-100 group-active:opacity-100 translate-y-0.5 group-hover:translate-y-0 group-active:translate-y-0 transition-all qr-popup">
113
+ <img class="social-contacts-qr w-64"
114
+ src="<%- url_for(theme.home_banner.social_links.qrs[key]) %>"/>
115
+ </div>
116
+ </a>
117
+ </span>
118
+ <% } else if(key.startsWith('/') || key.startsWith('http')) { %>
119
+ <span class="social-contact-item-qr cursor-pointer group qr-toggle-item">
120
+ <a target="_blank">
121
+ <img src="<%- url_for(key) %>" alt="social-icon" class="w-5 h-5 object-contain qr-trigger">
122
+ <div class="social-qr-container absolute h-auto bg-background-color-transparent-40 border border-white/20 dark:border-gray-500/30 overflow-hidden rounded-2xl bottom-0 mb-14 right-0 invisible group-hover:visible group-active:visible opacity-0 group-hover:opacity-100 group-active:opacity-100 translate-y-0.5 group-hover:translate-y-0 group-active:translate-y-0 transition-all qr-popup">
123
+ <img class="social-contacts-qr w-64"
124
+ src="<%- url_for(theme.home_banner.social_links.qrs[key]) %>"/>
125
+ </div>
126
+ </a>
127
+ </span>
128
+ <% } else { %>
129
+ <span class="social-contact-item-qr <%= key %> cursor-pointer group qr-toggle-item">
130
+ <a target="_blank">
131
+ <i class="fa-brands fa-fw fa-lg fa-<%= key %> qr-trigger"></i>
132
+ <div class="social-qr-container absolute h-auto bg-background-color-transparent-40 border border-white/20 dark:border-gray-500/30 overflow-hidden rounded-2xl bottom-0 mb-14 right-0 invisible group-hover:visible group-active:visible opacity-0 group-hover:opacity-100 group-active:opacity-100 translate-y-0.5 group-hover:translate-y-0 group-active:translate-y-0 transition-all qr-popup">
133
+ <img class="social-contacts-qr w-64"
134
+ src="<%- url_for(theme.home_banner.social_links.qrs[key]) %>"/>
135
+ </div>
136
+ </a>
137
+ </span>
138
+ <% } %>
139
+ <% } %>
140
+ <% } %>
141
+ <% } %>
142
+ </div>
143
+ </div>
144
+ <% } %>
145
+ </div>
146
+ <script>
147
+ const scrollToMain = ()=> {
148
+ console.log('scroll');
149
+ const target = document.querySelector('.main-content-container');
150
+ target.scrollIntoView({ behavior: 'smooth'});
151
+ }
152
+
153
+ // QR code mobile interaction handling
154
+ document.addEventListener('DOMContentLoaded', function() {
155
+ const qrToggleItems = document.querySelectorAll('.qr-toggle-item');
156
+ let activeQrItem = null;
157
+
158
+ // Handle QR code toggle for mobile
159
+ qrToggleItems.forEach(item => {
160
+ const trigger = item.querySelector('.qr-trigger');
161
+ const popup = item.querySelector('.qr-popup');
162
+
163
+ // Add click event for mobile
164
+ trigger.addEventListener('click', function(e) {
165
+ e.preventDefault();
166
+
167
+ // Close any other open QR codes
168
+ qrToggleItems.forEach(otherItem => {
169
+ if (otherItem !== item) {
170
+ otherItem.classList.remove('qr-active');
171
+ }
172
+ });
173
+
174
+ // Toggle current QR code
175
+ const isActive = item.classList.contains('qr-active');
176
+ if (isActive) {
177
+ item.classList.remove('qr-active');
178
+ activeQrItem = null;
179
+ } else {
180
+ item.classList.add('qr-active');
181
+ activeQrItem = item;
182
+ }
183
+ });
184
+
185
+ // Remove focus styles on blur for mobile
186
+ trigger.addEventListener('blur', function() {
187
+ // Small delay to allow for potential click events
188
+ setTimeout(() => {
189
+ if (activeQrItem !== item) {
190
+ item.classList.remove('qr-active');
191
+ }
192
+ }, 100);
193
+ });
194
+ });
195
+
196
+ // Close QR codes when clicking outside
197
+ document.addEventListener('click', function(e) {
198
+ const isQrElement = e.target.closest('.qr-toggle-item');
199
+ if (!isQrElement && activeQrItem) {
200
+ activeQrItem.classList.remove('qr-active');
201
+ activeQrItem = null;
202
+ }
203
+ });
204
+ });
205
+ </script>
206
+ <style>
207
+ /* Mobile-specific QR code styles */
208
+ .qr-toggle-item.qr-active .qr-popup {
209
+ visibility: visible !important;
210
+ opacity: 1 !important;
211
+ transform: translateY(0) !important;
212
+ }
213
+
214
+ /* Prevent button from staying in focus/hover state on mobile */
215
+ @media (hover: none) and (pointer: coarse) {
216
+ .qr-toggle-item:focus,
217
+ .qr-toggle-item:hover {
218
+ background-color: transparent;
219
+ }
220
+
221
+ .qr-toggle-item .qr-trigger:focus,
222
+ .qr-toggle-item .qr-trigger:hover {
223
+ background-color: transparent;
224
+ color: inherit;
225
+ }
226
+
227
+ /* Only show active state when explicitly toggled */
228
+ .qr-popup {
229
+ visibility: hidden !important;
230
+ opacity: 0 !important;
231
+ }
232
+ }
233
+ </style>
234
+ </div>
@@ -0,0 +1,62 @@
1
+ <div class="home-content-container">
2
+ <ul class="home-article-list">
3
+ <% page.posts.forEach(post => { %>
4
+ <li class="home-article-item">
5
+
6
+ <% if (post.sticky) { %>
7
+ <div class="absolute top-[12px] right-[12px] text-[0.7rem] text-third-text-color rounded-medium bg-background-color-transparent-15 py-[2px] px-[10px] border border-border-color z-1 hover:text-first-text-color cursor-default">
8
+ <i class="fa-regular fa-thumbtack mr-[3px] text-[0.65rem]"></i><%- __('sticky') %>
9
+ </div>
10
+ <% } %>
11
+
12
+ <% let articleThumbnail = "";
13
+ if (post.cover || post.banner || (post.thumbnail && post.thumbnail !== false)) { %>
14
+ <%
15
+ if (post.thumbnail && post.thumbnail !== null) {
16
+ articleThumbnail = post.thumbnail;
17
+ } else if (post.cover && post.cover.includes("/")) {
18
+ articleThumbnail = post.cover;
19
+ } else if (post.banner && post.banner.includes("/")) {
20
+ articleThumbnail = post.banner;
21
+ } else if (config.marked.postAsset && config.marked.postAsset == true) {
22
+ articleThumbnail = [post.path, post.cover || post.banner].join("/");
23
+ }
24
+ %>
25
+ <% } %>
26
+
27
+ <% if (post.thumbnail !== false && (post.thumbnail || post.cover || post.banner)) { %>
28
+ <div id="home-article-thumbnail" class="home-article-thumbnail relative h-[150px] overflow-hidden rounded-t-large">
29
+ <a href="<%- url_for(post.path) %>">
30
+ <img src="<%- url_for(articleThumbnail) %>" alt="<%= post.title %>" class="w-full h-full object-cover dark:brightness-75 transition-all" />
31
+ </a>
32
+ </div>
33
+ <% } %>
34
+ <div class="flex flex-col gap-5 px-7 pb-7 <%= post.thumbnail !== false && (post.thumbnail || post.cover || post.banner) ? "pt-5" : "pt-7" %>">
35
+ <h3 class="home-article-title">
36
+ <a href="<%- url_for(post.path) %>">
37
+ <%= post.title %>
38
+ </a>
39
+ </h3>
40
+
41
+ <div class="home-article-content markdown-body">
42
+ <% if (post.excerpt && post.excerpt == "false") { %>
43
+ <% } else if (post.excerpt && post.excerpt !== "false") { %>
44
+ <%- render(post.excerpt, "markdown") %>
45
+ <% } else { %>
46
+ <%
47
+ const excerptLength = theme.home.excerpt_length || 200;
48
+ %>
49
+ <%- truncate(strip_html(post.content), {length: excerptLength}) %>
50
+ <% } %>
51
+ </div>
52
+
53
+ <%- partial('pages/home/home-article', {post: post}) %>
54
+ </div>
55
+ </li>
56
+ <% }) %>
57
+ </ul>
58
+
59
+ <div class="home-paginator px-7 py-5">
60
+ <%- partial('utils/paginator', {pageObject: page}) %>
61
+ </div>
62
+ </div>