<<<<<<< HEAD const slider = document.getElementById('slider'); const display = document.getElementById('display'); const reset = document.getElementById('reset'); // Gespeicherten Wert laden chrome.storage.local.get('volume', ({ volume }) => { const val = volume ?? 100; slider.value = val; display.textContent = val; }); // Schieberegler bewegen slider.addEventListener('input', () => { const val = parseInt(slider.value); display.textContent = val; chrome.storage.local.set({ volume: val }); // Aktiven Tab anweisen chrome.tabs.query( { active: true, currentWindow: true }, ([tab]) => { chrome.tabs.sendMessage(tab.id, { volume: val }); } ); }); // Zurücksetzen auf 100% reset.addEventListener('click', () => { slider.value = 100; display.textContent = 100; chrome.storage.local.set({ volume: 100 }); chrome.tabs.query( { active: true, currentWindow: true }, ([tab]) => { chrome.tabs.sendMessage(tab.id, { volume: 100 }); } ); }); ======= // ============================================================ // Volume Booster — Popup Logic // ============================================================ const slider = document.getElementById("slider"); const readout = document.getElementById("readoutValue"); const readoutBox = document.querySelector(".readout"); const badge = document.getElementById("statusBadge"); const siteLabel = document.getElementById("siteLabel"); const note = document.getElementById("note"); const btnUp = document.getElementById("btnUp"); const btnDown = document.getElementById("btnDown"); const btnMute = document.getElementById("btnMute"); const presets = document.querySelectorAll(".preset"); const STEP = 10; // Schrittweite in % const MAX = 600; let currentTab = null; let lastBeforeMute = 100; // Wert vor dem Stummschalten // ---- Tab ermitteln ---- async function init() { const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); currentTab = tab; if (tab && tab.url) { try { siteLabel.textContent = new URL(tab.url).hostname; } catch { siteLabel.textContent = "aktiver Tab"; } } // Gespeicherten Wert für diesen Tab laden const key = "vol_" + tab.id; const stored = await chrome.storage.session.get(key); const value = stored[key] != null ? stored[key] : 100; applyUI(value); // Falls vorher schon ein Boost lief: Zustand vom Worker holen chrome.runtime.sendMessage({ type: "GET_STATE", tabId: tab.id }, (res) => { if (res && res.ok && res.boosting) { applyUI(Math.round(res.value * 100)); } }); } // ---- UI aktualisieren ---- function applyUI(value) { value = Math.max(0, Math.min(MAX, value)); slider.value = value; readout.textContent = value; badge.textContent = value + "%"; const boosting = value > 100; readoutBox.classList.toggle("boosting", boosting); badge.classList.toggle("boosting", boosting); btnMute.classList.toggle("active", value === 0); presets.forEach((p) => { p.classList.toggle("active", Number(p.dataset.v) === value); }); } // ---- Lautstärke setzen + an Worker senden ---- function setVolume(value) { value = Math.max(0, Math.min(MAX, value)); applyUI(value); if (!currentTab) return; const key = "vol_" + currentTab.id; chrome.storage.session.set({ [key]: value }); chrome.runtime.sendMessage( { type: "SET_VOLUME", tabId: currentTab.id, value: value / 100 }, (res) => { if (res && res.ok) { note.classList.remove("error"); note.textContent = value > 100 ? "Ton wird verstärkt — bei Verzerrung etwas zurückdrehen." : value === 0 ? "Tab ist stummgeschaltet." : "Normale Lautstärke (kein Boost aktiv)."; } else { note.classList.add("error"); const err = ((res && res.error) || "").toLowerCase(); if (err.includes("cannot be captured") || err.includes("invalid tab")) { note.textContent = "Dieser Tab kann nicht verstärkt werden (z. B. chrome:// oder Web Store)."; } else if (err.includes("activetab") || err.includes("permission")) { note.textContent = "Keine Berechtigung — Popup einmal schließen und neu öffnen."; } else if (!res) { note.textContent = "Keine Antwort — Extension auf chrome://extensions neu laden."; } else { note.textContent = "Fehler beim Aktivieren — Seite ggf. neu laden."; } // Slider auf 100 zurück, da kein Boost aktiv ist applyUI(100); } } ); } // ---- Events ---- slider.addEventListener("input", () => { applyUI(Number(slider.value)); }); slider.addEventListener("change", () => { setVolume(Number(slider.value)); }); btnUp.addEventListener("click", () => setVolume(Number(slider.value) + STEP) ); btnDown.addEventListener("click", () => setVolume(Number(slider.value) - STEP) ); btnMute.addEventListener("click", () => { const v = Number(slider.value); if (v === 0) { setVolume(lastBeforeMute || 100); } else { lastBeforeMute = v; setVolume(0); } }); presets.forEach((p) => { p.addEventListener("click", () => setVolume(Number(p.dataset.v))); }); // Tastatur: Pfeile hoch/runter document.addEventListener("keydown", (e) => { if (e.key === "ArrowUp") { e.preventDefault(); setVolume(Number(slider.value) + STEP); } if (e.key === "ArrowDown") { e.preventDefault(); setVolume(Number(slider.value) - STEP); } }); init(); >>>>>>> 2056a0d (First Commit, Code by Claude 4.7 Opus)