UNPKG

freshroute-server

Version:

Local development server for FreshRoute extension with API mocking and extended functionality

113 lines (112 loc) 4.54 kB
"use strict"; document.addEventListener("DOMContentLoaded", async () => { const extensionToggle = document.getElementById("extensionToggle"); const notificationsToggle = document.getElementById("notificationsToggle"); const statusDiv = document.getElementById("status"); const statusText = document.getElementById("statusText"); const urlRulesCount = document.getElementById("urlRulesCount"); const headerRulesCount = document.getElementById("headerRulesCount"); const mockRulesCount = document.getElementById("mockRulesCount"); const activeRulesCount = document.getElementById("activeRulesCount"); const manageRulesBtn = document.getElementById("manageRules"); const clearRulesBtn = document.getElementById("clearRules"); await loadSettings(); extensionToggle.addEventListener("change", async (e) => { const enabled = e.target.checked; if (enabled) { const lastActivityTimestamp = Date.now(); await chrome.storage.sync.set({ extensionEnabled: enabled, lastActivityTimestamp }); } else { await chrome.storage.sync.set({ extensionEnabled: enabled }); } updateStatus(enabled); chrome.runtime.sendMessage({ action: "updateRules" }); notifyContentScripts({ action: "updateExtensionSettings", enabled }); }); notificationsToggle.addEventListener("change", async (e) => { const enabled = e.target.checked; await chrome.storage.sync.set({ notificationsEnabled: enabled }); }); manageRulesBtn.addEventListener("click", () => { chrome.runtime.openOptionsPage(); }); clearRulesBtn.addEventListener("click", async () => { if (confirm("Are you sure you want to clear all rules? This action cannot be undone.")) { await chrome.storage.local.set({ rules: [], groups: [] }); await loadSettings(); chrome.runtime.sendMessage({ action: "updateRules" }); } }); async function loadSettings() { try { const [syncData, localData] = await Promise.all([ chrome.storage.sync.get(["extensionEnabled", "notificationsEnabled"]), chrome.storage.local.get(["rules", "groups"]) ]); const { extensionEnabled, notificationsEnabled } = syncData; const { rules, groups } = localData; extensionToggle.checked = extensionEnabled !== false; notificationsToggle.checked = notificationsEnabled !== false; updateStatus(extensionEnabled !== false); let allRules = []; if (groups && groups.length > 0) { groups.forEach((group) => { if (group.enabled !== false) { allRules.push(...group.rules); } }); } else if (rules && rules.length > 0) { allRules = rules; } const urlRules = allRules.filter((r) => r.type === "url_rewrite"); const headerRules = allRules.filter((r) => r.type === "modify_headers"); const mockRules = allRules.filter((r) => r.type === "mock"); const activeRules = allRules.filter((r) => r.enabled); urlRulesCount.textContent = urlRules.length; headerRulesCount.textContent = headerRules.length; mockRulesCount.textContent = mockRules.length; activeRulesCount.textContent = activeRules.length; } catch (error) { console.error("Error loading settings:", error); statusText.textContent = "Error loading settings"; statusDiv.className = "status disabled"; } } function updateStatus(enabled) { if (enabled) { statusText.textContent = "Extension Enabled"; statusDiv.className = "status enabled"; } else { statusText.textContent = "Extension Disabled"; statusDiv.className = "status disabled"; } } chrome.storage.onChanged.addListener((changes, namespace) => { if (namespace === "sync" || namespace === "local") { loadSettings(); } }); chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { if (message.action === "updateExtensionEnabled") { extensionToggle.checked = message.enabled; updateStatus(message.enabled); if (message.enabled) { const lastActivityTimestamp = Date.now(); chrome.storage.sync.set({ lastActivityTimestamp }); } } }); async function notifyContentScripts(message) { try { const tabs = await chrome.tabs.query({}); for (const tab of tabs) { try { await chrome.tabs.sendMessage(tab.id, message); } catch (error) { } } } catch (error) { console.error("Error notifying content scripts:", error); } } });