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,28 @@
1
+ <div class="aside-content" id="aside-content">
2
+ <%
3
+ var noSticky, Sticky;
4
+ if(is_home()){
5
+ noSticky = theme.aside.home.noSticky.split(',')
6
+ Sticky = theme.aside.home.Sticky.split(',')
7
+ }
8
+ if(is_post()){
9
+ noSticky = theme.aside.post.noSticky.split(',')
10
+ Sticky = theme.aside.post.Sticky.split(',')
11
+ }
12
+ if(is_page() || is_archive() || is_tag() || is_category()){
13
+ noSticky = theme.aside.page.noSticky.split(',')
14
+ Sticky = theme.aside.page.Sticky.split(',')
15
+ }
16
+ %>
17
+ <% if(noSticky)noSticky.forEach(item => { %>
18
+ <%- partial('partial/compoment/aside/asideSwitch', {item: item}) %>
19
+ <% }); %>
20
+ <div class="sticky_layout">
21
+ <% if(page.toc){ %>
22
+ <%- partial('partial/compoment/aside/asideToc') %>
23
+ <% } %>
24
+ <% if(Sticky)Sticky.forEach(item => { %>
25
+ <%- partial('partial/compoment/aside/asideSwitch', {item: item}) %>
26
+ <% }); %>
27
+ </div>
28
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="card-widget card-tags card-archives card-webinfo card-allinfo">
2
+ <%- partial('partial/compoment/aside/asideTag', {cache: true}) %>
3
+ <%- partial('partial/compoment/aside/asideArchive', {cache: true}) %>
4
+ <hr>
5
+ <%- partial('partial/compoment/aside/asideWebInfo', {cache: true}) %>
6
+ </div>
@@ -0,0 +1,11 @@
1
+ <ul class="card-archive-list">
2
+ <% var type = locals.type ? locals.type : 'year'; %>
3
+ <% for(const [key, value] of Object.entries(getArchiveLength(type))){ %>
4
+ <li class="card-archive-list-item"><a class="card-archive-list-link" onclick="pjax.loadUrl('/archives/<%= key %>/')" data-pjax-state=""><span
5
+ class="card-archive-list-date"><%= key %></span>
6
+ <div class="card-archive-list-count-group"><span class="card-archive-list-count"><%= value %></span><span
7
+ class="card-archive-list-count-unit">篇</span></div>
8
+ </a>
9
+ </li>
10
+ <% } %>
11
+ </ul>
@@ -0,0 +1,8 @@
1
+ <div class="card-widget heo-right-widget" id="card-wechat">
2
+ <div id="flip-wrapper">
3
+ <div id="flip-content">
4
+ <div class="face" style="background: url(<%= theme.aside.flip.face %>) center center no-repeat; background-size: 100%;"></div>
5
+ <div class="back face" style="background: url(<%= theme.aside.flip.backface %>) center center no-repeat;background-size: 100%"></div>
6
+ </div>
7
+ </div>
8
+ </div>
@@ -0,0 +1,39 @@
1
+ <div class="card-widget card-info">
2
+ <div class="card-content">
3
+ <div class="card-info-avatar is-center">
4
+ <div class="author-info__top-group">
5
+ <div class="author-info__sayhi" id="author-info__sayhi" onclick="sco.changeSayHelloText()">
6
+ 一日之计在于晨
7
+ </div>
8
+ </div>
9
+ </div>
10
+ <div class="avatar-img-group">
11
+ <img class="avatar-img" alt="avatar" src="<%= theme.aside.card.author.img %>">
12
+ <div class="avatar-sticker">
13
+ <svg class="avatar-sticker-img" alt="avatar" aria-hidden="true">
14
+ <use xlink:href="<%= theme.aside.card.author.state %>"></use>
15
+ </svg>
16
+ <%- js(theme.aside.card.author.js) %>
17
+ </div>
18
+ </div>
19
+ <div class="author-info__description_group">
20
+ <div class="author-info__description"><%- theme.aside.card.content %></div>
21
+ <div class="author-info__description2"><%- theme.aside.card.content2 %></div>
22
+ </div>
23
+ <div class="author-info__bottom-group">
24
+ <a class="author-info__bottom-group-left" href="/about" data-pjax-state="">
25
+ <div class="author-info__name">
26
+ <%= config.author %>
27
+ </div>
28
+ <div class="author-info__desc"><%- config.subtitle %></div>
29
+ </a>
30
+ <div class="card-info-social-icons is-center">
31
+ <% for(const i in theme.aside.card.information){ %>
32
+ <a class="social-icon" href="<%= url_for(theme.aside.card.information[i].url) %>" title="<%= i %>">
33
+ <i class="<%= theme.aside.card.information[i].icon %>"></i>
34
+ </a>
35
+ <% } %>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ </div>
@@ -0,0 +1,31 @@
1
+ <div class="card-widget card-recent-post">
2
+ <div class="item-headline">
3
+ <i class="ri-map-2-line"></i>
4
+ <span>最近发布</span>
5
+ </div>
6
+ <div class="aside-list">
7
+ <% let index = 1 %>
8
+ <% for (const post of site.posts.data.sort((a, b) => {
9
+ return b.date < a.date ? -1 : 1
10
+ })){ %>
11
+ <div class="aside-list-item">
12
+ <a class="thumbnail" href="<%= url_for(post.path) %>" title="<%= post.title %>">
13
+ <img
14
+ alt="<%= post.title %>"
15
+ src="<%= post.cover %>">
16
+ </a>
17
+ <div class="content">
18
+ <% post.categories.data.forEach(categories => { %>
19
+ <a class="article-recent_post_categories" href="<%= url_for(post.path) %>">
20
+ <%= categories.name %>
21
+ </a>
22
+ <% }) %>
23
+ <a class="title" href="<%= url_for(post.path) %>" title="<%= post.title %>">
24
+ <%= post.title %>
25
+ </a>
26
+ </div>
27
+ </div>
28
+ <% index++;if(index > 5)break; %>
29
+ <% } %>
30
+ </div>
31
+ </div>
@@ -0,0 +1,31 @@
1
+ <div class="card-widget card-power">
2
+ <% const data = site.data.aifadian.links %>
3
+ <% const vip = data[Math.floor(Math.random() * data.length)] %>
4
+ <div class="item-headline">
5
+ <img src="/img/power.png" style="width: 1.2rem">
6
+ <span>爱发电赞助</span>
7
+ <a class="power-charge" href="<%= theme.aside.power.link %>" rel="external nofollow" target="_blank"
8
+ title="赞助博主">赞助</a>
9
+ </div>
10
+ <a id="power-star" data-pjax-state="" href="<%= vip.url %>>">
11
+ <div id="power-star-image"
12
+ style="background-image: url('<%= vip.avatar %>');"></div>
13
+ <div class="power-star-body">
14
+ <div id="power-star-title"><%= vip.name %></div>
15
+ <div id="power-star-desc"><%= vip.descr %></div>
16
+ </div>
17
+ </a>
18
+ <div class="power-list">
19
+ <div class="power-item">
20
+ <div class="power-item-body">
21
+ <% data.forEach(item => { %>
22
+ <% if(item.name !== vip.name){ %>
23
+ <div class="power-item-link">
24
+ <a target="_blank" href="<%= item.link %>" rel="external nofollow"><%= item.name %></a>
25
+ </div>
26
+ <% } %>
27
+ <% }) %>
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </div>
@@ -0,0 +1,35 @@
1
+ <% switch (item) {
2
+ case 'power': %>
3
+ <%- partial('partial/compoment/aside/asidePower', {cache: true}) %>
4
+ <% break;
5
+ case 'about': %>
6
+ <%- partial('partial/compoment/aside/asideInfoCard', {cache: true}) %>
7
+ <% break;
8
+ case 'flip': %>
9
+ <%- partial('partial/compoment/aside/asideFlipCard', {cache: true}) %>
10
+ <% break;
11
+ case 'newestPost': %>
12
+ <%- partial('partial/compoment/aside/asideNewestPost', {cache: true}) %>
13
+ <% break;
14
+ case 'tag': %>
15
+ <div class="card-widget card-tags">
16
+ <%- partial('partial/compoment/aside/asideTag', {cache: true}) %>
17
+ </div>
18
+ <% break;
19
+ case 'archive': %>
20
+ <div class="card-widget card-archives">
21
+ <%- partial('partial/compoment/aside/asideArchive', {cache: true}) %>
22
+ </div>
23
+ <% break;
24
+ case 'webInfo': %>
25
+ <div class="card-widget card-webinfo">
26
+ <%- partial('partial/compoment/aside/asideWebInfo', {cache: true}) %>
27
+ </div>
28
+ <% break;
29
+ case 'allInfo': %>
30
+ <%- partial('partial/compoment/aside/asideAllInfo', {cache: true}) %>
31
+ <% break;
32
+ default: %>
33
+ <%- partial('page/page') %>
34
+ <% break;
35
+ } %>
@@ -0,0 +1,5 @@
1
+ <div class="card-tag-cloud">
2
+ <% site.tags.data.slice(0, 50).forEach((data, index) => { %>
3
+ <a href="<%= url_for(data.path) %>" style="font-size: 0.8rem; color: #d3d3d3"><%= data.name %><sup><%= data.length %></sup></a>
4
+ <% }) %>
5
+ </div>
@@ -0,0 +1,11 @@
1
+ <div class="card-widget" id="card-toc">
2
+ <div class="item-headline">
3
+ <i class="ri-menu-fill"></i>
4
+ <span>文章目录</span>
5
+ </div>
6
+ <div class="toc-content" id="toc-content">
7
+ <%- toc(page.content, {
8
+ list_number: false,
9
+ }) %>
10
+ </div>
11
+ </div>
@@ -0,0 +1,60 @@
1
+ <div class="webinfo">
2
+ <% if(theme.aside.siteinfo.postcount){ %>
3
+ <div class="webinfo-item">
4
+ <div class="webinfo-item-title">
5
+ <i class="item-icon ri-archive-fill"></i>
6
+ <div class="item-name">文章总数 :</div>
7
+ </div>
8
+ <div class="item-count"><%= site.posts.length %></div>
9
+ </div>
10
+ <% } %>
11
+ <% if(theme.thirdparty.busuanzi){ %>
12
+ <% if(theme.aside.siteinfo.pv){ %>
13
+ <div class="webinfo-item">
14
+ <div class="webinfo-item-title">
15
+ <i class="item-icon ri-window-fill"></i>
16
+ <div class="item-name">总访问数 :</div>
17
+ </div>
18
+ <span id="busuanzi_value_site_pv"><i class="ri-loader-2-fill"></i></span>
19
+ </div>
20
+ <% } %>
21
+ <% if(theme.aside.siteinfo.uv){ %>
22
+ <div class="webinfo-item">
23
+ <div class="webinfo-item-title">
24
+ <i class="item-icon ri-team-fill"></i>
25
+ <div class="item-name">总访客数 :</div>
26
+ </div>
27
+ <span id="busuanzi_value_site_uv"><i class="ri-loader-2-fill"></i></span>
28
+ </div>
29
+ <% } %>
30
+ <% } %>
31
+ <% if(theme.aside.siteinfo.runtimeenable){ %>
32
+ <div class="webinfo-item">
33
+ <div class="webinfo-item-title">
34
+ <i class="item-icon ri-calendar-todo-fill"></i>
35
+ <div class="item-name">建站天数 :</div>
36
+ </div>
37
+ <div class="item-count" id="runtimeshow">
38
+ </div>
39
+ </div>
40
+ <% } %>
41
+ <% if(theme.aside.siteinfo.updatetime){ %>
42
+ <div class="webinfo-item">
43
+ <div class="webinfo-item-title">
44
+ <i class="item-icon ri-loop-left-fill"></i>
45
+ <div class="item-name">最后更新 :</div>
46
+ </div>
47
+ <time class="item-count" datetime="<%= new Date() %>">
48
+ </time>
49
+ </div>
50
+ <% } %>
51
+ <% if(theme.thirdparty.wordcount && theme.aside.siteinfo.wordcount){ %>
52
+ <div class="webinfo-item">
53
+ <div class="webinfo-item-title">
54
+ <i class="item-icon ri-file-word-fill"></i>
55
+ <div class="item-name">全站字数 :</div>
56
+ </div>
57
+ <div class="item-count"><%= totalcount(site) %></div>
58
+ </div>
59
+ <% } %>
60
+ </div>
@@ -0,0 +1,26 @@
1
+ <div class="title-h2-a">
2
+ <div class="title-h2-a-left">
3
+ <h2 style="padding-top: 0;margin:0.6rem 0 0.6rem;">🎣 钓鱼</h2>
4
+ <a id="random-post-start" href="javascript:fetchRandomPost();" rel="external nofollow"
5
+ style="transition-duration: 0.3s; transform: rotate(63000deg); opacity: 1;" data-pjax-state="">
6
+ <i class="scoicon ri-refresh-line"></i>
7
+ </a>
8
+ </div>
9
+ <div class="title-h2-a-right"><a class="random-post-all" href="/links/" data-pjax-state="">全部友链</a></div>
10
+ </div>
11
+ <div id="random-post"></div>
12
+
13
+ <div class="title-h2-a">
14
+ <div class="title-h2-a-left">
15
+ <h2 style="padding-top: 0;margin:0.6rem 0 0.6rem;">🐟 鱼塘</h2>
16
+ </div>
17
+ <div class="title-h2-a-right"><span>以下内容自动生成,未经过审核</span></div>
18
+ </div>
19
+ <script>
20
+ var fdata = {
21
+ apiurl: "<%= theme.circle.api %>",
22
+ defaultFish: 100,
23
+ hungryFish: 100,
24
+ }
25
+ </script>
26
+ <script type="text/javascript" src="/lib/friends_post.js"></script>
@@ -0,0 +1,11 @@
1
+ <div class="author-content author-content-item essayPage single nolazyload"
2
+ style="background: url(<%= page.cover %>) no-repeat center;background-size: cover;">
3
+ <div class="card-content">
4
+ <div class="author-content-item-tips"><%= page.title %></div>
5
+ <span class="author-content-item-title"><%= page.desc %></span>
6
+ <div class="content-bottom">
7
+ <div class="tips">使用 友链朋友圈 订阅友链最新文章</div>
8
+ <div class="tips"></div>
9
+ </div>
10
+ </div>
11
+ </div>
@@ -0,0 +1,22 @@
1
+ <div id="hexo-circle-of-friends-root"></div>
2
+ <script>
3
+ let UserConfig = {
4
+ // 填写你的api地址
5
+ private_api_url: '<%= theme.circle.api %>',
6
+ // 默认加载文章数
7
+ page_init_number: <%= theme.circle.page_init_number%>,
8
+ // 点击加载更多时,一次最多加载几篇文章,默认10
9
+ page_turning_number: <%= theme.circle.page_turning_number %>,
10
+ // 头像加载失败时,默认头像地址
11
+ error_img: '<%= theme.circle.error_img %>',
12
+ // 进入页面时第一次的排序规则
13
+ sort_rule: '<%= theme.circle.sort_rule %>',
14
+ // 本地文章缓存数据过期时间(天)
15
+ expire_days: <%= theme.circle.expire_days %>,
16
+ }
17
+ </script>
18
+ <script type="text/javascript"
19
+ src="<%= theme.circle.appjs ? theme.circle.appjs : '/js/circle.js' %>" rel="external nofollow"></script>
20
+ <script type="text/javascript"
21
+ src="<%= theme.circle.bundejs ? theme.circle.bundejs : 'https://npm.elemecdn.com/wzheo-absolute@1.0.3/lib/bundle.min.js' %>"
22
+ rel="external nofollow"></script>
@@ -0,0 +1,115 @@
1
+ <div id="rightMenu">
2
+ <div class="rightMenu-group rightMenu-small">
3
+ <a class="rightMenu-item" href="javascript:window.history.back();">
4
+ <i class="scoicon ri-arrow-left-circle-fill"></i>
5
+ </a>
6
+ <a class="rightMenu-item" href="javascript:window.history.forward();">
7
+ <i class="scoicon ri-arrow-right-circle-fill"></i>
8
+ </a>
9
+ <a class="rightMenu-item" href="javascript:window.location.reload();">
10
+ <i class="scoicon ri-restart-fill"></i>
11
+ </a>
12
+ <a class="rightMenu-item" href="javascript:sco.toTop();">
13
+ <i class="scoicon ri-arrow-up-circle-fill"></i>
14
+ </a>
15
+ </div>
16
+ <div class="rightMenu-group rightMenu-line hide" id="menu-text">
17
+ <a class="rightMenu-item" href="javascript:rmf.copySelect();">
18
+ <i class="scoicon ri-file-copy-fill"></i>
19
+ <span>复制选中文本</span>
20
+ </a>
21
+ </div>
22
+ <div class="rightMenu-group rightMenu-line">
23
+ <a class="rightMenu-item" href="javascript:toRandomPost();">
24
+ <i class="scoicon ri-signal-tower-fill"></i>
25
+ <span>随便逛逛</span>
26
+ </a>
27
+ <a class="rightMenu-item" href="/categories/">
28
+ <i class="scoicon ri-send-backward"></i>
29
+ <span>文章分类</span>
30
+ </a>
31
+ <a class="rightMenu-item" href="/tags/">
32
+ <i class="scoicon ri-price-tag-3-fill"></i>
33
+ <span>文章标签</span>
34
+ </a>
35
+ </div>
36
+ <div class="rightMenu-group rightMenu-line">
37
+ <a class="rightMenu-item" href="javascript:sco.switchDarkMode();">
38
+ <i class="scoicon ri-contrast-2-fill"></i>
39
+ <span>昼夜转换</span>
40
+ </a>
41
+ <a class="rightMenu-item" href="javascript:sco.copyPageUrl();">
42
+ <i class="scoicon ri-external-link-fill"></i>
43
+ <span>复制地址</span>
44
+ </a>
45
+ <% if(theme.comment.enable){ %>
46
+ <a class="rightMenu-item" href="javascript:sco.switchCommentBarrage()">
47
+ <i class="scoicon ri-message-3-fill"></i>
48
+ <span class="menu-commentBarrage-text">关闭热评</span>
49
+ </a>
50
+ <% } %>
51
+ </div>
52
+ </div>
53
+ <script>
54
+ let rmf = {};
55
+ rmf.showRightMenu = function (isTrue, x = 0, y = 0) {
56
+ let rightMenu = document.getElementById('rightMenu');
57
+ rightMenu.style.top = x + 'px';
58
+ rightMenu.style.left = y + 'px';
59
+
60
+ if (isTrue) {
61
+ rightMenu.style.display = 'block';
62
+ } else {
63
+ rightMenu.style.display = 'none';
64
+ }
65
+ }
66
+
67
+ //复制选中文字
68
+ rmf.copySelect = function () {
69
+ document.execCommand('Copy', false, null);
70
+ //这里可以写点东西提示一下 已复制
71
+ }
72
+
73
+ rmf.hideRightMenu = function () {
74
+ rmf.showRightMenu(false);
75
+ document.getElementById("rightmenu-item").style.display = "none";
76
+ };
77
+
78
+ rmf.rightmenuCopyText = function (e) {
79
+ navigator.clipboard && navigator.clipboard.writeText(e),
80
+ rmf.hideRightMenu()
81
+ }
82
+
83
+ // 右键菜单事件
84
+ if (!(navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
85
+ window.oncontextmenu = function (event) {
86
+ let rightMenuGroup = document.querySelectorAll('.rightMenu-group.hide');
87
+ rightMenuGroup.forEach(function (group) {
88
+ group.style.display = 'none';
89
+ });
90
+
91
+ //如果有文字选中,则显示 文字选中相关的菜单项
92
+ if (document.getSelection().toString()) {
93
+ document.getElementById('menu-text').style.display = 'block';
94
+ }
95
+
96
+ let pageX = event.clientX + 10;
97
+ let pageY = event.clientY;
98
+ let rmWidth = document.getElementById('rightMenu').offsetWidth;
99
+ let rmHeight = document.getElementById('rightMenu').offsetHeight;
100
+ if (pageX + rmWidth > window.innerWidth) {
101
+ pageX -= rmWidth + 10;
102
+ }
103
+ if (pageY + rmHeight > window.innerHeight) {
104
+ pageY -= pageY + rmHeight - window.innerHeight;
105
+ }
106
+
107
+ rmf.showRightMenu(true, pageY, pageX);
108
+ return false;
109
+ };
110
+
111
+ window.addEventListener('click', function () {
112
+ rmf.showRightMenu(false);
113
+ });
114
+ }
115
+ </script>
@@ -0,0 +1,37 @@
1
+ <div id="equipment">
2
+ <% if (site.data.equipment) { %>
3
+ <% site.data.equipment.forEach(function(i) { %>
4
+ <div class="equipment-item">
5
+ <h2 class="equipment-item-title"><%= i.class_name %></h2>
6
+ <div class="equipment-item-description"><%= i.description %></div>
7
+ <div class="equipment-item-content">
8
+ <% i.equipment_list.forEach(function(item) { %>
9
+ <div class="equipment-item-content-item">
10
+ <div class="equipment-item-content-item-cover">
11
+ <img class="equipment-item-content-item-image" src="<%= item.image %>" alt="<%= item.name %>">
12
+ </div>
13
+ <div class="equipment-item-content-item-info">
14
+ <div class="equipment-item-content-item-name"><%= item.name %></div>
15
+ <div class="equipment-item-content-item-specification"><%= item.specification %></div>
16
+ <div class="equipment-item-content-item-description"><%= item.description %></div>
17
+ <% if (item.link) { %>
18
+ <div class="equipment-item-content-item-toolbar">
19
+ <% if (item.link.includes('https://') || item.link.includes('http://')) { %>
20
+ <a class="equipment-item-content-item-link" href="<%= item.link %>" target="_blank">详情</a>
21
+ <% } else { %>
22
+ <a class="equipment-item-content-item-link" href="<%= item.link %>" target="_blank">查看文章</a>
23
+ <% } %>
24
+ <a class="bber-reply" onclick="sco.toTalk('<%- item.description %>')" >
25
+ <i class="fa-solid fa-comment" style="font-size: 1rem;">
26
+ </i>
27
+ </a>
28
+ </div>
29
+ <% } %>
30
+ </div>
31
+ </div>
32
+ <% }) %>
33
+ </div>
34
+ </div>
35
+ <% }) %>
36
+ <% } %>
37
+ </div>
@@ -0,0 +1,11 @@
1
+ <div class="category-bar-items" id="category-bar-items">
2
+ <div class="category-bar-item <%= is_home() ? 'select' : '' %>" id="category-bar-home">
3
+ <a href="/">首页</a>
4
+ </div>
5
+ <% for(const item of site.categories.data){ %>
6
+ <div class="category-bar-item <%= select ? (select === item.name ? 'select' : '') : '' %>">
7
+ <a href="<%= url_for(item.path) %>"><%= item.name %></a>
8
+ </div>
9
+ <% } %>
10
+ </div>
11
+ <a class="category-bar-more" href="/categories/">更多</a>
@@ -0,0 +1,37 @@
1
+ <div class="recent-post-item" onclick="pjax.loadUrl('/<%= post.path %>')">
2
+ <div class="post_cover left_radius">
3
+ <a href="<%= url_for(post.path) %>" title="<%= post.title %>">
4
+ <img class="post_bg" alt="<%= post.title %>" src="<%= post.cover %>">
5
+ </a>
6
+ </div>
7
+ <div class="recent-post-info">
8
+ <div class="recent-post-info-top">
9
+ <div class="recent-post-info-top-tips">
10
+ <% post.categories.data.forEach(categories => { %>
11
+ <span class="original"><%= categories.name %></span>
12
+ <% }) %>
13
+ <% if(post.prev == null){ %>
14
+ <span class="original">最新</span>
15
+ <% }%>
16
+ <a class="unvisited-post" href="<%= url_for(post.path) %>" title="<%= post.title %>" data-pjax-state>未读</a>
17
+ </div>
18
+ <a class="article-title" href="<%= url_for(post.path) %>" title="<%= post.title %>">
19
+ <%= post.title %>
20
+ </a>
21
+ </div>
22
+ <div class="article-meta-wrap">
23
+ <span class="article-meta tags">
24
+ <% post.tags.data.forEach(tags => { %>
25
+ <a class="article-meta__tags" href="<%= url_for(tags.path) %>"
26
+ onclick="window.event.cancelBubble=true;">
27
+ <span class="tags-punctuation"></span>
28
+ <%= tags.name %>
29
+ </a>
30
+ <% }) %>
31
+ </span>
32
+ <span class="post-meta-date">
33
+ <time datetime="<%= moment(post.date).format() %>"></time>
34
+ </span>
35
+ </div>
36
+ </div>
37
+ </div>
@@ -0,0 +1,15 @@
1
+ <div class="bbTimeList container" id="bbTimeList">
2
+ <i class="bber-logo scoicon sco-says" onclick="pjax.loadUrl('/essay/')" style="font-size: 1rem;"></i>
3
+ <div class="swiper-container swiper-no-swiping swiper-container-initialized swiper-container-vertical swiper-container-pointer-events"
4
+ id="bbtalk" tabindex="-1" onclick="pjax.loadUrl('/essay/')">
5
+ <div class="swiper-wrapper" id="bber-talk">
6
+ <% for(i in site.data.essay.essay_list){ %>
7
+ <% const item = site.data.essay.essay_list[i];if(i >= 10)break; %>
8
+ <div class="li-style swiper-slide">
9
+ <%= item.image ? item.content + '【图片】' : item.content %>
10
+ </div>
11
+ <% } %>
12
+ </div>
13
+ </div>
14
+ <i class="bber-gotobb scoicon ri-arrow-right-circle-fill" style="font-size: 1rem" title="查看全文" onclick="pjax.loadUrl('/says/')"></i>
15
+ </div>
@@ -0,0 +1,19 @@
1
+ <div class="categoryItem" style="box-shadow: var(--sco-shadow-blue);"><a class="categoryButton CB1 bikan"
2
+ href="<%- url_for(theme.hometop.categoryGroup.G1.url) %>">
3
+ <span class="categoryButtonText"><%= theme.hometop.categoryGroup.G1.name %></span>
4
+ <i class="<%- theme.hometop.categoryGroup.G1.icon %>"></i>
5
+ </a>
6
+ </div>
7
+ <div class="categoryItem" style="box-shadow: var(--sco-shadow-red);">
8
+ <a class="categoryButton remen" href="<%- url_for(theme.hometop.categoryGroup.G2.url) %>">
9
+ <span class="categoryButtonText"><%= theme.hometop.categoryGroup.G2.name %></span>
10
+ <i class="<%- theme.hometop.categoryGroup.G2.icon %>"></i>
11
+ </a>
12
+ </div>
13
+ <div class="categoryItem" style="box-shadow: var(--sco-shadow-green);">
14
+ <a class="categoryButton shiyong"
15
+ href="<%- url_for(theme.hometop.categoryGroup.G3.url) %>">
16
+ <span class="categoryButtonText"><%= theme.hometop.categoryGroup.G3.name %></span>
17
+ <i class="<%- theme.hometop.categoryGroup.G3.icon %>"></i>
18
+ </a>
19
+ </div>
@@ -0,0 +1,30 @@
1
+ <div class="banners-title">
2
+ <div class="banners-title-big">
3
+ <%- theme.hometop.banner.title %>
4
+ </div>
5
+ <div class="banners-title-small">
6
+ <%= theme.hometop.banner.url %>
7
+ </div>
8
+ </div>
9
+ <div class="tags-group-all">
10
+ <div class="tags-group-wrapper">
11
+ <% for(let i = 1; i <= 2; i++){ %>
12
+ <% for(let j = 0; j < Object.keys(theme.hometop.banner.icon).length; j++){ %>
13
+ <% const key = Object.keys(theme.hometop.banner.icon)[j] %>
14
+ <% if(j % 2 == 0){ %>
15
+ <div class="tags-group-icon-pair">
16
+ <% } %>
17
+ <div class="tags-group-icon" style="background: <%- theme.hometop.banner.icon[key].color %>">
18
+ <img src="<%= theme.hometop.banner.icon[key].img %>" title="<%= key %>">
19
+ </div>
20
+ <% if(j % 2 == 1 || j == Object.keys(theme.hometop.banner.icon).length - 1){ %>
21
+ </div>
22
+ <% } %>
23
+ <% } %>
24
+ <% } %>
25
+ </div>
26
+ </div>
27
+ <a id="banner-hover" onclick="toRandomPost()" data-pjax-state="">
28
+ <span class="bannerText">随便逛逛</span>
29
+ <i class="scoicon ri-arrow-right-line banner-righticon"></i>
30
+ </a>