hexo-theme-volantis 5.0.0-rc.9 → 5.2.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 (62) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +2 -1
  3. package/_config.yml +69 -46
  4. package/layout/_meta/counter.ejs +27 -5
  5. package/layout/_meta/walinecount.ejs +2 -1
  6. package/layout/_partial/article.ejs +2 -2
  7. package/layout/_partial/head.ejs +29 -28
  8. package/layout/_partial/header.ejs +1 -1
  9. package/layout/_partial/scripts/content-visibility-scroll-fix.ejs +71 -69
  10. package/layout/_partial/scripts/global.ejs +47 -23
  11. package/layout/_partial/scripts/index.ejs +22 -9
  12. package/layout/_partial/scripts/toc.ejs +61 -38
  13. package/layout/_plugins/_page_plugins/indent/index.ejs +1 -1
  14. package/layout/_plugins/_page_plugins/index.ejs +27 -7
  15. package/layout/_plugins/_page_plugins/snackbar/index.ejs +1 -1
  16. package/layout/_plugins/analytics/script.ejs +11 -1
  17. package/layout/_plugins/aplayer/script.ejs +1 -1
  18. package/layout/_plugins/comments/artalk/script.ejs +38 -11
  19. package/layout/_plugins/comments/beaudar/script.ejs +2 -2
  20. package/layout/_plugins/comments/discuss/script.ejs +30 -0
  21. package/layout/_plugins/comments/hashover/script.ejs +2 -2
  22. package/layout/_plugins/comments/index.ejs +4 -4
  23. package/layout/_plugins/comments/twikoo/script.ejs +1 -1
  24. package/layout/_plugins/comments/waline/script.ejs +40 -22
  25. package/layout/_plugins/parallax/script.ejs +1 -1
  26. package/layout/_plugins/pjax/index.ejs +4 -1
  27. package/layout/_plugins/rightmenu/layout.ejs +2 -2
  28. package/layout/_plugins/rightmenus/layout.ejs +17 -17
  29. package/layout/_widget/lastupdate.ejs +27 -27
  30. package/layout/_widget/webinfo.ejs +7 -7
  31. package/layout/layout.ejs +20 -3
  32. package/layout/tag.ejs +1 -1
  33. package/package.json +1 -1
  34. package/scripts/events/lib/check-configuration.js +43 -0
  35. package/scripts/events/lib/check-environment.js +20 -1
  36. package/scripts/events/lib/config.js +3 -0
  37. package/scripts/events/lib/render-stylus.js +1 -1
  38. package/scripts/filters/content-visibility.js +2 -2
  39. package/scripts/helpers/custom-files.js +3 -1
  40. package/scripts/helpers/head/generate_seo.js +1 -1
  41. package/scripts/helpers/structured-data/lib/blogposting.js +18 -6
  42. package/scripts/helpers/structured-data/lib/breadcrumblist.js +25 -1
  43. package/scripts/helpers/structured-data/lib/index.js +1 -9
  44. package/scripts/tags/fancybox.js +1 -1
  45. package/scripts/tags/tabs.js +85 -86
  46. package/source/css/_defines/AutoPrefixCSS.styl +16 -16
  47. package/source/css/_first/base_first.styl +6 -0
  48. package/source/css/_first/navbar_first.styl +1 -1
  49. package/source/css/_style/_base/base.styl +1 -1
  50. package/source/css/_style/_layout/toc.styl +2 -2
  51. package/source/css/_style/_plugins/_dark/dark_async.styl +1 -1
  52. package/source/css/_style/_plugins/_dark/dark_plugins.styl +8 -4
  53. package/source/css/_style/_plugins/_rightmenu/reading.styl +2 -2
  54. package/source/css/_style/_plugins/_rightmenu/rightmenu.styl +1 -1
  55. package/source/css/_style/_plugins/fontcolor.styl +1 -1
  56. package/source/css/first.styl +5 -7
  57. package/source/js/app.js +32 -35
  58. package/source/js/plugins/aplayer.js +1 -3
  59. package/source/js/plugins/rightMenu.js +22 -22
  60. package/source/js/plugins/rightMenus.js +115 -78
  61. package/source/js/search/hexo.js +3 -0
  62. package/layout/_partial/scripts/import.ejs +0 -3
@@ -80,7 +80,7 @@ const RightMenu = (() => {
80
80
  }
81
81
  }
82
82
 
