hexo-theme-solitude 1.2.4 → 1.3.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 (261) hide show
  1. package/CONTRIBUTING.md +41 -0
  2. package/README.md +8 -8
  3. package/README_EN.md +6 -6
  4. package/_config.yml +495 -297
  5. package/languages/en-US.yml +105 -8
  6. package/languages/zh-CN.yml +98 -1
  7. package/layout/archive.pug +3 -3
  8. package/layout/category.pug +5 -6
  9. package/layout/includes/console.pug +16 -17
  10. package/layout/includes/footer.pug +26 -28
  11. package/layout/includes/head/config.pug +30 -8
  12. package/layout/includes/head/fest.pug +22 -0
  13. package/layout/includes/head/opengraph.pug +11 -0
  14. package/layout/includes/head.pug +1 -3
  15. package/layout/includes/header.pug +1 -1
  16. package/layout/includes/inject/body.pug +38 -14
  17. package/layout/includes/inject/head.pug +30 -20
  18. package/layout/includes/layout.pug +11 -8
  19. package/layout/includes/loading.pug +1 -64
  20. package/layout/includes/mixins/articleSort.pug +7 -7
  21. package/layout/includes/mixins/pagination.pug +1 -1
  22. package/layout/includes/nav.pug +10 -10
  23. package/layout/includes/page/about.pug +1 -0
  24. package/layout/includes/page/categories.pug +3 -3
  25. package/layout/includes/page/default.pug +1 -1
  26. package/layout/includes/page/echarts.pug +3 -3
  27. package/layout/includes/page/equipment.pug +0 -1
  28. package/layout/includes/page/links.pug +5 -26
  29. package/layout/includes/page/moments.pug +0 -1
  30. package/layout/includes/page/music.pug +19 -0
  31. package/layout/includes/page/not_configured.pug +18 -0
  32. package/layout/includes/page/rss.pug +20 -22
  33. package/layout/includes/page/says.pug +1 -2
  34. package/layout/includes/page/tags.pug +3 -3
  35. package/layout/includes/page/tlink.pug +0 -1
  36. package/layout/includes/sidebar.pug +7 -7
  37. package/layout/includes/widgets/aside/aside.pug +13 -1
  38. package/layout/includes/widgets/aside/asideArchive.pug +5 -3
  39. package/layout/includes/widgets/aside/asideCustom.pug +6 -0
  40. package/layout/includes/widgets/aside/asideHistory.pug +3 -3
  41. package/layout/includes/widgets/aside/asideInfoCard.pug +4 -6
  42. package/layout/includes/widgets/aside/asideNewestPost.pug +1 -1
  43. package/layout/includes/widgets/aside/asideSwitch.pug +0 -11
  44. package/layout/includes/widgets/aside/asideTag.pug +2 -2
  45. package/layout/includes/widgets/aside/asideToc.pug +1 -1
  46. package/layout/includes/widgets/aside/asideWebInfo.pug +6 -6
  47. package/layout/includes/widgets/aside/asideWelcome.pug +1 -1
  48. package/layout/includes/widgets/home/banner.pug +2 -2
  49. package/layout/includes/widgets/home/bbTimeList.pug +3 -3
  50. package/layout/includes/widgets/home/categoryBar.pug +3 -3
  51. package/layout/includes/widgets/home/categoryGroup.pug +2 -2
  52. package/layout/includes/widgets/home/hometop.pug +7 -7
  53. package/layout/includes/widgets/home/postList.pug +12 -8
  54. package/layout/includes/widgets/home/topGroup.pug +17 -13
  55. package/layout/includes/widgets/nav/left.pug +6 -6
  56. package/layout/includes/widgets/nav/menu.pug +4 -4
  57. package/layout/includes/widgets/nav/right.pug +14 -14
  58. package/layout/includes/widgets/page/about/authorinfo.pug +1 -1
  59. package/layout/includes/widgets/page/about/award.pug +11 -9
  60. package/layout/includes/widgets/page/about/contentinfo.pug +7 -7
  61. package/layout/includes/widgets/page/about/hobbies.pug +1 -1
  62. package/layout/includes/widgets/page/about/motto.pug +2 -2
  63. package/layout/includes/widgets/page/about/other.pug +10 -9
  64. package/layout/includes/widgets/page/about/personalities.pug +2 -2
  65. package/layout/includes/widgets/page/about/skillsinfo.pug +10 -12
  66. package/layout/includes/widgets/page/about/tenyear.pug +48 -0
  67. package/layout/includes/widgets/page/banner.pug +2 -2
  68. package/layout/includes/widgets/page/links/banner.pug +12 -14
  69. package/layout/includes/widgets/page/links/linksItem.pug +0 -1
  70. package/layout/includes/widgets/page/moments/angle.pug +7 -12
  71. package/layout/includes/widgets/page/moments/index.pug +7 -2
  72. package/layout/includes/widgets/post/award.pug +12 -8
  73. package/layout/includes/widgets/post/copyright.pug +16 -14
  74. package/layout/includes/widgets/post/postMeta.pug +36 -25
  75. package/layout/includes/widgets/post/postNav.pug +15 -15
  76. package/layout/includes/widgets/randomlink.pug +10 -5
  77. package/layout/includes/widgets/rightside/index.pug +9 -8
  78. package/layout/includes/widgets/third-party/ai/index.pug +12 -0
  79. package/layout/includes/widgets/third-party/comments/comment.pug +6 -1
  80. package/layout/includes/widgets/third-party/comments/twikoo.pug +5 -4
  81. package/layout/includes/widgets/third-party/comments/waline.pug +4 -5
  82. package/layout/includes/widgets/third-party/music.pug +1 -1
  83. package/layout/includes/widgets/third-party/pjax.pug +6 -1
  84. package/layout/includes/widgets/third-party/search/algolia-search.pug +4 -3
  85. package/layout/includes/widgets/third-party/search/index.pug +2 -2
  86. package/layout/includes/widgets/third-party/search/local-search.pug +3 -3
  87. package/layout/index.pug +5 -6
  88. package/layout/page.pug +34 -29
  89. package/layout/post.pug +3 -23
  90. package/layout/tag.pug +4 -4
  91. package/package.json +1 -1
  92. package/scripts/filter/checkThemeConfig.js +0 -5
  93. package/scripts/helper/cdn.js +12 -0
  94. package/scripts/helper/page.js +13 -0
  95. package/scripts/helper/related_post.js +0 -1
  96. package/scripts/tags/button.js +21 -0
  97. package/scripts/tags/card.js +9 -0
  98. package/scripts/tags/checkbox.js +51 -0
  99. package/scripts/tags/fold.js +0 -5
  100. package/scripts/tags/image.js +75 -0
  101. package/scripts/tags/inline-image.js +12 -0
  102. package/scripts/tags/label.js +10 -0
  103. package/scripts/tags/link.js +2 -0
  104. package/scripts/tags/media.js +29 -0
  105. package/scripts/tags/span.js +17 -0
  106. package/scripts/tags/timeline.js +2 -15
  107. package/scripts/tags/u.js +7 -0
  108. package/source/css/_global/animation.css +57 -0
  109. package/source/css/_global/index.styl +5 -20
  110. package/source/css/_global/var.styl +16 -1
  111. package/source/css/_layout/{base.styl → basic.styl} +24 -116
  112. package/source/css/_layout/header.styl +203 -615
  113. package/source/css/_layout/index.styl +29 -271
  114. package/source/css/_mode/index.styl +87 -94
  115. package/source/css/_page/_home/category-bar.styl +74 -0
  116. package/source/css/_page/_home/home-top.styl +541 -0
  117. package/source/css/_page/_home/index.styl +15 -0
  118. package/source/css/_page/_home/pagination.styl +176 -0
  119. package/source/css/_page/_home/recent-post.styl +204 -0
  120. package/source/css/_page/about/index.styl +1 -0
  121. package/source/css/_page/about/tenyear.styl +56 -0
  122. package/source/css/_page/about.styl +555 -626
  123. package/source/css/_page/category.styl +95 -119
  124. package/source/css/_page/douban.styl +126 -0
  125. package/source/css/_page/equipment.styl +100 -99
  126. package/source/css/_page/error.styl +130 -146
  127. package/source/css/_page/home.styl +41 -50
  128. package/source/css/_page/index.styl +42 -10
  129. package/source/css/_page/links.styl +305 -0
  130. package/source/css/_page/moment.styl +51 -51
  131. package/source/css/_page/music.styl +506 -0
  132. package/source/css/_page/rss.styl +62 -67
  133. package/source/css/_page/says.styl +375 -344
  134. package/source/css/_page/tag.styl +15 -13
  135. package/source/css/_widgets/{aside → _aside}/flip.styl +7 -5
  136. package/source/css/_widgets/{aside → _aside}/history.styl +9 -2
  137. package/source/css/_widgets/_aside/index.styl +96 -0
  138. package/source/css/_widgets/{aside → _aside}/info.styl +86 -89
  139. package/source/css/_widgets/{aside → _aside}/newPost.styl +7 -1
  140. package/source/css/_widgets/{aside → _aside}/toc.styl +28 -5
  141. package/source/css/_widgets/{comment → _comment}/index.styl +4 -12
  142. package/source/css/_widgets/{comment → _comment}/twikoo.styl +5 -2
  143. package/source/css/_widgets/{comment → _comment}/waline.styl +21 -5
  144. package/source/css/{_extra → _widgets/_extra}/console.styl +33 -10
  145. package/source/css/_widgets/_extra/fullpage.styl +46 -0
  146. package/source/css/_widgets/_extra/music.styl +218 -0
  147. package/source/css/_widgets/_extra/pace.styl +39 -0
  148. package/source/css/_widgets/_extra/rightmenu.styl +78 -0
  149. package/source/css/_widgets/_mixins/article-sort.styl +93 -0
  150. package/source/css/_widgets/_mixins/footer.styl +273 -0
  151. package/source/css/_widgets/_mixins/other.styl +34 -0
  152. package/source/css/_widgets/_mixins/sidebar.styl +230 -0
  153. package/source/css/_widgets/_post/_highlight/diff.styl +75 -0
  154. package/source/css/_widgets/_post/_highlight/index.styl +144 -0
  155. package/source/css/_widgets/_post/_highlight/theme/default.styl +12 -0
  156. package/source/css/_widgets/_post/_highlight/theme/mac.styl +25 -0
  157. package/source/css/_widgets/_post/_highlight/theme.styl +68 -0
  158. package/source/css/_widgets/_post/commentBarrage.styl +144 -0
  159. package/source/css/_widgets/_post/content.styl +152 -0
  160. package/source/css/_widgets/_post/copyright.styl +98 -0
  161. package/source/css/_widgets/_post/index.styl +20 -0
  162. package/source/css/_widgets/_post/meta.styl +420 -0
  163. package/source/css/_widgets/_post/pagination.styl +177 -0
  164. package/source/css/_widgets/_post/postAI.styl +131 -0
  165. package/source/css/{_post → _widgets/_post}/relatedPost.styl +4 -1
  166. package/source/css/_widgets/_post/tools.styl +249 -0
  167. package/source/css/{_search → _widgets/_search}/algolia-search.styl +4 -0
  168. package/source/css/{_search → _widgets/_search}/local-search.styl +15 -5
  169. package/source/css/_widgets/_tags/button.styl +60 -0
  170. package/source/css/_widgets/_tags/bvideo.styl +8 -0
  171. package/source/css/_widgets/_tags/card.styl +52 -0
  172. package/source/css/_widgets/_tags/checkbox.styl +85 -0
  173. package/source/css/_widgets/_tags/fold.styl +79 -0
  174. package/source/css/_widgets/_tags/image.styl +10 -0
  175. package/source/css/_widgets/_tags/index.styl +61 -0
  176. package/source/css/_widgets/_tags/inline-image.styl +6 -0
  177. package/source/css/_widgets/_tags/label.styl +3 -0
  178. package/source/css/_widgets/_tags/link.styl +80 -0
  179. package/source/css/_widgets/_tags/note.styl +101 -0
  180. package/source/css/_widgets/_tags/span.styl +61 -0
  181. package/source/css/_widgets/_tags/tabs.styl +105 -0
  182. package/source/css/_widgets/_tags/timeline.styl +80 -0
  183. package/source/css/_widgets/index.styl +50 -1
  184. package/source/css/index.styl +0 -25
  185. package/source/js/{commentBarrage.js → extend/comment/twikoo/commentBarrage.js} +0 -4
  186. package/source/js/extend/comment/{twikoo.js → twikoo/twikoo.js} +12 -40
  187. package/source/js/extend/comment/waline/commentBarrage.js +155 -0
  188. package/source/js/extend/comment/waline/waline.js +60 -0
  189. package/source/js/extend/search/algolia-search.js +1 -5
  190. package/source/js/extend/search/local-search.js +33 -13
  191. package/source/js/main.js +190 -208
  192. package/source/js/music.js +129 -0
  193. package/source/js/utils.js +4 -7
  194. package/source/lib/cover-color.min.js +7 -0
  195. package/source/lib/rightside.min.js +1 -0
  196. package/source/lib/sco-ai.min.js +8 -0
  197. package/source/lib/snackbar.min.css +1 -1
  198. package/source/lib/txmap.min.js +1 -0
  199. package/source/lib/view-image.min.js +1 -1
  200. package/layout/includes/widgets/aside/asidePower.pug +0 -19
  201. package/layout/includes/widgets/home/rencentPost.pug +0 -26
  202. package/source/css/_extra/rightmenu.styl +0 -83
  203. package/source/css/_layout/articleSort.styl +0 -199
  204. package/source/css/_layout/footer.styl +0 -359
  205. package/source/css/_layout/sidebar.styl +0 -226
  206. package/source/css/_page/homeTop.styl +0 -1035
  207. package/source/css/_page/link.styl +0 -433
  208. package/source/css/_post/commentBarrage.styl +0 -149
  209. package/source/css/_post/externalTags.styl +0 -694
  210. package/source/css/_post/highlight.styl +0 -96
  211. package/source/css/_post/index.styl +0 -935
  212. package/source/css/_post/pagination.styl +0 -467
  213. package/source/css/_post/postContent.styl +0 -957
  214. package/source/css/_post/reward.styl +0 -217
  215. package/source/css/_widgets/aside/index.styl +0 -156
  216. package/source/css/_widgets/aside/power.styl +0 -90
  217. package/source/img/logo-horizontal_version.png +0 -0
  218. package/source/img/pwa/16.png +0 -0
  219. package/source/img/pwa/180.png +0 -0
  220. package/source/img/pwa/192.png +0 -0
  221. package/source/img/pwa/32.png +0 -0
  222. package/source/img/pwa/512.png +0 -0
  223. package/source/img/pwa/logo.png +0 -0
  224. package/source/img/pwa/siteicon/splash-1125x2436.png +0 -0
  225. package/source/img/pwa/siteicon/splash-1136x640.png +0 -0
  226. package/source/img/pwa/siteicon/splash-1170x2532.png +0 -0
  227. package/source/img/pwa/siteicon/splash-1179x2556.png +0 -0
  228. package/source/img/pwa/siteicon/splash-1242x2208.png +0 -0
  229. package/source/img/pwa/siteicon/splash-1242x2688.png +0 -0
  230. package/source/img/pwa/siteicon/splash-1248x2778.png +0 -0
  231. package/source/img/pwa/siteicon/splash-1290x2796.png +0 -0
  232. package/source/img/pwa/siteicon/splash-1334x750.png +0 -0
  233. package/source/img/pwa/siteicon/splash-1536x2048.png +0 -0
  234. package/source/img/pwa/siteicon/splash-1620x2160.png +0 -0
  235. package/source/img/pwa/siteicon/splash-1668x2224.png +0 -0
  236. package/source/img/pwa/siteicon/splash-1668x2388.png +0 -0
  237. package/source/img/pwa/siteicon/splash-1792x828.png +0 -0
  238. package/source/img/pwa/siteicon/splash-2048x1536.png +0 -0
  239. package/source/img/pwa/siteicon/splash-2048x2732.png +0 -0
  240. package/source/img/pwa/siteicon/splash-2160x1620.png +0 -0
  241. package/source/img/pwa/siteicon/splash-2208x1242.png +0 -0
  242. package/source/img/pwa/siteicon/splash-2224x1668.png +0 -0
  243. package/source/img/pwa/siteicon/splash-2388x1668.png +0 -0
  244. package/source/img/pwa/siteicon/splash-2436x1125.png +0 -0
  245. package/source/img/pwa/siteicon/splash-2532x1170.png +0 -0
  246. package/source/img/pwa/siteicon/splash-2556x1179.png +0 -0
  247. package/source/img/pwa/siteicon/splash-2688x1242.png +0 -0
  248. package/source/img/pwa/siteicon/splash-2732x2048.png +0 -0
  249. package/source/img/pwa/siteicon/splash-2778x1248.png +0 -0
  250. package/source/img/pwa/siteicon/splash-2796x1290.png +0 -0
  251. package/source/img/pwa/siteicon/splash-640x1136.png +0 -0
  252. package/source/img/pwa/siteicon/splash-750x1334.png +0 -0
  253. package/source/img/pwa/siteicon/splash-828x1792.png +0 -0
  254. package/source/img/solitude-show.jpg +0 -0
  255. package/source/js/extend/covercolor/local.js +0 -160
  256. package/source/js/rightside.js +0 -402
  257. package/source/js/txmap.js +0 -236
  258. package/source/lib/chuckle-post-ai.js +0 -1
  259. /package/source/css/_widgets/{aside → _aside}/allinfo.styl +0 -0
  260. /package/source/css/_widgets/{aside → _aside}/welcome.styl +0 -0
  261. /package/source/img/{theme/avatar.png → avatar.png} +0 -0
