define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-linkbutton"], function(loading, libraryMenu, dom, globalize) { "use strict"; function deletePlugin(page, uniqueid, name) { var msg = globalize.translate("UninstallPluginConfirmation").replace("{0}", name); require(["confirm"], function(confirm) { confirm({ title: globalize.translate("UninstallPluginHeader"), text: msg, primary: "cancel", confirmText: globalize.translate("UninstallPluginHeader") }).then(function() { loading.show(), ApiClient.uninstallPlugin(uniqueid).then(function() { reloadList(page) }) }) }) } function showNoConfigurationMessage() { Dashboard.alert({ message: globalize.translate("NoPluginConfigurationMessage") }) } function showConnectMessage() { Dashboard.alert({ message: globalize.translate("MessagePluginConfigurationRequiresLocalAccess") }) } function getPluginCardHtml(plugin, pluginConfigurationPages) { var configPage = pluginConfigurationPages.filter(function(pluginConfigurationPage) { return pluginConfigurationPage.PluginId == plugin.Id })[0]; var configPageUrl = configPage ? Dashboard.getConfigurationPageUrl(configPage.Name) : null; var html = ""; html += "
"; html += '
'; html += '"; html += '
'; html += '
'; html += ''; html += "
"; html += "
"; html += configPage ? configPage.DisplayName || plugin.Name : plugin.Name; html += "
"; html += "
"; html += plugin.Version; html += "
"; html += "
"; html += "
"; html += "
"; return html; } function renderPlugins(page, plugins, showNoPluginsMessage) { ApiClient.getJSON(ApiClient.getUrl("web/configurationpages") + "?pageType=PluginConfiguration").then(function(configPages) { populateList(page, plugins, configPages, showNoPluginsMessage) }) } function populateList(page, plugins, pluginConfigurationPages, showNoPluginsMessage) { plugins = plugins.sort(function(plugin1, plugin2) { return plugin1.Name > plugin2.Name ? 1 : -1 }); var html = plugins.map(function(p) { return getPluginCardHtml(p, pluginConfigurationPages) }).join(""), installedPluginsElement = page.querySelector(".installedPlugins"); installedPluginsElement.removeEventListener("click", onInstalledPluginsClick), installedPluginsElement.addEventListener("click", onInstalledPluginsClick), plugins.length ? (installedPluginsElement.classList.add("itemsContainer"), installedPluginsElement.classList.add("vertical-wrap"), installedPluginsElement.innerHTML = html) : (showNoPluginsMessage && (html += '
', html += "

" + globalize.translate("MessageNoPluginsInstalled") + "

", html += '

', html += globalize.translate("BrowsePluginCatalogMessage"), html += "

", html += "
"), installedPluginsElement.innerHTML = html), loading.hide() } function showPluginMenu(page, elem) { var card = dom.parentWithClass(elem, "card"), id = card.getAttribute("data-id"), name = card.getAttribute("data-name"), configHref = card.querySelector(".cardContent").getAttribute("href"), menuItems = []; configHref && menuItems.push({ name: globalize.translate("ButtonSettings"), id: "open", ironIcon: "mode-edit" }), menuItems.push({ name: globalize.translate("ButtonUninstall"), id: "delete", ironIcon: "delete" }), require(["actionsheet"], function(actionsheet) { actionsheet.show({ items: menuItems, positionTo: elem, callback: function(resultId) { switch (resultId) { case "open": Dashboard.navigate(configHref); break; case "delete": deletePlugin(page, id, name) } } }) }) } function reloadList(page) { loading.show(), ApiClient.getInstalledPlugins().then(function(plugins) { renderPlugins(page, plugins, !0) }) } function getTabs() { return [{ href: "plugins.html", name: globalize.translate("TabMyPlugins") }, { href: "plugincatalog.html", name: globalize.translate("TabCatalog") }] } function onInstalledPluginsClick(e) { if (dom.parentWithClass(e.target, "noConfigPluginCard")) showNoConfigurationMessage(); else if (dom.parentWithClass(e.target, "connectModePluginCard")) showConnectMessage(); else { var btnCardMenu = dom.parentWithClass(e.target, "btnCardMenu"); btnCardMenu && showPluginMenu(dom.parentWithClass(btnCardMenu, "page"), btnCardMenu) } } pageIdOn("pageshow", "pluginsPage", function() { libraryMenu.setTabs("plugins", 0, getTabs), reloadList(this) }), window.PluginsPage = { renderPlugins: renderPlugins } });