This commit is contained in:
Gabe Yuan
2023-09-08 21:41:32 +08:00
parent 1ff1b21355
commit 441a2ca2da
7 changed files with 158 additions and 36 deletions

View File

@@ -1,4 +1,11 @@
import { isMatch } from "./utils";
import { getWebfix, setWebfix } from "./storage";
import { apiFetch } from "../apis";
/**
* 修复程序类型
*/
const WEBFIX_BR = "br";
/**
* 需要修复的站点列表
@@ -7,18 +14,18 @@ import { isMatch } from "./utils";
* - rootSlector 需要监听的选择器,可留空
* - fixer 修复函数,可针对不同网址,选用不同修复函数
*/
export const sites = [
const DEFAULT_SITES = [
{
pattern: "www.phoronix.com",
selector: ".content",
rootSlector: "",
fixer: brFixer,
fixer: WEBFIX_BR,
},
{
pattern: "t.me/s/*",
selector: ".tgme_widget_message_text",
rootSlector: ".tgme_channel_history",
fixer: brFixer,
fixer: WEBFIX_BR,
},
];
@@ -80,6 +87,13 @@ function brFixer(node) {
node.innerHTML = html;
}
/**
* 修复程序映射
*/
const fixerMap = {
[WEBFIX_BR]: brFixer,
};
/**
* 查找、监听节点,并执行修复函数
* @param {*} selector
@@ -108,19 +122,51 @@ function run(selector, fixer, rootSlector) {
});
}
/**
* 同步远程数据
* @param {*} url
* @returns
*/
export const syncWebfix = async (url) => {
const sites = await apiFetch(url);
await setWebfix(url, sites);
return sites;
};
/**
* 从缓存或远程加载修复站点
* @param {*} url
* @returns
*/
export const loadOrFetchWebfix = async (url) => {
try {
let sites = await getWebfix(url);
if (sites?.length) {
return sites;
}
return syncWebfix(url);
} catch (err) {
console.log("[load webfix]", err.message);
return DEFAULT_SITES;
}
};
/**
* 匹配站点
*/
export function webfix(href, { injectWebfix }) {
export async function webfix(href, { injectWebfix }) {
try {
if (!injectWebfix) {
return;
}
const sites = await loadOrFetchWebfix(process.env.REACT_APP_WEBFIXURL);
for (var i = 0; i < sites.length; i++) {
var site = sites[i];
if (isMatch(href, site.pattern)) {
run(site.selector, site.fixer, site.rootSlector);
if (fixerMap[site.fixer]) {
run(site.selector, fixerMap[site.fixer], site.rootSlector);
}
break;
}
}