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.
- package/CHANGELOG.md +36 -0
- package/README.md +2 -1
- package/_config.yml +69 -46
- package/layout/_meta/counter.ejs +27 -5
- package/layout/_meta/walinecount.ejs +2 -1
- package/layout/_partial/article.ejs +2 -2
- package/layout/_partial/head.ejs +29 -28
- package/layout/_partial/header.ejs +1 -1
- package/layout/_partial/scripts/content-visibility-scroll-fix.ejs +71 -69
- package/layout/_partial/scripts/global.ejs +47 -23
- package/layout/_partial/scripts/index.ejs +22 -9
- package/layout/_partial/scripts/toc.ejs +61 -38
- package/layout/_plugins/_page_plugins/indent/index.ejs +1 -1
- package/layout/_plugins/_page_plugins/index.ejs +27 -7
- package/layout/_plugins/_page_plugins/snackbar/index.ejs +1 -1
- package/layout/_plugins/analytics/script.ejs +11 -1
- package/layout/_plugins/aplayer/script.ejs +1 -1
- package/layout/_plugins/comments/artalk/script.ejs +38 -11
- package/layout/_plugins/comments/beaudar/script.ejs +2 -2
- package/layout/_plugins/comments/discuss/script.ejs +30 -0
- package/layout/_plugins/comments/hashover/script.ejs +2 -2
- package/layout/_plugins/comments/index.ejs +4 -4
- package/layout/_plugins/comments/twikoo/script.ejs +1 -1
- package/layout/_plugins/comments/waline/script.ejs +40 -22
- package/layout/_plugins/parallax/script.ejs +1 -1
- package/layout/_plugins/pjax/index.ejs +4 -1
- package/layout/_plugins/rightmenu/layout.ejs +2 -2
- package/layout/_plugins/rightmenus/layout.ejs +17 -17
- package/layout/_widget/lastupdate.ejs +27 -27
- package/layout/_widget/webinfo.ejs +7 -7
- package/layout/layout.ejs +20 -3
- package/layout/tag.ejs +1 -1
- package/package.json +1 -1
- package/scripts/events/lib/check-configuration.js +43 -0
- package/scripts/events/lib/check-environment.js +20 -1
- package/scripts/events/lib/config.js +3 -0
- package/scripts/events/lib/render-stylus.js +1 -1
- package/scripts/filters/content-visibility.js +2 -2
- package/scripts/helpers/custom-files.js +3 -1
- package/scripts/helpers/head/generate_seo.js +1 -1
- package/scripts/helpers/structured-data/lib/blogposting.js +18 -6
- package/scripts/helpers/structured-data/lib/breadcrumblist.js +25 -1
- package/scripts/helpers/structured-data/lib/index.js +1 -9
- package/scripts/tags/fancybox.js +1 -1
- package/scripts/tags/tabs.js +85 -86
- package/source/css/_defines/AutoPrefixCSS.styl +16 -16
- package/source/css/_first/base_first.styl +6 -0
- package/source/css/_first/navbar_first.styl +1 -1
- package/source/css/_style/_base/base.styl +1 -1
- package/source/css/_style/_layout/toc.styl +2 -2
- package/source/css/_style/_plugins/_dark/dark_async.styl +1 -1
- package/source/css/_style/_plugins/_dark/dark_plugins.styl +8 -4
- package/source/css/_style/_plugins/_rightmenu/reading.styl +2 -2
- package/source/css/_style/_plugins/_rightmenu/rightmenu.styl +1 -1
- package/source/css/_style/_plugins/fontcolor.styl +1 -1
- package/source/css/first.styl +5 -7
- package/source/js/app.js +32 -35
- package/source/js/plugins/aplayer.js +1 -3
- package/source/js/plugins/rightMenu.js +22 -22
- package/source/js/plugins/rightMenus.js +115 -78
- package/source/js/search/hexo.js +3 -0
- 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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
.readText()
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
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
|
-
|
|
140
|
+
isImage: false,
|
|
142
141
|
isArticle: false,
|
|
143
142
|
pathName: '',
|
|
144
|
-
isReadClipboard:
|
|
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)
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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
|
-
|
|
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
|
-
|
|
257
|
-
|
|
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
|
-
//
|
|
289
|
-
if (globalData.isMediaLink &&
|
|
290
|
-
globalData.
|
|
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.
|
|
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
|
-
|
|
480
|
-
|
|
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
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
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
|
|
package/source/js/search/hexo.js
CHANGED
|
@@ -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
|
}
|