define(["loading", "apphost", "dialogHelper", "connectionManager", "imageLoader", "browser", "layoutManager", "scrollHelper", "globalize", "require", "emby-checkbox", "emby-button", "paper-icon-button-light", "emby-linkbutton", "formDialogStyle", "cardStyle"], function(loading, appHost, dialogHelper, connectionManager, imageLoader, browser, layoutManager, scrollHelper, globalize, require) { "use strict"; function getBaseRemoteOptions() { var options = {}; return options.itemId = currentItemId, options } function reloadBrowsableImages(page, apiClient) { loading.show(); var options = getBaseRemoteOptions(); options.type = browsableImageType, options.startIndex = browsableImageStartIndex, options.limit = browsableImagePageSize, options.IncludeAllLanguages = page.querySelector("#chkAllLanguages").checked; var provider = selectedProvider || ""; provider && (options.ProviderName = provider), apiClient.getAvailableRemoteImages(options).then(function(result) { renderRemoteImages(page, apiClient, result, browsableImageType, options.startIndex, options.limit), page.querySelector("#selectBrowsableImageType").value = browsableImageType; var providersHtml = result.Providers.map(function(p) { return '" }), selectImageProvider = page.querySelector("#selectImageProvider"); selectImageProvider.innerHTML = '" + providersHtml, selectImageProvider.value = provider, loading.hide() }) } function renderRemoteImages(page, apiClient, imagesResult, imageType, startIndex, limit) { page.querySelector(".availableImagesPaging").innerHTML = getPagingHtml(startIndex, limit, imagesResult.TotalRecordCount); for (var html = "", i = 0, length = imagesResult.Images.length; i < length; i++) html += getRemoteImageHtml(imagesResult.Images[i], imageType, apiClient); var availableImagesList = page.querySelector(".availableImagesList"); availableImagesList.innerHTML = html, imageLoader.lazyChildren(availableImagesList); var btnNextPage = page.querySelector(".btnNextPage"), btnPreviousPage = page.querySelector(".btnPreviousPage"); btnNextPage && btnNextPage.addEventListener("click", function() { browsableImageStartIndex += browsableImagePageSize, reloadBrowsableImages(page, apiClient) }), btnPreviousPage && btnPreviousPage.addEventListener("click", function() { browsableImageStartIndex -= browsableImagePageSize, reloadBrowsableImages(page, apiClient) }) } function getPagingHtml(startIndex, limit, totalRecordCount) { var html = "", recordsEnd = Math.min(startIndex + limit, totalRecordCount), showControls = totalRecordCount > limit; return html += '
', html += '', html += (totalRecordCount ? startIndex + 1 : 0) + "-" + recordsEnd + " of " + totalRecordCount, html += "", showControls && (html += '
', html += '', html += '', html += "
"), html += "
" } function parentWithClass(elem, className) { for (; !elem.classList || !elem.classList.contains(className);) if (!(elem = elem.parentNode)) return null; return elem } function downloadRemoteImage(page, apiClient, url, type, provider) { var options = getBaseRemoteOptions(); options.Type = type, options.ImageUrl = url, options.ProviderName = provider, loading.show(), apiClient.downloadRemoteImage(options).then(function() { hasChanges = !0; var dlg = parentWithClass(page, "dialog"); dialogHelper.close(dlg) }) } function getDisplayUrl(url, apiClient) { return apiClient.getUrl("Images/Remote", { imageUrl: url }) } function getRemoteImageHtml(image, imageType, apiClient) { var tagName = layoutManager.tv ? "button" : "div", enableFooterButtons = !layoutManager.tv, html = "", cssClass = "card scalableCard imageEditorCard", cardBoxCssClass = "cardBox visualCardBox", shape = "backdrop"; return shape = "Backdrop" === imageType || "Art" === imageType || "Thumb" === imageType || "Logo" === imageType ? "backdrop" : "Banner" === imageType ? "banner" : "Disc" === imageType ? "square" : "Episode" === currentItemType ? "backdrop" : "MusicAlbum" === currentItemType || "MusicArtist" === currentItemType ? "square" : "portrait", cssClass += " " + shape + "Card " + shape + "Card-scalable", "button" === tagName ? (cssClass += " btnImageCard", layoutManager.tv && !browser.slow && (cardBoxCssClass += " cardBox-focustransform"), layoutManager.tv && (cardBoxCssClass += " card-focuscontent cardBox-withfocuscontent"), html += '', html += ""), html += "", html += "", html += "" } function initEditor(page, apiClient) { page.querySelector("#selectBrowsableImageType").addEventListener("change", function() { browsableImageType = this.value, browsableImageStartIndex = 0, selectedProvider = null, reloadBrowsableImages(page, apiClient) }), page.querySelector("#selectImageProvider").addEventListener("change", function() { browsableImageStartIndex = 0, selectedProvider = this.value, reloadBrowsableImages(page, apiClient) }), page.querySelector("#chkAllLanguages").addEventListener("change", function() { browsableImageStartIndex = 0, reloadBrowsableImages(page, apiClient) }), page.addEventListener("click", function(e) { var btnDownloadRemoteImage = parentWithClass(e.target, "btnDownloadRemoteImage"); if (btnDownloadRemoteImage) { var card = parentWithClass(btnDownloadRemoteImage, "card"); return void downloadRemoteImage(page, apiClient, card.getAttribute("data-imageurl"), card.getAttribute("data-imagetype"), card.getAttribute("data-imageprovider")) } var btnImageCard = parentWithClass(e.target, "btnImageCard"); btnImageCard && downloadRemoteImage(page, apiClient, btnImageCard.getAttribute("data-imageurl"), btnImageCard.getAttribute("data-imagetype"), btnImageCard.getAttribute("data-imageprovider")) }) } function showEditor(itemId, serverId, itemType) { loading.show(), require(["text!./imagedownloader.template.html"], function(template) { var apiClient = connectionManager.getApiClient(serverId); currentItemId = itemId, currentItemType = itemType; var dialogOptions = { removeOnClose: !0 }; layoutManager.tv ? dialogOptions.size = "fullscreen" : dialogOptions.size = "fullscreen-border"; var dlg = dialogHelper.createDialog(dialogOptions); dlg.innerHTML = globalize.translateDocument(template, "sharedcomponents"), layoutManager.tv && scrollHelper.centerFocus.on(dlg, !1), dlg.addEventListener("close", onDialogClosed), dialogHelper.open(dlg); var editorContent = dlg.querySelector(".formDialogContent"); initEditor(editorContent, apiClient), dlg.querySelector(".btnCancel").addEventListener("click", function() { dialogHelper.close(dlg) }), reloadBrowsableImages(editorContent, apiClient) }) } function onDialogClosed() { var dlg = this; layoutManager.tv && scrollHelper.centerFocus.off(dlg, !1), loading.hide(), hasChanges ? currentResolve() : currentReject() } var currentItemId, currentItemType, currentResolve, currentReject, selectedProvider, hasChanges = !1, browsableImagePageSize = browser.slow ? 6 : 30, browsableImageStartIndex = 0, browsableImageType = "Primary"; return { show: function(itemId, serverId, itemType, imageType) { return new Promise(function(resolve, reject) { currentResolve = resolve, currentReject = reject, hasChanges = !1, browsableImageStartIndex = 0, browsableImageType = imageType || "Primary", selectedProvider = null, showEditor(itemId, serverId, itemType) }) } } });