()
| 272 | }, |
| 273 | |
| 274 | async _buildModsList() { |
| 275 | if (!this.modsList) { |
| 276 | return; |
| 277 | } |
| 278 | |
| 279 | if (this._doNotRebuildModsList) { |
| 280 | this._doNotRebuildModsList = false; |
| 281 | return; |
| 282 | } |
| 283 | |
| 284 | const mods = await gZenMods.getMods(); |
| 285 | const browser = nsZenMultiWindowFeature.currentBrowser; |
| 286 | const modList = document.createElement("div"); |
| 287 | |
| 288 | for (const mod of Object.values(mods).sort((a, b) => a.name.localeCompare(b.name))) { |
| 289 | const sanitizedName = gZenMods.sanitizeModName(mod.name); |
| 290 | const isModEnabled = mod.enabled === undefined || mod.enabled; |
| 291 | const fragment = window.MozXULElement.parseXULToFragment(` |
| 292 | <vbox class="zenThemeMarketplaceItem"> |
| 293 | <vbox class="zenThemeMarketplaceItemContent"> |
| 294 | <hbox flex="1" id="zenThemeMarketplaceItemContentHeader"> |
| 295 | <label><h3 class="zenThemeMarketplaceItemTitle"></h3></label> |
| 296 | </hbox> |
| 297 | <description class="description-deemphasized zenThemeMarketplaceItemDescription"></description> |
| 298 | </vbox> |
| 299 | <hbox class="zenThemeMarketplaceItemActions"> |
| 300 | ${mod.preferences ? `<button id="zenThemeMarketplaceItemConfigureButton-${sanitizedName}" class="zenThemeMarketplaceItemConfigureButton" hidden="true"></button>` : ""} |
| 301 | ${mod.homepage ? `<button id="zenThemeMarketplaceItemHomePageLink-${sanitizedName}" class="zenThemeMarketplaceItemHomepageButton" zen-mod-id="${mod.id}"></button>` : ""} |
| 302 | <button class="zenThemeMarketplaceItemUninstallButton" data-l10n-id="zen-theme-marketplace-remove-button" zen-mod-id="${mod.id}"></button> |
| 303 | </hbox> |
| 304 | </vbox> |
| 305 | `); |
| 306 | |
| 307 | const modName = `${mod.name} (v${mod.version ?? "1.0.0"})`; |
| 308 | |
| 309 | const base = fragment.querySelector(".zenThemeMarketplaceItem"); |
| 310 | const baseHeader = fragment.querySelector("#zenThemeMarketplaceItemContentHeader"); |
| 311 | |
| 312 | const dialog = document.createElement("dialog"); |
| 313 | const mainDialogDiv = document.createElement("div"); |
| 314 | const headerDiv = document.createElement("div"); |
| 315 | const headerTitle = document.createElement("h3"); |
| 316 | const closeButton = document.createElement("button"); |
| 317 | const contentDiv = document.createElement("div"); |
| 318 | const mozToggle = document.createElement("moz-toggle"); |
| 319 | |
| 320 | mainDialogDiv.className = "zenThemeMarketplaceItemPreferenceDialog"; |
| 321 | headerDiv.className = "zenThemeMarketplaceItemPreferenceDialogTopBar"; |
| 322 | headerTitle.textContent = modName; |
| 323 | browser.document.l10n.setAttributes(headerTitle, "zen-theme-marketplace-theme-header-title", { |
| 324 | name: sanitizedName, |
| 325 | }); |
| 326 | headerTitle.className = "zenThemeMarketplaceItemTitle"; |
| 327 | closeButton.id = `${sanitizedName}-modal-close`; |
| 328 | browser.document.l10n.setAttributes(closeButton, "zen-theme-marketplace-close-modal"); |
| 329 | contentDiv.id = `${sanitizedName}-preferences-content`; |
| 330 | contentDiv.className = "zenThemeMarketplaceItemPreferenceDialogContent"; |
| 331 | mozToggle.className = "zenThemeMarketplaceItemPreferenceToggle"; |
nothing calls this directly
no test coverage detected