package/source/js/main.js CHANGED
@@ -1,33 +1,3 @@
1
- const adjustMenu = (change = false) => {
2
- const $blogName = document.getElementById('site-name')
3
- let blogNameWidth = $blogName && $blogName.offsetWidth
4
- const $menusEle = document.querySelector('#menus .menus_items')
5
- let menusWidth = $menusEle && $menusEle.offsetWidth
6
- const $searchEle = document.querySelector('#search-button')
7
- let searchWidth = $searchEle && $searchEle.offsetWidth
8
- if (change) {
9
- blogNameWidth = $blogName && $blogName.offsetWidth
10
- menusWidth = $menusEle && $menusEle.offsetWidth
11
- searchWidth = $searchEle && $searchEle.offsetWidth
12
- }
13
- const $nav = document.getElementById('nav')
14
- let t
15
- if (window.innerWidth < 768) t = true
16
- else t = blogNameWidth + menusWidth + searchWidth > $nav.offsetWidth - 120
17
-
18
- if (t) {
19
- $nav.classList.add('hide-menu')
20
- } else {
21
- $nav.classList.remove('hide-menu')
22
- }
23
- }
24
-
25
- // 初始化header
26
- const initAdjust = () => {
27
- adjustMenu()
28
- document.getElementById('nav').classList.add('show')
29
- }
30
-
31
1
  /**
32
2
  * side menu
33
3
  */
