hexo-theme-solitude 1.12.0 → 1.12.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 (43) hide show
  1. package/.github/logo.svg +18 -42
  2. package/README.md +4 -15
  3. package/README_en-US.md +6 -16
  4. package/README_zh-Hant.md +12 -22
  5. package/_config.yml +26 -23
  6. package/languages/default.yml +14 -0
  7. package/languages/en.yml +14 -1
  8. package/languages/zh-CN.yml +13 -0
  9. package/languages/zh-TW.yml +13 -0
  10. package/layout/includes/body/mode.pug +3 -3
  11. package/layout/includes/inject/body.pug +2 -0
  12. package/layout/includes/inject/head.pug +2 -1
  13. package/layout/includes/widgets/home/carousel.pug +18 -1
  14. package/layout/includes/widgets/home/postList.pug +4 -3
  15. package/layout/includes/widgets/post/copyright.pug +46 -0
  16. package/layout/includes/widgets/post/postMeta.pug +1 -1
  17. package/layout/includes/widgets/post/postNav.pug +4 -4
  18. package/layout/includes/widgets/third-party/news-comment/twikoo.pug +1 -0
  19. package/layout/includes/widgets/third-party/news-comment/valine.pug +1 -0
  20. package/layout/includes/widgets/third-party/news-comment/waline.pug +1 -0
  21. package/layout/post.pug +0 -22
  22. package/package.json +1 -1
  23. package/plugins.yml +6 -1
  24. package/scripts/filter/post_image.js +13 -0
  25. package/scripts/helper/page.js +6 -2
  26. package/source/css/_highlight/color.styl +69 -131
  27. package/source/css/_highlight/highlight/diff.styl +34 -62
  28. package/source/css/_highlight/prismjs/diff.styl +60 -59
  29. package/source/css/_layout/article-container.styl +1 -5
  30. package/source/css/_page/_home/carousel.styl +2 -0
  31. package/source/css/_page/music.styl +8 -1
  32. package/source/css/_page/other.styl +1 -0
  33. package/source/css/_post/commentBarrage.styl +2 -11
  34. package/source/css/_post/copyright.styl +129 -2
  35. package/source/css/_post/meta.styl +1 -31
  36. package/source/css/_post/pagination.styl +13 -0
  37. package/source/css/_post/postAI.styl +2 -3
  38. package/source/css/_post/relatedPost.styl +115 -129
  39. package/source/css/_post/tools.styl +166 -274
  40. package/source/css/third_party/snackbar.min.css +1 -1
  41. package/source/js/main.js +98 -277
  42. package/source/js/music.js +1 -0
  43. package/source/js/right_menu.js +163 -136
@@ -45,6 +45,7 @@ class ScoMusicPlayer {
45
45
  img.onload = () => {
46
46
  element.style.backgroundImage = musicCover.style.backgroundImage;
47
47
  };
48
+ element.className = 'show'
48
49
  }
49
50
 
