hexo-theme-solitude 1.2.6 → 1.3.1

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 (263) 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 +502 -297
  5. package/languages/en-US.yml +105 -8
  6. package/languages/zh-CN.yml +98 -1
  7. package/layout/archive.pug +4 -5
  8. package/layout/category.pug +4 -5
  9. package/layout/includes/body/mode.pug +40 -0
  10. package/layout/includes/console.pug +15 -16
  11. package/layout/includes/footer.pug +26 -28
  12. package/layout/includes/head/config.pug +27 -8
  13. package/layout/includes/head/fest.pug +22 -0
  14. package/layout/includes/head/opengraph.pug +11 -0
  15. package/layout/includes/head.pug +1 -3
  16. package/layout/includes/header.pug +1 -1
  17. package/layout/includes/inject/body.pug +36 -13
  18. package/layout/includes/inject/head.pug +30 -20
  19. package/layout/includes/layout.pug +12 -8
  20. package/layout/includes/loading.pug +1 -64
  21. package/layout/includes/mixins/articleSort.pug +4 -4
  22. package/layout/includes/mixins/pagination.pug +1 -1
  23. package/layout/includes/nav.pug +10 -10
  24. package/layout/includes/page/about.pug +1 -0
  25. package/layout/includes/page/categories.pug +3 -3
  26. package/layout/includes/page/default.pug +1 -1
  27. package/layout/includes/page/echarts.pug +3 -3
  28. package/layout/includes/page/equipment.pug +0 -1
  29. package/layout/includes/page/links.pug +5 -26
  30. package/layout/includes/page/moments.pug +0 -1
  31. package/layout/includes/page/music.pug +19 -0
  32. package/layout/includes/page/not_configured.pug +18 -0
  33. package/layout/includes/page/rss.pug +20 -22
  34. package/layout/includes/page/says.pug +1 -2
  35. package/layout/includes/page/tags.pug +3 -3
  36. package/layout/includes/page/tlink.pug +0 -1
  37. package/layout/includes/sidebar.pug +7 -7
  38. package/layout/includes/widgets/aside/aside.pug +13 -1
  39. package/layout/includes/widgets/aside/asideArchive.pug +5 -3
  40. package/layout/includes/widgets/aside/asideCustom.pug +6 -0
  41. package/layout/includes/widgets/aside/asideHistory.pug +3 -3
  42. package/layout/includes/widgets/aside/asideInfoCard.pug +4 -6
  43. package/layout/includes/widgets/aside/asideNewestPost.pug +1 -1
  44. package/layout/includes/widgets/aside/asideSwitch.pug +0 -11
  45. package/layout/includes/widgets/aside/asideTag.pug +2 -2
  46. package/layout/includes/widgets/aside/asideToc.pug +1 -1
  47. package/layout/includes/widgets/aside/asideWebInfo.pug +6 -6
  48. package/layout/includes/widgets/aside/asideWelcome.pug +1 -1
  49. package/layout/includes/widgets/home/banner.pug +2 -2
  50. package/layout/includes/widgets/home/bbTimeList.pug +3 -3
  51. package/layout/includes/widgets/home/categoryBar.pug +3 -3
  52. package/layout/includes/widgets/home/categoryGroup.pug +2 -2
  53. package/layout/includes/widgets/home/hometop.pug +7 -7
  54. package/layout/includes/widgets/home/postList.pug +12 -8
  55. package/layout/includes/widgets/home/topGroup.pug +17 -13
  56. package/layout/includes/widgets/nav/left.pug +6 -6
  57. package/layout/includes/widgets/nav/menu.pug +4 -4
  58. package/layout/includes/widgets/nav/right.pug +14 -14
  59. package/layout/includes/widgets/page/about/authorinfo.pug +1 -1
  60. package/layout/includes/widgets/page/about/award.pug +11 -9
  61. package/layout/includes/widgets/page/about/contentinfo.pug +7 -7
  62. package/layout/includes/widgets/page/about/hobbies.pug +1 -1
  63. package/layout/includes/widgets/page/about/motto.pug +2 -2
  64. package/layout/includes/widgets/page/about/other.pug +10 -9
  65. package/layout/includes/widgets/page/about/personalities.pug +2 -2
  66. package/layout/includes/widgets/page/about/skillsinfo.pug +10 -12
  67. package/layout/includes/widgets/page/about/tenyear.pug +48 -0
  68. package/layout/includes/widgets/page/banner.pug +2 -2
  69. package/layout/includes/widgets/page/links/banner.pug +12 -14
  70. package/layout/includes/widgets/page/links/linksItem.pug +0 -1
  71. package/layout/includes/widgets/page/moments/angle.pug +7 -12
  72. package/layout/includes/widgets/page/moments/index.pug +7 -2
  73. package/layout/includes/widgets/post/award.pug +12 -8
  74. package/layout/includes/widgets/post/copyright.pug +16 -14
  75. package/layout/includes/widgets/post/postMeta.pug +36 -25
  76. package/layout/includes/widgets/post/postNav.pug +15 -15
  77. package/layout/includes/widgets/randomlink.pug +10 -5
  78. package/layout/includes/widgets/rightside/index.pug +9 -8
  79. package/layout/includes/widgets/third-party/ai/index.pug +12 -0
  80. package/layout/includes/widgets/third-party/comments/comment.pug +6 -1
  81. package/layout/includes/widgets/third-party/comments/twikoo.pug +5 -4
  82. package/layout/includes/widgets/third-party/comments/waline.pug +4 -5
  83. package/layout/includes/widgets/third-party/music.pug +1 -1
  84. package/layout/includes/widgets/third-party/pjax.pug +6 -1
  85. package/layout/includes/widgets/third-party/search/algolia-search.pug +4 -3
  86. package/layout/includes/widgets/third-party/search/index.pug +2 -2
  87. package/layout/includes/widgets/third-party/search/local-search.pug +3 -3
  88. package/layout/index.pug +5 -6
  89. package/layout/page.pug +34 -29
  90. package/layout/post.pug +3 -23
  91. package/layout/tag.pug +3 -3
  92. package/package.json +2 -2
  93. package/scripts/filter/checkThemeConfig.js +0 -5
  94. package/scripts/helper/cdn.js +12 -0
  95. package/scripts/helper/page.js +13 -0
  96. package/scripts/helper/related_post.js +0 -1
  97. package/scripts/tags/button.js +21 -0
  98. package/scripts/tags/card.js +9 -0
  99. package/scripts/tags/checkbox.js +51 -0
  100. package/scripts/tags/fold.js +0 -5
  101. package/scripts/tags/image.js +75 -0
  102. package/scripts/tags/inline-image.js +12 -0
  103. package/scripts/tags/label.js +10 -0
  104. package/scripts/tags/link.js +2 -0
  105. package/scripts/tags/media.js +29 -0
  106. package/scripts/tags/span.js +17 -0
  107. package/scripts/tags/timeline.js +2 -15
  108. package/scripts/tags/u.js +7 -0
  109. package/source/css/_global/animation.css +57 -0
  110. package/source/css/_global/index.styl +5 -20
  111. package/source/css/_global/var.styl +16 -1
  112. package/source/css/_layout/{base.styl → basic.styl} +24 -116
  113. package/source/css/_layout/header.styl +204 -616
  114. package/source/css/_layout/index.styl +29 -271
  115. package/source/css/_mode/index.styl +102 -93
  116. package/source/css/_page/_home/category-bar.styl +74 -0
  117. package/source/css/_page/_home/home-top.styl +541 -0
  118. package/source/css/_page/_home/index.styl +15 -0
  119. package/source/css/_page/_home/pagination.styl +176 -0
  120. package/source/css/_page/_home/recent-post.styl +204 -0
  121. package/source/css/_page/about/index.styl +1 -0
  122. package/source/css/_page/about/tenyear.styl +56 -0
  123. package/source/css/_page/about.styl +555 -626
  124. package/source/css/_page/category.styl +95 -119
  125. package/source/css/_page/douban.styl +126 -0
  126. package/source/css/_page/equipment.styl +100 -99
  127. package/source/css/_page/error.styl +130 -146
  128. package/source/css/_page/home.styl +41 -50
  129. package/source/css/_page/index.styl +42 -10
  130. package/source/css/_page/links.styl +306 -0
  131. package/source/css/_page/moment.styl +51 -51
  132. package/source/css/_page/music.styl +506 -0
  133. package/source/css/_page/rss.styl +62 -67
  134. package/source/css/_page/says.styl +375 -344
  135. package/source/css/_page/tag.styl +15 -13
  136. package/source/css/_widgets/{aside → _aside}/flip.styl +7 -5
  137. package/source/css/_widgets/{aside → _aside}/history.styl +9 -2
  138. package/source/css/_widgets/_aside/index.styl +96 -0
  139. package/source/css/_widgets/{aside → _aside}/info.styl +86 -89
  140. package/source/css/_widgets/{aside → _aside}/newPost.styl +7 -1
  141. package/source/css/_widgets/{aside → _aside}/toc.styl +28 -5
  142. package/source/css/_widgets/{comment → _comment}/index.styl +4 -12
  143. package/source/css/_widgets/{comment → _comment}/twikoo.styl +5 -2
  144. package/source/css/_widgets/{comment → _comment}/waline.styl +21 -5
  145. package/source/css/{_extra → _widgets/_extra}/console.styl +33 -10
  146. package/source/css/_widgets/_extra/fullpage.styl +46 -0
  147. package/source/css/_widgets/_extra/music.styl +218 -0
  148. package/source/css/_widgets/_extra/pace.styl +39 -0
  149. package/source/css/_widgets/_extra/rightmenu.styl +78 -0
  150. package/source/css/_widgets/_mixins/article-sort.styl +93 -0
  151. package/source/css/_widgets/_mixins/footer.styl +273 -0
  152. package/source/css/_widgets/_mixins/other.styl +34 -0
  153. package/source/css/_widgets/_mixins/sidebar.styl +230 -0
  154. package/source/css/_widgets/_post/_highlight/diff.styl +75 -0
  155. package/source/css/_widgets/_post/_highlight/index.styl +144 -0
  156. package/source/css/_widgets/_post/_highlight/theme/default.styl +12 -0
  157. package/source/css/_widgets/_post/_highlight/theme/mac.styl +25 -0
  158. package/source/css/_widgets/_post/_highlight/theme.styl +68 -0
  159. package/source/css/_widgets/_post/commentBarrage.styl +144 -0
  160. package/source/css/_widgets/_post/content.styl +152 -0
  161. package/source/css/_widgets/_post/copyright.styl +98 -0
  162. package/source/css/_widgets/_post/index.styl +20 -0
  163. package/source/css/_widgets/_post/meta.styl +420 -0
  164. package/source/css/_widgets/_post/pagination.styl +177 -0
  165. package/source/css/_widgets/_post/postAI.styl +131 -0
  166. package/source/css/{_post → _widgets/_post}/relatedPost.styl +4 -1
  167. package/source/css/_widgets/_post/tools.styl +249 -0
  168. package/source/css/{_search → _widgets/_search}/algolia-search.styl +4 -0
  169. package/source/css/{_search → _widgets/_search}/local-search.styl +15 -5
  170. package/source/css/_widgets/_tags/button.styl +60 -0
  171. package/source/css/_widgets/_tags/bvideo.styl +8 -0
  172. package/source/css/_widgets/_tags/card.styl +52 -0
  173. package/source/css/_widgets/_tags/checkbox.styl +85 -0
  174. package/source/css/_widgets/_tags/fold.styl +79 -0
  175. package/source/css/_widgets/_tags/image.styl +10 -0
  176. package/source/css/_widgets/_tags/index.styl +61 -0
  177. package/source/css/_widgets/_tags/inline-image.styl +6 -0
  178. package/source/css/_widgets/_tags/label.styl +3 -0
  179. package/source/css/_widgets/_tags/link.styl +80 -0
  180. package/source/css/_widgets/_tags/note.styl +101 -0
  181. package/source/css/_widgets/_tags/span.styl +61 -0
  182. package/source/css/_widgets/_tags/tabs.styl +105 -0
  183. package/source/css/_widgets/_tags/timeline.styl +80 -0
  184. package/source/css/_widgets/index.styl +50 -1
  185. package/source/css/index.styl +0 -25
  186. package/source/js/{commentBarrage.js → extend/comment/twikoo/commentBarrage.js} +0 -4
  187. package/source/js/extend/comment/{twikoo.js → twikoo/twikoo.js} +12 -40
  188. package/source/js/extend/comment/waline/commentBarrage.js +155 -0
  189. package/source/js/extend/comment/{waline.js → waline/waline.js} +10 -11
  190. package/source/js/extend/search/algolia-search.js +1 -5
  191. package/source/js/extend/search/local-search.js +33 -13
  192. package/source/js/main.js +135 -171
  193. package/source/js/music.js +129 -0
  194. package/source/js/utils.js +4 -7
  195. package/source/lib/cover-color.min.js +7 -0
  196. package/source/lib/rightside.min.js +1 -0
  197. package/source/lib/sco-ai.min.js +8 -0
  198. package/source/lib/snackbar.min.css +1 -1
  199. package/source/lib/txmap.min.js +1 -0
  200. package/source/lib/universe.min.js +1 -0
  201. package/source/lib/view-image.min.js +1 -1
  202. package/layout/includes/widgets/aside/asidePower.pug +0 -19
  203. package/layout/includes/widgets/home/rencentPost.pug +0 -26
  204. package/source/css/_extra/rightmenu.styl +0 -83
  205. package/source/css/_layout/articleSort.styl +0 -199
  206. package/source/css/_layout/footer.styl +0 -359
  207. package/source/css/_layout/sidebar.styl +0 -226
  208. package/source/css/_page/homeTop.styl +0 -1035
  209. package/source/css/_page/link.styl +0 -433
  210. package/source/css/_post/commentBarrage.styl +0 -149
  211. package/source/css/_post/externalTags.styl +0 -694
  212. package/source/css/_post/highlight.styl +0 -96
  213. package/source/css/_post/index.styl +0 -935
  214. package/source/css/_post/pagination.styl +0 -467
  215. package/source/css/_post/postContent.styl +0 -957
  216. package/source/css/_post/reward.styl +0 -217
  217. package/source/css/_widgets/aside/index.styl +0 -156
  218. package/source/css/_widgets/aside/power.styl +0 -90
  219. package/source/img/logo-horizontal_version.png +0 -0
  220. package/source/img/pwa/16.png +0 -0
  221. package/source/img/pwa/180.png +0 -0
  222. package/source/img/pwa/192.png +0 -0
  223. package/source/img/pwa/32.png +0 -0
  224. package/source/img/pwa/512.png +0 -0
  225. package/source/img/pwa/logo.png +0 -0
  226. package/source/img/pwa/siteicon/splash-1125x2436.png +0 -0
  227. package/source/img/pwa/siteicon/splash-1136x640.png +0 -0
  228. package/source/img/pwa/siteicon/splash-1170x2532.png +0 -0
  229. package/source/img/pwa/siteicon/splash-1179x2556.png +0 -0
  230. package/source/img/pwa/siteicon/splash-1242x2208.png +0 -0
  231. package/source/img/pwa/siteicon/splash-1242x2688.png +0 -0
  232. package/source/img/pwa/siteicon/splash-1248x2778.png +0 -0
  233. package/source/img/pwa/siteicon/splash-1290x2796.png +0 -0
  234. package/source/img/pwa/siteicon/splash-1334x750.png +0 -0
  235. package/source/img/pwa/siteicon/splash-1536x2048.png +0 -0
  236. package/source/img/pwa/siteicon/splash-1620x2160.png +0 -0
  237. package/source/img/pwa/siteicon/splash-1668x2224.png +0 -0
  238. package/source/img/pwa/siteicon/splash-1668x2388.png +0 -0
  239. package/source/img/pwa/siteicon/splash-1792x828.png +0 -0
  240. package/source/img/pwa/siteicon/splash-2048x1536.png +0 -0
  241. package/source/img/pwa/siteicon/splash-2048x2732.png +0 -0
  242. package/source/img/pwa/siteicon/splash-2160x1620.png +0 -0
  243. package/source/img/pwa/siteicon/splash-2208x1242.png +0 -0
  244. package/source/img/pwa/siteicon/splash-2224x1668.png +0 -0
  245. package/source/img/pwa/siteicon/splash-2388x1668.png +0 -0
  246. package/source/img/pwa/siteicon/splash-2436x1125.png +0 -0
  247. package/source/img/pwa/siteicon/splash-2532x1170.png +0 -0
  248. package/source/img/pwa/siteicon/splash-2556x1179.png +0 -0
  249. package/source/img/pwa/siteicon/splash-2688x1242.png +0 -0
  250. package/source/img/pwa/siteicon/splash-2732x2048.png +0 -0
  251. package/source/img/pwa/siteicon/splash-2778x1248.png +0 -0
  252. package/source/img/pwa/siteicon/splash-2796x1290.png +0 -0
  253. package/source/img/pwa/siteicon/splash-640x1136.png +0 -0
  254. package/source/img/pwa/siteicon/splash-750x1334.png +0 -0
  255. package/source/img/pwa/siteicon/splash-828x1792.png +0 -0
  256. package/source/img/solitude-show.jpg +0 -0
  257. package/source/js/extend/covercolor/local.js +0 -160
  258. package/source/js/rightside.js +0 -402
  259. package/source/js/txmap.js +0 -236
  260. package/source/lib/chuckle-post-ai.js +0 -1
  261. /package/source/css/_widgets/{aside → _aside}/allinfo.styl +0 -0
  262. /package/source/css/_widgets/{aside → _aside}/welcome.styl +0 -0
  263. /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
  }
