From 4b608d23cc90c6bf00a84b1c3c39e5a1a53b1429 Mon Sep 17 00:00:00 2001 From: Maxim Zhukov Date: Fri, 19 May 2023 20:57:02 -0600 Subject: [PATCH] feat(options): choose the websites the ext is enabled/disabled on --- docs/chrome-web-store/Screenshot_2.png | Bin 45702 -> 32288 bytes manifest.ts | 15 ++--- package.json | 2 +- public/manifest.json | 21 ++---- src/pages/background/index.ts | 66 +++++++++++++++++-- src/pages/content/components/App.tsx | 8 ++- src/pages/content/components/index.tsx | 6 +- src/pages/content/index.ts | 2 +- src/pages/content/style.scss | 4 -- src/pages/options/Options.tsx | 63 ++++++++++++++++-- src/pages/options/components/KeywordRule.tsx | 26 +------- src/services/constants.tsx | 4 ++ src/services/storage/optionsService.tsx | 26 +++++++- src/services/storage/storageService.tsx | 4 +- vite.config.ts | 2 +- 15 files changed, 181 insertions(+), 68 deletions(-) diff --git a/docs/chrome-web-store/Screenshot_2.png b/docs/chrome-web-store/Screenshot_2.png index a340b916160345cf2afd85eaa6cd886ed2344300..907e9ca1934dc6b6c22f77664b9078f10145c120 100644 GIT binary patch literal 32288 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
    )0W}wVz|{ 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 Cl@k^K diff --git a/manifest.ts b/manifest.ts index 7f12b9f..f8b3119 100644 --- a/manifest.ts +++ b/manifest.ts @@ -20,17 +20,14 @@ const manifest: chrome.runtime.ManifestV3 = { "128": "icon-128.png", }, permissions: [ - "storage" + "storage", + "scripting", ], - content_scripts: [ - { - //matches: ["http://*/*", "https://*/*", ""], - matches: ["https://www.linkedin.com/*"], - js: ["src/pages/content/index.js"], - // KEY for cache invalidation - css: ["assets/css/contentStyle.chunk.css"], - }, + host_permissions: [ + "http://*/*", + "https://*/*" ], + content_scripts: [], web_accessible_resources: [ { resources: [ diff --git a/package.json b/package.json index 02176bf..133dacf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "keywords-highlighter", - "version": "0.0.4", + "version": "0.0.6", "description": "a chrome extension that highlights keywords on web pages, making it easy to find or skip information", "license": "MIT", "repository": { diff --git a/public/manifest.json b/public/manifest.json index 3a6e385..c71ad89 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Keywords Highlighter", - "version": "0.0.3", + "version": "0.0.6", "description": "a chrome extension that highlights keywords on web pages, making it easy to find or skip information", "options_page": "src/pages/options/index.html", "background": { @@ -15,21 +15,14 @@ "128": "icon-128.png" }, "permissions": [ - "storage" + "storage", + "scripting" ], - "content_scripts": [ - { - "matches": [ - "https://www.linkedin.com/*" - ], - "js": [ - "src/pages/content/index.js" - ], - "css": [ - "assets/css/contentStyle16837320447.chunk.css" - ] - } + "host_permissions": [ + "http://*/*", + "https://*/*" ], + "content_scripts": [], "web_accessible_resources": [ { "resources": [ diff --git a/src/pages/background/index.ts b/src/pages/background/index.ts index 2919b17..bc94719 100644 --- a/src/pages/background/index.ts +++ b/src/pages/background/index.ts @@ -1,10 +1,68 @@ import reloadOnUpdate from "virtual:reload-on-update-in-background-script"; +import { getMatches } from '@services/storage/optionsService'; +import { EVENT_OPTIONS_SAVED } from "@src/services/constants"; -chrome.action.setPopup({ popup: '' }); +const CONTENT_SCRIPT_ID = "highlighter-script"; -chrome.action.onClicked.addListener(() => { - chrome.tabs.create({ url: 'src/pages/options/index.html' }); -}); +function openOptionsOnPopup() { + chrome.action.setPopup({ popup: '' }); + + chrome.action.onClicked.addListener(() => { + chrome.tabs.create({ url: 'src/pages/options/index.html' }); + }); +} + +function injectContentScripts({ js, css }) { + getMatches() + .then(({ matches, excludeMatches }) => { + console.log('matches: ', matches); + console.log('exclude matches: ', excludeMatches); + chrome.scripting + .registerContentScripts([{ + id: CONTENT_SCRIPT_ID, + js: js, + css: css, + matches: matches, + excludeMatches: excludeMatches, + persistAcrossSessions: false, + }]) + .then(() => console.log("registration complete")) + .catch((err) => console.warn("unexpected error", err)) + }); +} + +function addEventListeners() { + chrome.runtime.onMessage.addListener(({ type }) => { + if (type === EVENT_OPTIONS_SAVED) { + resetContentScripts() + .then(() => registerContentScripts()); + } + }); +} + +function registerContentScripts() { + injectContentScripts({ + js: ["/src/pages/content/index.js"], + css: ["/assets/css/contentStyle.css"] + }); +} + +function resetContentScripts() { + return chrome.scripting + .unregisterContentScripts({ + ids: [CONTENT_SCRIPT_ID] + }) +} + +function init() { + openOptionsOnPopup(); + + registerContentScripts(); + + addEventListeners(); +} + +init(); reloadOnUpdate("pages/background"); diff --git a/src/pages/content/components/App.tsx b/src/pages/content/components/App.tsx index f71ae06..40fa639 100644 --- a/src/pages/content/components/App.tsx +++ b/src/pages/content/components/App.tsx @@ -16,9 +16,15 @@ export default function App() { }; }; + const filter = (rule: IKeywordRule) => { + return rule.keywords?.length; + }; + useEffect(() => { getRules().then((rules) => { - setRules(rules.map(map)); + setRules(rules + .filter(filter) + .map(map)); }); }, []); diff --git a/src/pages/content/components/index.tsx b/src/pages/content/components/index.tsx index 2824e9f..edbcce7 100644 --- a/src/pages/content/components/index.tsx +++ b/src/pages/content/components/index.tsx @@ -2,7 +2,7 @@ import { createRoot } from "react-dom/client"; import DebugPopup from "@src/pages/content/components/DebugPopup"; import App from "@src/pages/content/components/App"; import { get } from "@services/storage/storageService"; -import { SETTINGS_DEBUG, SETTINGS_KEYWORD_RULES } from "@services/constants"; +import { SETTINGS_DEBUG } from "@services/constants"; import refreshOnUpdate from "virtual:reload-on-update-in-view"; import { getRules } from "@src/services/storage/optionsService"; @@ -34,6 +34,10 @@ const initApp = () => { }; const addStyleBlock = (className: string, styles: string) => { + if (!className || !styles) { + return; + } + var sheet = document.createElement("style"); sheet.innerHTML = `.${className} { ${styles} }`; document.body.appendChild(sheet); diff --git a/src/pages/content/index.ts b/src/pages/content/index.ts index 4ee2802..258f7ca 100644 --- a/src/pages/content/index.ts +++ b/src/pages/content/index.ts @@ -1 +1 @@ -import("./components"); +import("./components"); \ No newline at end of file diff --git a/src/pages/content/style.scss b/src/pages/content/style.scss index 4d4c286..7be21b2 100644 --- a/src/pages/content/style.scss +++ b/src/pages/content/style.scss @@ -23,7 +23,3 @@ font-size: 14px; color: white; } - -.highlighted { - background-color: yellow; -} diff --git a/src/pages/options/Options.tsx b/src/pages/options/Options.tsx index cda0162..7e2c0ca 100644 --- a/src/pages/options/Options.tsx +++ b/src/pages/options/Options.tsx @@ -9,13 +9,15 @@ import Typography from "@mui/material/Typography"; import TextField from "@mui/material/TextField"; import FormControlLabel from "@mui/material/FormControlLabel"; import Checkbox from "@mui/material/Checkbox"; -import Divider from "@mui/material/Divider"; import { createTheme, ThemeProvider } from "@mui/material/styles"; import { get, set } from "@services/storage/storageService"; import { uid } from "@services/uidService"; import "@pages/options/Options.css"; import { + EVENT_OPTIONS_SAVED, SETTINGS_DEBUG, + SETTINGS_DISABLED_ON, + SETTINGS_ENABLED_ON, SETTINGS_KEYWORD_RULES, TEXT_OPTIONS, TEXT_OPTIONS_DISPLAY_DEBUG, @@ -28,6 +30,8 @@ const theme = createTheme(); export default function Options() { const [displayDebug, setDisplayDebug] = useState(false); + const [enabledOn, setEnabledOn] = useState(); + const [disabledOn, setDisabledOn] = useState(); const [rules, setRules] = useState([]); useEffect(() => { @@ -35,9 +39,16 @@ export default function Options() { }, []); const initForm = () => { - get([SETTINGS_DEBUG, SETTINGS_KEYWORD_RULES]).then((result) => { + get([ + SETTINGS_DEBUG, + SETTINGS_KEYWORD_RULES, + SETTINGS_ENABLED_ON, + SETTINGS_DISABLED_ON + ]).then((result) => { setDisplayDebug(result?.[SETTINGS_DEBUG] || false); setRules(result?.[SETTINGS_KEYWORD_RULES] || [createRule()]); + setEnabledOn(result?.[SETTINGS_ENABLED_ON] || null); + setDisabledOn(result?.[SETTINGS_DISABLED_ON] || null); }); }; @@ -57,7 +68,6 @@ export default function Options() { id: uid(), keywords: null, cssStyles: null, - enabledOn: null, highlightCompleteWords: false, }; }; @@ -80,8 +90,13 @@ export default function Options() { const handleApply = async () => { await set({ [SETTINGS_DEBUG]: displayDebug, + [SETTINGS_ENABLED_ON]: enabledOn, + [SETTINGS_DISABLED_ON]: disabledOn, [SETTINGS_KEYWORD_RULES]: rules, }); + + chrome.runtime.sendMessage({ type: EVENT_OPTIONS_SAVED }); + alert(TEXT_OPTIONS_SAVED_SUCCESSFULLY); }; @@ -93,6 +108,18 @@ export default function Options() { setDisplayDebug(false); }; + const handleEnabledOnChange: React.ChangeEventHandler = ( + event + ) => { + setEnabledOn(event.target.value); + }; + + const handleDisabledOnChange: React.ChangeEventHandler = ( + event + ) => { + setDisabledOn(event.target.value); + }; + return ( @@ -123,7 +150,7 @@ export default function Options() { ))} - +