hexo-theme-solitude 1.0.0

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 (173) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +56 -0
  3. package/_config.yml +432 -0
  4. package/languages/en-US.yml +39 -0
  5. package/languages/zh-CN.yml +39 -0
  6. package/layout/404.ejs +34 -0
  7. package/layout/archive.ejs +10 -0
  8. package/layout/category.ejs +18 -0
  9. package/layout/index.ejs +20 -0
  10. package/layout/layout.ejs +35 -0
  11. package/layout/page/about.ejs +13 -0
  12. package/layout/page/categories.ejs +12 -0
  13. package/layout/page/circle.ejs +5 -0
  14. package/layout/page/echarts.ejs +14 -0
  15. package/layout/page/equipment.ejs +2 -0
  16. package/layout/page/links.ejs +57 -0
  17. package/layout/page/page.ejs +3 -0
  18. package/layout/page/rss.ejs +37 -0
  19. package/layout/page/says.ejs +16 -0
  20. package/layout/page/tags.ejs +12 -0
  21. package/layout/page/tlink.ejs +11 -0
  22. package/layout/page.ejs +45 -0
  23. package/layout/partial/body.ejs +8 -0
  24. package/layout/partial/compoment/about/authorinfo.ejs +18 -0
  25. package/layout/partial/compoment/about/award.ejs +57 -0
  26. package/layout/partial/compoment/about/contentinfo.ejs +33 -0
  27. package/layout/partial/compoment/about/hobbies.ejs +44 -0
  28. package/layout/partial/compoment/about/motto.ejs +17 -0
  29. package/layout/partial/compoment/about/other.ejs +68 -0
  30. package/layout/partial/compoment/about/personalities.ejs +11 -0
  31. package/layout/partial/compoment/about/skillsinfo.ejs +62 -0
  32. package/layout/partial/compoment/aside/aside.ejs +28 -0
  33. package/layout/partial/compoment/aside/asideAllInfo.ejs +6 -0
  34. package/layout/partial/compoment/aside/asideArchive.ejs +11 -0
  35. package/layout/partial/compoment/aside/asideFlipCard.ejs +8 -0
  36. package/layout/partial/compoment/aside/asideInfoCard.ejs +39 -0
  37. package/layout/partial/compoment/aside/asideNewestPost.ejs +31 -0
  38. package/layout/partial/compoment/aside/asidePower.ejs +31 -0
  39. package/layout/partial/compoment/aside/asideSwitch.ejs +35 -0
  40. package/layout/partial/compoment/aside/asideTag.ejs +5 -0
  41. package/layout/partial/compoment/aside/asideToc.ejs +11 -0
  42. package/layout/partial/compoment/aside/asideWebInfo.ejs +60 -0
  43. package/layout/partial/compoment/circle/angle.ejs +26 -0
  44. package/layout/partial/compoment/circle/banner.ejs +11 -0
  45. package/layout/partial/compoment/circle/content.ejs +22 -0
  46. package/layout/partial/compoment/dorakika/rightmenu.ejs +115 -0
  47. package/layout/partial/compoment/equipment/list.ejs +37 -0
  48. package/layout/partial/compoment/home/homeCategoryBar.ejs +11 -0
  49. package/layout/partial/compoment/home/postList.ejs +37 -0
  50. package/layout/partial/compoment/hometop/bbTimeList.ejs +15 -0
  51. package/layout/partial/compoment/hometop/categoryGroup.ejs +19 -0
  52. package/layout/partial/compoment/hometop/groupTag.ejs +30 -0
  53. package/layout/partial/compoment/hometop/topGroup.ejs +48 -0
  54. package/layout/partial/compoment/inject/body.ejs +57 -0
  55. package/layout/partial/compoment/inject/head.ejs +19 -0
  56. package/layout/partial/compoment/links/banner.ejs +42 -0
  57. package/layout/partial/compoment/links/linksCard.ejs +27 -0
  58. package/layout/partial/compoment/links/linksItem.ejs +21 -0
  59. package/layout/partial/compoment/mixins/articleSort.ejs +26 -0
  60. package/layout/partial/compoment/mixins/pagination.ejs +11 -0
  61. package/layout/partial/compoment/nav/left.ejs +22 -0
  62. package/layout/partial/compoment/nav/menu.ejs +25 -0
  63. package/layout/partial/compoment/nav/right.ejs +42 -0
  64. package/layout/partial/compoment/post/award.ejs +52 -0
  65. package/layout/partial/compoment/post/copyright.ejs +37 -0
  66. package/layout/partial/compoment/post/postMeta.ejs +83 -0
  67. package/layout/partial/compoment/post/postNav.ejs +41 -0
  68. package/layout/partial/compoment/post/wave.ejs +14 -0
  69. package/layout/partial/compoment/says/banner.ejs +10 -0
  70. package/layout/partial/compoment/says/saysBottom.ejs +18 -0
  71. package/layout/partial/compoment/says/saysContent.ejs +11 -0
  72. package/layout/partial/compoment/third-party/comments/comment.ejs +12 -0
  73. package/layout/partial/compoment/third-party/comments/twikoo.ejs +29 -0
  74. package/layout/partial/compoment/third-party/comments/twikoo_k.ejs +29 -0
  75. package/layout/partial/compoment/third-party/music.ejs +5 -0
  76. package/layout/partial/compoment/third-party/pjax.ejs +31 -0
  77. package/layout/partial/compoment/third-party/search/algolia-search.ejs +20 -0
  78. package/layout/partial/compoment/third-party/search/index.ejs +10 -0
  79. package/layout/partial/compoment/third-party/search/local-search.ejs +22 -0
  80. package/layout/partial/compoment/tlink/banner.ejs +10 -0
  81. package/layout/partial/console.ejs +62 -0
  82. package/layout/partial/footer.ejs +107 -0
  83. package/layout/partial/head.ejs +37 -0
  84. package/layout/partial/header.ejs +6 -0
  85. package/layout/partial/hometop.ejs +15 -0
  86. package/layout/partial/loading.ejs +86 -0
  87. package/layout/partial/nav.ejs +34 -0
  88. package/layout/partial/pwa.ejs +40 -0
  89. package/layout/partial/sidebar.ejs +31 -0
  90. package/layout/post.ejs +36 -0
  91. package/layout/tag.ejs +19 -0
  92. package/package.json +24 -0
  93. package/scripts/event/init.js +22 -0
  94. package/scripts/event/page.js +40 -0
  95. package/scripts/event/welcome.js +15 -0
  96. package/scripts/filter/checkThemeConfig.js +18 -0
  97. package/scripts/filter/default.js +23 -0
  98. package/scripts/filter/katex.js +25 -0
  99. package/scripts/filter/lazyload.js +11 -0
  100. package/scripts/filter/randomPosts.js +9 -0
  101. package/scripts/helper/charts.js +397 -0
  102. package/scripts/helper/getArchiveLength.js +18 -0
  103. package/scripts/helper/randomLinks.js +16 -0
  104. package/scripts/helper/related_post.js +91 -0
  105. package/scripts/helper/themeJsExport.js +77 -0
  106. package/scripts/tags/bvideo.js +42 -0
  107. package/scripts/tags/expand.js +4 -0
  108. package/scripts/tags/fold.js +19 -0
  109. package/scripts/tags/link.js +17 -0
  110. package/scripts/tags/note.js +3 -0
  111. package/scripts/tags/tabs.js +61 -0
  112. package/scripts/tags/timeline.js +35 -0
  113. package/source/css/commentBarrage.css +174 -0
  114. package/source/css/custom.css +901 -0
  115. package/source/css/main.css +16471 -0
  116. package/source/css/search/algolia-search.css +141 -0
  117. package/source/css/search/local-search.css +138 -0
  118. package/source/css/var.css +186 -0
  119. package/source/img/default.png +0 -0
  120. package/source/img/loading.gif +0 -0
  121. package/source/img/power.png +0 -0
  122. package/source/img/pwa/180.png +0 -0
  123. package/source/img/pwa/192.png +0 -0
  124. package/source/img/pwa/512.png +0 -0
  125. package/source/img/pwa/logo.png +0 -0
  126. package/source/img/pwa/siteicon/splash-1125x2436.png +0 -0
  127. package/source/img/pwa/siteicon/splash-1136x640.png +0 -0
  128. package/source/img/pwa/siteicon/splash-1170x2532.png +0 -0
  129. package/source/img/pwa/siteicon/splash-1179x2556.png +0 -0
  130. package/source/img/pwa/siteicon/splash-1242x2208.png +0 -0
  131. package/source/img/pwa/siteicon/splash-1242x2688.png +0 -0
  132. package/source/img/pwa/siteicon/splash-1248x2778.png +0 -0
  133. package/source/img/pwa/siteicon/splash-1290x2796.png +0 -0
  134. package/source/img/pwa/siteicon/splash-1334x750.png +0 -0
  135. package/source/img/pwa/siteicon/splash-1536x2048.png +0 -0
  136. package/source/img/pwa/siteicon/splash-1620x2160.png +0 -0
  137. package/source/img/pwa/siteicon/splash-1668x2224.png +0 -0
  138. package/source/img/pwa/siteicon/splash-1668x2388.png +0 -0
  139. package/source/img/pwa/siteicon/splash-1792x828.png +0 -0
  140. package/source/img/pwa/siteicon/splash-2048x1536.png +0 -0
  141. package/source/img/pwa/siteicon/splash-2048x2732.png +0 -0
  142. package/source/img/pwa/siteicon/splash-2160x1620.png +0 -0
  143. package/source/img/pwa/siteicon/splash-2208x1242.png +0 -0
  144. package/source/img/pwa/siteicon/splash-2224x1668.png +0 -0
  145. package/source/img/pwa/siteicon/splash-2388x1668.png +0 -0
  146. package/source/img/pwa/siteicon/splash-2436x1125.png +0 -0
  147. package/source/img/pwa/siteicon/splash-2532x1170.png +0 -0
  148. package/source/img/pwa/siteicon/splash-2556x1179.png +0 -0
  149. package/source/img/pwa/siteicon/splash-2688x1242.png +0 -0
  150. package/source/img/pwa/siteicon/splash-2732x2048.png +0 -0
  151. package/source/img/pwa/siteicon/splash-2778x1248.png +0 -0
  152. package/source/img/pwa/siteicon/splash-2796x1290.png +0 -0
  153. package/source/img/pwa/siteicon/splash-640x1136.png +0 -0
  154. package/source/img/pwa/siteicon/splash-750x1334.png +0 -0
  155. package/source/img/pwa/siteicon/splash-828x1792.png +0 -0
  156. package/source/img/theme/avatar.png +0 -0
  157. package/source/js/circle.js +1828 -0
  158. package/source/js/commentBarrage.js +148 -0
  159. package/source/js/extend/console/comment.js +99 -0
  160. package/source/js/extend/covercolor/local.js +150 -0
  161. package/source/js/extend/covercolor/web.js +137 -0
  162. package/source/js/extend/search/algolia-search.js +136 -0
  163. package/source/js/extend/search/local-search.js +160 -0
  164. package/source/js/main.js +705 -0
  165. package/source/js/post_ai.js +517 -0
  166. package/source/js/utils.js +153 -0
  167. package/source/lib/bundle.js +27 -0
  168. package/source/lib/friends_post.js +98 -0
  169. package/source/lib/lazyload.js +1 -0
  170. package/source/lib/snackbar.js +16 -0
  171. package/source/lib/snackbar.min.css +1 -0
  172. package/source/lib/view-image.js +13 -0
  173. package/source/lib/waterfall.min.js +1 -0