@@ -37,8 +7,6 @@ const sidebarFn = () => {
37
7
  const $menuMask = document.getElementById('menu-mask')
38
8
  const $body = document.body
39
9
 
40
- const isOpen = () => $mobileSidebarMenus.classList.contains('open')
41
-
42
10
  function openMobileSidebar() {
43
11
  utils.sidebarPaddingR()
44
12
  $body.style.overflow = 'hidden'
@@ -55,15 +23,15 @@ const sidebarFn = () => {
55
23
 
56
24
  $toggleMenu.addEventListener('click', openMobileSidebar)
57
25
 
58
- $menuMask.addEventListener('click', () => {
59
- if (isOpen()) {
26
+ $menuMask.addEventListener('click', e => {
27
+ if ($mobileSidebarMenus.classList.contains('open')) {
60
28
  closeMobileSidebar()
61
29
  }
62
30
  })
63
31
 
64
- window.addEventListener('resize', () => {
65
- if (utils.isHidden($toggleMenu) && isOpen()) {
66
- closeMobileSidebar()
32
+ window.addEventListener('resize', e => {
33
+ if (utils.isHidden($toggleMenu)) {
34
+ if ($mobileSidebarMenus.classList.contains('open')) closeMobileSidebar()
67
35
  }
68
36
  })
69
37
  }
@@ -82,15 +50,16 @@ const scrollFn = function () {
82
50
  const isDown = scrollDirection(currentTop);
83
51
 
84
52
  if (currentTop > 0) {
85
- $header.classList.add('nav-fixed');
86
53
  if (isDown) {
87
54
  if ($header.classList.contains('nav-visible')) $header.classList.remove('nav-visible');
88
55
  } else {
89
56
  if (!$header.classList.contains('nav-visible')) $header.classList.add('nav-visible');
90
57
  }
58
+ $header.classList.add('nav-fixed');
91
59
  } else {
92
60
  $header.classList.remove('nav-fixed', 'nav-visible');
93
61
  }
62
+
94
63
  percent();
95
64
  }, 200));
96
65
 
@@ -118,7 +87,7 @@ const percent = () => {
118
87
  } else {
119
88
  document.querySelector("#nav-totop").classList.remove("long")
120
89
  if (scrollPercent >= 0) {
121
- percentElement.innerHTML = scrollPercent
90
+ percentElement.innerHTML = scrollPercent + ""
122
91
  }
123
92
  }
124
93
 
@@ -187,10 +156,10 @@ const initObserver = () => {
187
156
  entries.forEach(function (entry) {
188
157
  if (entry.isIntersecting) {
189
158
  paginationElement.classList.add("show-window");
190
- document.querySelector(".comment-barrage").style.bottom = "-200px";
159
+ GLOBAL_CONFIG.comment.commentBarrage && (document.querySelector(".comment-barrage").style.bottom = "-200px");
191
160
  } else {
192
161
  paginationElement.classList.remove("show-window");
193
- document.querySelector(".comment-barrage").style.bottom = "0px";
162
+ GLOBAL_CONFIG.comment.commentBarrage && (document.querySelector(".comment-barrage").style.bottom = "0px");
194
163
  }
195
164
  });
196
165
  }
@@ -223,7 +192,7 @@ class toc {
223
192
  const $tocContent = document.getElementById('toc-content')
224
193
  const list = $article.querySelectorAll('h1,h2,h3,h4,h5,h6')
225
194
  let detectItem = ''
226
- const autoScroll = (el) => {
195
+ function autoScroll(el) {
227
196
  const activePosition = el.getBoundingClientRect().top
228
197
  const sidebarScrollTop = $tocContent.scrollTop
229
198
  if (activePosition > (document.documentElement.clientHeight - 100)) {
@@ -233,16 +202,19 @@ class toc {
233
202
  $tocContent.scrollTop = sidebarScrollTop - 150
234
203
  }
235
204
  }
236
- const findHeadPosition = (top) => {
205
+ function findHeadPosition(top) {
237
206
  if (top === 0) {
238
207
  return false
239
208
  }
209
+
240
210
  let currentIndex = ''
241
- list.forEach((ele, index) => {
211
+
212
+ list.forEach(function (ele, index) {
242
213
  if (top > utils.getEleTop(ele) - 80) {
243
214
  currentIndex = index
244
215
  }
245
216
  })
217
+
246
218
  if (detectItem === currentIndex) return
247
219
  detectItem = currentIndex
248
220
  document.querySelectorAll('.toc .active').forEach((i) => {
@@ -250,19 +222,19 @@ class toc {
250
222
  })
251
223
  const activeitem = toc[detectItem]
252
224
  if (activeitem) {
225
+ let parent = toc[detectItem].parentNode
253
226
  activeitem.classList.add('active')
254
227
  autoScroll(activeitem)
255
- let parent = activeitem.parentNode
256
- while (!parent.matches('.toc')) {
228
+ for (; !parent.matches('.toc'); parent = parent.parentNode) {
257
229
  if (parent.matches('li')) parent.classList.add('active')
258
- parent = parent.parentNode
259
230
  }
260
231
  }
261
232
  }
262
- window.tocScrollFn = utils.throttle(() => {
233
+ window.tocScrollFn = utils.throttle(function () {
263
234
  const currentTop = window.scrollY || document.documentElement.scrollTop
264
235
  findHeadPosition(currentTop)
265
236
  }, 100)
237
+
266
238
  window.addEventListener('scroll', tocScrollFn)
267
239
  }
268
240
  }
@@ -443,12 +415,12 @@ let sco = {
443
415
  'light'
444
416
  if (nowMode === 'light') {
445
417
  document.documentElement.setAttribute('data-theme', 'dark')
446
- saveToLocal.set('theme', 'dark', 0.04);
418
+ saveToLocal.set('theme', 'dark', 0.02);
447
419
  utils.snackbarShow(GLOBAL_CONFIG.lang.theme.dark, false, 2000)
448
420
  document.querySelector(".menu-darkmode-text").textContent = "深色模式";
449
421
  } else {
450
422
  document.documentElement.setAttribute('data-theme', 'light')
451
- saveToLocal.set('theme', 'light', 0.04);
423
+ saveToLocal.set('theme', 'light', 0.02);
452
424
  utils.snackbarShow(GLOBAL_CONFIG.lang.theme.light, false, 2000)
453
425
  document.querySelector(".menu-darkmode-text").textContent = "浅色模式";
454
426
  }
@@ -490,23 +462,15 @@ let sco = {
490
462
  * 初始化
491
463
  */
492
464
  initTheme: function () {
493
- let isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
494
- try {
495
- const cachedMode = saveToLocal.get('theme');
496
- if (cachedMode === undefined) {
497
- const nowMode =
498
- isDarkMode ? 'dark' : 'light'
499
- document.documentElement.setAttribute('data-theme', nowMode);
500
- saveToLocal.set('theme', nowMode, 0.5);
501
- } else {
502
- document.documentElement.setAttribute('data-theme', cachedMode);
503
- }
504
- } catch (e) {
505
- if (isDarkMode) {
506
- saveToLocal.set('theme', 'dark', 0.5)
507
- } else {
508
- saveToLocal.set('theme', 'light', 0.5)
509
- }
465
+ let isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
466
+ const cachedMode = saveToLocal.get('theme');
467
+ if (cachedMode === undefined) {
468
+ const nowMode =
469
+ isDarkMode ? 'dark' : 'light'
470
+ document.documentElement.setAttribute('data-theme', nowMode);
471
+ saveToLocal.set('theme', nowMode, 0.2);
472
+ } else {
473
+ document.documentElement.setAttribute('data-theme', cachedMode);
510
474
  }
511
475
  },
512
476
  /**
@@ -547,14 +511,17 @@ let sco = {
547
511
  * @param txt
548
512
  */
549
513
  toTalk: function (txt) {
550
- const input = document.querySelector('.el-textarea__inner');
551
- const evt = new Event('input', {bubbles: true, cancelable: true});
552
- const inputValue = txt.replace(/\n/g, '\n> ');
553
- input.value = '> ' + inputValue + '\n\n';
554
- input.dispatchEvent(evt);
555
- utils.scrollToDest(utils.getEleTop(document.getElementById('post-comment')), 300)
556
- input.focus();
557
- input.setSelectionRange(-1, -1);
514
+ const inputs = ["#wl-edit", ".el-textarea__inner"]
515
+ for (let i = 0; i < inputs.length; i++) {
516
+ let el = document.querySelector(inputs[i])
517
+ if (el != null) {
518
+ el.dispatchEvent(new Event('input', { bubble: true, cancelable: true }))
519
+ el.value = '> ' + txt.replace(/\n/g, '\n> ') + '\n\n'
520
+ utils.scrollToDest(utils.getEleTop(document.getElementById('post-comment')), 300)
521
+ el.focus()
522
+ el.setSelectionRange(-1, -1)
523
+ }
524
+ }
558
525
  const commentTips = document.querySelector("#comment-tips");
559
526
  if (commentTips) {
560
527
  commentTips.classList.add("show");
@@ -576,7 +543,7 @@ let sco = {
576
543
  }
577
544
  },
578
545
  /**
579
- * 图片添加水印
546
+ * 图片添加底部展示信息
580
547
  */
581
548
  addPhotoFigcaption: function () {
582
549
  let images = document.querySelectorAll('#article-container img');
@@ -596,42 +563,39 @@ let sco = {
596
563
  /**
597
564
  * 下载图片并添加水印
598
565
  */
599
- downloadImage: async function (url, filename) {
600
- rm.hideRightMenu();
566
+ downloadImage: function (imageUrl, filename = 'photo') {
601
567
  if (rm.downloadimging) {
602
568
  utils.snackbarShow("有正在进行中的下载,请稍后再试");
603
569
  return;
604
570
  }
605
- try {
606
- rm.downloadimging = true;
607
- utils.snackbarShow("正在下载中,请稍后", false, 10000);
608
- await new Promise(resolve => setTimeout(resolve, 10000));
609
- const img = new Image();
610
- img.setAttribute("crossOrigin", "anonymous");
611
- img.onload = function () {
612
- const canvas = document.createElement("canvas");
613
- const ctx = canvas.getContext("2d");
614
- canvas.width = img.width;
615
- canvas.height = img.height;
616
- ctx.drawImage(img, 0, 0, img.width, img.height);
617
- ctx.font = "30px Arial";
618
- ctx.fillText(window.location.href, 10, img.height - 10);
619
- const dataUrl = canvas.toDataURL("image/png");
620
- const link = document.createElement("a");
621
- const event = new MouseEvent("click");
622
- link.download = filename || "photo";
623
- link.href = dataUrl;
624
- link.dispatchEvent(event);
625
- utils.snackbarShow("图片已添加盲水印,请遵守版权协议");
626
- rm.downloadimging = false;
627
- };
628
- img.src = url;
629
- } catch (error) {
630
- console.error(error);
631
- utils.snackbarShow("下载图片时出错");
571
+
572
+ rm.hideRightMenu();
573
+ rm.downloadimging = true;
574
+ utils.snackbarShow("正在下载中,请稍后", false, 10000);
575
+
576
+ let img = new Image();
577
+ img.setAttribute("crossOrigin", "anonymous");
578
+ img.onload = function () {
579
+ let canvas = document.createElement("canvas");
580
+ canvas.width = img.width;
581
+ canvas.height = img.height;
582
+ let ctx = canvas.getContext("2d");
583
+ ctx.drawImage(img, 0, 0, img.width, img.height);
584
+
585
+ let dataUrl = canvas.toDataURL("image/png");
586
+ let link = document.createElement("a");
587
+ link.download = filename;
588
+ link.href = dataUrl;
589
+
590
+ let clickEvent = new MouseEvent("click");
591
+ link.dispatchEvent(clickEvent);
592
+
593
+ utils.snackbarShow("图片已添加盲水印,请遵守版权协议");
632
594
  rm.downloadimging = false;
633
- }
595
+ };
596
+ img.src = imageUrl;
634
597
  },
598
+
635
599
  /**
636
600
  * 音乐播放暂停
637
601
  */
@@ -679,27 +643,6 @@ let sco = {
679
643
  scrollToComment: function () {
680
644
  utils.scrollToDest(utils.getEleTop(document.getElementById('post-comment')), 300)
681
645
  },
682
- /**
683
- * 一些日子灰色页面
684
- */
685
- setFest: function () {
686
- const date = new Date();
687
- const currentDate = `${date.getMonth() + 1}.${date.getDate()}`;
688
-
689
- const specialDates = ['1.8', '9.9', '7.7', '9.18', '12.13'];
690
-
691
- if (specialDates.includes(currentDate)) {
692
- const css = `
693
- html {
694
- filter: grayscale(100%);
695
- }
696
- `;
697
-
698
- const styleElement = document.createElement('style');
699
- styleElement.textContent = css;
700
- document.head.appendChild(styleElement);
701
- }
702
- },
703
646
  /**
704
647
  * 个人信息顶部文字更新
705
648
  */
@@ -710,11 +653,11 @@ let sco = {
710
653
  const hours = timeNow.getHours();
711
654
  const lang = GLOBAL_CONFIG.lang.sayhello;
712
655
  const greetings = [
713
- {start: 0, end: 5, text: lang.goodnight},
714
- {start: 6, end: 10, text: lang.morning},
715
- {start: 11, end: 14, text: lang.noon},
716
- {start: 15, end: 18, text: lang.afternoon},
717
- {start: 19, end: 24, text: lang.night},
656
+ { start: 0, end: 5, text: lang.goodnight },
657
+ { start: 6, end: 10, text: lang.morning },
658
+ { start: 11, end: 14, text: lang.noon },
659
+ { start: 15, end: 18, text: lang.afternoon },
660
+ { start: 19, end: 24, text: lang.night },
718
661
  ];
719
662
  for (let greeting of greetings) {
720
663
  if (hours >= greeting.start && hours <= greeting.end) {
@@ -882,6 +825,35 @@ let sco = {
882
825
  }
883
826
  }
884
827
  },
828
+ /**
829
+ * 初始化Header
830
+ * @param change
831
+ */
832
+ initAdjust: function (change = false) {
833
+ const $blogName = document.getElementById('site-name')
834
+ let blogNameWidth = $blogName && $blogName.offsetWidth
835
+ const $menusEle = document.querySelector('#menus .menus_items')
836
+ let menusWidth = $menusEle && $menusEle.offsetWidth
837
+ const $searchEle = document.querySelector('#search-button')
838
+ let searchWidth = $searchEle && $searchEle.offsetWidth
839
+ if (change) {
840
+ blogNameWidth = $blogName && $blogName.offsetWidth
841
+ menusWidth = $menusEle && $menusEle.offsetWidth
842
+ searchWidth = $searchEle && $searchEle.offsetWidth
843
+ }
844
+ const $nav = document.getElementById('nav')
845
+ let t
846
+ if (window.innerWidth < 768) t = true
847
+ else t = blogNameWidth + menusWidth + searchWidth > $nav?.offsetWidth - 120
848
+
849
+ if (t) {
850
+ $nav?.classList.add('hide-menu')
851
+ } else {
852
+ $nav?.classList.remove('hide-menu')
853
+ }
854
+
855
+ document.getElementById('nav')?.classList.add('show')
856
+ },
885
857
  /**
886
858
  * 首页分页跳转
887
859
  */
@@ -904,6 +876,25 @@ let sco = {
904
876
  document.getElementById("toPageButton").href = targetPageUrl;
905
877
  }
906
878
  },
879
+ addRandomCommentInfo: function () {
880
+ const e = `${GLOBAL_CONFIG.comment.randomInfoStart[Math.floor(Math.random() * GLOBAL_CONFIG.comment.randomInfoStart.length)]}${GLOBAL_CONFIG.comment.randomInfoEnd[Math.floor(Math.random() * GLOBAL_CONFIG.comment.randomInfoEnd.length)]}`;
881
+
882
+ const nameSelectors = ["#author", "input[name='comname']", "#inpName", "input[name='author']", "#ds-dialog-name", "#name", "input[name='nick']", "#comment_author"];
883
+ const emailSelectors = ["#mail", "#email", "input[name='commail']", "#inpEmail", "input[name='email']", "#ds-dialog-email", "input[name='mail']", "#comment_email"];
884
+
885
+ const nameElements = nameSelectors.map(selector => document.querySelector(selector)).filter(Boolean);
886
+ const emailElements = emailSelectors.map(selector => document.querySelector(selector)).filter(Boolean);
887
+
888
+ nameElements.forEach(element => {
889
+ element.value = e;
890
+ element.dispatchEvent(new Event("input"));
891
+ });
892
+
893
+ emailElements.forEach(element => {
894
+ element.value = "donotreply@examp.com";
895
+ element.dispatchEvent(new Event("input"));
896
+ });
897
+ }
907
898
  }
908
899
 
909
900
  /*
@@ -911,63 +902,66 @@ let sco = {
911
902
  */
912
903
  class hightlight {
913
904
  static createEle(langEl, item) {
914
- const fragment = document.createDocumentFragment();
915
- const highlightCopyEle = '<i class="scoicon sco-copy-fill"></i>';
916
- const highlightExpandEle = '<i class="scoicon sco-arrow-down expand" style="font-size: 16px"></i>';
917
-
918
- const hlTools = document.createElement('div');
919
- hlTools.className = 'highlight-tools';
920
- hlTools.innerHTML = `${highlightExpandEle}${langEl}${highlightCopyEle}`;
921
-
922
- const itemHeight = item.clientHeight;
923
- const $table = item.querySelector('table');
924
- const $expand = item.getElementsByClassName('code-expand-btn');
925
-
926
- let expand = true;
927
- hlTools.children[0].addEventListener('click', () => {
928
- expand = !expand;
929
- hlTools.children[0].classList.toggle('closed');
930
- $table.style.display = expand ? 'none' : 'block';
931
- if ($expand.length !== 0) {
932
- $expand[0].style.display = expand ? 'none' : 'block';
933
- }
934
- if (!expand) {
935
- $table.style.height = itemHeight < 200 ? 'auto' : '200px';
936
- if (itemHeight >= 200) {
937
- item.classList.remove("expand-done");
905
+ const fragment = document.createDocumentFragment()
906
+ const highlightCopyEle = GLOBAL_CONFIG.hightlight.copy ? '<i class="scoicon sco-copy-fill"></i>' : '<i></i>'
907
+ const highlightExpandEle = '<i class="scoicon sco-arrow-down expand"></i>'
908
+
909
+ const hlTools = document.createElement('div')
910
+ hlTools.className = `highlight-tools`
911
+ hlTools.innerHTML = highlightExpandEle + langEl + highlightCopyEle
912
+ let expand = GLOBAL_CONFIG.hightlight.expand
913
+ hlTools.children[0].addEventListener('click', (e) => {
914
+ if (expand) {
915
+ hlTools.children[0].classList.add('closed')
916
+ $table.setAttribute('style', 'display:none')
917
+ if ($expand.length !== 0) {
918
+ $expand[0].setAttribute('style', 'display:none')
919
+ }
920
+ } else {
921
+ hlTools.children[0].classList.remove('closed')
922
+ $table.setAttribute('style', 'display:block')
923
+ if ($expand.length !== 0) {
924
+ $expand[0].setAttribute('style', 'display:block')
925
+ }
926
+ if (itemHeight < 200) {
927
+ $table.setAttribute('style', 'height: auto')
928
+ } else {
929
+ $table.setAttribute('style', 'height:200px')
930
+ ele.classList.remove("expand-done")
938
931
  }
939
932
  }
940
- });
941
-
942
- hlTools.children[2].addEventListener('click', () => {
943
- utils.copy($table.querySelector('.code').innerText);
944
- });
945
-
946
- fragment.appendChild(hlTools);
947
-
933
+ expand = !expand
934
+ })
935
+ hlTools.children[2].addEventListener('click', (e) => {
936
+ utils.copy($table.querySelector('.code').innerText)
937
+ })
938
+ const ele = document.createElement('div')
939
+ fragment.appendChild(hlTools)
940
+ const itemHeight = item.clientHeight, $table = item.querySelector('table'),
941
+ $expand = item.getElementsByClassName('code-expand-btn')
948
942
  if (GLOBAL_CONFIG.hightlight.limit && itemHeight > GLOBAL_CONFIG.hightlight.limit + 30) {
949
- $table.style.height = `${GLOBAL_CONFIG.hightlight.limit}px`;
950
- const ele = document.createElement('div');
951
- ele.className = 'code-expand-btn';
952
- ele.innerHTML = '<i class="scoicon sco-show-line" style="font-size: 1.2rem"></i>';
943
+ $table.setAttribute('style', `height: ${GLOBAL_CONFIG.hightlight.limit}px`)
944
+ ele.className = 'code-expand-btn'
945
+ ele.innerHTML = '<i class="scoicon sco-show-line" style="font-size: 1.2rem"></i>'
953
946
  ele.addEventListener('click', (e) => {
954
- $table.style.height = `${itemHeight}px`;
955
- const target = e.target.className !== 'code-expand-btn' ? e.target.parentNode : e.target;
956
- target.classList.add('expand-done');
957
- });
958
- fragment.appendChild(ele);
947
+ $table.setAttribute('style', `height: ${itemHeight}px`)
948
+ e.target.classList.add('expand-done')
949
+ e.target.setAttribute('style', 'display:none')
950
+ })
951
+ fragment.appendChild(ele)
959
952
  }
960
- item.insertBefore(fragment, item.firstChild);
953
+ item.insertBefore(fragment, item.firstChild)
954
+ hlTools.children[0].click()
961
955
  }
962
956
 
963
957
  static init() {
964
- const $figureHighlight = document.querySelectorAll('figure.highlight');
965
- $figureHighlight.forEach(item => {
966
- let langName = item.classList[1] || 'Code';
967
- if (langName === 'plaintext') langName = 'Code';
968
- const highlightLangEle = `<div class="code-lang">${langName.toUpperCase()}</div>`;
969
- this.createEle(highlightLangEle, item);
970
- });
958
+ const $figureHighlight = document.querySelectorAll('figure.highlight'), that = this
959
+ $figureHighlight.forEach(function (item) {
960
+ let langName = item.getAttribute('class').split(' ')[1]
961
+ if (langName === 'plaintext' || langName === undefined) langName = 'Code'
962
+ const highlightLangEle = `<div class="code-lang">${langName.toUpperCase()}</div>`
963
+ that.createEle(highlightLangEle, item)
964
+ })
971
965
  }
972
966
  }
973
967
 
@@ -1002,14 +996,14 @@ class tabs {
1002
996
  document.querySelectorAll('#article-container .tabs .tab-to-top').forEach(function (item) {
1003
997
  item.addEventListener('click', function () {
1004
998
  utils.scrollToDest(utils.getEleTop(item.parentElement.parentElement.parentNode), 300)
999
+
1005
1000
  })
1006
1001
  })
1007
1002
  }
1008
1003
  }
1009
1004
 
1010
1005
  window.refreshFn = () => {
1011
- if (PAGE_CONFIG.page === "404") return;
1012
- initAdjust()
1006
+ sco.initAdjust()
1013
1007
  scrollFn()
1014
1008
  sidebarFn()
1015
1009
  changeTimeFormat()
@@ -1017,7 +1011,6 @@ window.refreshFn = () => {
1017
1011
  sco.addRuntime()
1018
1012
  sco.hideCookie()
1019
1013
  sco.addPhotoFigcaption()
1020
- sco.setFest()
1021
1014
  sco.setTimeState()
1022
1015
  sco.tagPageActive()
1023
1016
  sco.categoriesBarActive()
@@ -1027,26 +1020,19 @@ window.refreshFn = () => {
1027
1020
  GLOBAL_CONFIG.lazyload.enable && sco.lazyloadImg()
1028
1021
  GLOBAL_CONFIG.lightbox && sco.lightbox('')
1029
1022
  GLOBAL_CONFIG.randomlinks && randomLinksList()
1030
- if (PAGE_CONFIG.comment) {
1031
- initComment()
1032
- }
1033
- PAGE_CONFIG.toc && toc.init()
1034
- if (PAGE_CONFIG.is_post || PAGE_CONFIG.is_page) {
1035
- GLOBAL_CONFIG.hightlight.enable && hightlight.init()
1036
- tabs.init()
1037
- }
1038
- if (PAGE_CONFIG.is_home) {
1039
- showTodayCard()
1040
- sco.initbbtalk()
1041
- }
1042
- GLOBAL_CONFIG.covercolor && coverColor();
1023
+ PAGE_CONFIG.comment && initComment()
1024
+ PAGE_CONFIG.toc && toc.init();
1025
+ (PAGE_CONFIG.is_post || PAGE_CONFIG.is_page) && ((GLOBAL_CONFIG.hightlight.enable && hightlight.init()) || tabs.init())
1026
+ PAGE_CONFIG.is_home && (showTodayCard() || sco.initbbtalk())
1027
+ GLOBAL_CONFIG.covercolor.enable && coverColor()
1043
1028
  sco.initConsoleState()
1044
- if (document.getElementById('history-baidu')) sco.card_history() // 那年今日
1045
- if (document.getElementById('welcome-info')) sco.card_welcome() // 个性定位
1046
- if (GLOBAL_CONFIG.comment.type === "twikoo" && PAGE_CONFIG.comment) {
1047
- initializeCommentBarrage() // 热评
1048
- GLOBAL_CONFIG.comment.enable && newestCommentInit()
1049
- }
1029
+ document.getElementById('history-baidu') && sco.card_history()
1030
+ document.getElementById('welcome-info') && sco.card_welcome()
1031
+ GLOBAL_CONFIG.comment.commentBarrage && PAGE_CONFIG.comment && initializeCommentBarrage()
1032
+ document.body.setAttribute('data-type', PAGE_CONFIG.page)
1033
+ PAGE_CONFIG.page === "music" && scoMusic.init()
1034
+ GLOBAL_CONFIG.music.enable && !document.querySelector('#Music-page') && document.removeEventListener('keydown', scoMusic.setKeydown)
1035
+ GLOBAL_CONFIG.ai.enable && PAGE_CONFIG.page === "post" && ScoAI.init()
1050
1036
  }
1051
1037
 
1052
1038
  sco.initTheme()
@@ -1055,10 +1041,6 @@ document.addEventListener('DOMContentLoaded', function () {
1055
1041
  window.refreshFn()
1056
1042
  })
1057
1043
 
1058
- document.addEventListener('pjax:complete', () => {
1059
- window.refreshFn()
1060
- })
1061
-
1062
1044
  window.onkeydown = function (e) {
1063
1045
  123 === e.keyCode && utils.snackbarShow("开发者模式已打开,请遵循GPL协议", !1, 3e3)
1064
- };
1046
+ }