Files
kiss-translator/src/libs/index.js

79 lines
1.5 KiB
JavaScript
Raw Normal View History

2023-07-20 13:45:41 +08:00
import storage from "./storage";
import {
DEFAULT_SETTING,
STOKEY_SETTING,
STOKEY_RULES,
2023-08-08 13:29:15 +08:00
GLOBLA_RULE,
GLOBAL_KEY,
2023-07-20 13:45:41 +08:00
} from "../config";
2023-08-04 16:48:40 +08:00
import { browser } from "./browser";
2023-07-20 13:45:41 +08:00
/**
* 获取节点列表并转为数组
* @param {*} selector
* @param {*} el
* @returns
*/
export const queryEls = (selector, el = document) =>
Array.from(el.querySelectorAll(selector));
/**
* 查询storage中的设置
* @returns
*/
export const getSetting = async () => ({
...DEFAULT_SETTING,
...((await storage.getObj(STOKEY_SETTING)) || {}),
});
/**
* 查询规则列表
* @returns
*/
export const getRules = async () => (await storage.getObj(STOKEY_RULES)) || [];
/**
* 根据href匹配规则
* TODO: 支持通配符*匹配
* @param {*} rules
* @param {string} href
* @returns
*/
2023-08-08 13:29:15 +08:00
export const matchRule = (rules, href) => {
const rule = rules.find((rule) =>
2023-07-20 13:45:41 +08:00
rule.pattern
.split(",")
.some((p) => p.trim() === "*" || href.includes(p.trim()))
2023-08-08 13:29:15 +08:00
);
if (!rule) {
return GLOBLA_RULE;
}
if (!rule?.selector?.trim()) {
rule.selector = GLOBLA_RULE.selector;
}
2023-08-08 16:41:47 +08:00
rule.bgColor = rule?.bgColor?.trim() || GLOBLA_RULE?.bgColor?.trim();
2023-08-08 13:29:15 +08:00
["translator", "fromLang", "toLang", "textStyle", "transOpen"].forEach(
(key) => {
if (rule[key] === GLOBAL_KEY) {
rule[key] = GLOBLA_RULE[key];
}
}
);
return rule;
};
2023-07-20 13:45:41 +08:00
/**
* 本地语言识别
* @param {*} q
* @returns
*/
export const detectLang = async (q) => {
const res = await browser?.i18n.detectLanguage(q);
return res?.languages?.[0]?.language;
};