define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"], 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) { ApiClient.getJSON(ApiClient.getUrl("web/configurationpages") + "?pageType=PluginConfiguration").then(function(configPages) { populateList(page, plugins, configPages); }); } function populateList(page, plugins, pluginConfigurationPages) { plugins = plugins.sort(function(plugin1, plugin2) { return plugin1.Name > plugin2.Name ? 1 : -1 }); var html = plugins.map(function(p) { return getPluginCardHtml(p, pluginConfigurationPages) }).join(""); var installedPluginsElement = page.querySelector(".installedPlugins"); installedPluginsElement.removeEventListener("click", onInstalledPluginsClick); installedPluginsElement.addEventListener("click", onInstalledPluginsClick); if (plugins.length) { installedPluginsElement.classList.add("itemsContainer"); installedPluginsElement.classList.add("vertical-wrap"); } else { 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"); var id = card.getAttribute("data-id"); var name = card.getAttribute("data-name"); var configHref = card.querySelector(".cardContent").getAttribute("href"); var menuItems = []; if (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); }); } function getTabs() { return [{ href: "installedplugins.html", name: globalize.translate("TabMyPlugins") }, { href: "availableplugins.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 } });