Some fixes
This commit is contained in:
parent
ec216264b1
commit
cf0703f7f5
13 changed files with 798 additions and 0 deletions
146
popup.js
146
popup.js
|
|
@ -1,3 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
const slider = document.getElementById('slider');
|
||||
const display = document.getElementById('display');
|
||||
const reset = document.getElementById('reset');
|
||||
|
|
@ -36,3 +37,148 @@ reset.addEventListener('click', () => {
|
|||
}
|
||||
);
|
||||
});
|
||||
=======
|
||||
// ============================================================
|
||||
// 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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue