This commit is contained in:
2026-08-08 17:09:43 +02:00
commit d47d87da82
18 changed files with 1046 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
(function (root) {
"use strict";
function createBackgroundController(api) {
const tabStates = new Map();
function validTabId(tabId) {
return Number.isInteger(tabId) && tabId >= 0;
}
async function broadcast(tabId, enabled) {
try {
await api.tabs.sendMessage(tabId, {
type: "glagolify:set-enabled",
enabled
});
return true;
} catch (error) {
return false;
}
}
api.runtime.onMessage.addListener((message, sender) => {
if (!message || typeof message.type !== "string") {
return undefined;
}
if (message.type === "glagolify:document-ready") {
const tabId = sender && sender.tab && sender.tab.id;
return Promise.resolve({
enabled: validTabId(tabId) && tabStates.get(tabId) === true
});
}
if (message.type === "glagolify:get-tab-state") {
const tabId = message.tabId;
if (!validTabId(tabId)) {
return Promise.resolve({ enabled: false, available: false });
}
const enabled = tabStates.get(tabId) === true;
return broadcast(tabId, enabled).then((available) => ({ enabled, available }));
}
if (message.type === "glagolify:set-tab-enabled") {
const tabId = message.tabId;
if (!validTabId(tabId) || typeof message.enabled !== "boolean") {
return Promise.resolve({ enabled: false, available: false });
}
tabStates.set(tabId, message.enabled);
return broadcast(tabId, message.enabled).then((available) => ({
enabled: message.enabled,
available
}));
}
return undefined;
});
api.tabs.onRemoved.addListener((tabId) => {
tabStates.delete(tabId);
});
return { tabStates, broadcast };
}
const exported = Object.freeze({ createBackgroundController });
if (typeof browser === "object" && browser.runtime && browser.tabs) {
createBackgroundController(browser);
}
if (typeof module === "object" && module.exports) {
module.exports = exported;
}
root.GlagolifyBackground = exported;
})(typeof globalThis === "object" ? globalThis : this);