50
51
  setLoadingScreen(loadingElement, backgroundElement) {
@@ -1,208 +1,224 @@
1
- var selectTextNow = "";
2
- let selectText = () => selectTextNow = document.selection ? document.selection.createRange().text : window.getSelection() + "" || ""
3
- document.onmouseup = document.ondbclick = selectText
1
+ let selectTextNow = "";
2
+ const selectText = () => {
3
+ selectTextNow = document.selection
4
+ ? document.selection.createRange().text
5
+ : window.getSelection() + "" || "";
6
+ };
7
+ document.onmouseup = document.ondbclick = selectText;
4
8
 
5
9
  const rm = {
6
10
  mask: document.getElementById("rightmenu-mask"),
7
11
  menu: document.getElementById("rightMenu"),
8
- width: document.querySelector("#rightMenu").offsetWidth,
9
- height: document.querySelector("#rightMenu").offsetHeight,
12
+ get width() {
13
+ return this.menu.offsetWidth;
14
+ },
15
+ get height() {
16
+ return this.menu.offsetHeight;
17
+ },
10
18
  domhref: "",
11
19
  domsrc: "",
12
20
  globalEvent: null,
13
21
  menuItems: {
14
- other: document.getElementsByClassName('rightMenuOther'),
15
- plugin: document.getElementsByClassName('rightMenuPlugin'),
16
- back: document.getElementById('menu-backward'),
17
- forward: document.getElementById('menu-forward'),
18
- refresh: document.getElementById('menu-refresh'),
19
- top: document.getElementById('menu-top'),
20
- copy: document.getElementById('menu-copytext'),
21
- paste: document.getElementById('menu-pastetext'),
22
- comment: document.getElementById('menu-commenttext'),
23
- new: document.getElementById('menu-newwindow'),
24
- copyLink: document.getElementById('menu-copylink'),
25
- copyImg: document.getElementById('menu-copyimg'),
26
- downloadImg: document.getElementById('menu-downloadimg'),
27
- search: document.getElementById('menu-search'),
28
- barrage: document.getElementById('menu-commentBarrage'),
29
- mode: document.getElementById('menu-darkmode'),
30
- translate: document.getElementById('menu-translate'),
22
+ other: document.getElementsByClassName("rightMenuOther"),
23
+ plugin: document.getElementsByClassName("rightMenuPlugin"),
24
+ back: document.getElementById("menu-backward"),
25
+ forward: document.getElementById("menu-forward"),
26
+ refresh: document.getElementById("menu-refresh"),
27
+ top: document.getElementById("menu-top"),
28
+ copy: document.getElementById("menu-copytext"),
29
+ paste: document.getElementById("menu-pastetext"),
30
+ comment: document.getElementById("menu-commenttext"),
31
+ new: document.getElementById("menu-newwindow"),
32
+ copyLink: document.getElementById("menu-copylink"),
33
+ copyImg: document.getElementById("menu-copyimg"),
34
+ downloadImg: document.getElementById("menu-downloadimg"),
35
+ search: document.getElementById("menu-search"),
36
+ barrage: document.getElementById("menu-commentBarrage"),
37
+ mode: document.getElementById("menu-darkmode"),
38
+ translate: document.getElementById("menu-translate"),
31
39
  music: [
32
- toggle = document.getElementById('menu-music-toggle'),
33
- back = document.getElementById('menu-music-back'),
34
- forward = document.getElementById('menu-music-forward'),
35
- copyMusicName = document.getElementById('menu-music-copyMusicName'),
36
- ]
37
- },
38
- showRightMenu: (e, x = 0, y = 0) => {
39
- rm.menu.style.top = y + 'px';
40
- rm.menu.style.left = x + 'px';
41
- rm.menu.style.display = e ? 'block' : 'none';
42
- e ? stopMaskScroll() : rm.mask.style.display = 'none';
40
+ document.getElementById("menu-music-toggle"),
41
+ document.getElementById("menu-music-back"),
42
+ document.getElementById("menu-music-forward"),
43
+ document.getElementById("menu-music-copyMusicName"),
44
+ ],
43
45
  },
44
- hideRightMenu: () => {
45
- rm.showRightMenu(false)
46
- rm.mask.style.display = 'none'
46
+ showRightMenu(e, x = 0, y = 0) {
47
+ this.menu.style.top = y + "px";
48
+ this.menu.style.left = x + "px";
49
+ this.menu.style.display = e ? "block" : "none";
50
+ e ? stopMaskScroll() : (this.mask.style.display = "none");
47
51
  },
48
- reLoadSize: () => {
49
- rm.menu.style.display = "block";
50
- rm.width = rm.menu.offsetWidth;
51
- rm.height = rm.menu.offsetHeight;
52
- rm.menu.style.display = 'none';
52
+ hideRightMenu() {
53
+ rm.showRightMenu(false);
54
+ rm.mask.style.display = "none";
53
55
  },
54
- copyText: (e) => {
55
- navigator.clipboard && navigator.clipboard.writeText(e)
56
- utils.snackbarShow(GLOBAL_CONFIG.lang.copy.success, false, 2000)
57
- rm.hideRightMenu()
56
+ reLoadSize() {
57
+ this.menu.style.display = "block";
58
+ this.menu.style.display = "none";
58
59
  },
59
- pasteText: () => rm.readClipboard(),
60
- readClipboard: () => navigator.clipboard && navigator.clipboard.readText().then((e => rm.insertAtCaret(rm.globalEvent.target, e))),
61
- insertAtCaret: (e, n) => {
62
- const t = e.selectionStart
63
- , o = e.selectionEnd;
64
- if (document.selection)
65
- e.focus(),
66
- document.selection.createRange().text = n,
67
- e.focus();
68
- else if (t || "0" === t) {
69
- let i = e.scrollTop;
70
- e.value = e.value.substring(0, t) + n + e.value.substring(o, e.value.length),
71
- e.focus(),
72
- e.selectionStart = t + n.length,
73
- e.selectionEnd = t + n.length,
74
- e.scrollTop = i
75
- } else
76
- e.value += n,
77
- e.focus()
60
+ copyText(e) {
61
+ navigator.clipboard && navigator.clipboard.writeText(e);
62
+ utils.snackbarShow(GLOBAL_CONFIG.lang.copy.success, false, 2000);
63
+ this.hideRightMenu();
78
64
  },
79
- downloadImage: async function (imageUrl = rm.domsrc, filename = 'photo') {
65
+ async downloadImage(imageUrl = this.domsrc, filename = "photo") {
80
66
  try {
81
67
  const response = await fetch(imageUrl);
82
68
  const blob = await response.blob();
83
69
  const url = URL.createObjectURL(blob);
84
- const link = document.createElement('a');
70
+ const link = document.createElement("a");
85
71
  link.href = url;
86
- link.download = filename || 'image.jpg';
87
- link.style.display = 'none';
72
+ link.download = filename || "image.jpg";
73
+ link.style.display = "none";
88
74
  document.body.appendChild(link);
89
75
  link.click();
90
76
  document.body.removeChild(link);
91
77
  URL.revokeObjectURL(url);
92
78
  } catch (error) {
93
- utils.snackbarShow(GLOBAL_CONFIG.right_menu.img_error, false, 2000)
79
+ utils.snackbarShow(GLOBAL_CONFIG.right_menu.img_error, false, 2000);
94
80
  }
95
81
  },
96
- copyImage: function (imgUrl = this.domsrc) {
97
- window.open(imgUrl)
82
+ copyImage(imgUrl = this.domsrc) {
83
+ window.open(imgUrl);
98
84
  },
99
- mode: (darkmode) => (darkmode ? document.querySelector('.menu-darkmode-text').textContent = GLOBAL_CONFIG.right_menu.mode.light : document.querySelector('.menu-darkmode-text').textContent = GLOBAL_CONFIG.right_menu.mode.dark) && rm.hideRightMenu(),
100
- barrage: (enable) => (enable ? document.querySelector(".menu-commentBarrage-text").textContent = GLOBAL_CONFIG.right_menu.barrage.open : document.querySelector(".menu-commentBarrage-text").textContent = GLOBAL_CONFIG.right_menu.barrage.close) && rm.hideRightMenu()
101
- }
85
+ mode(darkmode) {
86
+ darkmode
87
+ ? (document.querySelector(".menu-darkmode-text").textContent =
88
+ GLOBAL_CONFIG.right_menu.mode.light)
89
+ : (document.querySelector(".menu-darkmode-text").textContent =
90
+ GLOBAL_CONFIG.right_menu.mode.dark);
91
+ this.hideRightMenu();
92
+ },
93
+ barrage(enable) {
94
+ enable
95
+ ? (document.querySelector(".menu-commentBarrage-text").textContent =
96
+ GLOBAL_CONFIG.right_menu.barrage.open)
97
+ : (document.querySelector(".menu-commentBarrage-text").textContent =
98
+ GLOBAL_CONFIG.right_menu.barrage.close);
99
+ this.hideRightMenu();
100
+ },
101
+ };
102
102
 
103
103
  function stopMaskScroll() {
104
- utils.addEventListenerPjax(rm.menu, "mousewheel", rm.hideRightMenu)
105
- utils.addEventListenerPjax(rm.mask, "mousewheel", rm.hideRightMenu)
106
- utils.addEventListenerPjax(rm.mask, "click", rm.hideRightMenu)
104
+ utils.addEventListenerPjax(rm.menu, "mousewheel", rm.hideRightMenu);
105
+ utils.addEventListenerPjax(rm.mask, "mousewheel", rm.hideRightMenu);
106
+ utils.addEventListenerPjax(rm.mask, "click", rm.hideRightMenu);
107
107
  }
108
108
 
109
109
  window.oncontextmenu = (ele) => {
110
110
  if (document.body.clientWidth <= 768) return;
111
111
  let x = ele.clientX + 10;
112
112
  let y = ele.clientY;
113
- Array.from(rm.menuItems.other).forEach(item => item.style.display = 'block');
114
- rm.globalEvent = ele
113
+ Array.from(rm.menuItems.other).forEach((item) => (item.style.display = "block"));
114
+ rm.globalEvent = ele;
115
115
 
116
- let display = false
117
- let link = ele.target.href
118
- let src = ele.target.currentSrc
116
+ let display = false;
117
+ let link = ele.target.href;
118
+ let src = ele.target.currentSrc;
119
119
 
120
120
  if (selectTextNow && window.getSelection()) {
121
121
  display = true;
122
- rm.menuItems.copy.style.display = 'block';
123
- GLOBAL_CONFIG.comment && (rm.menuItems.comment.style.display = 'block');
124
- rm.menuItems.search && (rm.menuItems.search.style.display = 'block');
122
+ rm.menuItems.copy.style.display = "block";
123
+ GLOBAL_CONFIG.comment && (rm.menuItems.comment.style.display = "block");
124
+ rm.menuItems.search && (rm.menuItems.search.style.display = "block");
125
125
  } else {
126
- rm.menuItems.copy.style.display = 'none';
127
- GLOBAL_CONFIG.comment && (rm.menuItems.comment.style.display = 'none');
128
- rm.menuItems.search && (rm.menuItems.search.style.display = 'none');
126
+ rm.menuItems.copy.style.display = "none";
127
+ GLOBAL_CONFIG.comment && (rm.menuItems.comment.style.display = "none");
128
+ rm.menuItems.search && (rm.menuItems.search.style.display = "none");
129
129
  }
130
130
 
131
131
  if (link) {
132
132
  display = true;
133
- rm.menuItems.new.style.display = 'block';
134
- rm.menuItems.copyLink.style.display = 'block';
133
+ rm.menuItems.new.style.display = "block";
134
+ rm.menuItems.copyLink.style.display = "block";
135
135
  rm.domhref = link;
136
136
  } else {
137
- rm.menuItems.new.style.display = 'none';
138
- rm.menuItems.copyLink.style.display = 'none';
137
+ rm.menuItems.new.style.display = "none";
138
+ rm.menuItems.copyLink.style.display = "none";
139
139
  }
140
140
 
141
141
  if (src) {
142
- display = true
143
- rm.menuItems.copyImg.style.display = 'block'
144
- rm.menuItems.downloadImg.style.display = 'block'
145
- rm.domsrc = src
142
+ display = true;
143
+ rm.menuItems.copyImg.style.display = "block";
144
+ rm.menuItems.downloadImg.style.display = "block";
145
+ rm.domsrc = src;
146
146
  } else {
147
- rm.menuItems.copyImg.style.display = 'none';
148
- rm.menuItems.downloadImg.style.display = 'none';
147
+ rm.menuItems.copyImg.style.display = "none";
148
+ rm.menuItems.downloadImg.style.display = "none";
149
149
  }
150
150
 
151
151
  let tagName = ele.target.tagName.toLowerCase();
152
- if (tagName === 'input' || tagName === 'textarea') {
152
+ if (tagName === "input" || tagName === "textarea") {
153
153
  display = true;
154
- rm.menuItems.paste.style.display = 'block';
154
+ rm.menuItems.paste.style.display = "block";
155
155
  } else {
156
- rm.menuItems.paste.style.display = 'none';
156
+ rm.menuItems.paste.style.display = "none";
157
157
  }
158
158
 
159
- if (tagName === 'meting-js') {
159
+ if (tagName === "meting-js") {
160
160
  display = true;
161
- rm.menuItems.music.forEach(item => item.style.display = 'block');
161
+ rm.menuItems.music.forEach((item) => (item.style.display = "block"));
162
162
  } else {
163
- rm.menuItems.music[0] && rm.menuItems.music.forEach(item => item.style.display = 'none');
163
+ rm.menuItems.music[0] &&
164
+ rm.menuItems.music.forEach((item) => (item.style.display = "none"));
164
165
  }
165
166
 
166
- Array.from(display ? rm.menuItems.other : rm.menuItems.plugin).forEach(item => item.style.display = 'none');
167
- Array.from(display ? rm.menuItems.plugin : rm.menuItems.other).forEach(item => item.style.display = 'block');
168
- rm.reLoadSize()
167
+ Array.from(display ? rm.menuItems.other : rm.menuItems.plugin).forEach(
168
+ (item) => (item.style.display = "none")
169
+ );
170
+ Array.from(display ? rm.menuItems.plugin : rm.menuItems.other).forEach(
171
+ (item) => (item.style.display = "block")
172
+ );
173
+ rm.reLoadSize();
169
174
  x + rm.width > window.innerWidth && (x -= rm.width + 10);
170
- y + rm.height > window.innerHeight && (y -= y + rm.height - window.innerHeight)
171
- rm.mask.style.display = 'flex';
175
+ y + rm.height > window.innerHeight && (y -= y + rm.height - window.innerHeight);
176
+ rm.mask.style.display = "flex";
172
177
  rm.showRightMenu(true, x, y);
173
178
  return false;
174
- }
179
+ };
175
180
 
176
181
  (function () {
177
- const addEventListener = (element, event, handler) => element.addEventListener(event, handler);
178
-
179
- addEventListener(rm.menuItems.back, 'click', () => window.history.back() || rm.hideRightMenu());
180
- addEventListener(rm.menuItems.forward, 'click', () => window.history.forward() || rm.hideRightMenu());
181
- addEventListener(rm.menuItems.refresh, 'click', () => window.location.reload());
182
- addEventListener(rm.menuItems.top, 'click', () => sco.toTop() || rm.hideRightMenu());
182
+ const addEventListener = (element, event, handler) =>
183
+ element.addEventListener(event, handler);
184
+
185
+ addEventListener(rm.menuItems.back, "click", () =>
186
+ window.history.back() || rm.hideRightMenu()
187
+ );
188
+ addEventListener(rm.menuItems.forward, "click", () =>
189
+ window.history.forward() || rm.hideRightMenu()
190
+ );
191
+ addEventListener(rm.menuItems.refresh, "click", () =>
192
+ window.location.reload()
193
+ );
194
+ addEventListener(rm.menuItems.top, "click", () =>
195
+ sco.toTop() || rm.hideRightMenu()
196
+ );
183
197
 
184
198
  if (GLOBAL_CONFIG.right_menu.music) {
185
- addEventListener(rm.menuItems.music[0], 'click', () => {
199
+ addEventListener(rm.menuItems.music[0], "click", () => {
186
200
  sco.musicToggle();
187
201
  rm.hideRightMenu();
188
202
  });
189
- addEventListener(rm.menuItems.music[1], 'click', () => {
190
- document.querySelector('meting-js').aplayer.skipBack();
203
+ addEventListener(rm.menuItems.music[1], "click", () => {
204
+ document.querySelector("meting-js").aplayer.skipBack();
191
205
  rm.hideRightMenu();
192
206
  });
193
- addEventListener(rm.menuItems.music[2], 'click', () => {
194
- document.querySelector('meting-js').aplayer.skipForward();
207
+ addEventListener(rm.menuItems.music[2], "click", () => {
208
+ document.querySelector("meting-js").aplayer.skipForward();
195
209
  rm.hideRightMenu();
196
210
  });
197
- addEventListener(rm.menuItems.music[3], 'click', () => {
198
- const title = Array.from(document.querySelectorAll('.aplayer-title')).map(e => e.innerText)[0];
211
+ addEventListener(rm.menuItems.music[3], "click", () => {
212
+ const title = Array.from(document.querySelectorAll(".aplayer-title")).map(
213
+ (e) => e.innerText
214
+ )[0];
199
215
  rm.copyText(title);
200
216
  });
201
217
  }
202
218
 
203
- addEventListener(rm.menuItems.copy, 'click', () => {
219
+ addEventListener(rm.menuItems.copy, "click", () => {
204
220
  if (GLOBAL_CONFIG.copyright) {
205
- const {limit, author, link, source, info} = GLOBAL_CONFIG.copyright;
221
+ const { limit, author, link, source, info } = GLOBAL_CONFIG.right_menu;
206
222
  if (selectTextNow.length > limit) {
207
223
  selectTextNow = `${selectTextNow}\n\n${author}\n${link}${window.location.href}\n${source}\n${info}`;
208
224
  }
@@ -211,16 +227,27 @@ window.oncontextmenu = (ele) => {
211
227
  rm.hideRightMenu();
212
228
  });
213
229
 
214
- if (utils.saveToLocal.get('commentBarrageSwitch') !== null) {
215
- rm.menuItems.barrage && rm.barrage(!utils.saveToLocal.get('commentBarrageSwitch'));
230
+ if (utils.saveToLocal.get("commentBarrageSwitch") !== null) {
231
+ rm.menuItems.barrage && rm.barrage(!utils.saveToLocal.get("commentBarrageSwitch"));
216
232
  }
217
233
 
218
- addEventListener(rm.menuItems.paste, 'click', () => rm.pasteText() && rm.hideRightMenu());
219
- GLOBAL_CONFIG.comment && addEventListener(rm.menuItems.comment, 'click', () => rm.hideRightMenu() || sco.toTalk(selectTextNow));
220
- addEventListener(rm.menuItems.new, 'click', () => window.open(rm.domhref) && rm.hideRightMenu());
221
- addEventListener(rm.menuItems.downloadImg, 'click', () => rm.downloadImage() && rm.hideRightMenu());
222
- addEventListener(rm.menuItems.copyImg, 'click', () => rm.copyImage() && rm.hideRightMenu());
223
- addEventListener(rm.menuItems.copyLink, 'click', () => rm.copyText(rm.domhref) && rm.hideRightMenu());
224
- })();
225
-
226
- is_rm = true
234
+ addEventListener(rm.menuItems.paste, "click", () =>
235
+ rm.pasteText() && rm.hideRightMenu()
236
+ );
237
+ GLOBAL_CONFIG.comment &&
238
+ addEventListener(rm.menuItems.comment, "click", () =>
239
+ rm.hideRightMenu() || sco.toTalk(selectTextNow)
240
+ );
241
+ addEventListener(rm.menuItems.new, "click", () =>
242
+ window.open(rm.domhref) && rm.hideRightMenu()
243
+ );
244
+ addEventListener(rm.menuItems.downloadImg, "click", () =>
245
+ rm.downloadImage() && rm.hideRightMenu()
246
+ );
247
+ addEventListener(rm.menuItems.copyImg, "click", () =>
248
+ rm.copyImage() && rm.hideRightMenu()
249
+ );
250
+ addEventListener(rm.menuItems.copyLink, "click", () =>
251
+ rm.copyText(rm.domhref) && rm.hideRightMenu()
252
+ );
253
+ })();