fix: run webfix before translate
This commit is contained in:
@@ -20,7 +20,7 @@ import { touchTapListener } from "./libs/touch";
|
|||||||
import { debounce, genEventName } from "./libs/utils";
|
import { debounce, genEventName } from "./libs/utils";
|
||||||
import { handlePing, injectScript } from "./libs/gm";
|
import { handlePing, injectScript } from "./libs/gm";
|
||||||
import { browser } from "./libs/browser";
|
import { browser } from "./libs/browser";
|
||||||
import { runWebfix } from "./libs/webfix";
|
import { matchFixer } from "./libs/webfix";
|
||||||
import { matchRule } from "./libs/rules";
|
import { matchRule } from "./libs/rules";
|
||||||
import { trySyncAllSubRules } from "./libs/subRules";
|
import { trySyncAllSubRules } from "./libs/subRules";
|
||||||
import { isInBlacklist } from "./libs/blacklist";
|
import { isInBlacklist } from "./libs/blacklist";
|
||||||
@@ -252,11 +252,11 @@ export async function run(isUserscript = false) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 不规范网页修复
|
// 不规范网页修复
|
||||||
await runWebfix(setting);
|
const fixerSetting = await matchFixer(href, setting);
|
||||||
|
|
||||||
// 翻译网页
|
// 翻译网页
|
||||||
const rule = await matchRule(href, setting);
|
const rule = await matchRule(href, setting);
|
||||||
const translator = new Translator(rule, setting);
|
const translator = new Translator(rule, setting, fixerSetting);
|
||||||
|
|
||||||
// 监听消息
|
// 监听消息
|
||||||
windowListener(rule);
|
windowListener(rule);
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
import Content from "../views/Content";
|
import Content from "../views/Content";
|
||||||
import { updateFetchPool, clearFetchPool } from "./fetch";
|
import { updateFetchPool, clearFetchPool } from "./fetch";
|
||||||
import { debounce, genEventName } from "./utils";
|
import { debounce, genEventName } from "./utils";
|
||||||
|
import { runFixer } from "./webfix";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 翻译类
|
* 翻译类
|
||||||
@@ -20,6 +21,7 @@ import { debounce, genEventName } from "./utils";
|
|||||||
export class Translator {
|
export class Translator {
|
||||||
_rule = {};
|
_rule = {};
|
||||||
_setting = {};
|
_setting = {};
|
||||||
|
_fixerSetting = null;
|
||||||
_rootNodes = new Set();
|
_rootNodes = new Set();
|
||||||
_tranNodes = new Map();
|
_tranNodes = new Map();
|
||||||
_skipNodeNames = [
|
_skipNodeNames = [
|
||||||
@@ -91,13 +93,14 @@ export class Translator {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(rule, setting) {
|
constructor(rule, setting, fixerSetting) {
|
||||||
const { fetchInterval, fetchLimit } = setting;
|
const { fetchInterval, fetchLimit } = setting;
|
||||||
updateFetchPool(fetchInterval, fetchLimit);
|
updateFetchPool(fetchInterval, fetchLimit);
|
||||||
this._overrideAttachShadow();
|
this._overrideAttachShadow();
|
||||||
|
|
||||||
this._setting = setting;
|
this._setting = setting;
|
||||||
this._rule = rule;
|
this._rule = rule;
|
||||||
|
this._fixerSetting = fixerSetting;
|
||||||
|
|
||||||
if (rule.transOpen === "true") {
|
if (rule.transOpen === "true") {
|
||||||
this._register();
|
this._register();
|
||||||
@@ -235,6 +238,11 @@ export class Translator {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// webfix
|
||||||
|
if (this._fixerSetting) {
|
||||||
|
runFixer(this._fixerSetting);
|
||||||
|
}
|
||||||
|
|
||||||
// 搜索节点
|
// 搜索节点
|
||||||
this._queryNodes();
|
this._queryNodes();
|
||||||
|
|
||||||
|
|||||||
@@ -218,28 +218,38 @@ export const loadOrFetchWebfix = async (url) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 匹配站点
|
* 执行fixer
|
||||||
|
* @param {*} param0
|
||||||
*/
|
*/
|
||||||
export async function runWebfix({ injectWebfix }) {
|
export async function runFixer({ selector, fixer, rootSelector }) {
|
||||||
try {
|
try {
|
||||||
if (!injectWebfix) {
|
run(selector, fixerMap[fixer], rootSelector);
|
||||||
return;
|
} catch (err) {
|
||||||
}
|
console.error(`[kiss-webfix run]: ${err.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const href = document.location.href;
|
/**
|
||||||
|
* 匹配fixer配置
|
||||||
|
*/
|
||||||
|
export async function matchFixer(href, { injectWebfix }) {
|
||||||
|
if (!injectWebfix) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
const userSites = await getWebfixRulesWithDefault();
|
const userSites = await getWebfixRulesWithDefault();
|
||||||
const subSites = await loadOrFetchWebfix(process.env.REACT_APP_WEBFIXURL);
|
const subSites = await loadOrFetchWebfix(process.env.REACT_APP_WEBFIXURL);
|
||||||
const sites = [...userSites, ...subSites];
|
const sites = [...userSites, ...subSites];
|
||||||
for (var i = 0; i < sites.length; i++) {
|
for (var i = 0; i < sites.length; i++) {
|
||||||
var site = sites[i];
|
var site = sites[i];
|
||||||
if (isMatch(href, site.pattern)) {
|
if (isMatch(href, site.pattern) && fixerMap[site.fixer]) {
|
||||||
if (fixerMap[site.fixer]) {
|
return site;
|
||||||
run(site.selector, fixerMap[site.fixer], site.rootSelector);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(`[kiss-webfix]: ${err.message}`);
|
console.error(`[kiss-webfix match]: ${err.message}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user