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.
- package/.github/ISSUE_TEMPLATE/bug-chinese.yml +115 -0
- package/.github/ISSUE_TEMPLATE/bug-english.yml +106 -0
- package/.github/ISSUE_TEMPLATE/enhancement-chinese.yml +55 -0
- package/.github/ISSUE_TEMPLATE/enhancement-english.yml +55 -0
- package/.github/workflows/build-and-commit.yml +49 -0
- package/.github/workflows/npm-publish.yml +34 -0
- package/.github/workflows/stale-issues.yml +20 -0
- package/CHANGELOG_REDEFINE_X.md +236 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/CONTRIBUTING.md +51 -0
- package/DONATION.md +82 -0
- package/LICENSE +674 -0
- package/README.md +135 -0
- package/README_zh-CN.md +138 -0
- package/README_zh-TW.md +137 -0
- package/TODO.md +215 -0
- package/_config.yml +489 -0
- package/languages/en.yml +93 -0
- package/languages/es.yml +92 -0
- package/languages/fr.yml +92 -0
- package/languages/ja.yml +92 -0
- package/languages/zh-CN.yml +95 -0
- package/languages/zh-TW.yml +94 -0
- package/layout/404.ejs +1 -0
- package/layout/archive.ejs +1 -0
- package/layout/category.ejs +1 -0
- package/layout/components/comments/comment.ejs +22 -0
- package/layout/components/comments/giscus.ejs +42 -0
- package/layout/components/comments/gitalk.ejs +47 -0
- package/layout/components/comments/twikoo.ejs +50 -0
- package/layout/components/comments/waline.ejs +34 -0
- package/layout/components/footer/footer.ejs +99 -0
- package/layout/components/header/head.ejs +222 -0
- package/layout/components/header/navbar.ejs +163 -0
- package/layout/components/header/preloader.ejs +148 -0
- package/layout/components/header/progress-bar.ejs +12 -0
- package/layout/components/plugins/aplayer.ejs +3 -0
- package/layout/components/scripts.ejs +90 -0
- package/layout/components/sidebar/author.ejs +6 -0
- package/layout/components/sidebar/avatar.ejs +3 -0
- package/layout/components/sidebar/statistics.ejs +14 -0
- package/layout/components/swup.ejs +27 -0
- package/layout/index.ejs +1 -0
- package/layout/layout.ejs +13 -0
- package/layout/page.ejs +57 -0
- package/layout/pages/archive/archive.ejs +3 -0
- package/layout/pages/bookmarks/bookmarks.ejs +68 -0
- package/layout/pages/category/categories.ejs +11 -0
- package/layout/pages/category/category-detail.ejs +6 -0
- package/layout/pages/friends/friends-link.ejs +59 -0
- package/layout/pages/home/home-article.ejs +52 -0
- package/layout/pages/home/home-background.ejs +33 -0
- package/layout/pages/home/home-banner.ejs +234 -0
- package/layout/pages/home/home-content.ejs +62 -0
- package/layout/pages/home/home-sidebar.ejs +78 -0
- package/layout/pages/masonry/masonry.ejs +28 -0
- package/layout/pages/notfound/notfound.ejs +8 -0
- package/layout/pages/page-template.ejs +23 -0
- package/layout/pages/post/article-content.ejs +153 -0
- package/layout/pages/post/article-copyright.ejs +69 -0
- package/layout/pages/post/article-info.ejs +78 -0
- package/layout/pages/post/post-tools.ejs +17 -0
- package/layout/pages/post/toc.ejs +15 -0
- package/layout/pages/shuoshuo/essays.ejs +23 -0
- package/layout/pages/tag/tag-detail.ejs +6 -0
- package/layout/pages/tag/tags.ejs +24 -0
- package/layout/post.ejs +1 -0
- package/layout/tag.ejs +1 -0
- package/layout/tags.ejs +1 -0
- package/layout/utils/image-viewer.ejs +3 -0
- package/layout/utils/local-search.ejs +20 -0
- package/layout/utils/paginator.ejs +8 -0
- package/layout/utils/posts-list.ejs +28 -0
- package/layout/utils/side-tools.ejs +51 -0
- package/package.json +45 -0
- package/scripts/config-export.js +66 -0
- package/scripts/data-handle.js +37 -0
- package/scripts/events/404.js +16 -0
- package/scripts/events/welcome.js +141 -0
- package/scripts/filters/delete-mask-handle.js +27 -0
- package/scripts/filters/encrypt.js +202 -0
- package/scripts/filters/img-handle.js +9 -0
- package/scripts/filters/lazyload-handle.js +350 -0
- package/scripts/filters/lib/hbe.default.js +15 -0
- package/scripts/filters/link-handle.js +42 -0
- package/scripts/filters/stylus-handle.js +9 -0
- package/scripts/filters/table-handle.js +11 -0
- package/scripts/helpers/meta-helpers.js +38 -0
- package/scripts/helpers/page-helpers.js +153 -0
- package/scripts/helpers/recommendation-helpers.js +367 -0
- package/scripts/helpers/theme-helpers.js +251 -0
- package/scripts/helpers/waline-helpers.js +33 -0
- package/scripts/modules/btn.js +85 -0
- package/scripts/modules/btns.js +71 -0
- package/scripts/modules/folding.js +34 -0
- package/scripts/modules/note-large.js +72 -0
- package/scripts/modules/note.js +64 -0
- package/scripts/modules/tabs.js +99 -0
- package/source/assets/hbe.style.css +220 -0
- package/source/assets/odometer-theme-minimal.css +81 -0
- package/source/css/build/tailwind.css +2 -0
- package/source/css/common/animated.styl +71 -0
- package/source/css/common/basic.styl +239 -0
- package/source/css/common/codeblock/code-block.styl +158 -0
- package/source/css/common/codeblock/code-theme.styl +82 -0
- package/source/css/common/codeblock/highlight.styl +189 -0
- package/source/css/common/codeblock/hljs-themes/dark/a11y-dark.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/dark/agate.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/dark/atom-one-dark.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/dark/github-dark.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/dark/monokai-sublime.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/dark/night-owl.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/dark/nord.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/dark/tokyo-night-dark.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/dark/vs2015.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/light/atom-one-light.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/light/default.styl +18 -0
- package/source/css/common/codeblock/hljs-themes/light/github.styl +18 -0
- package/source/css/common/colors.styl +112 -0
- package/source/css/common/markdown.styl +337 -0
- package/source/css/common/redefine-theme.styl +65 -0
- package/source/css/common/theme.styl +72 -0
- package/source/css/common/variables.styl +145 -0
- package/source/css/layout/_modules/aplayer.styl +799 -0
- package/source/css/layout/_modules/buttons.styl +42 -0
- package/source/css/layout/_modules/folding.styl +180 -0
- package/source/css/layout/_modules/notes.styl +181 -0
- package/source/css/layout/_modules/tabs.styl +105 -0
- package/source/css/layout/_partials/404.styl +14 -0
- package/source/css/layout/_partials/archive-list.styl +49 -0
- package/source/css/layout/_partials/article-copyright-info.styl +27 -0
- package/source/css/layout/_partials/article-meta-info.styl +62 -0
- package/source/css/layout/_partials/comments/comment.styl +11 -0
- package/source/css/layout/_partials/comments/gitalk.styl +529 -0
- package/source/css/layout/_partials/comments/twikoo.styl +62 -0
- package/source/css/layout/_partials/comments/waline.styl +1151 -0
- package/source/css/layout/_partials/footer.styl +59 -0
- package/source/css/layout/_partials/home-banner.styl +48 -0
- package/source/css/layout/_partials/image-viewer.styl +37 -0
- package/source/css/layout/_partials/local-search.styl +137 -0
- package/source/css/layout/_partials/navbar.styl +309 -0
- package/source/css/layout/_partials/page-template.styl +147 -0
- package/source/css/layout/_partials/paginator.styl +65 -0
- package/source/css/layout/_partials/post-tools.styl +43 -0
- package/source/css/layout/_partials/progress-bar.styl +33 -0
- package/source/css/layout/_partials/side-tools.styl +87 -0
- package/source/css/layout/_partials/tagcloud.styl +136 -0
- package/source/css/layout/_partials/toc.styl +105 -0
- package/source/css/layout/animations.styl +42 -0
- package/source/css/layout/archive-content.styl +8 -0
- package/source/css/layout/article-content.styl +257 -0
- package/source/css/layout/bookmarks.styl +8 -0
- package/source/css/layout/category-content.styl +21 -0
- package/source/css/layout/category-list.styl +119 -0
- package/source/css/layout/home-content.styl +114 -0
- package/source/css/layout/home-sidebar.styl +126 -0
- package/source/css/layout/page.styl +144 -0
- package/source/css/layout/tag-content.styl +30 -0
- package/source/css/style.styl +26 -0
- package/source/css/tailwind.source.css +236 -0
- package/source/fontawesome/all.min.css +6 -0
- package/source/fontawesome/brands.min.css +6 -0
- package/source/fontawesome/duotone.min.css +6 -0
- package/source/fontawesome/fontawesome.min.css +6 -0
- package/source/fontawesome/light.min.css +6 -0
- package/source/fontawesome/regular.min.css +6 -0
- package/source/fontawesome/sharp-solid.min.css +6 -0
- package/source/fontawesome/solid.min.css +6 -0
- package/source/fontawesome/svg-with-js.min.css +6 -0
- package/source/fontawesome/thin.min.css +6 -0
- package/source/fontawesome/v4-font-face.min.css +6 -0
- package/source/fontawesome/v4-shims.min.css +6 -0
- package/source/fontawesome/v5-font-face.min.css +6 -0
- package/source/fonts/Chillax/Chillax-Variable.eot +0 -0
- package/source/fonts/Chillax/Chillax-Variable.ttf +0 -0
- package/source/fonts/Chillax/Chillax-Variable.woff +0 -0
- package/source/fonts/Chillax/Chillax-Variable.woff2 +0 -0
- package/source/fonts/Chillax/chillax.css +39 -0
- package/source/fonts/Geist/GeistVF.ttf +0 -0
- package/source/fonts/Geist/GeistVF.woff +0 -0
- package/source/fonts/Geist/GeistVF.woff2 +0 -0
- package/source/fonts/Geist/geist.css +16 -0
- package/source/fonts/GeistMono/GeistMonoVF.ttf +0 -0
- package/source/fonts/GeistMono/GeistMonoVF.woff +0 -0
- package/source/fonts/GeistMono/GeistMonoVF.woff2 +0 -0
- package/source/fonts/GeistMono/geist-mono.css +16 -0
- package/source/images/bookmark-placeholder.svg +9 -0
- package/source/images/loading.svg +5 -0
- package/source/images/redefine-avatar.svg +1 -0
- package/source/images/redefine-favicon.svg +1 -0
- package/source/images/redefine-logo.svg +1 -0
- package/source/images/redefine-logo.webp +0 -0
- package/source/images/redefine-og.webp +0 -0
- package/source/images/wallhaven-wqery6-dark.webp +0 -0
- package/source/images/wallhaven-wqery6-light.webp +0 -0
- package/source/js/build/layouts/bookmarkNav.js +2 -0
- package/source/js/build/layouts/bookmarkNav.js.map +1 -0
- package/source/js/build/layouts/categoryList.js +2 -0
- package/source/js/build/layouts/categoryList.js.map +1 -0
- package/source/js/build/layouts/essays.js +2 -0
- package/source/js/build/layouts/essays.js.map +1 -0
- package/source/js/build/layouts/lazyload.js +2 -0
- package/source/js/build/layouts/lazyload.js.map +1 -0
- package/source/js/build/layouts/navbarShrink.js +2 -0
- package/source/js/build/layouts/navbarShrink.js.map +1 -0
- package/source/js/build/layouts/toc.js +2 -0
- package/source/js/build/layouts/toc.js.map +1 -0
- package/source/js/build/libs/APlayer.min.js +2 -0
- package/source/js/build/libs/Swup.min.js +2 -0
- package/source/js/build/libs/SwupPreloadPlugin.min.js +1 -0
- package/source/js/build/libs/SwupProgressPlugin.min.js +1 -0
- package/source/js/build/libs/SwupScriptsPlugin.min.js +1 -0
- package/source/js/build/libs/SwupScrollPlugin.min.js +1 -0
- package/source/js/build/libs/SwupSlideTheme.min.js +1 -0
- package/source/js/build/libs/Typed.min.js +10 -0
- package/source/js/build/libs/anime.min.js +8 -0
- package/source/js/build/libs/mermaid.min.js +2314 -0
- package/source/js/build/libs/minimasonry.min.js +1 -0
- package/source/js/build/libs/moment-with-locales.min.js +2 -0
- package/source/js/build/libs/moment.min.js +2 -0
- package/source/js/build/libs/odometer.min.js +2 -0
- package/source/js/build/libs/pangu.min.js +9 -0
- package/source/js/build/libs/pjax.min.js +1 -0
- package/source/js/build/libs/waline.js +84 -0
- package/source/js/build/main.js +2 -0
- package/source/js/build/main.js.map +1 -0
- package/source/js/build/plugins/aplayer.js +2 -0
- package/source/js/build/plugins/aplayer.js.map +1 -0
- package/source/js/build/plugins/hbe.js +2 -0
- package/source/js/build/plugins/hbe.js.map +1 -0
- package/source/js/build/plugins/masonry.js +2 -0
- package/source/js/build/plugins/masonry.js.map +1 -0
- package/source/js/build/plugins/mermaid.js +2 -0
- package/source/js/build/plugins/mermaid.js.map +1 -0
- package/source/js/build/plugins/pangu.js +2 -0
- package/source/js/build/plugins/pangu.js.map +1 -0
- package/source/js/build/plugins/tabs.js +2 -0
- package/source/js/build/plugins/tabs.js.map +1 -0
- package/source/js/build/plugins/typed.js +2 -0
- package/source/js/build/plugins/typed.js.map +1 -0
- package/source/js/build/tools/codeBlock.js +2 -0
- package/source/js/build/tools/codeBlock.js.map +1 -0
- package/source/js/build/tools/imageViewer.js +2 -0
- package/source/js/build/tools/imageViewer.js.map +1 -0
- package/source/js/build/tools/lightDarkSwitch.js +2 -0
- package/source/js/build/tools/lightDarkSwitch.js.map +1 -0
- package/source/js/build/tools/localSearch.js +2 -0
- package/source/js/build/tools/localSearch.js.map +1 -0
- package/source/js/build/tools/runtime.js +2 -0
- package/source/js/build/tools/runtime.js.map +1 -0
- package/source/js/build/tools/scrollTopBottom.js +2 -0
- package/source/js/build/tools/scrollTopBottom.js.map +1 -0
- package/source/js/build/tools/tocToggle.js +2 -0
- package/source/js/build/tools/tocToggle.js.map +1 -0
- package/source/js/build/utils.js +2 -0
- package/source/js/build/utils.js.map +1 -0
- package/source/js/build.js +148 -0
- package/source/js/layouts/bookmarkNav.js +65 -0
- package/source/js/layouts/categoryList.js +53 -0
- package/source/js/layouts/essays.js +25 -0
- package/source/js/layouts/lazyload.js +199 -0
- package/source/js/layouts/navbarShrink.js +135 -0
- package/source/js/layouts/toc.js +115 -0
- package/source/js/libs/APlayer.min.js +2 -0
- package/source/js/libs/APlayer.min.js.map +1 -0
- package/source/js/libs/Swup.min.js +2 -0
- package/source/js/libs/Swup.min.js.map +1 -0
- package/source/js/libs/SwupPreloadPlugin.min.js +1 -0
- package/source/js/libs/SwupPreloadPlugin.min.js.map +1 -0
- package/source/js/libs/SwupProgressPlugin.min.js +1 -0
- package/source/js/libs/SwupScriptsPlugin.min.js +1 -0
- package/source/js/libs/SwupScrollPlugin.min.js +1 -0
- package/source/js/libs/SwupScrollPlugin.min.js.map +1 -0
- package/source/js/libs/SwupSlideTheme.min.js +1 -0
- package/source/js/libs/Typed.min.js +10 -0
- package/source/js/libs/anime.min.js +8 -0
- package/source/js/libs/mermaid.min.js +2314 -0
- package/source/js/libs/mermaid.min.js.map +7 -0
- package/source/js/libs/minimasonry.min.js +1 -0
- package/source/js/libs/moment-with-locales.min.js +2 -0
- package/source/js/libs/moment.min.js +2 -0
- package/source/js/libs/odometer.min.js +2 -0
- package/source/js/libs/pangu.min.js +9 -0
- package/source/js/libs/pjax.min.js +1 -0
- package/source/js/libs/waline.js +84 -0
- package/source/js/libs/waline.js.map +1 -0
- package/source/js/main.js +95 -0
- package/source/js/plugins/aplayer.js +33 -0
- package/source/js/plugins/hbe.js +350 -0
- package/source/js/plugins/masonry.js +115 -0
- package/source/js/plugins/mermaid.js +7 -0
- package/source/js/plugins/pangu.js +12 -0
- package/source/js/plugins/tabs.js +29 -0
- package/source/js/plugins/typed.js +62 -0
- package/source/js/tools/codeBlock.js +48 -0
- package/source/js/tools/imageViewer.js +194 -0
- package/source/js/tools/lightDarkSwitch.js +165 -0
- package/source/js/tools/localSearch.js +327 -0
- package/source/js/tools/runtime.js +28 -0
- package/source/js/tools/scrollTopBottom.js +34 -0
- package/source/js/tools/tocToggle.js +58 -0
- package/source/js/utils.js +383 -0
- package/source/webfonts/fa-brands-400.ttf +0 -0
- package/source/webfonts/fa-brands-400.woff2 +0 -0
- package/source/webfonts/fa-duotone-900.ttf +0 -0
- package/source/webfonts/fa-duotone-900.woff2 +0 -0
- package/source/webfonts/fa-light-300.ttf +0 -0
- package/source/webfonts/fa-light-300.woff2 +0 -0
- package/source/webfonts/fa-regular-400.ttf +0 -0
- package/source/webfonts/fa-regular-400.woff2 +0 -0
- package/source/webfonts/fa-sharp-solid-900.ttf +0 -0
- package/source/webfonts/fa-sharp-solid-900.woff2 +0 -0
- package/source/webfonts/fa-solid-900.ttf +0 -0
- package/source/webfonts/fa-solid-900.woff2 +0 -0
- package/source/webfonts/fa-thin-100.ttf +0 -0
- package/source/webfonts/fa-thin-100.woff2 +0 -0
- package/source/webfonts/fa-v4compatibility.ttf +0 -0
- package/source/webfonts/fa-v4compatibility.woff2 +0 -0
- package/vercel.json +7 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<div class="home-sidebar-container">
|
|
2
|
+
<div class="sticky-container sticky">
|
|
3
|
+
<%
|
|
4
|
+
const hasSidebarLinks = theme.home.sidebar.links !== null;
|
|
5
|
+
const hasSidebarAnnouncement = theme.home.sidebar.announcement !== null;
|
|
6
|
+
%>
|
|
7
|
+
<% if (theme.home.sidebar.first_item === "info") { %>
|
|
8
|
+
<div class="sidebar-content">
|
|
9
|
+
<%- partial("components/sidebar/avatar") %>
|
|
10
|
+
<%- partial("components/sidebar/author") %>
|
|
11
|
+
<%- partial('components/sidebar/statistics')%>
|
|
12
|
+
</div>
|
|
13
|
+
<% if (hasSidebarLinks || hasSidebarAnnouncement) {%>
|
|
14
|
+
<div class="sidebar-links" <% if (hasSidebarLinks || hasSidebarAnnouncement) { %> marginTop <% } %>>
|
|
15
|
+
<div class="site-info">
|
|
16
|
+
<div class="site-name"><%= theme.info.title || config.title %></div>
|
|
17
|
+
<% if (hasSidebarAnnouncement && hasSidebarLinks) { %>
|
|
18
|
+
<div class="announcement">
|
|
19
|
+
<%- theme.home.sidebar.announcement %>
|
|
20
|
+
</div>
|
|
21
|
+
<% } %>
|
|
22
|
+
</div>
|
|
23
|
+
<% if (hasSidebarLinks) {%>
|
|
24
|
+
<% for (let i in theme.home.sidebar.links) { %>
|
|
25
|
+
<% if (theme.home.sidebar.links[i].path === 'none') {} else {%>
|
|
26
|
+
<a class="links" href="<%= url_for(theme.home.sidebar.links[i].path) %>">
|
|
27
|
+
<% if (theme.home.sidebar.links[i].icon) { %>
|
|
28
|
+
<i class="<%- theme.home.sidebar.links[i].icon %> icon-space"></i>
|
|
29
|
+
<% } %>
|
|
30
|
+
<span class="link-name"><%= __(i) %></span>
|
|
31
|
+
</a>
|
|
32
|
+
<% } %>
|
|
33
|
+
<% } %>
|
|
34
|
+
<% } else {%>
|
|
35
|
+
<div class="announcement-outside">
|
|
36
|
+
<%- theme.home.sidebar.announcement %>
|
|
37
|
+
</div>
|
|
38
|
+
<% } %>
|
|
39
|
+
</div>
|
|
40
|
+
<% } %>
|
|
41
|
+
<% } else { %>
|
|
42
|
+
<% if (hasSidebarLinks || hasSidebarAnnouncement) {%>
|
|
43
|
+
<div class="sidebar-links">
|
|
44
|
+
<div class="site-info">
|
|
45
|
+
<div class="site-name"><%= theme.info.title || config.title %></div>
|
|
46
|
+
<% if (hasSidebarAnnouncement && hasSidebarLinks) { %>
|
|
47
|
+
<div class="announcement">
|
|
48
|
+
<%- theme.home.sidebar.announcement %>
|
|
49
|
+
</div>
|
|
50
|
+
<% } %>
|
|
51
|
+
</div>
|
|
52
|
+
<% if (hasSidebarLinks) {%>
|
|
53
|
+
<% for (let i in theme.home.sidebar.links) { %>
|
|
54
|
+
<% if (theme.home.sidebar.links[i].path === 'none') {} else {%>
|
|
55
|
+
<a class="links" href="<%= url_for(theme.home.sidebar.links[i].path) %>">
|
|
56
|
+
<% if (theme.home.sidebar.links[i].icon) { %>
|
|
57
|
+
<i class="<%- theme.home.sidebar.links[i].icon %> icon-space"></i>
|
|
58
|
+
<% } %>
|
|
59
|
+
<span class="link-name"><%= __(i) %></span>
|
|
60
|
+
</a>
|
|
61
|
+
<% } %>
|
|
62
|
+
<% } %>
|
|
63
|
+
<% } else {%>
|
|
64
|
+
<div class="announcement-outside">
|
|
65
|
+
<%- theme.home.sidebar.announcement %>
|
|
66
|
+
</div>
|
|
67
|
+
<% } %>
|
|
68
|
+
</div>
|
|
69
|
+
<% } %>
|
|
70
|
+
<div class="sidebar-content" <% if (hasSidebarLinks || hasSidebarAnnouncement) { %> marginTop <% } %>>
|
|
71
|
+
<%- partial("components/sidebar/avatar") %>
|
|
72
|
+
<%- partial("components/sidebar/author") %>
|
|
73
|
+
<%- partial('components/sidebar/statistics')%>
|
|
74
|
+
</div>
|
|
75
|
+
<% } %>
|
|
76
|
+
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<%
|
|
2
|
+
// Define an array of images to display in the masonry layout
|
|
3
|
+
const images = theme.masonry;
|
|
4
|
+
%>
|
|
5
|
+
|
|
6
|
+
<h1 class="page-title-header">
|
|
7
|
+
<%- getPageTitle(page) %>
|
|
8
|
+
</h1>
|
|
9
|
+
|
|
10
|
+
<div class="loading-placeholder">
|
|
11
|
+
<div class="flex-grid generic-card">
|
|
12
|
+
<div class="card loading"></div>
|
|
13
|
+
<div class="card loading"></div>
|
|
14
|
+
<div class="card loading"></div>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div id="masonry-container">
|
|
19
|
+
<% images.forEach(function(image) { %>
|
|
20
|
+
<div class="masonry-item">
|
|
21
|
+
<div class="image-container">
|
|
22
|
+
<img src="<%- image.image %>" alt="<%- image.title %>">
|
|
23
|
+
<div class="image-title"><%- image.title %></div>
|
|
24
|
+
<div class="image-description"><%- image.description %></div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
<% }); %>
|
|
28
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<div class="page-template-container">
|
|
2
|
+
<% const pageData = getPageData(page); %>
|
|
3
|
+
|
|
4
|
+
<% if (pageData) { %>
|
|
5
|
+
<%- partial(pageData.partial) %>
|
|
6
|
+
<% } %>
|
|
7
|
+
|
|
8
|
+
<div class="page-template-content markdown-body">
|
|
9
|
+
<% if (!pageData) { %>
|
|
10
|
+
<h1><%- page.title %></h1>
|
|
11
|
+
<% } %>
|
|
12
|
+
|
|
13
|
+
<%- page.content %>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="page-template-comments">
|
|
17
|
+
<% if (page.hasOwnProperty('comment') && (page.comment === true || page.comments === true) ) { %>
|
|
18
|
+
<%- partial('components/comments/comment') %>
|
|
19
|
+
<% } %>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<%- partial('utils/paginator', {pageObject: page}) %>
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
<div class="post-page-container flex relative justify-between box-border w-full h-full">
|
|
2
|
+
<div class="article-content-container">
|
|
3
|
+
|
|
4
|
+
<div class="article-title relative w-full">
|
|
5
|
+
<% if (page.cover || page.banner || (page.thumbnail && page.thumbnail !== false)) { %>
|
|
6
|
+
<% let articleCover = "";
|
|
7
|
+
if (page.cover && page.cover.includes("/")) {
|
|
8
|
+
articleCover = page.cover;
|
|
9
|
+
} else if (page.banner && page.banner.includes("/")) {
|
|
10
|
+
articleCover = page.banner;
|
|
11
|
+
} else if (page.thumbnail && page.thumbnail !== null) {
|
|
12
|
+
articleCover = page.thumbnail;
|
|
13
|
+
} else if (config.marked.postAsset && config.marked.postAsset == true) {
|
|
14
|
+
articleCover = [page.path, page.cover || page.banner].join("/");
|
|
15
|
+
}
|
|
16
|
+
%>
|
|
17
|
+
<% if (articleCover) { %>
|
|
18
|
+
<img src="<%= url_for(articleCover) %>" alt="<%= page.title %>" class="w-full h-60 sm:h-72 md:h-80 object-cover sm:rounded-t-large dark:brightness-75" />
|
|
19
|
+
<% } %>
|
|
20
|
+
<div class="w-full flex items-center absolute bottom-0 <%= theme.articles.style.title_alignment === "center" ? "justify-center" : "justify-start" %>">
|
|
21
|
+
<h1 class="article-title-cover text-center mx-6 my-6 text-second-text-color bg-background-color-transparent px-4 py-3 text-3xl sm:text-4xl md:text-5xl font-semibold backdrop-blur-lg rounded-xl border border-border-color "><%= page.title %></h1>
|
|
22
|
+
</div>
|
|
23
|
+
<% } else { %>
|
|
24
|
+
<div class="w-full flex items-center pt-6 <%= theme.articles.style.title_alignment === "center" ? "justify-center" : "justify-start" %>">
|
|
25
|
+
<h1 class="article-title-regular text-second-text-color tracking-tight text-4xl md:text-6xl font-semibold px-2 sm:px-6 md:px-8 py-3"><%= page.title %></h1>
|
|
26
|
+
</div>
|
|
27
|
+
<% } %>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<% if (theme.info.author || config.author) { %>
|
|
31
|
+
<div class="article-header flex flex-row gap-2 items-center px-2 sm:px-6 md:px-8">
|
|
32
|
+
<div class="avatar w-[46px] h-[46px] flex-shrink-0 rounded-medium border border-border-color p-[1px]">
|
|
33
|
+
<%- image_tag((typeof page.avatar === "string" && (page.avatar)) || page.author?.avatar || theme.defaults.avatar) %>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="info flex flex-col justify-between">
|
|
36
|
+
<div class="author flex items-center">
|
|
37
|
+
<span class="name text-default-text-color text-lg font-semibold"><%= (typeof page.author === "string" && (page.author)) || page.author?.name || theme.info.author || config.author %></span>
|
|
38
|
+
<% if (theme.hasOwnProperty('articles') && theme.articles.author_label.enable === true) { %>
|
|
39
|
+
<span class="author-label ml-1.5 text-xs px-2 py-0.5 rounded-small text-third-text-color border border-shadow-color-1"><%- getAuthorLabel(site.posts.length, theme.articles.author_label.auto, theme.articles.author_label.list) %></span>
|
|
40
|
+
<% } %>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="meta-info">
|
|
43
|
+
<%- partial('pages/post/article-info', {articleObject: page, index: true}) %>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
<% } else { %>
|
|
48
|
+
<div class="article-header-meta-info px-2 sm:px-6 md:px-8">
|
|
49
|
+
<div class="meta-info">
|
|
50
|
+
<%- partial('pages/post/article-info', {articleObject: page, index: true}) %>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
<% } %>
|
|
54
|
+
|
|
55
|
+
<% if (page?.expires && page?.expires !== "") {%>
|
|
56
|
+
<div class="article-expire mt-4 mx-2 sm:mx-6 md:mx-8 note p-4 rounded-lg red icon hidden" id="expiration-container">
|
|
57
|
+
<i class="expire-icon fa-solid fa-timer mr-0.5 text-red-600 dark:text-red-400"></i>
|
|
58
|
+
<span class="expire-label text-red-600 dark:text-red-400 " id="expiration-date"><%= __('expired', "some") %></span>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<script data-swup-reload-script>
|
|
62
|
+
function updateExpirationDate() {
|
|
63
|
+
try {
|
|
64
|
+
const expiredDate = new Date("<%= page?.expires %>");
|
|
65
|
+
const updatedDate = new Date("<%= page?.updated %>");
|
|
66
|
+
const now = new Date();
|
|
67
|
+
const expirationValue = document.getElementById("expiration-date");
|
|
68
|
+
const expirationContainer = document.getElementById("expiration-container");
|
|
69
|
+
let daysAgo = Math.floor((now - updatedDate) / (1000 * 60 * 60 * 24));
|
|
70
|
+
if (expiredDate < now) {
|
|
71
|
+
expirationContainer.classList.remove("hidden");
|
|
72
|
+
// console.log(daysAgo)
|
|
73
|
+
expirationValue.innerHTML = expirationValue.innerHTML.replace("some", daysAgo);
|
|
74
|
+
}
|
|
75
|
+
} catch (e) {}
|
|
76
|
+
}
|
|
77
|
+
document.addEventListener("DOMContentLoaded", function() {
|
|
78
|
+
updateExpirationDate();
|
|
79
|
+
});
|
|
80
|
+
try {
|
|
81
|
+
swup.hooks.on("page:view", updateExpirationDate)
|
|
82
|
+
} catch (e) {}
|
|
83
|
+
</script>
|
|
84
|
+
<% } %>
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
<div class="article-content markdown-body px-2 sm:px-6 md:px-8 pb-8">
|
|
88
|
+
<%- page.content %>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<% if (theme.articles.copyright.enable || theme.articles.copyright === true) { %>
|
|
92
|
+
<div class="post-copyright-info w-full my-8 px-2 sm:px-6 md:px-8">
|
|
93
|
+
<%- partial('pages/post/article-copyright') %>
|
|
94
|
+
</div>
|
|
95
|
+
<% } %>
|
|
96
|
+
|
|
97
|
+
<% if (page?.tags?.length) { %>
|
|
98
|
+
<ul class="post-tags-box text-lg mt-1.5 flex-wrap justify-center flex md:hidden">
|
|
99
|
+
<% page.tags.forEach((tag) => { %>
|
|
100
|
+
<li class="tag-item mx-0.5">
|
|
101
|
+
<a href="<%- url_for(tag.path) %>">#<%= tag.name %></a>
|
|
102
|
+
</li>
|
|
103
|
+
<% }); %>
|
|
104
|
+
</ul>
|
|
105
|
+
<% } %>
|
|
106
|
+
|
|
107
|
+
<%- articleRecommendationGenerator(page) %>
|
|
108
|
+
|
|
109
|
+
<% if (page?.prev || page?.next) { %>
|
|
110
|
+
<div class="article-nav my-8 flex justify-between items-center px-2 sm:px-6 md:px-8">
|
|
111
|
+
<% if (page?.prev) { %>
|
|
112
|
+
<div class="article-prev border-border-color shadow-redefine-flat shadow-shadow-color-2 rounded-medium px-4 py-2 hover:shadow-redefine-flat-hover hover:shadow-shadow-color-2">
|
|
113
|
+
<a class="prev" rel="prev" href="<%= url_for(page.prev.path) %>">
|
|
114
|
+
<span class="left arrow-icon flex justify-center items-center">
|
|
115
|
+
<i class="fa-solid fa-chevron-left"></i>
|
|
116
|
+
</span>
|
|
117
|
+
<span class="title flex justify-center items-center">
|
|
118
|
+
<span class="post-nav-title-item truncate max-w-48"><%= page.prev.title %></span>
|
|
119
|
+
<span class="post-nav-item"><%= __('prev_posts') %></span>
|
|
120
|
+
</span>
|
|
121
|
+
</a>
|
|
122
|
+
</div>
|
|
123
|
+
<% } %>
|
|
124
|
+
<% if (page?.next) { %>
|
|
125
|
+
<div class="article-next border-border-color shadow-redefine-flat shadow-shadow-color-2 rounded-medium px-4 py-2 hover:shadow-redefine-flat-hover hover:shadow-shadow-color-2">
|
|
126
|
+
<a class="next" rel="next" href="<%= url_for(page.next.path) %>">
|
|
127
|
+
<span class="title flex justify-center items-center">
|
|
128
|
+
<span class="post-nav-title-item truncate max-w-48"><%= page.next.title %></span>
|
|
129
|
+
<span class="post-nav-item"><%= __('next_posts') %></span>
|
|
130
|
+
</span>
|
|
131
|
+
<span class="right arrow-icon flex justify-center items-center">
|
|
132
|
+
<i class="fa-solid fa-chevron-right"></i>
|
|
133
|
+
</span>
|
|
134
|
+
</a>
|
|
135
|
+
</div>
|
|
136
|
+
<% } %>
|
|
137
|
+
</div>
|
|
138
|
+
<% } %>
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
<% if (theme.comment.enable === true && theme.comment.hasOwnProperty('system') && page.comment !== false) { %>
|
|
142
|
+
<div class="comment-container px-2 sm:px-6 md:px-8 pb-8">
|
|
143
|
+
<%- partial('components/comments/comment') %>
|
|
144
|
+
</div>
|
|
145
|
+
<% } %>
|
|
146
|
+
</div>
|
|
147
|
+
|
|
148
|
+
<% if (is_post() && theme.articles.toc.enable === true) { %>
|
|
149
|
+
<div class="toc-content-container">
|
|
150
|
+
<%- partial('pages/post/toc') %>
|
|
151
|
+
</div>
|
|
152
|
+
<% } %>
|
|
153
|
+
</div>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<div class="article-copyright-info-container">
|
|
2
|
+
<ul>
|
|
3
|
+
<li><strong><%- __('copyright.title') %>:</strong> <%= page.title %></li>
|
|
4
|
+
<li><strong><%- __('copyright.author') %>:</strong> <%=(typeof page.author === "string" && (page.author)) || page.author?.name || theme.info.author || config.author %></li>
|
|
5
|
+
<li><strong><%- __('copyright.create_time') %>
|
|
6
|
+
:</strong> <%= date(page.date, `${config.date_format} ${config.time_format}`) %></li>
|
|
7
|
+
<% if (page.updated && page.updated !== page.date) { %>
|
|
8
|
+
<li>
|
|
9
|
+
<strong><%- __('copyright.update_time') %>
|
|
10
|
+
:</strong> <%= date(page.updated, `${config.date_format} ${config.time_format}`) %>
|
|
11
|
+
</li>
|
|
12
|
+
<% } %>
|
|
13
|
+
<li>
|
|
14
|
+
<strong><%- __('copyright.link') %>:</strong> <%= getPostUrl((theme.info.url || config.url), page.path) %>
|
|
15
|
+
</li>
|
|
16
|
+
<li>
|
|
17
|
+
<strong>
|
|
18
|
+
<%- __('copyright.license_title') %>:
|
|
19
|
+
</strong>
|
|
20
|
+
<%
|
|
21
|
+
const licenseMap = {
|
|
22
|
+
'all_rights_reserved': {
|
|
23
|
+
label: __('copyright.all_rights_reserved', theme.info.author),
|
|
24
|
+
url: null
|
|
25
|
+
},
|
|
26
|
+
'cc_by': {
|
|
27
|
+
label: __('copyright.license_content', '<a class="license" href="https://creativecommons.org/licenses/by/4.0">CC BY 4.0</a>'),
|
|
28
|
+
url: 'https://creativecommons.org/licenses/by/4.0'
|
|
29
|
+
},
|
|
30
|
+
'cc_by_sa': {
|
|
31
|
+
label: __('copyright.license_content', '<a class="license" href="https://creativecommons.org/licenses/by-sa/4.0">CC BY-SA 4.0</a>'),
|
|
32
|
+
url: 'https://creativecommons.org/licenses/by-sa/4.0'
|
|
33
|
+
},
|
|
34
|
+
'cc_by_nc': {
|
|
35
|
+
label: __('copyright.license_content', '<a class="license" href="https://creativecommons.org/licenses/by-nc/4.0">CC BY-NC 4.0</a>'),
|
|
36
|
+
url: 'https://creativecommons.org/licenses/by-nc/4.0'
|
|
37
|
+
},
|
|
38
|
+
'cc_by_nd': {
|
|
39
|
+
label: __('copyright.license_content', '<a class="license" href="https://creativecommons.org/licenses/by-nd/4.0">CC BY-ND 4.0</a>'),
|
|
40
|
+
url: 'https://creativecommons.org/licenses/by-nd/4.0'
|
|
41
|
+
},
|
|
42
|
+
'cc_by_nc_sa': {
|
|
43
|
+
label: __('copyright.license_content', '<a class="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0">CC BY-NC-SA 4.0</a>'),
|
|
44
|
+
url: 'https://creativecommons.org/licenses/by-nc-sa/4.0'
|
|
45
|
+
},
|
|
46
|
+
'public_domain': {
|
|
47
|
+
label: __('copyright.public_domain'),
|
|
48
|
+
url: null
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
let licenseType = 'cc_by_nc_sa'; // Default license type
|
|
53
|
+
if (page.copyright && page.copyright !== "") {
|
|
54
|
+
licenseType = 'custom';
|
|
55
|
+
} else if (page.license && licenseMap[page.license]) {
|
|
56
|
+
licenseType = page.license;
|
|
57
|
+
} else if (theme.articles.copyright.default && licenseMap[theme.articles.copyright.default]) {
|
|
58
|
+
licenseType = theme.articles.copyright.default;
|
|
59
|
+
}
|
|
60
|
+
%>
|
|
61
|
+
|
|
62
|
+
<% if (licenseType === 'custom') { %>
|
|
63
|
+
<%- page.copyright %>
|
|
64
|
+
<% } else { %>
|
|
65
|
+
<%- licenseMap[licenseType].label %>
|
|
66
|
+
<% } %>
|
|
67
|
+
</li>
|
|
68
|
+
</ul>
|
|
69
|
+
</div>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<div class="article-meta-info">
|
|
2
|
+
<span class="article-date article-meta-item">
|
|
3
|
+
<i class="fa-regular fa-pen-fancy"></i>
|
|
4
|
+
<span class="desktop"><%= date(articleObject.date, is_post() ? `${config.date_format} ${config.time_format}` : `${config.date_format}`).replace(" 00:00:00", "").replace(":00", "") %></span>
|
|
5
|
+
<span class="mobile"><%= date(articleObject.date, is_post() ? `${config.date_format} ${config.time_format}` : `${config.date_format}`).replace(" 00:00:00", "").replace(":00", "") %></span>
|
|
6
|
+
<span class="hover-info"><%= __("create_time") %></span>
|
|
7
|
+
</span>
|
|
8
|
+
<% if (articleObject?.updated && articleObject.updated !== articleObject.date) { %>
|
|
9
|
+
<span class="article-date article-meta-item">
|
|
10
|
+
<i class="fa-regular fa-wrench"></i>
|
|
11
|
+
<span class="desktop"><%= date(articleObject.updated, is_post() ? `${config.date_format} ${config.time_format}` : `${config.date_format}`).replace(" 00:00:00", "").replace(":00", "") %></span>
|
|
12
|
+
<span class="mobile"><%= date(articleObject.updated, is_post() ? `${config.date_format} ${config.time_format}` : `${config.date_format}`).replace(" 00:00:00", "").replace(":00", "") %></span>
|
|
13
|
+
<span class="hover-info"><%= __("update_time") %></span>
|
|
14
|
+
</span>
|
|
15
|
+
<% } %>
|
|
16
|
+
|
|
17
|
+
<% if (articleObject?.categories?.length) { %>
|
|
18
|
+
<span class="article-categories article-meta-item">
|
|
19
|
+
<i class="fa-regular fa-folders"></i>
|
|
20
|
+
<ul>
|
|
21
|
+
<% let previousParentId = null; %>
|
|
22
|
+
<% articleObject.categories.forEach((category, i) => { %>
|
|
23
|
+
<% if (previousParentId !== category.parent) { %>
|
|
24
|
+
<% if (previousParentId !== null) { %>
|
|
25
|
+
<li>></li>
|
|
26
|
+
<% } %>
|
|
27
|
+
<li>
|
|
28
|
+
<a href="<%- url_for(category.path) %>"><%= category.name %></a>
|
|
29
|
+
</li>
|
|
30
|
+
<% } else { %>
|
|
31
|
+
<li>
|
|
32
|
+
| <a href="<%- url_for(category.path) %>"><%= category.name %></a>
|
|
33
|
+
</li>
|
|
34
|
+
<% } %>
|
|
35
|
+
<% previousParentId = category.parent; %>
|
|
36
|
+
<% }); %>
|
|
37
|
+
</ul>
|
|
38
|
+
</span>
|
|
39
|
+
<% } %>
|
|
40
|
+
<% if (articleObject?.tags?.length) { %>
|
|
41
|
+
<span class="article-tags article-meta-item">
|
|
42
|
+
<i class="fa-regular fa-tags"></i>
|
|
43
|
+
<ul>
|
|
44
|
+
<% articleObject.tags.forEach((tag, i) => { %>
|
|
45
|
+
<li>
|
|
46
|
+
<%= i === 0 ? '' : '| ' %><a href="<%- url_for(tag.path) %>"><%= tag.name %></a>
|
|
47
|
+
</li>
|
|
48
|
+
<% }); %>
|
|
49
|
+
</ul>
|
|
50
|
+
</span>
|
|
51
|
+
<% } %>
|
|
52
|
+
|
|
53
|
+
<%
|
|
54
|
+
let temp_wordcount, temp_min2read = null;
|
|
55
|
+
try {
|
|
56
|
+
temp_wordcount = wordcount(page.content);
|
|
57
|
+
temp_min2read = min2read(page.content);
|
|
58
|
+
} catch (e) {
|
|
59
|
+
temp_wordcount = 0;
|
|
60
|
+
temp_min2read = 0;
|
|
61
|
+
}
|
|
62
|
+
%>
|
|
63
|
+
<% if(is_post() && theme.hasOwnProperty('articles') && theme.articles.word_count.enable && theme.articles.word_count.count && temp_wordcount){ %>
|
|
64
|
+
<span class="article-wordcount article-meta-item">
|
|
65
|
+
<i class="fa-regular fa-typewriter"></i> <span><%= temp_wordcount %> <%- __('wordcount') %></span>
|
|
66
|
+
</span>
|
|
67
|
+
<% } %>
|
|
68
|
+
<% if(is_post() && theme.hasOwnProperty('articles') && theme.articles.word_count.enable && theme.articles.word_count.min2read && temp_min2read){ %>
|
|
69
|
+
<span class="article-min2read article-meta-item">
|
|
70
|
+
<i class="fa-regular fa-clock"></i> <span><%= temp_min2read %> <%- __('min2read') %></span>
|
|
71
|
+
</span>
|
|
72
|
+
<% } %>
|
|
73
|
+
<% if (is_post() && theme.global.website_counter.enable && theme.global.website_counter.post_pv) { %>
|
|
74
|
+
<span class="article-pv article-meta-item">
|
|
75
|
+
<i class="fa-regular fa-eye"></i> <span id="busuanzi_value_page_pv"></span>
|
|
76
|
+
</span>
|
|
77
|
+
<% } %>
|
|
78
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<div class="post-tools-container">
|
|
2
|
+
<ul class="article-tools-list">
|
|
3
|
+
<!-- TOC aside toggle -->
|
|
4
|
+
<% if (theme.articles.toc.enable) { %>
|
|
5
|
+
<li class="right-bottom-tools page-aside-toggle">
|
|
6
|
+
<i class="fa-regular fa-outdent"></i>
|
|
7
|
+
</li>
|
|
8
|
+
<% } %>
|
|
9
|
+
|
|
10
|
+
<!-- go comment -->
|
|
11
|
+
<% if (theme.comment.enable === true && theme.comment.hasOwnProperty('system') && page.comment !== false) { %>
|
|
12
|
+
<li class="go-comment">
|
|
13
|
+
<i class="fa-regular fa-comments"></i>
|
|
14
|
+
</li>
|
|
15
|
+
<% } %>
|
|
16
|
+
</ul>
|
|
17
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="post-toc-wrap">
|
|
2
|
+
<div class="post-toc">
|
|
3
|
+
<div class="toc-title"><%- __('toc') %></div>
|
|
4
|
+
<div class="page-title"><%= page.title %></div>
|
|
5
|
+
<%- toc(
|
|
6
|
+
page.content,
|
|
7
|
+
{
|
|
8
|
+
class: 'nav',
|
|
9
|
+
list_number: theme.articles.toc.number,
|
|
10
|
+
max_depth: theme.articles.toc.max_depth,
|
|
11
|
+
}
|
|
12
|
+
) %>
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<div class="mb-4">
|
|
2
|
+
<h1 class="page-title-header"><%= page.title %></h1>
|
|
3
|
+
<ul class="flex flex-col mb-4 gap-6">
|
|
4
|
+
<%
|
|
5
|
+
const timezone = config.timezone || 'Asia/Shanghai';
|
|
6
|
+
const newessays = theme.essays.sort((a, b) => moment(b.date).diff(a.date));
|
|
7
|
+
%>
|
|
8
|
+
<% for (const e of newessays) { %>
|
|
9
|
+
<li class="w-full flex flex-row relative">
|
|
10
|
+
<div class="w-10 h-10 mr-4 rounded-lg overflow-hidden border border-border-color p-[1px] shrink-0">
|
|
11
|
+
<%- image_tag(theme.defaults.avatar, {class: "w-full h-full rounded-[6.2px]"}) %>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="w-full border-border-color rounded-xl rounded-tl-none shadow-redefine-flat overflow-hidden">
|
|
14
|
+
<!-- Pass the raw date here in a data attribute -->
|
|
15
|
+
<% rawDate = moment(e.date).utc().format('YYYY-MM-DD HH:mm:ss') %>
|
|
16
|
+
<div class="essay-date px-4 py-1.5 text-sm border-b border-border-color bg-zinc-50 dark:bg-zinc-800 text-third-text-color" data-date="<%= moment(rawDate).tz(timezone).format() %>">Loading Date...</div>
|
|
17
|
+
<div id="shuoshuo-content" class="px-4 py-2"><%- markdown(e.content) %></div>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="absolute left-[50.5px] top-3 transform w-2 h-2 border-solid border-t border-l bg-zinc-50 -rotate-45 border-border-color dark:bg-zinc-800"></div>
|
|
20
|
+
</li>
|
|
21
|
+
<% } %>
|
|
22
|
+
</ul>
|
|
23
|
+
</div>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<% if (site.tags.length){ %>
|
|
2
|
+
<h1 class="page-title-header">
|
|
3
|
+
<%- getPageTitle(page) %>
|
|
4
|
+
</h1>
|
|
5
|
+
|
|
6
|
+
<% if (theme.page_templates.tags_style == 'cloud') { %>
|
|
7
|
+
<div class="tagcloud-content">
|
|
8
|
+
<%- tagcloud({ min_font: 1, max_font: 5, unit: 'rem', amount: 100 }) %>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<% } else {%>
|
|
12
|
+
<div class="tagcloud-content">
|
|
13
|
+
<ul class="tag-list" data-show-value="true">
|
|
14
|
+
<% site.tags.forEach(function(tag){ %>
|
|
15
|
+
<li>
|
|
16
|
+
<a data-weight="<%- tag.posts.length %>" href="<%- url_for("/" + tag.path) %>">
|
|
17
|
+
<i class="fa-solid fa-hashtag"></i><%- tag.name %>
|
|
18
|
+
</a>
|
|
19
|
+
</li>
|
|
20
|
+
<% }) %>
|
|
21
|
+
</ul>
|
|
22
|
+
</div>
|
|
23
|
+
<% } %>
|
|
24
|
+
<% } %>
|
package/layout/post.ejs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%- partial('page') %>
|
package/layout/tag.ejs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%- partial('page') %>
|
package/layout/tags.ejs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%- partial('page') %>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<div class="search-pop-overlay">
|
|
2
|
+
<div class="popup search-popup">
|
|
3
|
+
<div class="search-header">
|
|
4
|
+
<span class="search-input-field-pre">
|
|
5
|
+
<i class="fa-solid fa-keyboard"></i>
|
|
6
|
+
</span>
|
|
7
|
+
<div class="search-input-container">
|
|
8
|
+
<input autocomplete="off" autocorrect="off" autocapitalize="off" placeholder="<%= __('search') %>" spellcheck="false" type="search" class="search-input">
|
|
9
|
+
</div>
|
|
10
|
+
<span class="popup-btn-close">
|
|
11
|
+
<i class="fa-solid fa-times"></i>
|
|
12
|
+
</span>
|
|
13
|
+
</div>
|
|
14
|
+
<div id="search-result">
|
|
15
|
+
<div id="no-result">
|
|
16
|
+
<i class="fa-solid fa-spinner fa-spin-pulse fa-5x fa-fw"></i>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<% const postList = createNewArchivePosts(posts) %>
|
|
2
|
+
<div class="archive-list-container">
|
|
3
|
+
<% postList.forEach(postYear => { %>
|
|
4
|
+
<section class="archive-item mb-spacing-unit last:mb-0">
|
|
5
|
+
<div class="archive-item-header flex flex-row items-center mb-2">
|
|
6
|
+
<span class="archive-year font-semibold text-3xl mr-2"><%= postYear.year %></span>
|
|
7
|
+
<span class="archive-year-post-count text-xs md:text-sm font-bold rounded-small bg-third-background-color py-[2px] px-[10px] border border-border-color"><%= postYear.postList.length %></span>
|
|
8
|
+
</div>
|
|
9
|
+
<% let previousDate = null; %>
|
|
10
|
+
<ul class="article-list pl-0 md:pl-8 text-lg leading-[1.5]">
|
|
11
|
+
<% postYear.postList.sort((a,b) => (a.date > b.date ? -1 : (a.date < b.date ? 1 : a.title.localeCompare(b.title)))).forEach(post => { %>
|
|
12
|
+
<% const currentDate = date(post.date, 'MM-DD'); %>
|
|
13
|
+
<% if (previousDate !== currentDate) { %>
|
|
14
|
+
<% if (previousDate) { %>
|
|
15
|
+
</li>
|
|
16
|
+
<% } %> <!-- Close the previous LI if not the first item -->
|
|
17
|
+
<li class="article-item space-y-2 px-6 pt-10 pb-2 text-xl relative border-l-2 border-border-color" date-is='<%= currentDate %>'>
|
|
18
|
+
<% } %>
|
|
19
|
+
<a href="<%- url_for(post.path) %>" class="block w-fit">
|
|
20
|
+
<span class="article-title my-0.5 text-2xl"><%= post.title %></span>
|
|
21
|
+
</a>
|
|
22
|
+
<% previousDate = currentDate; %>
|
|
23
|
+
<% }) %>
|
|
24
|
+
</li> <!-- Ensure the last item is properly closed -->
|
|
25
|
+
</ul>
|
|
26
|
+
</section>
|
|
27
|
+
<% }) %>
|
|
28
|
+
</div>
|