@@ -0,0 +1,48 @@
1
+ <style type="text/css">
2
+ <!--.topGroup .todayCard::after {-->
3
+ <!-- box-shadow: 0 -109px 133px -9px <%- theme.hometop.recommendList.color %> inset;-->
4
+ <!--}-->
5
+
6
+ .todayCard-title,
7
+ .todayCard-tips,
8
+ .topGroup .banner-button {
9
+ color: #ffffff;
10
+ }
11
+
12
+ .topGroup .todayCard {
13
+ background: <%- theme.hometop.recommendList.color %>;
14
+ }
15
+ </style>
16
+ <% for (const post of site.posts.data.filter(item => item.recommend === true).slice(0,6)){ %>
17
+ <div class="recent-post-item">
18
+ <div class="post_cover left_radius">
19
+ <a href="<%= url_for(post.path) %>"
20
+ title="<%= post.title %>">
21
+ <span class="recent-post-top-text">荐</span>
22
+ <img class="post_bg"
23
+ alt="<%= post.title %>" src="<%= post.cover %>" loading="lazy">
24
+ </a>
25
+ </div>
26
+ <div class="recent-post-info">
27
+ <a class="article-title" href="<%= url_for(post.path) %>"
28
+ title="<%= post.title %>"><%= post.title %>
29
+ </a>
30
+ </div>
31
+ </div>
32
+ <% } %>
33
+ <div class="todayCard" id="todayCard" onclick="pjax.loadUrl('<%= theme.hometop.recommendList.url %>')"
34
+ style="z-index: 1;">
35
+ <div class="todayCard-info">
36
+ <div class="todayCard-tips"><%= theme.hometop.recommendList.sup %></div>
37
+ <div class="todayCard-title"><%= theme.hometop.recommendList.title %></div>
38
+ </div>
39
+ <div class="todayCard-cover nolazyload"
40
+ style="background: url('<%- theme.hometop.recommendList.img %>') no-repeat center /cover">
41
+ </div>
42
+ <div class="banner-button-group"><a class="banner-button"
43
+ onclick="window.event.cancelBubble=true;sco.hideTodayCard();">
44
+ <i class="scoicon ri-add-circle-fill"></i>
45
+ <span class="banner-button-text">更多推荐</span>
46
+ </a>
47
+ </div>
48
+ </div>
@@ -0,0 +1,57 @@
1
+ <% const cdn = theme.cdn.body %>
2
+ <%- js(cdn.pjaxjs) %>
3
+ <% if(theme.lazyload.enable){ %>
4
+ <%- js(cdn.lazyloadjs) %>
5
+ <% } %>
6
+ <%- js(cdn.snackbarjs) %>
7
+ <% if(theme.lightbox){ %>
8
+ <%- js(cdn.viewimagejs) %>
9
+ <% } %>
10
+ <% if(theme.hometop.bbtime){ %>
11
+ <%- css(cdn.swipercss) %>
12
+ <%- js(cdn.swiperjs) %>
13
+ <% } %>
14
+ <div id="js-pjax">
15
+ <% if(page.type === 'says' || page.type === 'album' || page.type === 'album_detail' ){ %>
16
+ <%- js(cdn.waterfalljs) %>
17
+ <script>
18
+ window.addEventListener('resize', utils.throttle(function () {
19
+ if (document.getElementById('waterfall')) {
20
+ sco.reflashEssayWaterFall();
21
+ }
22
+ }), 500);
23
+ </script>
24
+ <% } %>
25
+ <% if(theme.thirdparty.busuanzi && (theme.aside.siteinfo.uv || theme.aside.siteinfo.pv)){ %>
26
+ <script async
27
+ src="<%= cdn.busuanzijs %>"></script>
28
+ <% } %>
29
+ </div>
30
+ <% if(theme.thirdparty.aplayer.enable){ %>
31
+ <%- css(cdn.aplayercss) %>
32
+ <%- js(cdn.aplayerjs) %>
33
+ <%- js(cdn.metingjs) %>
34
+ <script>
35
+ var meting_api = "<%- theme.thirdparty.aplayer.api %>";
36
+ </script>
37
+ <% } %>
38
+ <% if(theme.post.covercolor && !theme.post.covercolor.local){ %>
39
+ <%- js('/js/extend/covercolor/web') %>
40
+ <% }else{ %>
41
+ <%- js('/js/extend/covercolor/local') %>
42
+ <% } %>
43
+
44
+ <% if(theme.footer.randomlink){ %>
45
+ <%- randomLinks() %>
46
+ <% } %>
47
+
48
+ <% if(theme.comment.enable){
49
+ %>
50
+ <%- js('/js/extend/console/comment')
51
+ %>
52
+ <% } %>
53
+
54
+ <% if (page.katex){ %>
55
+ <% css(cdn.katexcss) %>
56
+ <% js(cdn.katexjs) %>
57
+ <% } %>
@@ -0,0 +1,19 @@
1
+ <% const cdn = theme.cdn.head %>
2
+ <% if(theme.verify.baidu){%>
3
+ <meta name="baidu-site-verification" content="<%- theme.verify.baidu %>" />
4
+ <%} %>
5
+ <% if(theme.loading.pace){ %>
6
+ <script data-pace-options="{ &quot;restartOnRequestAfter&quot;:false,&quot;eventLag&quot;:false}" src="<%= cdn.pacejs %>"></script>
7
+ <% } %>
8
+ <%- css(theme.icon.customicon) %>
9
+ <%- css(cdn.remixicon) %>
10
+ <%- css(cdn.snackbarcss) %>
11
+ <% if(theme.comment.enable){ %>
12
+ <%- css('/css/commentBarrage') %>
13
+ <%- js(cdn.twikoojs) %>
14
+ <% } %>
15
+ <% if(theme.thirdparty.search.algolia_search.enable){ %>
16
+ <%- js(cdn.instantsearch) %>
17
+ <%- js(cdn.algolia) %>
18
+ <% } %>
19
+ <script type="text/javascript" src="/js/utils.js"></script>
@@ -0,0 +1,42 @@
1
+ <div class="banners-title">
2
+ <div class="banners-title-small"><%= page.title %></div>
3
+ <div class="banners-title-big"><%= page.desc %></div>
4
+ </div>
5
+ <div class="banner-button-group">
6
+ <% if (theme.footer.randomlink){ %>
7
+ <a class="banner-button secondary" onclick="travelling()">
8
+ <i class="scoicon ri-signal-tower-fill"></i>
9
+ <span class="banner-button-text">随机访问</span>
10
+ </a>
11
+ <% } %>
12
+ <a class="banner-button" onclick="sco.scrollToComment()">
13
+ <i class="scoicon ri-arrow-right-circle-fill"></i>
14
+ <span class="scoicon banner-button-text">申请友链</span>
15
+ </a>
16
+ </div>
17
+ <div class="tags-group-all nowrapMove">
18
+ <div class="tags-group-wrapper">
19
+ <% const data = site.data.links.links %>
20
+ <% for (let i = 0; i < 2; i++){ %>
21
+ <% data.forEach(x => {
22
+ if (x.type === "item") {
23
+ x.link_list.forEach((y, index) => { %>
24
+ <% if(index % 2 === 0){ %>
25
+ <div class="tags-group-icon-pair">
26
+ <% } %>
27
+ <a class="tags-group-icon" href="<%= url_for(y.link) %>" title="<%= y.name %>">
28
+ <img src="<%= y.avatar %>" title="<%= y.name %>">
29
+ </a>
30
+ <% if(index % 2 !== 0 || index === x.link_list.length - 1){ %>
31
+ </div>
32
+ <% } %>
33
+ <% })
34
+ }
35
+ }) %>
36
+ <% } %>
37
+ </div>
38
+ </div>
39
+
40
+
41
+
42
+
@@ -0,0 +1,27 @@
1
+ <div class="site-card-group">
2
+ <% data.forEach(item =>{ %>
3
+ <div class="site-card">
4
+ <% if(item.tag){ %>
5
+ <% if(item.vip){ %>
6
+ <span class="site-card-tag vip"><%= item.tag %></span>
7
+ <% }else{ %>
8
+ <span class="site-card-tag"><%= item.tag %></span>
9
+ <% } %>
10
+ <% } %>
11
+ <a class="img" itle="<%= item.name %>" href="<%= url_for(item.link) %>">
12
+ <img class="flink-avatar" src="<%= item.topimg %>" alt="<%= item.name %>">
13
+ <div class="img-alt is-center"><%= item.name %></div>
14
+ </a>
15
+ <a class="info cf-friends-link" title="<%= item.name %>" href="<%= url_for(item.link) %>">
16
+ <div class="site-card-avatar">
17
+ <img class="flink-avatar cf-friends-avatar" src="<%= item.avatar %>" alt="<%= item.name %>">
18
+ <div class="img-alt is-center"><%= item.name %></div>
19
+ </div>
20
+ <div class="site-card-text">
21
+ <span class="title cf-friends-name"><%= item.name %></span>
22
+ <span class="desc" title="<%= item.descr %>"><%= item.descr %></span>
23
+ </div>
24
+ </a>
25
+ </div>
26
+ <% }) %>
27
+ </div>
@@ -0,0 +1,21 @@
1
+ <div class="flink-list">
2
+ <% data.forEach(item =>{ %>
3
+ <div class="flink-list-item">
4
+ <a class="cf-friends-link" href="<%= url_for(item.link) %>" title="<%= item.name %>">
5
+ <% if(item.tag){ %>
6
+ <% if(item.vip){ %>
7
+ <span class="site-card-tag vip"><%= item.tag %></span>
8
+ <% }else{ %>
9
+ <span class="site-card-tag"><%= item.tag %></span>
10
+ <% } %>
11
+ <% } %>
12
+ <img class="flink-avatar cf-friends-avatar" alt="<%= item.name %>" src="<%= item.avatar %>">
13
+ <div class="img-alt is-center"><%= item.name %></div>
14
+ <div class="flink-item-info">
15
+ <span class="flink-item-name cf-friends-name"><%= item.name %></span>
16
+ <span class="flink-item-desc" title="<%= item.descr %>"><%= item.descr %></span>
17
+ </div>
18
+ </a>
19
+ </div>
20
+ <% }) %>
21
+ </div>
@@ -0,0 +1,26 @@
1
+ <% let year %>
2
+ <% page.posts.data.forEach(post => { %>
3
+ <% if(year !== moment(post.date).year()){ year = moment(post.date).year() %>
4
+ <div class="article-sort-item year"><%= year %></div>
5
+ <% } %>
6
+ <div class="article-sort-item">
7
+ <a class="article-sort-item-img" href="<%= url_for(post.path) %>" title="<%= post.title %>">
8
+ <img src="<%= post.cover %>"
9
+ alt="<%= post.title %>">
10
+ </a>
11
+ <div class="article-sort-item-info">
12
+ <a class="article-sort-item-title" href="<%= url_for(post.path) %>" title="<%= post.title %>"
13
+ onclick="window.event.cancelBubble=true;">
14
+ <%= post.title %>
15
+ </a>
16
+ <div class="article-sort-item-tags">
17
+ <% post.tags.data.forEach(tags => { %>
18
+ <a class="article-meta__tags" href="<%= url_for(tags.path) %>" onclick="window.event.cancelBubble=true;">
19
+ <span class="tags-punctuation"></span>
20
+ <%= tags.name %>
21
+ </a>
22
+ <% }) %>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ <% }); %>
@@ -0,0 +1,11 @@
1
+ <nav id="pagination">
2
+ <div class="pagination">
3
+ <% const options = {
4
+ mid_size: 1,
5
+ escape: false,
6
+ next_text: '<div class="pagination_tips_next">下页</div> <i class="scoicon ri-arrow-right-s-line"></i>',
7
+ prev_text: '<i class="scoicon ri-arrow-left-s-line"></i> <div class="pagination_tips_prev">上页</div>'
8
+ } %>
9
+ <%- paginator(options) %>
10
+ </div>
11
+ </nav>
@@ -0,0 +1,22 @@
1
+ <div class="back-menu-list-groups">
2
+ <% for(const x in theme.nav.left.menu){ %>
3
+ <% const groupData=theme.nav.left.menu[x] %>
4
+ <div class="back-menu-list-group">
5
+ <div class="back-menu-list-title">
6
+ <%= x %>
7
+ </div>
8
+ <div class="back-menu-list">
9
+ <% for(const y in groupData){ %>
10
+ <% const data=groupData[y] %>
11
+ <a class="back-menu-item" href="<%= url_for(data.url) %>" rel="external nofollow" title="<%= y %>">
12
+ <img class="back-menu-item-icon" src="<%= data.icon %>" loading="lazy">
13
+ <span class="back-menu-item-text">
14
+ <%= y %>
15
+ </span>
16
+ </a>
17
+ <% } %>
18
+ </div>
19
+ </div>
20
+ <% } %>
21
+ </div>
22
+
@@ -0,0 +1,25 @@
1
+ <div class="menus_items">
2
+ <% for(const x in theme.nav.menu){ %>
3
+ <div class="menus_item">
4
+ <% if(!theme.nav.menu[x].url){ %>
5
+ <a class="site-page" href="javascript:void(0);" rel="external nofollow">
6
+ <span> <%= x %></span>
7
+ </a>
8
+ <ul class="menus_item_child">
9
+ <% for(y in theme.nav.menu[x].child){ %>
10
+ <li>
11
+ <a class="site-page child" href="<%- url_for(theme.nav.menu[x].child[y].url) %>">
12
+ <i class="<%- theme.nav.menu[x].child[y].icon %>"></i>
13
+ <span> <%= y %></span>
14
+ </a>
15
+ </li>
16
+ <% } %>
17
+ </ul>
18
+ <% } else { %>
19
+ <a class="site-page not-child" href="<%- url_for(theme.nav.menu[x].url) %>" rel="external nofollow">
20
+ <span> <%= x %></span>
21
+ </a>
22
+ <% } %>
23
+ </div>
24
+ <% } %>
25
+ </div>
@@ -0,0 +1,42 @@
1
+ <% if(theme.nav.right.travellings){ %>
2
+ <div class="nav-button only-home" id="travellings_button">
3
+ <a class="site-page" target="_blank" rel="noopener external nofollow" href="https://www.travellings.cn/go.html" title="开往-友链接力" width="120">
4
+ <i class="scoicon ri-subway-line" style="font-size: 1rem;"></i>
5
+ </a>
6
+ </div>
7
+ <% } %>
8
+ <% if(theme.nav.right.random){ %>
9
+ <div class="nav-button" id="randomPost_button">
10
+ <a class="site-page" onclick="toRandomPost()"
11
+ title="随机前往一个文章">
12
+ <i class="scoicon ri-signal-tower-fill" style="font-size: 1rem;"></i>
13
+ </a>
14
+ </div>
15
+ <% } %>
16
+ <% if(theme.thirdparty.search.algolia_search.enable || theme.thirdparty.search.local_search.enable){ %>
17
+ <div class="nav-button" id="search-button">
18
+ <a class="site-page social-icon search" title="站内搜索"
19
+ href="javascript:void(0);" rel="external nofollow">
20
+ <i class="scoicon ri-search-2-line" style="font-size: 1rem;"></i>
21
+ </a>
22
+ </div>
23
+ <% } %>
24
+ <% if(theme.nav.right.console){ %>
25
+ <div class="nav-button" id="nav-console">
26
+ <a class="console_switchbutton" onclick="sco.showConsole()"
27
+ title="显示中控台" href="javascript:void(0);" rel="external nofollow">
28
+ <i class="scoicon ri-layout-masonry-fill" style="font-size: 1rem;"></i>
29
+ </a>
30
+ </div>
31
+ <% } %>
32
+ <div class="nav-button" id="nav-totop" onclick="sco.toTop()">
33
+ <a class="totopbtn">
34
+ <i class="scoicon ri-arrow-up-line"></i>
35
+ <span id="percent">0</span>
36
+ </a>
37
+ </div>
38
+ <div id="toggle-menu">
39
+ <a class="site-page">
40
+ <i class="scoicon ri-menu-fill" style="font-size: 1rem;"></i>
41
+ </a>
42
+ </div>
@@ -0,0 +1,52 @@
1
+ <div class="post-reward">
2
+ <div class="reward-button button--animated" title="赞赏作者">
3
+ <script>
4
+ if (utils.isMobile()) {
5
+ const showReward = () => {
6
+ const rewardMain = document.querySelector('.reward-main');
7
+ rewardMain.style.display = 'flex';
8
+ document.addEventListener('touchstart', hideReward);
9
+ };
10
+ const hideReward = () => {
11
+ const rewardMain = document.querySelector('.reward-main');
12
+ rewardMain.style.display = 'none';
13
+ document.removeEventListener('touchstart', hideReward);
14
+ };
15
+ const rewardButton = document.querySelector('.reward-button');
16
+ rewardButton.addEventListener('touchstart', event => {
17
+ event.stopPropagation();
18
+ showReward();
19
+ });
20
+ }
21
+ </script>
22
+ <i class="heofont icon-hand-heart-fill"></i>
23
+ 打赏作者
24
+ </div>
25
+ <div class="reward-main">
26
+ <ul class="reward-all">
27
+ <span class="reward-title">感谢你赐予我前进的力量</span>
28
+ <ul class="reward-group">
29
+ <% if(theme.post.award.wechat){ %>
30
+ <li class="reward-item">
31
+ <a href="<%= theme.post.award.wechat %>" target="_blank">
32
+ <img class="post-qr-code-img" src="<%= theme.post.award.wechat %>" alt="微信">
33
+ </a>
34
+ <div class="post-qr-code-desc">微信</div>
35
+ </li>
36
+ <% } %>
37
+ <% if(theme.post.award.alipay){ %>
38
+ <li class="reward-item">
39
+ <a href="<%= theme.post.award.alipay %>" target="_blank">
40
+ <img class="post-qr-code-img" src="<%= theme.post.award.alipay %>" alt="支付宝">
41
+ </a>
42
+ <div class="post-qr-code-desc">支付宝</div>
43
+ </li>
44
+ <% } %>
45
+ </ul>
46
+ <a class="reward-main-btn" href="<%= url_for(theme.post.award.url) %>">
47
+ <div class="reward-text">赞赏者名单</div>
48
+ <div class="reward-dec">因为你们的支持让我意识到写文章的价值🙏</div>
49
+ </a>
50
+ </ul>
51
+ </div>
52
+ </div>
@@ -0,0 +1,37 @@
1
+ <div class="post-copyright">
2
+ <div class="post-copyright__author_group">
3
+ <a class="post-copyright__author_img" href="/about/"
4
+ data-pjax-state="">
5
+ <img class="post-copyright__author_img_back"
6
+ src="https://bu.dusays.com/2023/11/01/6541f6d4b2573.png">
7
+ <img class="post-copyright__author_img_front"
8
+ src="<%= theme.site.icon %>"></a>
9
+ <div class="post-copyright__author_name"><%= config.title %></div>
10
+ <div class="post-copyright__author_desc"><%= config.subtitle %></div>
11
+ </div>
12
+ <div class="post-tools" id="post-tools">
13
+ <div class="post-tools-left">
14
+ <% if(theme.post.award.enable){%>
15
+ <%- partial('/award', {cache: true}) %>
16
+ <%} %>
17
+ <div class="reward-link mode">
18
+ <a class="reward-link-button" href="<%= theme.footer.rss.url %>">
19
+ <i class="heofont icon-plant-fill"></i>
20
+ 订阅
21
+ </a>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ <div class="post-copyright__notice">
26
+ <span class="post-copyright-info">
27
+ 本文是<%= page.cc || theme.post.default.copyright %>文章,
28
+ <% if(page.cc === "转载或翻译"){ %>
29
+ 版权归原作者所有。转载本文请联系原作者。
30
+ <% }else{ %>
31
+ 采用 <a href="/copyright/" target="_blank">CC BY-NC-ND 4.0</a>
32
+ 协议,完整转载请注明来自
33
+ <a href="/" target="_blank"><%= config.title %></a>
34
+ <% } %>
35
+ </span>
36
+ </div>
37
+ </div>
@@ -0,0 +1,83 @@
1
+ <div class="coverdiv" id="coverdiv">
2
+ <img id="post-cover" class="nolazyload" src="<%= page.cover %>" alt="cover">
3
+ </div>
4
+ <div id="post-info">
5
+ <div id="post-firstinfo">
6
+ <div class="meta-firstline">
7
+ <a class="post-meta-original" title="该文章为<%= page.cc %>文章,注意版权协议">
8
+ <%= page.cc %>
9
+ </a>
10
+ <% if (page.categories.data.length) { %>
11
+ <span class="post-meta-categories">
12
+ <% page.categories.data.forEach(item => { %>
13
+ <a class="post-meta-categories" href="<%= url_for(item.path) %>"><%= item.name %></a>
14
+ <% }) %>
15
+ </span>
16
+ <% } %>
17
+ <div class="tag_share">
18
+ <div class="post-meta__tag-list">
19
+ <% page.tags.data.forEach(tags => { %>
20
+ <a class="post-meta__tags" href="<%= url_for(tags.path) %>">
21
+ <span class="tags-punctuation"></span>
22
+ <span class="tags-name"><%= tags.name %></span>
23
+ </a>
24
+ <% }) %>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <h1 class="post-title"><%= page.title %></h1>
30
+ <div id="post-meta">
31
+ <div class="meta-secondline">
32
+ <span class="post-meta-date" title="发布于">
33
+ <i class="post-meta-icon ri-calendar-todo-fill"></i>
34
+ <time datetime="<%= moment(page.date).format() %>"></time>
35
+ </span>
36
+ <% if(theme.post.meta.updated){ %>
37
+ <span class="post-meta-date" title="更新于">
38
+ <i class="post-meta-icon ri-refresh-line"></i>
39
+ <time datetime="<%= moment(page.updated).format() %>"></time>
40
+ </span>
41
+ <% } %>
42
+ <% if(theme.post.meta.locate){ %>
43
+ <span class="post-meta-position" title="作者IP归属地为<%= page.locate %>">
44
+ <i class="post-meta-icon ri-map-pin-fill"></i>
45
+ <span><%= page.locate %></span>
46
+ </span>
47
+ <% } %>
48
+ <% if(theme.thirdparty.wordcount){ %>
49
+ <% if(theme.post.meta.wordcount){ %>
50
+ <span class="post-meta-wordcount">
51
+ <i class="ri-file-word-fill post-meta-icon" title="文章字数"></i>
52
+ <span class="word-count"><%= wordcount(page.content) %></span>
53
+ </span>
54
+ <% } %>
55
+ <% if(theme.post.meta.readtime){ %>
56
+ <span class="post-meta-time">
57
+ <i class="ri-time-fill post-meta-icon" title="阅读耗时"></i>
58
+ <span><%= min2read(page.content) %> min</span>
59
+ </span>
60
+ <% } %>
61
+ <% } %>
62
+ <% if(theme.thirdparty.busuanzi.enable && theme.post.meta.pv){ %>
63
+ <span class="post-meta-pv" title="文章热度">
64
+ <i class="ri-fire-fill post-meta-icon"></i>
65
+ <% if(theme.thirdparty.busuanzi.usecomment){ %>
66
+ <span id="twikoo_visitors"><i class="ri-loader-2-fill"></i></span>
67
+ <% }else{ %>
68
+ <span id="busuanzi_value_page_pv"><i class="ri-loader-2-fill"></i></span>
69
+ <% } %>
70
+ </span>
71
+ <% } %>
72
+ <% if(theme.post.meta.comment && page.comment){ %>
73
+ <span class="post-meta-commentcount" title="评论数">
74
+ <i class="ri-message-fill"></i>
75
+ <a href="#post-comment">
76
+ <span id="twikoo-count"><i class="ri-loader-2-fill"></i></span>
77
+ </a>
78
+ </span>
79
+ <% } %>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ <%- partial('partial/compoment/post/wave', {cache: true}) %>
@@ -0,0 +1,41 @@
1
+ <nav class="needEndHide pagination-post" id="pagination">
2
+ <% if(page.prev && page.next){ %>
3
+ <div class="prev-post pull-left">
4
+ <a href="<%= url_for(page.prev.path) %>">
5
+ <div class="pagination-info">
6
+ <div class="label">上一篇</div>
7
+ <div class="prev_info"><%= page.prev.title %></div>
8
+ </div>
9
+ </a>
10
+ </div>
11
+ <div class="next-post pull-right">
12
+ <a href="<%= url_for(page.next.path) %>">
13
+ <div class="pagination-info">
14
+ <div class="label">下一篇</div>
15
+ <div class="next_info"><%= page.next.title %></div>
16
+ </div>
17
+ </a>
18
+ </div>
19
+ <% }else{ %>
20
+ <% if(!page.prev && page.next){ %>
21
+ <div class="next-post pull-full">
22
+ <a href="<%= url_for(page.next.path) %>">
23
+ <div class="pagination-info">
24
+ <div class="label">下一篇</div>
25
+ <div class="next_info"><%= page.next.title %></div>
26
+ </div>
27
+ </a>
28
+ </div>
29
+ <% } %>
30
+ <% if(!page.next && page.prev){ %>
31
+ <div class="prev-post pull-full">
32
+ <a href="<%= url_for(page.prev.path) %>">
33
+ <div class="pagination-info">
34
+ <div class="label">上一篇</div>
35
+ <div class="prev_info"><%= page.prev.title %></div>
36
+ </div>
37
+ </a>
38
+ </div>
39
+ <% } %>
40
+ <% } %>
41
+ </nav>
@@ -0,0 +1,14 @@
1
+ <section class="main-hero-waves-area waves-area"><svg class="waves-svg" xmlns="http://www.w3.org/2000/svg"
2
+ xlink="http://www.w3.org/1999/xlink" viewBox="0 24 150 28" preserveAspectRatio="none" shape-rendering="auto">
3
+ <defs>
4
+ <path id="gentle-wave"
5
+ d="M -160 44 c 30 0 58 -18 88 -18 s 58 18 88 18 s 58 -18 88 -18 s 58 18 88 18 v 44 h -352 Z"></path>
6
+ </defs>
7
+ <g class="parallax">
8
+ <use href="#gentle-wave" x="48" y="0"></use>
9
+ <use href="#gentle-wave" x="48" y="3"></use>
10
+ <use href="#gentle-wave" x="48" y="5"></use>
11
+ <use href="#gentle-wave" x="48" y="7"></use>
12
+ </g>
13
+ </svg>
14
+ </section>
@@ -0,0 +1,10 @@
1
+ <div class="author-content author-content-item essayPage single nolazyload" style="background: url(<%= page.cover %>) no-repeat center;background-size: cover;">
2
+ <div class="card-content">
3
+ <div class="author-content-item-tips"><%= page.title %></div>
4
+ <span class="author-content-item-title"><%= page.desc %></span>
5
+ <div class="content-bottom">
6
+ <div class="tips"><%- page.tipl %></div>
7
+ <div class="tips"><%- page.tipr %></div>
8
+ </div>
9
+ </div>
10
+ </div>
@@ -0,0 +1,18 @@
1
+ <div class="bber-bottom">
2
+ <div class="bber-info">
3
+ <div class="bber-info-time">
4
+ <i class="ri-time-fill"></i>
5
+ <time class="datetime" datetime="<%= moment(item.date).format() %>"></time>
6
+ </div>
7
+ <% if(item.link){ %>
8
+ <a class="bber-content-link" href="<%= url_for(item.link) %>" title="跳转到短文指引的链接">
9
+ <i class="ri-link-m"></i>
10
+ 链接
11
+ </a>
12
+ <% } %>
13
+ </div>
14
+ <a class="bber-reply" onclick="sco.toTalk('<%- item.content %>')" >
15
+ <i class="ri-message-3-fill" style="font-size: 1rem;">
16
+ </i>
17
+ </a>
18
+ </div>
@@ -0,0 +1,11 @@
1
+ <div id="bber-content">
2
+ <p class="datacont"><%- item.content %></p>
3
+ <% if(item.image){ %>
4
+ <div class="bber-content-img">
5
+ <% item.image.forEach(img => { %>
6
+ <img src="<%= img %>" title="即刻短文配图">
7
+ <% }); %>
8
+ </a>
9
+ </div>
10
+ <% } %>
11
+ </div>
@@ -0,0 +1,12 @@
1
+ <div id="post-comment" view-image>
2
+ <div class="comment-head">
3
+ <div class="comment-headline">
4
+ <i class="scoicon ri-message-fill"></i>
5
+ <span> 评论</span>
6
+ </div>
7
+ </div>
8
+ <div class="comment-wrap">
9
+ <div id="comment"></div>
10
+ <%- partial('partial/compoment/third-party/comments/twikoo', {cache: true}) %>
11
+ </div>
12
+ </div>