83
- // 菜单位置设定
83
+ // 菜单位置设定
84
84
  fn.popMenu = (event) => {
85
85
  let mouseClientX = event.clientX;
86
86
  let mouseClientY = event.clientY;
@@ -123,18 +123,18 @@ const RightMenu = (() => {
123
123
  });
124
124
  }
125
125
 
126
- // 菜单项设置
126
+ // 菜单项设置
127
127
  fn.setMenuItem = (event) => {
128
128
  let optionFlag = false;
129
129
  const eventTarget = event.target;
130
130
  const selectText = window.getSelection().toString();
131
- DOMController.visible(_openTab, false); // 隐藏新标签页打开
131
+ DOMController.visible(_openTab, false); // 隐藏新标签页打开
132
132
 
133
- // 判断是否是输入框
133
+ // 判断是否是输入框
134
134
  if (eventTarget.tagName.toLowerCase() === 'input' || eventTarget.tagName.toLowerCase() === 'textarea') {
135
135
  const inputStr = eventTarget.value;
136
136
 
137
- // 全选
137
+ // 全选
138
138
  if (inputStr.length > 0) {
139
139
  DOMController.visible(_copySelect);
140
140
  _copySelect.onclick = () => {
@@ -145,7 +145,7 @@ const RightMenu = (() => {
145
145
  DOMController.visible(_copySelect, false);
146
146
  }
147
147
 
148
- // 剪切
148
+ // 剪切
149
149
  if (selectText) {
150
150
  DOMController.visible(_copyCut);
151
151
  _copyCut.onclick = () => {
@@ -161,9 +161,9 @@ const RightMenu = (() => {
161
161
  DOMController.visible(_copyCut, false);
162
162
  }
163
163
 
164
- // 粘贴
164
+ // 粘贴
165
165
  fn.readClipboard().then(text => {
166
- // 如果剪切板存在内容
166
+ // 如果剪切板存在内容
167
167
  if (!!text) {
168
168
  DOMController.visible(_copyPaste);
169
169
  _copyPaste.onclick = () => {
@@ -182,7 +182,7 @@ const RightMenu = (() => {
182
182
  DOMController.visible(_copyCut, false);
183
183
  }
184
184
 
185
- // 新标签打开链接
185
+ // 新标签打开链接
186
186
  const eventHref = eventTarget.href;
187
187
  if (!!eventHref && urlRegx.test(eventHref)) {
188
188
  optionFlag = true;
@@ -198,7 +198,7 @@ const RightMenu = (() => {
198
198
  DOMController.visible(_copyHref, false);
199
199
  }
200
200
 
201
- // 新标签打开图片 & 复制图片链接
201
+ // 新标签打开图片 & 复制图片链接
202
202
  const eventSrc = eventTarget.currentSrc;
203
203
  if (!!eventSrc && urlRegx.test(eventSrc)) {
204
204
  optionFlag = true;
@@ -216,7 +216,7 @@ const RightMenu = (() => {
216
216
  DOMController.visible(_copySrc, false);
217
217
  }
218
218
 
219
- // 复制图片
219
+ // 复制图片
220
220
  if (!!eventSrc && urlRegx.test(eventSrc) && eventSrc.trimEnd().endsWith('.png')) {
221
221
  optionFlag = true;
222
222
  DOMController.visible(_copyImg);
@@ -236,7 +236,7 @@ const RightMenu = (() => {
236
236
  DOMController.visible(_copyImg, false);
237
237
  }
238
238
 
239
- // 复制文本
239
+ // 复制文本
240
240
  if (selectText) {
241
241
  optionFlag = true;
242
242
  DOMController.visible(_copyText);
@@ -254,7 +254,7 @@ const RightMenu = (() => {
254
254
  DOMController.visible(_searchWord, false);
255
255
  }
256
256
 
257
- // 打印
257
+ // 打印
258
258
  const _printArticle = document.querySelector('#post.article') || null;
259
259
  const pathName = window.location.pathname;
260
260
  if (!!_printArticle) {
@@ -314,12 +314,12 @@ const RightMenu = (() => {
314
314
  }
315
315
  }
316
316
 
317
- // 隐藏菜单
317
+ // 隐藏菜单
318
318
  fn.hideMenu = () => {
319
319
  DOMController.visible(_rightMenuWrapper, false);
320
320
  }
321
321
 
322
- // 复制字符串
322
+ // 复制字符串
323
323
  fn.copyString = (str) => {
324
324
  VolantisApp.utilWriteClipText(str)
325
325
  .then(() => {
@@ -335,7 +335,7 @@ const RightMenu = (() => {
335
335
  })
336
336
  }
337
337
 
338
- // 写入文本到剪切板
338
+ // 写入文本到剪切板
339
339
  fn.writeClipText = (str) => {
340
340
  try {
341
341
  return navigator.clipboard
@@ -369,7 +369,7 @@ const RightMenu = (() => {
369
369
  }
370
370
  }
371
371
 
372
- // 写入图片到剪切板
372
+ // 写入图片到剪切板
373
373
  fn.writeClipImg = async function (event, success, error) {
374
374
  const eventSrc = rightMenuConfig.customPicUrl.enable ?
375
375
  event.target.currentSrc.replace(rightMenuConfig.customPicUrl.old, rightMenuConfig.customPicUrl.new) :
@@ -413,14 +413,14 @@ const RightMenu = (() => {
413
413
  }
414
414
  }
415
415
 
416
- // 请求读取剪切板
416
+ // 请求读取剪切板
417
417
  fn.readClipboard = async () => {
418
418
  const result = await navigator.permissions.query({
419
419
  name: 'clipboard-read'
420
420
  });
421
421
  if (result.state === 'granted' || result.state === 'prompt') {
422
- // 修改为 .read() 可以获取剪切板中的文字/图片
423
- // 返回的是 ClipboardItem
422
+ // 修改为 .read() 可以获取剪切板中的文字/图片
423
+ // 返回的是 ClipboardItem
424
424
  return navigator.clipboard
425
425
  .readText()
426
426
  .then(text => text)
@@ -429,7 +429,7 @@ const RightMenu = (() => {
429
429
  return Promise.reject(result);
430
430
  }
431
431
 
432
- // 粘贴文本
432
+ // 粘贴文本
433
433
  fn.insertAtCaret = (elemt, value) => {
434
434
  const startPos = elemt.selectionStart,
435
435
  endPos = elemt.selectionEnd;
@@ -453,7 +453,7 @@ const RightMenu = (() => {
453
453
  }
454
454
  }
455
455
 
456
- // 执行打印页面
456
+ // 执行打印页面
457
457
  fn.printHtml = () => {
458
458
  if (volantis.isReadModel) fn.readingModel();
459
459
  DOMController.setAttribute('details', 'open', 'true');
@@ -1,9 +1,11 @@
1
1
 
2
2
  const RightMenus = {
3
3
  defaultEvent: ['copyText', 'copyLink', 'copyPaste', 'copyAll', 'copyCut', 'copyImg', 'printMode', 'readMode'],
4
- defaultGroup: ['navigation', 'inputBox', 'seletctText', 'elementCheck', 'articlePage'],
4
+ defaultGroup: ['navigation', 'inputBox', 'seletctText', 'elementCheck', 'elementImage', 'articlePage'],
5
5
  messageRightMenu: volantis.GLOBAL_CONFIG.plugins.message.enable && volantis.GLOBAL_CONFIG.plugins.message.rightmenu.enable,
6
+ corsAnywhere: volantis.GLOBAL_CONFIG.plugins.rightmenus.options.corsAnywhere,
6
7
  urlRegx: /^((https|http)?:\/\/)+[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
8
+ imgRegx: /\.(jpe?g|png|webp|svg|gif|jifi)(-|_|!|\?|\/)?.*$/,
7
9
 
8
10
  /**
9
11
  * 加载右键菜单
@@ -21,21 +23,23 @@ const RightMenus = {
21
23
  * @returns text
22
24
  */
23
25
  readClipboard: async () => {
24
- const result = await navigator.permissions.query({
25
- name: 'clipboard-read'
26
- });
27
- if (result.state === 'granted' || result.state === 'prompt') {
28
- return navigator.clipboard
29
- .readText()
30
- .then(text => text)
31
- .catch(err => Promise.reject(err));
26
+ let clipboardText;
27
+ const result = await navigator.permissions.query({ name: 'clipboard-read' });
28
+ switch (result.state) {
29
+ case 'granted':
30
+ case 'prompt':
31
+ clipboardText = await navigator.clipboard.readText()
32
+ break;
33
+ default:
34
+ window.clipboardRead = false;
35
+ break;
32
36
  }
33
- return Promise.reject(result);
37
+ return clipboardText;
34
38
  },
35
39
 
36
40
  /**
37
41
  * 写入文本到剪切板
38
- * @param {String} text
42
+ * @param {String} text
39
43
  */
40
44
  writeClipText: text => {
41
45
  return navigator.clipboard
@@ -50,41 +54,36 @@ const RightMenus = {
50
54
 
51
55
  /**
52
56
  * 写入图片到剪切板
53
- * @param {*} link
54
- * @param {*} success
55
- * @param {*} error
57
+ * @param {*} link
58
+ * @param {*} success
59
+ * @param {*} error
56
60
  */
57
61
  writeClipImg: async (link, success, error) => {
58
- try {
59
- // 如果使用了cdn的自适应Webp,png格式的图片会返回image/webp导致复制失败
60
- // 伪装一个旧版本的Safari浏览器,同时添加time用以避免获取缓存文件
61
- // 请求头里设置no-cache造成了莫名其妙的cors问题
62
- const data = await fetch(`${link}?time=${Date.now()}`, {
63
- mode: 'cors',
64
- headers: {
65
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15"
66
- }
67
- });
68
- const blob = await data.blob();
69
- await navigator.clipboard
70
- .write([
71
- new ClipboardItem({
72
- [blob.type]: blob
73
- })
74
- ]).then(() => {
75
- success(true);
76
- }, (e) => {
77
- error(blob.type !== 'image/png' ? '当前文件类型不正确,不支持复制。' : e);
78
- });
79
- } catch (e) {
80
- error(e)
81
- }
62
+ const image = new Image;
63
+ image.crossOrigin = "Anonymous";
64
+ image.addEventListener('load', () => {
65
+ let canvas = document.createElement("canvas");
66
+ let context = canvas.getContext("2d");
67
+ canvas.width = image.width;
68
+ canvas.height = image.height;
69
+ context.drawImage(image, 0, 0);
70
+ canvas.toBlob(blob => {
71
+ navigator.clipboard.write([
72
+ new ClipboardItem({ 'image/png': blob })
73
+ ]).then(e => {
74
+ success(e)
75
+ }).catch(e => {
76
+ error(e)
77
+ })
78
+ }, 'image/png')
79
+ }, false)
80
+ image.src = `${link}?(lll¬ω¬)`;
82
81
  },
83
82
 
84
83
  /**
85
84
  * 粘贴文本到剪切板
86
- * @param {*} elemt
87
- * @param {*} value
85
+ * @param {*} elemt
86
+ * @param {*} value
88
87
  */
89
88
  insertAtCaret: (elemt, value) => {
90
89
  const startPos = elemt.selectionStart,
@@ -121,12 +120,12 @@ RightMenus.fun = (() => {
121
120
  _rightMenuWrapper = document.getElementById('rightmenu-wrapper'),
122
121
  _rightMenuContent = document.getElementById('rightmenu-content'),
123
122
  _rightMenuList = document.querySelectorAll('#rightmenu-content li.menuLoad-Content'),
123
+ _rightMenuListWithHr = document.querySelectorAll('#rightmenu-content li, #rightmenu-content hr, #menuMusic'),
124
124
  _readBkg = document.getElementById('read_bkg'),
125
125
  _menuMusic = document.getElementById('menuMusic'),
126
126
  _backward = document.querySelector('#menuMusic .backward'),
127
127
  _toggle = document.querySelector('#menuMusic .toggle'),
128
- _forward = document.querySelector('#menuMusic .forward'),
129
- _menuHr = document.querySelectorAll('#rightmenu-content hr');
128
+ _forward = document.querySelector('#menuMusic .forward');
130
129
 
131
130
  // 公共数据
132
131
  let globalData = {
@@ -138,11 +137,10 @@ RightMenus.fun = (() => {
138
137
  linkUrl: '',
139
138
  isMediaLink: false,
140
139
  mediaLinkUrl: '',
141
- isPngImg: false,
140
+ isImage: false,
142
141
  isArticle: false,
143
142
  pathName: '',
144
- isReadClipboard: false,
145
- readClipboard: '',
143
+ isReadClipboard: true,
146
144
  isShowMusic: false,
147
145
  statusCheck: false
148
146
  }
@@ -171,7 +169,7 @@ RightMenus.fun = (() => {
171
169
 
172
170
  /**
173
171
  * 右键菜单位置设定
174
- * @param {*} event
172
+ * @param {*} event
175
173
  */
176
174
  fn.menuPosition = (event) => {
177
175
  try {
@@ -202,7 +200,7 @@ RightMenus.fun = (() => {
202
200
 
203
201
  /**
204
202
  * 菜单项控制
205
- * @param {*} event
203
+ * @param {*} event
206
204
  */
207
205
  fn.menuControl = (event) => {
208
206
  fn.globalDataSet(event);
@@ -215,28 +213,21 @@ RightMenus.fun = (() => {
215
213
  if (globalData.statusCheck || globalData.isArticle) {
216
214
  switch (groupName) {
217
215
  case 'inputBox':
218
- if (globalData.isInputBox) item.style.display = 'block';
219
- if (itemEvent === 'copyCut' && !globalData.selectText) item.style.display = 'none';
220
- // 判断剪切板是否包含文本
221
- // Note: 异步? 导致了此处判断只能写这里(存在些微时间差)
222
- if (itemEvent === 'copyPaste')
223
- RightMenus.readClipboard().then(text => {
224
- if (!!text) {
225
- globalData.isReadClipboard = true;
226
- globalData.readClipboard = text;
227
- } else {
228
- item.style.display = 'none';
229
- }
230
- }).catch(() => {
231
- item.style.display = 'none';
232
- })
216
+ if (globalData.isInputBox) {
217
+ item.style.display = 'block';
218
+ if (itemEvent === 'copyCut' && !globalData.selectText) item.style.display = 'none';
219
+ if (itemEvent === 'copyAll' && !globalData.inputValue) item.style.display = 'none';
220
+ if (itemEvent === 'copyPaste' && !globalData.isReadClipboard) item.style.display = 'none';
221
+ }
233
222
  break;
234
223
  case 'seletctText':
235
224
  if (!!globalData.selectText) item.style.display = 'block';
236
225
  break;
237
226
  case 'elementCheck':
238
227
  if (globalData.isLink || globalData.isMediaLink) item.style.display = 'block';
239
- if (itemEvent === 'copyImg' && !globalData.isPngImg) item.style.display = 'none';
228
+ break;
229
+ case 'elementImage':
230
+ if (globalData.isImage) item.style.display = 'block';
240
231
  break;
241
232
  case 'articlePage':
242
233
  if (globalData.isArticle) item.style.display = 'block';
@@ -253,14 +244,37 @@ RightMenus.fun = (() => {
253
244
  item.style.display = 'block';
254
245
  }
255
246
  })
256
- _menuHr.forEach(item => {
257
- item.style.display = globalData.statusCheck ? 'none' : 'block';
247
+
248
+ // 执行外部事件
249
+ volantis.mouseEvent = event;
250
+ volantis.rightmenu.method.handle.start()
251
+
252
+ // 过滤 HR 元素
253
+ let elementHrItem = { item: null, hide: true };
254
+ _rightMenuListWithHr.forEach((item) => {
255
+ if (item.nodeName === "HR") {
256
+ item.style.display = 'block';
257
+ if (!elementHrItem.item) {
258
+ elementHrItem.item = item;
259
+ return;
260
+ }
261
+ if (elementHrItem.hide || elementHrItem.item.nextElementSibling.nodeName === "hr") {
262
+ elementHrItem.item.style.display = 'none';
263
+ }
264
+ elementHrItem.item = item;
265
+ elementHrItem.hide = true;
266
+ } else {
267
+ if (item.style.display === 'block' && elementHrItem.hide) {
268
+ elementHrItem.hide = false;
269
+ }
270
+ }
258
271
  })
272
+ if (!!elementHrItem.item && elementHrItem.hide) elementHrItem.item.style.display = 'none';
259
273
  }
260
274
 
261
275
  /**
262
276
  * 元素状态判断/全局数据设置
263
- * @param {*} event
277
+ * @param {*} event
264
278
  */
265
279
  fn.globalDataSet = (event) => {
266
280
  globalData = Object.assign({}, globalDataBackup);
@@ -273,6 +287,11 @@ RightMenus.fun = (() => {
273
287
  globalData.inputValue = event.target.value;
274
288
  }
275
289
 
290
+ // 判断是否允许读取剪切板
291
+ if (globalData.isInputBox && window.clipboardRead === false) {
292
+ globalData.isReadClipboard = false;
293
+ }
294
+
276
295
  // 判断是否包含链接
277
296
  if (!!event.target.href && RightMenus.urlRegx.test(event.target.href)) {
278
297
  globalData.isLink = true;
@@ -285,9 +304,9 @@ RightMenus.fun = (() => {
285
304
  globalData.mediaLinkUrl = event.target.currentSrc;
286
305
  }
287
306
 
288
- // 判断是否为 png 格式的图片地址
289
- if (globalData.isMediaLink && globalData.mediaLinkUrl.trimEnd().endsWith('.png')) {
290
- globalData.isPngImg = true;
307
+ // 判断是否为图片地址
308
+ if (globalData.isMediaLink && RightMenus.imgRegx.test(globalData.mediaLinkUrl)) {
309
+ globalData.isImage = true;
291
310
  }
292
311
 
293
312
  // 判断是否为文章页面
@@ -353,6 +372,8 @@ RightMenus.fun = (() => {
353
372
  RightMenusFunction[id](globalData.selectText)
354
373
  } else if (groupName === 'elementCheck') {
355
374
  RightMenusFunction[id](globalData.isLink ? globalData.linkUrl : globalData.mediaLinkUrl)
375
+ } else if (groupName === 'elementImage') {
376
+ RightMenusFunction[id](globalData.mediaLinkUrl)
356
377
  } else {
357
378
  RightMenusFunction[id]()
358
379
  }
@@ -460,8 +481,15 @@ RightMenus.fun = (() => {
460
481
  globalData.mouseEvent.target.select();
461
482
  }
462
483
 
463
- fn.copyPaste = () => {
464
- RightMenus.insertAtCaret(globalData.mouseEvent.target, globalData.readClipboard);
484
+ fn.copyPaste = async () => {
485
+ const result = await RightMenus.readClipboard() || '';
486
+ if (RightMenus.messageRightMenu && window.clipboardRead === false) {
487
+ VolantisApp.message('系统提示', '未授予剪切板读取权限!');
488
+ } else if (RightMenus.messageRightMenu && result === '') {
489
+ VolantisApp.message('系统提示', '仅支持复制文本内容!');
490
+ } else {
491
+ RightMenus.insertAtCaret(globalData.mouseEvent.target, result);
492
+ }
465
493
  }
466
494
 
467
495
  fn.copyCut = () => {
@@ -476,18 +504,27 @@ RightMenus.fun = (() => {
476
504
  }
477
505
 
478
506
  fn.copyImg = () => {
479
- RightMenus.writeClipImg(globalData.mediaLinkUrl, flag => {
480
- if (flag && RightMenus.messageRightMenu)
507
+ if (volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice) {
508
+ VolantisApp.message('系统提示', '复制中,请等待。', {
509
+ icon: rightMenuConfig.options.iconPrefix + ' fa-images'
510
+ })
511
+ }
512
+ RightMenus.writeClipImg(globalData.mediaLinkUrl, e => {
513
+ if (RightMenus.messageRightMenu) {
514
+ VolantisApp.hideMessage();
481
515
  VolantisApp.message('系统提示', '图片复制成功!', {
482
516
  icon: rightMenuConfig.options.iconPrefix + ' fa-images'
483
517
  });
484
- }, (error) => {
485
- console.error(error);
486
- if (RightMenus.messageRightMenu)
487
- VolantisApp.message('系统提示', '复制失败:' + error, {
518
+ }
519
+ }, (e) => {
520
+ console.error(e);
521
+ if (RightMenus.messageRightMenu) {
522
+ VolantisApp.hideMessage();
523
+ VolantisApp.message('系统提示', '复制失败:' + e, {
488
524
  icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',
489
525
  time: 9000
490
526
  });
527
+ }
491
528
  })
492
529
  }
493
530
 
@@ -556,7 +593,7 @@ RightMenus.fun = (() => {
556
593
  } else {
557
594
  document.querySelector('#l_body').removeEventListener('click', fn.readMode);
558
595
  document.querySelector('#post').removeEventListener('click', fn.readMode);
559
- document.querySelector('.prev-next').style.display = 'flex'; // 单独修改
596
+ document.querySelector('.prev-next').style.display = 'flex'; // 单独修改
560
597
  }
561
598
  }
562
599
 
@@ -87,6 +87,9 @@ let SearchService = (() => {
87
87
  if (post.text) {
88
88
  post.text = post.text.replace(/12345\d*/g, "") // 简易移除代码行号
89
89
  }
90
+ if (!post.title&&post.text) {
91
+ post.title = post.text.trim().slice(0,15)
92
+ }
90
93
  if (fn.contentSearch(post)) {
91
94
  html += fn.buildResult(post.permalink, post.title, post.digest);
92
95
  }
@@ -1,3 +0,0 @@
1
- <% (config.import.script||[]).forEach(function(item) { %>
2
- <%- item %>
3
- <% }) %>