@@ -486,29 +458,6 @@ let sco = {
486
458
  lightbox: function () {
487
459
  window.ViewImage && window.ViewImage.init("#article-container img:not(.flink-avatar), .bber-content-img img, #album_detail img, #equipment img, #twikoo .tk-content img:not(.tk-owo-emotion)");
488
460
  },
489
- /**
490
- * 初始化
491
- */
492
- 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
- }
510
- }
511
- },
512
461
  /**
513
462
  *
514
463
  */
@@ -547,14 +496,17 @@ let sco = {
547
496
  * @param txt
548
497
  */
549
498
  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);
499
+ const inputs = ["#wl-edit", ".el-textarea__inner"]
500
+ for (let i = 0; i < inputs.length; i++) {
501
+ let el = document.querySelector(inputs[i])
502
+ if (el != null) {
503
+ el.dispatchEvent(new Event('input', { bubble: true, cancelable: true }))
504
+ el.value = '> ' + txt.replace(/\n/g, '\n> ') + '\n\n'
505
+ utils.scrollToDest(utils.getEleTop(document.getElementById('post-comment')), 300)
506
+ el.focus()
507
+ el.setSelectionRange(-1, -1)
508
+ }
509
+ }
558
510
  const commentTips = document.querySelector("#comment-tips");
