diff --git a/extension/options.html b/extension/options.html --- a/extension/options.html +++ b/extension/options.html @@ -42,9 +42,9 @@

I18N

-
  • +
  • I18N

  • diff --git a/extension/options.css b/extension/options.css --- a/extension/options.css +++ b/extension/options.css @@ -69,6 +69,9 @@ display: block; padding: 0; } +#extensions-selection > li.dependent { + padding-left: 20px; +} #extensions-selection p { margin-top: 0; opacity: 0.7; diff --git a/extension/options.js b/extension/options.js --- a/extension/options.js +++ b/extension/options.js @@ -43,7 +43,7 @@ return; } - for (var key in items) { + for (let key in items) { if (!items.hasOwnProperty(key)) { continue; } @@ -70,10 +70,14 @@ } } + updateDependencies(control, key, settingsKey); + control.addEventListener("change", () => { let saveMessage = document.getElementById("save-message"); saveMessage.innerText = ""; + updateDependencies(control, key, settingsKey); + saveSettings((error) => { if (error) { try { @@ -147,6 +151,21 @@ } } +function updateDependencies(control, extension, settingsKey) { + // Update all depending controls + let value = control.type === "checkbox" ? control.checked : control.value; + if (value === true) { + value = "TRUE"; + } else if (value === false) { + value = "FALSE"; + } + + let dependencies = document.querySelectorAll("[data-depends-extension=" + extension + "][data-depends-settings-key=" + settingsKey + "]"); + for (let dependency of dependencies) { + dependency.disabled = (value != dependency.dataset.dependsSettingsValue); + } +} + document.addEventListener("DOMContentLoaded", function () { // poor man's tab widget :) @@ -186,14 +205,7 @@ return; } - loadSettings(function () { - var mpris = document.querySelector("[data-extension=mpris]"); - var mprisEx = document.querySelector("[data-extension=mprisMediaSessions]"); - mpris.addEventListener("change", function() { - mprisEx.disabled = !mpris.checked; - }); - mprisEx.disabled = !mpris.checked; - }); + loadSettings(); // When getSubsystemStatus fails we assume it's an old host without any of the new features // for which we added the requires-extension attributes. Disable all of them initially