Skip to content

Commit 5d857dc

Browse files
committed
修复 无法使用的问题;优化 脚本菜单相关代码
1 parent 7211d40 commit 5d857dc

1 file changed

Lines changed: 62 additions & 56 deletions

File tree

Hostloc-Enhanced.user.js

Lines changed: 62 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// ==UserScript==
22
// @name 全球主机交流论坛增强
3-
// @version 1.0.5
3+
// @version 1.0.6
44
// @author X.I.U
5-
// @description 自动无缝翻页、自动显示帖子内被隐藏的回复
6-
// @match *://www.hostloc.com/*
5+
// @description 自动无缝翻页、自动显示帖子内隐藏回复
6+
// @match *://hostloc.com/*
77
// @icon https://www.hostloc.com/favicon.ico
88
// @grant GM_xmlhttpRequest
99
// @grant GM_registerMenuCommand
@@ -18,35 +18,32 @@
1818
// ==/UserScript==
1919

2020
(function() {
21-
var menu_thread_pageLoading = GM_getValue('xiu2_menu_thread_pageLoading'),
22-
menu_showhide = GM_getValue('xiu2_menu_showhide');
23-
var menu_thread_pageLoading_ID, menu_showhide_ID, menu_feedBack_ID;
24-
if (menu_thread_pageLoading == null){menu_thread_pageLoading = true; GM_setValue('xiu2_menu_thread_pageLoading', menu_thread_pageLoading)};
25-
if (menu_showhide == null){menu_showhide = true; GM_setValue('xiu2_menu_showhide', menu_showhide)};
21+
var menu_ALL = [
22+
['menu_thread_pageLoading', '帖子内自动翻页', '帖子内自动翻页', true],
23+
['menu_showhide', '自动显示隐藏回复', '自动显示隐藏回复', true]
24+
], menu_ID = [];
25+
for (let i=0;i<menu_ALL.length;i++){ // 如果读取到的值为 null 就写入默认值
26+
if (GM_getValue(menu_ALL[i][0]) == null){GM_setValue(menu_ALL[i][0], menu_ALL[i][3])};
27+
}
2628
registerMenuCommand();
2729

2830
// 注册脚本菜单
2931
function registerMenuCommand() {
30-
let menu_thread_pageLoading_, menu_showhide_;
31-
if (menu_feedBack_ID){ // 如果反馈菜单ID不是 null,则删除所有脚本菜单
32-
GM_unregisterMenuCommand(menu_thread_pageLoading_ID);
33-
GM_unregisterMenuCommand(menu_showhide_ID);
34-
GM_unregisterMenuCommand(menu_feedBack_ID);
35-
menu_thread_pageLoading = GM_getValue('xiu2_menu_thread_pageLoading');
36-
menu_showhide = GM_getValue('xiu2_menu_showhide');
32+
if (menu_ID.length > menu_ALL.length){ // 如果菜单ID数组多于菜单数组,说明不是首次添加菜单,需要卸载所有脚本菜单
33+
for (let i=0;i<menu_ID.length;i++){
34+
GM_unregisterMenuCommand(menu_ID[i]);
35+
}
3736
}
38-
39-
if (menu_thread_pageLoading){menu_thread_pageLoading_ = "√";}else{menu_thread_pageLoading_ = "×";}
40-
if (menu_showhide){menu_showhide_ = "√";}else{menu_showhide_ = "×";}
41-
42-
menu_thread_pageLoading_ID = GM_registerMenuCommand(`[ ${menu_thread_pageLoading_} ] 帖子内自动翻页`, function(){menu_switch(menu_thread_pageLoading,'xiu2_menu_thread_pageLoading','帖子内自动翻页')});
43-
menu_showhide_ID = GM_registerMenuCommand(`[ ${menu_showhide_} ] 自动显示隐藏回复`, function(){menu_switch(menu_showhide,'xiu2_menu_showhide','自动显示隐藏回复')});
44-
menu_feedBack_ID = GM_registerMenuCommand('反馈 & 建议', function () {window.GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true});});
37+
for (let i=0;i<menu_ALL.length;i++){ // 循环注册脚本菜单
38+
menu_ALL[i][3] = GM_getValue(menu_ALL[i][0]);
39+
menu_ID[i] = GM_registerMenuCommand(`[ ${menu_ALL[i][3]?'√':'×'} ] ${menu_ALL[i][1]}`, function(){menu_switch(`${menu_ALL[i][3]}`,`${menu_ALL[i][0]}`,`${menu_ALL[i][2]}`)});
40+
}
41+
menu_ID[menu_ID.length] = GM_registerMenuCommand('反馈 & 建议', function () {window.GM_openInTab('https://github.com/XIU2/UserScript#xiu2userscript', {active: true,insert: true,setParent: true});});
4542
}
4643

4744
// 菜单开关
4845
function menu_switch(menu_status, Name, Tips) {
49-
if (menu_status){
46+
if (menu_status == 'true'){
5047
GM_setValue(`${Name}`, false);
5148
GM_notification({text: `已关闭 [${Tips}] 功能\n(刷新网页后生效)`, timeout: 3500});
5249
}else{
@@ -56,6 +53,15 @@
5653
registerMenuCommand(); // 重新注册脚本菜单
5754
};
5855

56+
// 返回菜单值
57+
function menu_value(menuName) {
58+
for (let menu of menu_ALL) {
59+
if (menu[0] == menuName) {
60+
return menu[3]
61+
}
62+
}
63+
}
64+
5965
// 默认 ID 为 0
6066
var curSite = {SiteTypeID: 0};
6167

@@ -111,7 +117,7 @@
111117
// URL 判断
112118
if (patt_thread.test(location.pathname) || patt_thread_2.test(location.search)){
113119
// 帖子内
114-
if(menu_thread_pageLoading)curSite = DBSite.thread;
120+
if(menu_value('menu_thread_pageLoading'))curSite = DBSite.thread;
115121
// 自动显示帖子内被隐藏的回复
116122
showPosts();
117123
}else if (patt_forum.test(location.pathname) || patt_forum_2.test(location.search)){
@@ -154,7 +160,7 @@
154160

155161
// 自动显示帖子内被隐藏的回复
156162
function showPosts() {
157-
if(menu_showhide){
163+
if(menu_value('menu_showhide')){
158164
let showposts = document.querySelector('#hiddenpoststip a');
159165
if (showposts){ // 如果存在
160166
showposts.click();
@@ -266,42 +272,42 @@
266272

267273

268274
function getElementByXpath(e, t, r) {
269-
r = r || document, t = t || r;
270-
try {
271-
return r.evaluate(e, t, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
272-
} catch (t) {
273-
return void console.error("无效的xpath");
274-
}
275+
r = r || document, t = t || r;
276+
try {
277+
return r.evaluate(e, t, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
278+
} catch (t) {
279+
return void console.error("无效的xpath");
280+
}
275281
}
276282

277283

278284
function getAllElements(e, t, r, n, o) {
279-
let getAllElementsByXpath = function(e, t, r) {
280-
return r = r || document, t = t || r, r.evaluate(e, t, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
281-
}
282-
283-
var i, s = [];
284-
if (!e) return s;
285-
if (r = r || document, n = n || window, o = o || void 0, t = t || r, "string" == typeof e) i = 0 === e.search(/^css;/i) ? function getAllElementsByCSS(e, t) {
286-
return (t || document).querySelectorAll(e);
287-
}(e.slice(4), t) : getAllElementsByXpath(e, t, r); else {
288-
if (!(i = e(r, n, o))) return s;
289-
if (i.nodeType) return s[0] = i, s;
290-
}
291-
return function makeArray(e) {
292-
var t, r, n, o = [];
293-
if (e.pop) {
294-
for (t = 0, r = e.length; t < r; t++) (n = e[t]) && (n.nodeType ? o.push(n) : o = o.concat(makeArray(n)));
295-
return a()(o);
296-
}
297-
if (e.item) {
298-
for (t = e.length; t;) o[--t] = e[t];
299-
return o;
285+
let getAllElementsByXpath = function(e, t, r) {
286+
return r = r || document, t = t || r, r.evaluate(e, t, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
300287
}
301-
if (e.iterateNext) {
302-
for (t = e.snapshotLength; t;) o[--t] = e.snapshotItem(t);
303-
return o;
288+
289+
var i, s = [];
290+
if (!e) return s;
291+
if (r = r || document, n = n || window, o = o || void 0, t = t || r, "string" == typeof e) i = 0 === e.search(/^css;/i) ? function getAllElementsByCSS(e, t) {
292+
return (t || document).querySelectorAll(e);
293+
}(e.slice(4), t) : getAllElementsByXpath(e, t, r); else {
294+
if (!(i = e(r, n, o))) return s;
295+
if (i.nodeType) return s[0] = i, s;
304296
}
305-
}(i);
297+
return function makeArray(e) {
298+
var t, r, n, o = [];
299+
if (e.pop) {
300+
for (t = 0, r = e.length; t < r; t++) (n = e[t]) && (n.nodeType ? o.push(n) : o = o.concat(makeArray(n)));
301+
return a()(o);
302+
}
303+
if (e.item) {
304+
for (t = e.length; t;) o[--t] = e[t];
305+
return o;
306+
}
307+
if (e.iterateNext) {
308+
for (t = e.snapshotLength; t;) o[--t] = e.snapshotItem(t);
309+
return o;
310+
}
311+
}(i);
306312
}
307313
})();

0 commit comments

Comments
 (0)