Skip to content

Commit 213c3e0

Browse files
committed
chore. Mkian/ 改为按正则匹配
1 parent 691957a commit 213c3e0

File tree

3 files changed

+126
-128
lines changed

3 files changed

+126
-128
lines changed

packages/Mikan_Proj/src/_config.js

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,32 @@ import { _log } from "./_base";
22

33
const _config = {
44
data: {},
5-
dataOpt: {
6-
size: ["720", "1080"],
7-
subtitle: ["tc", "sc"],
5+
dataDef: {
6+
pickRules: [
7+
{
8+
name: "Kirara Fantasia",
9+
regex: "Baha\\s",
10+
},
11+
{
12+
name: "漫猫字幕组&爱恋字幕组",
13+
regex: "1080p.+简中",
14+
},
15+
{
16+
name: "华盟字幕社&千夏字幕组",
17+
regex: "简体",
18+
},
19+
{
20+
name: "北宇治字幕组",
21+
regex: "简日内嵌",
22+
}
23+
]
824
},
925
optToggle: (opt, ret = false) => {
10-
const dataOpt = _config.dataOpt;
11-
const oldVal = _config.data[opt];
12-
const newVal = oldVal === dataOpt[opt][0] ? dataOpt[opt][1] : dataOpt[opt][0];
13-
if (ret) {
14-
return newVal;
15-
}
16-
_config.data[opt] = newVal;
17-
GM_setValue("config", _config.data);
1826
},
1927
menuCommand: () => {
20-
const _this = _config;
21-
for (const key in _this.data) {
22-
if (Object.hasOwnProperty.call(_this.data, key)) {
23-
const newValue = _this.optToggle(key, true);
24-
_log("_config.menuCommand()\n",`${key} ${newValue}`);
25-
GM_registerMenuCommand(`切换至 ${newValue}`,
26-
() => {
27-
_this.optToggle(key);
28-
// 刷新页面
29-
window.location.reload();
30-
},
31-
);
32-
}
33-
}
3428
},
3529
load: () => {
36-
_config.data = GM_getValue("config", {
37-
size: "1080",
38-
subtitle: "sc",
39-
});
30+
_config.data = GM_getValue("config", _config.dataDef);
4031
_config.menuCommand();
4132
},
4233
};

packages/Mikan_Proj/src/_pick.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
import {
2+
_log
3+
} from "./_base";
4+
5+
import config from "./_config";
6+
7+
// 添加批量复制磁力链接功能
8+
function fnAddBatchCopy($th, magnetList) {
9+
const $btn = document.createElement("button");
10+
$btn.innerText = "批量复制";
11+
$btn.addEventListener("click", () => {
12+
const magnetStr = magnetList.join("\n");
13+
GM_setClipboard(magnetStr);
14+
$btn.innerText = "复制成功";
15+
_log(`已复制 ${magnetStr}`);
16+
}, false);
17+
// appendChild 2 elements
18+
$th.appendChild($btn);
19+
}
20+
21+
// 过滤磁力链接中的 tr
22+
function fnRemoveTracker(magnet) {
23+
const regex = /&tr=.+?(?=&|$)/g;
24+
return magnet.replace(regex, "");
25+
}
26+
27+
// 通过正则表达式筛选文本
28+
function fnPickByRegex(text, regex = null) {
29+
// 如果没有正则表达式,直接返回 true
30+
if (!regex) {
31+
return true;
32+
}
33+
const oRegex = new RegExp(regex, "i");
34+
// _log("fnPickByRegex() oRegex\n", oRegex);
35+
return oRegex.test(text);
36+
}
37+
38+
39+
export default function(name, $table) {
40+
const pickRules = config.data.pickRules;
41+
// 数组中查找 name 对应的规则
42+
const curRule = pickRules.find((rule) => {
43+
return name == rule.name;
44+
});
45+
// _log("_pick() curRule: ", curRule);
46+
// _log("_pick() name: ", name);
47+
// _log("_pick() -----\n","-----");
48+
const $listTr = $table.querySelectorAll("tr");
49+
// _log($listTr.length);
50+
let $curTh = null;
51+
// let $lstTh = null;
52+
let magnetList = [];
53+
$listTr.forEach(($tr, i) => {
54+
if ($tr.innerText.includes("番组名")) {
55+
$curTh = $tr.querySelector("th");
56+
// $lstTh = $curTh;
57+
// _log("fnMain() $curTh\n", $curTh);
58+
fnAddBatchCopy($curTh, magnetList);
59+
magnetList = [];
60+
// return;
61+
}
62+
const $curA = $tr.querySelector(".magnet-link-wrap");
63+
const $curB = $tr.querySelector(".js-magnet");
64+
if (!$curA) {
65+
return;
66+
}
67+
const curText = $curA.innerText.toLowerCase();
68+
// data-clipboard-text
69+
let magnet = $curB.getAttribute("data-clipboard-text");
70+
magnet = fnRemoveTracker(magnet);
71+
if (fnPickByRegex(curText, curRule?.regex)) {
72+
magnetList.push(magnet);
73+
} else {
74+
$tr.remove();
75+
}
76+
});
77+
}

packages/Mikan_Proj/src/main.js

Lines changed: 29 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,11 @@
1-
import { _log, $n, $na, fnElChange } from "./_base";
2-
import _config from "./_config";
1+
import {
2+
_log,
3+
$n,
4+
$na,
5+
fnElChange,
6+
} from "./_base";
37

4-
// 选项为 sc 时,则排除匹配 tc 字段的节点文本
5-
const _filter_map = {
6-
"tc": ["big5", "cht", "繁日双语", "繁体内嵌", "繁体"],
7-
"sc": ["gb", "chs", "简日双语", "简体内嵌", "简体"],
8-
"720": ["720"],
9-
"1080": ["1080"],
10-
};
11-
12-
const fnGenFilter = (opt) => {
13-
const filter = {};
14-
const string = JSON.stringify(opt);
15-
if (string.includes("720")) {
16-
filter["size"] = _filter_map["1080"];
17-
}
18-
if (string.includes("1080")) {
19-
filter["size"] = _filter_map["720"];
20-
}
21-
if (string.includes("tc")) {
22-
filter["subtitle"] = _filter_map["sc"];
23-
}
24-
if (string.includes("sc")) {
25-
filter["subtitle"] = _filter_map["tc"];
26-
}
27-
// 其他过滤条件
28-
filter["other"] = ["cr 1920", "b-global"];
29-
return filter;
30-
};
31-
32-
const _filter = fnGenFilter(_config.data);
33-
_log("_filter\n", _filter);
34-
35-
// 过滤含有指定字符的节点
36-
function fnFilter(text, filter) {
37-
let bolBlock = false;
38-
for (const key in filter) {
39-
if (Object.hasOwnProperty.call(filter, key)) {
40-
const element = filter[key];
41-
for (let i = 0; i < element.length; i++) {
42-
// _log(element[i], text, text.includes(element[i]));
43-
if (text.includes(element[i])) {
44-
bolBlock = true;
45-
break;
46-
}
47-
}
48-
}
49-
}
50-
return bolBlock;
51-
}
8+
import _pick from "./_pick";
529

5310
// 遍历 nodeList
5411
function fnEachNodeList(nodeList, fn) {
@@ -58,59 +15,30 @@ function fnEachNodeList(nodeList, fn) {
5815
}
5916
}
6017

61-
// 添加批量复制磁力链接功能
62-
function fnAddBatchCopy($th, magnetList) {
63-
const $btn = document.createElement("button");
64-
$btn.innerText = "批量复制";
65-
$btn.addEventListener("click", () => {
66-
const magnetStr = magnetList.join("\n");
67-
GM_setClipboard(magnetStr);
68-
$btn.innerText = "复制成功";
69-
_log(`已复制 ${magnetStr}`);
70-
}, false);
71-
// appendChild 2 elements
72-
$th.appendChild($btn);
73-
}
74-
75-
// 过滤磁力链接中的 tr
76-
function fnRemoveTracker(magnet) {
77-
const regex = /&tr=.+?(?=&|$)/g;
78-
return magnet.replace(regex, "");
18+
// 按发布组获取信息
19+
function fnGetGroupInfo() {
20+
const arrGroup = [];
21+
// 获取全部 div.subgroup-text
22+
const $listGroup = $na(".subgroup-text");
23+
fnEachNodeList($listGroup, ($group, i) => {
24+
const $groupTitle = $group.querySelector("div.dropdown-toggle span") || $group.querySelector("a");
25+
const groupName = $groupTitle.innerText;
26+
const $groupTable = $group.nextElementSibling;
27+
arrGroup.push({
28+
name: groupName,
29+
$table: $groupTable,
30+
});
31+
});
32+
return arrGroup;
7933
}
8034

81-
8235
// main
8336
function fnMain() {
84-
const $listTr = $na("table tr");
85-
_log($listTr.length);
86-
let $curTh = null;
87-
// let $lstTh = null;
88-
let magnetList = [];
89-
fnEachNodeList($listTr, ($tr, i) => {
90-
if ($tr.innerText.includes("番组名")) {
91-
$curTh = $tr.querySelector("th");
92-
// $lstTh = $curTh;
93-
_log("fnMain() $curTh\n",$curTh);
94-
fnAddBatchCopy($curTh, magnetList);
95-
magnetList = [];
96-
// return;
97-
}
98-
const $curA = $tr.querySelector(".magnet-link-wrap");
99-
const $curB = $tr.querySelector(".js-magnet");
100-
if (!$curA) {
101-
return;
102-
}
103-
const curText = $curA.innerText.toLowerCase();
104-
// data-clipboard-text
105-
let magnet = $curB.getAttribute("data-clipboard-text");
106-
magnet = fnRemoveTracker(magnet);
107-
if (fnFilter(curText, _filter)) {
108-
// _log(`${curText} ${magnet}`);
109-
$tr.remove();
110-
} else {
111-
magnetList.push(magnet);
112-
}
113-
// _log(`${i} ${curText}`);
37+
const arrGroup = fnGetGroupInfo();
38+
// _log("arrGroup", arrGroup);
39+
arrGroup.forEach((group) => {
40+
_pick(group.name, group.$table);
41+
// _log("group", group);
11442
});
11543
}
11644

@@ -124,8 +52,10 @@ function fnAutoExpand() {
12452
fnMain();
12553
}, 3000);
12654
}
55+
12756
fnAutoExpand();
12857

58+
12959
// fnElChange($n(".central-container"),
13060
// () => {
13161
// fnMain();

0 commit comments

Comments
 (0)