mirror of
https://github.com/SoPat712/videospeed.git
synced 2026-04-26 22:23:09 -04:00
feat: omit settings from popup control bar
This commit is contained in:
+45
-8
@@ -147,6 +147,19 @@ var controllerButtonDefs = {
|
||||
mark: { icon: "\u2691", name: "Set marker" },
|
||||
jump: { icon: "\u21E5", name: "Jump to marker" }
|
||||
};
|
||||
var popupExcludedButtonIds = new Set(["settings"]);
|
||||
|
||||
function sanitizePopupButtonOrder(buttonIds) {
|
||||
if (!Array.isArray(buttonIds)) return [];
|
||||
var seen = new Set();
|
||||
return buttonIds.filter(function (id) {
|
||||
if (!controllerButtonDefs[id] || popupExcludedButtonIds.has(id) || seen.has(id)) {
|
||||
return false;
|
||||
}
|
||||
seen.add(id);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
/** Cached custom Lucide SVGs (mirrors chrome.storage.local customButtonIcons). */
|
||||
var customButtonIconsLive = {};
|
||||
@@ -713,7 +726,7 @@ function save_options() {
|
||||
document.getElementById("showPopupControlBar").checked;
|
||||
settings.popupMatchHoverControls =
|
||||
document.getElementById("popupMatchHoverControls").checked;
|
||||
settings.popupControllerButtons = getPopupControlBarOrder();
|
||||
settings.popupControllerButtons = sanitizePopupButtonOrder(getPopupControlBarOrder());
|
||||
|
||||
// Collect site rules
|
||||
settings.siteRules = [];
|
||||
@@ -802,7 +815,9 @@ function save_options() {
|
||||
ruleEl.querySelector(".site-showPopupControlBar").checked;
|
||||
var popupActiveZone = ruleEl.querySelector(".site-popup-cb-active");
|
||||
if (popupActiveZone) {
|
||||
rule.popupControllerButtons = readControlBarOrder(popupActiveZone);
|
||||
rule.popupControllerButtons = sanitizePopupButtonOrder(
|
||||
readControlBarOrder(popupActiveZone)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1071,7 +1086,10 @@ function createSiteRule(rule) {
|
||||
populateControlBarZones(
|
||||
sitePopupActive,
|
||||
sitePopupAvailable,
|
||||
rule.popupControllerButtons
|
||||
sanitizePopupButtonOrder(rule.popupControllerButtons),
|
||||
function (id) {
|
||||
return !popupExcludedButtonIds.has(id);
|
||||
}
|
||||
);
|
||||
} else if (
|
||||
sitePopupActive &&
|
||||
@@ -1081,7 +1099,10 @@ function createSiteRule(rule) {
|
||||
populateControlBarZones(
|
||||
sitePopupActive,
|
||||
sitePopupAvailable,
|
||||
getPopupControlBarOrder()
|
||||
getPopupControlBarOrder(),
|
||||
function (id) {
|
||||
return !popupExcludedButtonIds.has(id);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1139,16 +1160,23 @@ function createControlBarBlock(buttonId) {
|
||||
return block;
|
||||
}
|
||||
|
||||
function populateControlBarZones(activeZone, availableZone, activeIds) {
|
||||
function populateControlBarZones(activeZone, availableZone, activeIds, allowButtonId) {
|
||||
activeZone.innerHTML = "";
|
||||
availableZone.innerHTML = "";
|
||||
|
||||
var allowed = function (id) {
|
||||
if (!controllerButtonDefs[id]) return false;
|
||||
return typeof allowButtonId === "function" ? Boolean(allowButtonId(id)) : true;
|
||||
};
|
||||
|
||||
activeIds.forEach(function (id) {
|
||||
if (!allowed(id)) return;
|
||||
var block = createControlBarBlock(id);
|
||||
if (block) activeZone.appendChild(block);
|
||||
});
|
||||
|
||||
Object.keys(controllerButtonDefs).forEach(function (id) {
|
||||
if (!allowed(id)) return;
|
||||
if (!activeIds.includes(id)) {
|
||||
var block = createControlBarBlock(id);
|
||||
if (block) availableZone.appendChild(block);
|
||||
@@ -1176,15 +1204,21 @@ function getControlBarOrder() {
|
||||
}
|
||||
|
||||
function populatePopupControlBarEditor(activeIds) {
|
||||
var popupActiveIds = sanitizePopupButtonOrder(activeIds);
|
||||
populateControlBarZones(
|
||||
document.getElementById("popupControlBarActive"),
|
||||
document.getElementById("popupControlBarAvailable"),
|
||||
activeIds
|
||||
popupActiveIds,
|
||||
function (id) {
|
||||
return !popupExcludedButtonIds.has(id);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function getPopupControlBarOrder() {
|
||||
return readControlBarOrder(document.getElementById("popupControlBarActive"));
|
||||
return sanitizePopupButtonOrder(
|
||||
readControlBarOrder(document.getElementById("popupControlBarActive"))
|
||||
);
|
||||
}
|
||||
|
||||
function updatePopupEditorDisabledState() {
|
||||
@@ -1771,7 +1805,10 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||
populateControlBarZones(
|
||||
popupActiveZone,
|
||||
popupAvailableZone,
|
||||
getPopupControlBarOrder()
|
||||
getPopupControlBarOrder(),
|
||||
function (id) {
|
||||
return !popupExcludedButtonIds.has(id);
|
||||
}
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -10,6 +10,7 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||
display: { label: "", className: "hideButton" },
|
||||
reset: { label: "", className: "" },
|
||||
fast: { label: "", className: "" },
|
||||
nudge: { label: "", className: "" },
|
||||
settings: { label: "", className: "" },
|
||||
pause: { label: "", className: "" },
|
||||
muted: { label: "", className: "" },
|
||||
@@ -18,6 +19,7 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||
};
|
||||
|
||||
var defaultButtons = ["rewind", "slower", "faster", "advance", "display"];
|
||||
var popupExcludedButtonIds = new Set(["settings"]);
|
||||
var storageDefaults = {
|
||||
enabled: true,
|
||||
showPopupControlBar: true,
|
||||
@@ -64,25 +66,37 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||
}
|
||||
|
||||
function resolvePopupButtons(storage, siteRule) {
|
||||
function sanitize(buttons) {
|
||||
if (!Array.isArray(buttons)) return [];
|
||||
var seen = new Set();
|
||||
return buttons.filter(function (id) {
|
||||
if (!controllerButtonDefs[id] || popupExcludedButtonIds.has(id) || seen.has(id)) {
|
||||
return false;
|
||||
}
|
||||
seen.add(id);
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
if (siteRule && Array.isArray(siteRule.popupControllerButtons)) {
|
||||
return siteRule.popupControllerButtons;
|
||||
return sanitize(siteRule.popupControllerButtons);
|
||||
}
|
||||
|
||||
if (storage.popupMatchHoverControls) {
|
||||
if (siteRule && Array.isArray(siteRule.controllerButtons)) {
|
||||
return siteRule.controllerButtons;
|
||||
return sanitize(siteRule.controllerButtons);
|
||||
}
|
||||
|
||||
if (Array.isArray(storage.controllerButtons)) {
|
||||
return storage.controllerButtons;
|
||||
return sanitize(storage.controllerButtons);
|
||||
}
|
||||
}
|
||||
|
||||
if (Array.isArray(storage.popupControllerButtons)) {
|
||||
return storage.popupControllerButtons;
|
||||
return sanitize(storage.popupControllerButtons);
|
||||
}
|
||||
|
||||
return defaultButtons;
|
||||
return sanitize(defaultButtons);
|
||||
}
|
||||
|
||||
function setControlBarVisible(visible) {
|
||||
@@ -209,7 +223,6 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||
var customMap = customIconsMap || {};
|
||||
|
||||
buttons.forEach(function (btnId) {
|
||||
if (btnId === "nudge") return;
|
||||
var def = controllerButtonDefs[btnId];
|
||||
if (!def) return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user