559
511
  if (commentTips) {
560
512
  commentTips.classList.add("show");
@@ -576,7 +528,7 @@ let sco = {
576
528
  }
577
529
  },
578
530
  /**
579
- * 图片添加水印
531
+ * 图片添加底部展示信息
580
532
  */
581
533
  addPhotoFigcaption: function () {
582
534
  let images = document.querySelectorAll('#article-container img');
@@ -596,42 +548,39 @@ let sco = {
596
548
  /**
597
549
  * 下载图片并添加水印
598
550
  */
599
- downloadImage: async function (url, filename) {
600
- rm.hideRightMenu();
551
+ downloadImage: function (imageUrl, filename = 'photo') {
601
552
  if (rm.downloadimging) {
602
553
  utils.snackbarShow("有正在进行中的下载,请稍后再试");
603
554
  return;
604
555
  }
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("下载图片时出错");
556
+
557
+ rm.hideRightMenu();
558
+ rm.downloadimging = true;
559
+ utils.snackbarShow("正在下载中,请稍后", false, 10000);
560
+
561
+ let img = new Image();
562
+ img.setAttribute("crossOrigin", "anonymous");
563
+ img.onload = function () {
564
+ let canvas = document.createElement("canvas");
565
+ canvas.width = img.width;
566
+ canvas.height = img.height;
567
+ let ctx = canvas.getContext("2d");
568
+ ctx.drawImage(img, 0, 0, img.width, img.height);
569
+
570
+ let dataUrl = canvas.toDataURL("image/png");
571
+ let link = document.createElement("a");
572
+ link.download = filename;
573
+ link.href = dataUrl;
574
+
575
+ let clickEvent = new MouseEvent("click");
576
+ link.dispatchEvent(clickEvent);
577
+
578
+ utils.snackbarShow("图片已添加盲水印,请遵守版权协议");
632
579
  rm.downloadimging = false;
633
- }
580
+ };
581
+ img.src = imageUrl;
634
582
  },
583
+
635
584
  /**
636
585
  * 音乐播放暂停
637
586
  */
@@ -679,27 +628,6 @@ let sco = {
679
628
  scrollToComment: function () {
680
629
  utils.scrollToDest(utils.getEleTop(document.getElementById('post-comment')), 300)
681
630
  },
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
631
  /**
704
632
  * 个人信息顶部文字更新
705
633
  */
@@ -710,11 +638,11 @@ let sco = {
710
638
  const hours = timeNow.getHours();
711
639
  const lang = GLOBAL_CONFIG.lang.sayhello;
712
640
  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},
641
+ { start: 0, end: 5, text: lang.goodnight },
642
+ { start: 6, end: 10, text: lang.morning },
643
+ { start: 11, end: 14, text: lang.noon },
644
+ { start: 15, end: 18, text: lang.afternoon },
645
+ { start: 19, end: 24, text: lang.night },
718
646
  ];
719
647
  for (let greeting of greetings) {
720
648
  if (hours >= greeting.start && hours <= greeting.end) {
@@ -882,6 +810,35 @@ let sco = {
882
810
  }
883
811
  }
884
812
  },
813
+ /**
814
+ * 初始化Header
815
+ * @param change
816
+ */
817
+ initAdjust: function (change = false) {
818
+ const $blogName = document.getElementById('site-name')
819
+ let blogNameWidth = $blogName && $blogName.offsetWidth
820
+ const $menusEle = document.querySelector('#menus .menus_items')
821
+ let menusWidth = $menusEle && $menusEle.offsetWidth
822
+ const $searchEle = document.querySelector('#search-button')
823
+ let searchWidth = $searchEle && $searchEle.offsetWidth
824
+ if (change) {
825
+ blogNameWidth = $blogName && $blogName.offsetWidth
826
+ menusWidth = $menusEle && $menusEle.offsetWidth
827
+ searchWidth = $searchEle && $searchEle.offsetWidth
828
+ }
829
+ const $nav = document.getElementById('nav')
830
+ let t
831
+ if (window.innerWidth < 768) t = true
832
+ else t = blogNameWidth + menusWidth + searchWidth > $nav?.offsetWidth - 120
833
+
834
+ if (t) {
835
+ $nav?.classList.add('hide-menu')
836
+ } else {
837
+ $nav?.classList.remove('hide-menu')
838
+ }
839
+
840
+ document.getElementById('nav')?.classList.add('show')
841
+ },
885
842
  /**
886
843
  * 首页分页跳转
887
844
  */
@@ -904,6 +861,25 @@ let sco = {
904
861
  document.getElementById("toPageButton").href = targetPageUrl;
905
862
  }
906
863
  },
864
+ addRandomCommentInfo: function () {
865
+ 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)]}`;
866
+
867
+ const nameSelectors = ["#author", "input[name='comname']", "#inpName", "input[name='author']", "#ds-dialog-name", "#name", "input[name='nick']", "#comment_author"];
868
+ const emailSelectors = ["#mail", "#email", "input[name='commail']", "#inpEmail", "input[name='email']", "#ds-dialog-email", "input[name='mail']", "#comment_email"];
869
+
870
+ const nameElements = nameSelectors.map(selector => document.querySelector(selector)).filter(Boolean);
871
+ const emailElements = emailSelectors.map(selector => document.querySelector(selector)).filter(Boolean);
872
+
873
+ nameElements.forEach(element => {
874
+ element.value = e;
875
+ element.dispatchEvent(new Event("input"));
876
+ });
877
+
878
+ emailElements.forEach(element => {
879
+ element.value = "donotreply@examp.com";
880
+ element.dispatchEvent(new Event("input"));
881
+ });
882
+ }
907
883
  }
908
884
 
909
885
  /*
@@ -912,13 +888,13 @@ let sco = {
912
888
  class hightlight {
913
889
  static createEle(langEl, item) {
914
890
  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>'
891
+ const highlightCopyEle = GLOBAL_CONFIG.hightlight.copy ? '<i class="scoicon sco-copy-fill"></i>' : '<i></i>'
892
+ const highlightExpandEle = '<i class="scoicon sco-arrow-down expand"></i>'
917
893
 
918
894
  const hlTools = document.createElement('div')
919
895
  hlTools.className = `highlight-tools`
920
896
  hlTools.innerHTML = highlightExpandEle + langEl + highlightCopyEle
921
- let expand = true
897
+ let expand = GLOBAL_CONFIG.hightlight.expand
922
898
  hlTools.children[0].addEventListener('click', (e) => {
923
899
  if (expand) {
924
900
  hlTools.children[0].classList.add('closed')
@@ -954,11 +930,13 @@ class hightlight {
954
930
  ele.innerHTML = '<i class="scoicon sco-show-line" style="font-size: 1.2rem"></i>'
955
931
  ele.addEventListener('click', (e) => {
956
932
  $table.setAttribute('style', `height: ${itemHeight}px`)
957
- e.target.className !== 'code-expand-btn' ? e.target.parentNode.classList.add('expand-done') : e.target.classList.add('expand-done')
933
+ e.target.classList.add('expand-done')
934
+ e.target.setAttribute('style', 'display:none')
958
935
  })
959
936
  fragment.appendChild(ele)
960
937
  }
961
938
  item.insertBefore(fragment, item.firstChild)
939
+ hlTools.children[0].click()
962
940
  }
963
941
 
964
942
  static init() {
@@ -1003,14 +981,14 @@ class tabs {
1003
981
  document.querySelectorAll('#article-container .tabs .tab-to-top').forEach(function (item) {
1004
982
  item.addEventListener('click', function () {
1005
983
  utils.scrollToDest(utils.getEleTop(item.parentElement.parentElement.parentNode), 300)
984
+
1006
985
  })
1007
986
  })
1008
987
  }
1009
988
  }
1010
989
 
1011
990
  window.refreshFn = () => {
1012
- if (PAGE_CONFIG.page === "404") return;
1013
- initAdjust()
991
+ sco.initAdjust()
1014
992
  scrollFn()
1015
993
  sidebarFn()
1016
994
  changeTimeFormat()
@@ -1018,7 +996,6 @@ window.refreshFn = () => {
1018
996
  sco.addRuntime()
1019
997
  sco.hideCookie()
1020
998
  sco.addPhotoFigcaption()
1021
- sco.setFest()
1022
999
  sco.setTimeState()
1023
1000
  sco.tagPageActive()
1024
1001
  sco.categoriesBarActive()
@@ -1028,38 +1005,25 @@ window.refreshFn = () => {
1028
1005
  GLOBAL_CONFIG.lazyload.enable && sco.lazyloadImg()
1029
1006
  GLOBAL_CONFIG.lightbox && sco.lightbox('')
1030
1007
  GLOBAL_CONFIG.randomlinks && randomLinksList()
1031
- if (PAGE_CONFIG.comment) {
1032
- initComment()
1033
- }
1034
- PAGE_CONFIG.toc && toc.init()
1035
- if (PAGE_CONFIG.is_post || PAGE_CONFIG.is_page) {
1036
- GLOBAL_CONFIG.hightlight.enable && hightlight.init()
1037
- tabs.init()
1038
- }
1039
- if (PAGE_CONFIG.is_home) {
1040
- showTodayCard()
1041
- sco.initbbtalk()
1042
- }
1043
- GLOBAL_CONFIG.covercolor && coverColor();
1008
+ PAGE_CONFIG.comment && initComment()
1009
+ PAGE_CONFIG.toc && toc.init();
1010
+ (PAGE_CONFIG.is_post || PAGE_CONFIG.is_page) && ((GLOBAL_CONFIG.hightlight.enable && hightlight.init()) || tabs.init())
1011
+ PAGE_CONFIG.is_home && (showTodayCard() || sco.initbbtalk())
1012
+ GLOBAL_CONFIG.covercolor.enable && coverColor()
1044
1013
  sco.initConsoleState()
1045
- if (document.getElementById('history-baidu')) sco.card_history() // 那年今日
1046
- if (document.getElementById('welcome-info')) sco.card_welcome() // 个性定位
1047
- GLOBAL_CONFIG.comment.enable && newestCommentInit() // 最新评论
1048
- if (GLOBAL_CONFIG.comment.type === "twikoo" && PAGE_CONFIG.comment) {
1049
- initializeCommentBarrage() // 热评
1050
- }
1014
+ document.getElementById('history-baidu') && sco.card_history()
1015
+ document.getElementById('welcome-info') && sco.card_welcome()
1016
+ GLOBAL_CONFIG.comment.commentBarrage && PAGE_CONFIG.comment && initializeCommentBarrage()
1017
+ document.body.setAttribute('data-type', PAGE_CONFIG.page)
1018
+ PAGE_CONFIG.page === "music" && scoMusic.init()
1019
+ GLOBAL_CONFIG.music.enable && !document.querySelector('#Music-page') && document.removeEventListener('keydown', scoMusic.setKeydown)
1020
+ GLOBAL_CONFIG.ai.enable && PAGE_CONFIG.page === "post" && ScoAI.init()
1051
1021
  }
1052
1022
 
1053
- sco.initTheme()
1054
-
1055
1023
  document.addEventListener('DOMContentLoaded', function () {
1056
1024
  window.refreshFn()
1057
1025
  })
1058
1026
 
1059
- document.addEventListener('pjax:complete', () => {
1060
- window.refreshFn()
1061
- })
1062
-
1063
1027
  window.onkeydown = function (e) {
1064
1028
  123 === e.keyCode && utils.snackbarShow("开发者模式已打开,请遵循GPL协议", !1, 3e3)
1065
- };
1029
+ }
@@ -0,0 +1,129 @@
1
+ var vh = window.innerHeight * 1;
2
+ var scoMusic = {
3
+ // 获取地址栏参数
4
+ // 创建URLSearchParams对象并传入URL中的查询字符串
5
+ params: new URLSearchParams(window.location.search),
6
+ extractValue: function (input) {
7
+ var valueRegex = /\("([^\s]+)"\)/g;
8
+ var match = valueRegex.exec(input);
9
+ return match[1];
10
+ },
11
+ changeMusicBg: function (isChangeBg = true) {
12
+ const MusicBg = document.getElementById("Music-bg")
13
+ const MusicLoading = document.getElementsByClassName("Music-loading")
14
+
15
+ if (isChangeBg) {
16
+ const musiccover = document.querySelector("#Music-page .aplayer-pic");
17
+ var img = new Image();
18
+ img.src = scoMusic.extractValue(musiccover.style.backgroundImage);
19
+ img.onload = function () {
20
+ MusicBg.style.backgroundImage = musiccover.style.backgroundImage;
21
+ };
22
+ } else {
23
+ let timer = setInterval(() => {
24
+ const musiccover = document.querySelector("#Music-page .aplayer-pic");
25
+ // 确保player加载完成
26
+ if (musiccover) {
27
+ MusicLoading[0].style.display = "none";
28
+ clearInterval(timer)
29
+ document.querySelector('meting-js')
30
+ .aplayer.volume(0.8, true);
31
+
32
+ scoMusic.addEventListenerChangeMusicBg();
33
+ MusicBg.style.display = "block";
34
+ }
35
+ }, 100)
36
+ }
37
+ },
38
+ lrcupdate: function () {
39
+ var aplayerLrcContents = document.querySelector('.aplayer-lrc-contents');
40
+ var currentLrc = aplayerLrcContents.querySelector('p.aplayer-lrc-current');
41
+
42
+ if (currentLrc) {
43
+ var currentIndex = Array.from(aplayerLrcContents.children)
44
+ .indexOf(currentLrc);
45
+ var translateYValue = -currentIndex * 80;
46
+
47
+ aplayerLrcContents.style.transform = 'translateY(' + translateYValue + 'px)';
48
+ }
49
+ },
50
+ buttonlist: function () {
51
+ document.querySelector(".aplayer-lrc")
52
+ .addEventListener("click", function () {
53
+ const aplayerList = document.querySelector(".aplayer-list");
54
+
55
+ if (aplayerList.classList.contains("aplayer-list-hide")) {
56
+ aplayerList.classList.remove("aplayer-list-hide");
57
+ } else {
58
+ aplayerList.classList.add("aplayer-list-hide");
59
+ }
60
+ });
61
+ },
62
+ addEventListenerChangeMusicBg: function () {
63
+ const aplayer = document.getElementById("Music-page").querySelector("meting-js").aplayer
64
+ aplayer.on('loadeddata', function () {
65
+ scoMusic.changeMusicBg();
66
+ });
67
+ aplayer.on('timeupdate', function () {
68
+ scoMusic.lrcupdate();
69
+ });
70
+ scoMusic.buttonlist();
71
+ },
72
+ getCustomPlayList: function () {
73
+ const MusicPage = document.getElementById("Music-page");
74
+ const playlistType = scoMusic.params.get("type") || "playlist";
75
+
76
+ if (scoMusic.params.get("id") && params.get("server")) {
77
+ var id = scoMusic.params.get("id")
78
+ var server = scoMusic.params.get("server")
79
+ MusicPage.innerHTML = `<meting-js id="${id}" server="${server}" type="${playlistType}" preload="auto" order="random"></meting-js>`;
80
+ } else {
81
+ MusicPage.innerHTML = `<meting-js id="${musicConfig.userId}" server="${musicConfig.userServer}" type="${musicConfig.userType}" preload="auto" order="random"></meting-js>`;
82
+ }
83
+ scoMusic.changeMusicBg(false);
84
+ },
85
+ /**
86
+ * 绑定键盘事件
87
+ * @param event
88
+ */
89
+ setKeydown: function (event) {
90
+ const aplayer = document.querySelector('meting-js').aplayer
91
+ if (event.code === "Space") {
92
+ event.preventDefault();
93
+ aplayer.toggle();
94
+ }
95
+ if (event.keyCode === 39) {
96
+ event.preventDefault();
97
+ aplayer.skipForward();
98
+ }
99
+ if (event.keyCode === 37) {
100
+ event.preventDefault();
101
+ aplayer.skipBack();
102
+ }
103
+ if (event.keyCode === 38) {
104
+ if (musicConfig.volume <= 1) {
105
+ musicConfig.volume += 0.1;
106
+ aplayer.volume(musicConfig.volume, true);
107
+ }
108
+ }
109
+ if (event.keyCode === 40) {
110
+ if (musicConfig.volume >= 0) {
111
+ musicConfig.volume += -0.1;
112
+ aplayer.volume(musicConfig.volume, true);
113
+ }
114
+ }
115
+ },
116
+ init: function () {
117
+ document.documentElement.style.setProperty('--vh', `${vh}px`);
118
+ // 初始化
119
+ this.getCustomPlayList();
120
+
121
+ //热键控制音乐
122
+ document.addEventListener("keydown", scoMusic.setKeydown);
123
+ }
124
+ }
125
+
126
+ window.addEventListener('resize', () => {
127
+ let vh = window.innerHeight * 1;
128
+ document.documentElement.style.setProperty('--vh', `${vh}px`);
129
+ });