Skip to content

Commit

Permalink
重构功能开关逻辑
Browse files Browse the repository at this point in the history
1. 全局对象`FeatureSet`储存功能开关属性
2. 全局对象`CONFIG`的`DESC_SELECTORS`属性存储`页面简介css筛选器规则`
3. 重构`registerMenuCommand 函数`, 大幅提升可维护性和扩展性
4. 调整`监听 Turbo 完成事件`逻辑和启用`简介翻译`代码
  • Loading branch information
maboloshi committed Feb 1, 2025
1 parent 2af024a commit dec4d25
Showing 1 changed file with 68 additions and 31 deletions.
99 changes: 68 additions & 31 deletions main.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@
const lang = 'zh-CN'; // 设置默认语言
const FeatureSet = {
enable_RegExp: GM_getValue("enable_RegExp", true),
enable_transDesc: GM_getValue("enable_transDesc", true),
};
const CONFIG = {
DESC_SELECTORS: {
repository: ".f4.my-3",
gist: ".gist-content [itemprop='about']"
},
};

let page = false,
Expand All @@ -39,8 +46,7 @@
ignoreSelectors = [],
tranSelectors = [],
regexpRules = [];

let enable_XunfeiTranslation = GM_getValue("enable_XunfeiTranslation", true); // 初始化讯飞听见翻译为开启状态

function updateConfig(page) {
if (cachedPage !== page && page) {
cachedPage = page;
Expand Down Expand Up @@ -451,29 +457,61 @@
* registerMenuCommand 函数:注册菜单。
*/
function registerMenuCommand() {
const toggleRegExp = () => {
enable_RegExp = !enable_RegExp;
GM_setValue("enable_RegExp", enable_RegExp);
GM_notification(`已${enable_RegExp ? '开启' : '关闭'}正则功能`);
if (enable_RegExp) {
location.reload();
}
GM_unregisterMenuCommand(id);
id = GM_registerMenuCommand(`${enable_RegExp ? '关闭' : '开启'}正则功能`, toggleRegExp);
const createMenuCommand = (config) => {
const { label, key, callback } = config;
let menuId;

const getMenuLabel = (label, isEnabled) =>
`${isEnabled ? "禁用" : "启用"} ${label}`;

const toggle = () => {
const newFeatureState = !FeatureSet[key];
GM_setValue(key, newFeatureState);
FeatureSet[key] = newFeatureState;
GM_notification(`${label}${newFeatureState ? '启用' : '禁用'}`);

// 调用回调函数
if (callback) callback(newFeatureState);

// 更新菜单命令的标签
GM_unregisterMenuCommand(menuId);
menuId = GM_registerMenuCommand(
getMenuLabel(label, newFeatureState),
toggle
);
};

// 初始注册菜单命令
menuId = GM_registerMenuCommand(
getMenuLabel(label, FeatureSet[key]),
toggle
);
};

const toggleXunfeiTranslation = () => {
enable_XunfeiTranslation = !enable_XunfeiTranslation;
GM_setValue("enable_XunfeiTranslation", enable_XunfeiTranslation);
GM_notification(`已${enable_XunfeiTranslation ? '开启' : '关闭'}讯飞听见翻译`);
// 这里可以添加一些额外的逻辑,比如根据开关状态更新页面等
GM_unregisterMenuCommand(xunfeiId);
xunfeiId = GM_registerMenuCommand(`${enable_XunfeiTranslation ? '关闭' : '开启'}讯飞听见翻译`, toggleXunfeiTranslation);
};
let id = GM_registerMenuCommand(`${enable_RegExp ? '关闭' : '开启'}正则功能`, toggleRegExp);
// 注册新的菜单命令,用于控制讯飞听见翻译的开关
let xunfeiId = GM_registerMenuCommand(`${enable_XunfeiTranslation ? '关闭' : '开启'}讯飞听见翻译`, toggleXunfeiTranslation);
}
const menuConfigs = [
{
label: "正则功能",
key: "enable_RegExp",
callback: (newFeatureState) => {
if (newFeatureState) traverseNode(document.body);
}
},
{
label: "描述翻译",
key: "enable_transDesc",
callback: (newFeatureState) => {
if (newFeatureState && CONFIG.DESC_SELECTORS[page]) {
transDesc(CONFIG.DESC_SELECTORS[page]);
} else {
document.getElementById('translate-me')?.remove();
}
}
}
];

// 注册所有菜单项
menuConfigs.forEach(config => createMenuCommand(config));
};

/**
* init 函数:初始化翻译功能。
Expand Down Expand Up @@ -503,14 +541,13 @@

// 监听 Turbo 完成事件
document.addEventListener('turbo:load', () => {
if (page) {
transTitle(); // 翻译页面标题
transBySelector();
if (page === "repository") { //仓库简介翻译
transDesc(".f4.my-3");
} else if (page === "gist") { // Gist 简介翻译
transDesc(".gist-content [itemprop='about']");
}
if (!page) return;

transTitle(); // 翻译页面标题
transBySelector();

if (FeatureSet.enable_transDesc && CONFIG.DESC_SELECTORS[page]) {
transDesc(CONFIG.DESC_SELECTORS[page]);
}
});

Expand Down

0 comments on commit dec4d25

Please sign in to comment.