diff --git a/public/scripts/extensions.js b/public/scripts/extensions.js index b43f622ed..6dcb0666c 100644 --- a/public/scripts/extensions.js +++ b/public/scripts/extensions.js @@ -373,15 +373,27 @@ function addExtensionScript(name, manifest) { function showExtensionsDetails() { let html = '

Modules provided by your Extensions API:

'; - html += modules.length ? DOMPurify.sanitize(modules.join(', ')) : '

Not connected to the API!

'; + html += modules.length ? `

${DOMPurify.sanitize(modules.join(', '))}

` : '

Not connected to the API!

'; html += '

Available extensions:

'; Object.entries(manifests).sort((a, b) => a[1].loading_order - b[1].loading_order).forEach(extension => { const name = extension[0]; const manifest = extension[1]; - html += `

${DOMPurify.sanitize(manifest.display_name)}

`; - if (activeExtensions.has(name)) { - html += `

Extension is active. Click to Disable

`; + const isActive = activeExtensions.has(name); + const isDisabled = extension_settings.disabledExtensions.includes(name); + + const titleClass = isActive ? "extension_enabled" : isDisabled ? "extension_disabled" : "extension_missing"; + + let toggleElement = `Unavailable`; + if (isActive) { + toggleElement = `Disable`; + } + else if (isDisabled) { + toggleElement = `Enable`; + } + html += `

${DOMPurify.sanitize(manifest.display_name)} ${toggleElement}

`; + + if (isActive) { if (Array.isArray(manifest.optional)) { const optional = new Set(manifest.optional); modules.forEach(x => optional.delete(x)); @@ -391,10 +403,7 @@ function showExtensionsDetails() { } } } - else if (extension_settings.disabledExtensions.includes(name)) { - html += `

Extension is disabled. Click to Enable

`; - } - else { + else if (!isDisabled) { // Neither active nor disabled const requirements = new Set(manifest.requires); modules.forEach(x => requirements.delete(x)); const requirementsString = DOMPurify.sanitize([...requirements].join(', ')); diff --git a/public/style.css b/public/style.css index b9982b54f..6221e8d9b 100644 --- a/public/style.css +++ b/public/style.css @@ -3773,12 +3773,30 @@ label[for="extensions_autoconnect"] { .extensions_info p { margin-bottom: 0.5em; + margin-left: 1em; } .extensions_info .disabled { color: lightgray; } +.extensions_info .toggle_enable { + color: lightgreen; +} +.extensions_info .toggle_disable { + color: rgb(238, 144, 144); +} + +.extensions_info .extension_enabled { + color: green; +} +.extensions_info .extension_disabled { + color: lightgray; +} +.extensions_info .extension_missing { + color: gray; +} + #extensions_list .disabled { text-decoration: line-through; color: lightgray;