diff --git a/public/scripts/extensions.js b/public/scripts/extensions.js index c551cc971..7ac782e20 100644 --- a/public/scripts/extensions.js +++ b/public/scripts/extensions.js @@ -378,6 +378,72 @@ function addExtensionScript(name, manifest) { +async function generateExtensionHtml(name, manifest, isActive, isDisabled, isExternal, checkboxClass) { + const displayName = manifest.display_name; + let displayVersion = manifest.version ? ` v${manifest.version}` : ""; + let isUpToDate = true; + if (isExternal) { + let data = await getExtensionVersion(name.replace('third-party', '')); + let branch = data.currentBranchName; + let commitHash = data.currentCommitHash; + isUpToDate = data.isUpToDate; + displayVersion = ` (${branch}-${commitHash.substring(0, 7)})`; + } + + let toggleElement = isActive || isDisabled ? + `` : + ``; + + let updateButton = isExternal && !isUpToDate ? `` : ''; + let extensionHtml = `
Optional modules: ${optionalString}
`; + } + } 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(', ')); + extensionHtml += `Missing modules: ${requirementsString}
`; + } + + return extensionHtml; +} + +async function getExtensionData(extension) { + const name = extension[0]; + const manifest = extension[1]; + const isActive = activeExtensions.has(name); + const isDisabled = extension_settings.disabledExtensions.includes(name); + const isExternal = name.startsWith('third-party'); + + const checkboxClass = isDisabled ? "checkbox_disabled" : ""; + + const extensionHtml = await generateExtensionHtml(name, manifest, isActive, isDisabled, isExternal, checkboxClass); + + return { isExternal, extensionHtml }; +} + + +function getModuleInformation() { + let moduleInfo = modules.length ? `${DOMPurify.sanitize(modules.join(', '))}
` : 'Not connected to the API!
'; + return ` +Optional modules: ${optionalString}
`; - } - } - } - 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(', ')); - extensionHtml += `Missing modules: ${requirementsString}
` - } - - // Append the HTML to the correct section + const { isExternal, extensionHtml } = await getExtensionData(extension); if (isExternal) { htmlExternal += extensionHtml; } else { htmlDefault += extensionHtml; } } - // Do something with htmlDefault and htmlExternal here - let html = '${DOMPurify.sanitize(modules.join(', '))}
` : 'Not connected to the API!
'; - html += htmlDefault + htmlExternal; + const html = ` + ${getModuleInformation()} + ${htmlDefault} + ${htmlExternal} + `; callPopup(`