add save rule button
This commit is contained in:
@@ -537,4 +537,8 @@ export const I18N = {
|
|||||||
zh: `隐藏`,
|
zh: `隐藏`,
|
||||||
en: `"Hide`,
|
en: `"Hide`,
|
||||||
},
|
},
|
||||||
|
save_rule: {
|
||||||
|
zh: `保存规则`,
|
||||||
|
en: `"Save Rule`,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -19,3 +19,12 @@ export const sendTabMsg = async (action, args) => {
|
|||||||
const tabs = await browser.tabs.query({ active: true, currentWindow: true });
|
const tabs = await browser.tabs.query({ active: true, currentWindow: true });
|
||||||
return browser.tabs.sendMessage(tabs[0].id, { action, args });
|
return browser.tabs.sendMessage(tabs[0].id, { action, args });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前tab信息
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export const getTabInfo = async () => {
|
||||||
|
const tabs = await browser.tabs.query({ active: true, currentWindow: true });
|
||||||
|
return tabs[0];
|
||||||
|
};
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import {
|
|||||||
DEFAULT_OW_RULE,
|
DEFAULT_OW_RULE,
|
||||||
} from "../config";
|
} from "../config";
|
||||||
import { loadOrFetchSubRules } from "./subRules";
|
import { loadOrFetchSubRules } from "./subRules";
|
||||||
|
import { getRulesWithDefault, setRules } from "./storage";
|
||||||
|
import { trySyncRules } from "./sync";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据href匹配规则
|
* 根据href匹配规则
|
||||||
@@ -134,3 +136,19 @@ export const checkRules = (rules) => {
|
|||||||
|
|
||||||
return rules;
|
return rules;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存或更新rule
|
||||||
|
* @param {*} newRule
|
||||||
|
*/
|
||||||
|
export const saveRule = async (newRule) => {
|
||||||
|
const rules = await getRulesWithDefault();
|
||||||
|
const rule = rules.find((item) => isMatch(item.pattern, newRule.pattern));
|
||||||
|
if (rule) {
|
||||||
|
Object.assign(rule, { ...newRule, pattern: rule.pattern });
|
||||||
|
} else {
|
||||||
|
rules.unshift(newRule);
|
||||||
|
}
|
||||||
|
await setRules(rules);
|
||||||
|
trySyncRules();
|
||||||
|
};
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import MenuItem from "@mui/material/MenuItem";
|
|||||||
import FormControlLabel from "@mui/material/FormControlLabel";
|
import FormControlLabel from "@mui/material/FormControlLabel";
|
||||||
import Switch from "@mui/material/Switch";
|
import Switch from "@mui/material/Switch";
|
||||||
import Button from "@mui/material/Button";
|
import Button from "@mui/material/Button";
|
||||||
import { sendTabMsg } from "../../libs/msg";
|
import { sendTabMsg, getTabInfo } from "../../libs/msg";
|
||||||
import { browser } from "../../libs/browser";
|
import { browser } from "../../libs/browser";
|
||||||
import { isExt } from "../../libs/client";
|
import { isExt } from "../../libs/client";
|
||||||
import { useI18n } from "../../hooks/I18n";
|
import { useI18n } from "../../hooks/I18n";
|
||||||
@@ -24,6 +24,7 @@ import {
|
|||||||
CACHE_NAME,
|
CACHE_NAME,
|
||||||
} from "../../config";
|
} from "../../config";
|
||||||
import { sendIframeMsg } from "../../libs/iframe";
|
import { sendIframeMsg } from "../../libs/iframe";
|
||||||
|
import { saveRule } from "../../libs/rules";
|
||||||
|
|
||||||
export default function Popup({ setShowPopup, translator: tran }) {
|
export default function Popup({ setShowPopup, translator: tran }) {
|
||||||
const i18n = useI18n();
|
const i18n = useI18n();
|
||||||
@@ -77,6 +78,21 @@ export default function Popup({ setShowPopup, translator: tran }) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleSaveRule = async () => {
|
||||||
|
try {
|
||||||
|
let pattern = window.location.host;
|
||||||
|
if (isExt) {
|
||||||
|
const tab = await getTabInfo();
|
||||||
|
const url = new URL(tab.url);
|
||||||
|
pattern = url.host;
|
||||||
|
}
|
||||||
|
|
||||||
|
saveRule({ ...rule, pattern });
|
||||||
|
} catch (err) {
|
||||||
|
console.log("[save rule]", err);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!isExt) {
|
if (!isExt) {
|
||||||
return;
|
return;
|
||||||
@@ -218,10 +234,20 @@ export default function Popup({ setShowPopup, translator: tran }) {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
<Stack
|
||||||
|
direction="row"
|
||||||
|
justifyContent="space-between"
|
||||||
|
alignItems="center"
|
||||||
|
spacing={2}
|
||||||
|
>
|
||||||
|
<Button variant="text" onClick={handleSaveRule}>
|
||||||
|
{i18n("save_rule")}
|
||||||
|
</Button>
|
||||||
<Button variant="text" onClick={handleOpenSetting}>
|
<Button variant="text" onClick={handleOpenSetting}>
|
||||||
{i18n("setting")}
|
{i18n("setting")}
|
||||||
</Button>
|
</Button>
|
||||||
</Stack>
|
</Stack>
|
||||||
|
</Stack>
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user