From 5fc92c915fb7eb8c632ed2e07d11ad419a175c83 Mon Sep 17 00:00:00 2001 From: dkanada Date: Mon, 6 May 2019 17:26:18 -0700 Subject: [PATCH] deminify all library related pages --- .../libraryoptionseditor.js | 492 +++++++++++++----- .../libraryoptionseditor.template.html | 5 + .../medialibraryeditor/medialibraryeditor.js | 155 ++++-- src/controllers/medialibrarypage.js | 192 ++++--- 4 files changed, 600 insertions(+), 244 deletions(-) diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.js b/src/components/libraryoptionseditor/libraryoptionseditor.js index 2a12cb3bc..055691adb 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.js +++ b/src/components/libraryoptionseditor/libraryoptionseditor.js @@ -3,146 +3,258 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct function populateLanguages(parent) { return ApiClient.getCultures().then(function(languages) { - populateLanguagesIntoSelect(parent.querySelector("#selectLanguage"), languages), populateLanguagesIntoList(parent.querySelector(".subtitleDownloadLanguages"), languages) - }) + populateLanguagesIntoSelect(parent.querySelector("#selectLanguage"), languages); + populateLanguagesIntoList(parent.querySelector(".subtitleDownloadLanguages"), languages); + }); } function populateLanguagesIntoSelect(select, languages) { var html = ""; html += ""; - for (var i = 0, length = languages.length; i < length; i++) { + for (var i = 0; i < languages.length; i++) { var culture = languages[i]; - html += "" + html += ""; } - select.innerHTML = html + select.innerHTML = html; } function populateLanguagesIntoList(element, languages) { - for (var html = "", i = 0, length = languages.length; i < length; i++) { + var html = ""; + for (var i = 0; i < languages.length; i++) { var culture = languages[i]; - html += '" + html += '"; } - element.innerHTML = html + element.innerHTML = html; } function populateCountries(select) { return ApiClient.getCountries().then(function(allCountries) { var html = ""; html += ""; - for (var i = 0, length = allCountries.length; i < length; i++) { + for (var i = 0; i < allCountries.length; i++) { var culture = allCountries[i]; - html += "" + html += ""; } - select.innerHTML = html + select.innerHTML = html; }) } function populateRefreshInterval(select) { var html = ""; - html += "", html += [30, 60, 90].map(function(val) { - return "" - }).join(""), select.innerHTML = html + html += ""; + html += [30, 60, 90].map(function(val) { + return ""; + }).join(""); + select.innerHTML = html; } function renderMetadataReaders(page, plugins) { - var html = "", - elem = page.querySelector(".metadataReaders"); + var html = ""; + var elem = page.querySelector(".metadataReaders"); + if (plugins.length < 1) return elem.innerHTML = "", elem.classList.add("hide"), !1; - html += '

' + globalize.translate("LabelMetadataReaders") + "

", html += '
'; - for (var i = 0, length = plugins.length; i < length; i++) { + html += '

' + globalize.translate("LabelMetadataReaders") + "

"; + html += '
'; + for (var i = 0; i < plugins.length; i++) { var plugin = plugins[i]; - html += '
', html += 'live_tv', html += '
', html += '

', html += plugin.Name, html += "

", html += "
", i > 0 ? html += '' : plugins.length > 1 && (html += ''), html += "
" + html += '
'; + html += 'live_tv'; + html += '
'; + html += '

'; + html += plugin.Name; + html += "

"; + html += "
"; + if (i > 0) { + html += ''; + } else if (plugins.length > 1) { + html += ''; + } + html += "
"; } - return html += "
", html += '
' + globalize.translate("LabelMetadataReadersHelp") + "
", plugins.length < 2 ? elem.classList.add("hide") : elem.classList.remove("hide"), elem.innerHTML = html, !0 + html += "
"; + html += '
' + globalize.translate("LabelMetadataReadersHelp") + "
"; + if (plugins.length < 2) { + elem.classList.add("hide"); + } else { + elem.classList.remove("hide"); + } + elem.innerHTML = html; + return true; } function renderMetadataSavers(page, metadataSavers) { - var html = "", - elem = page.querySelector(".metadataSavers"); - if (!metadataSavers.length) return elem.innerHTML = "", elem.classList.add("hide"), !1; - html += '

' + globalize.translate("LabelMetadataSavers") + "

", html += '
'; - for (var i = 0, length = metadataSavers.length; i < length; i++) { + var html = ""; + var elem = page.querySelector(".metadataSavers"); + if (!metadataSavers.length) return elem.innerHTML = "", elem.classList.add("hide"), false; + html += '

' + globalize.translate("LabelMetadataSavers") + "

"; + html += '
'; + for (var i = 0; i < metadataSavers.length; i++) { var plugin = metadataSavers[i]; - html += '" + html += '"; } - return html += "
", html += '
' + globalize.translate("LabelMetadataSaversHelp") + "
", elem.innerHTML = html, elem.classList.remove("hide"), !0 + html += "
"; + html += '
' + globalize.translate("LabelMetadataSaversHelp") + "
"; + elem.innerHTML = html; + elem.classList.remove("hide"); + return true; } function getMetadataFetchersForTypeHtml(availableTypeOptions, libraryOptionsForType) { - var html = "", - plugins = availableTypeOptions.MetadataFetchers; - if (plugins = getOrderedPlugins(plugins, libraryOptionsForType.MetadataFetcherOrder || []), !plugins.length) return html; - html += '
', html += '

' + globalize.translate("LabelTypeMetadataDownloaders", availableTypeOptions.Type) + "

", html += '
'; - for (var i = 0, length = plugins.length; i < length; i++) { + var html = ""; + var plugins = availableTypeOptions.MetadataFetchers; + + plugins = getOrderedPlugins(plugins, libraryOptionsForType.MetadataFetcherOrder || []); + if (!plugins.length) return html; + + html += '
'; + html += '

' + globalize.translate("LabelTypeMetadataDownloaders", availableTypeOptions.Type) + "

"; + html += '
'; + for (var i = 0; i < plugins.length; i++) { var plugin = plugins[i]; html += '
'; - var isChecked = libraryOptionsForType.MetadataFetchers ? -1 !== libraryOptionsForType.MetadataFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled, - checkedHtml = isChecked ? ' checked="checked"' : ""; - html += '", html += '
', html += '

', html += plugin.Name, html += "

", html += "
", i > 0 ? html += '' : plugins.length > 1 && (html += ''), html += "
" + var isChecked = libraryOptionsForType.MetadataFetchers ? -1 !== libraryOptionsForType.MetadataFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled; + var checkedHtml = isChecked ? ' checked="checked"' : ""; + html += '"; + html += '
'; + html += '

'; + html += plugin.Name; + html += "

"; + html += "
"; + i > 0 ? html += '' : plugins.length > 1 && (html += ''), html += "
" } - return html += "
", html += '
' + globalize.translate("LabelMetadataDownloadersHelp") + "
", html += "
" + html += "
"; + html += '
' + globalize.translate("LabelMetadataDownloadersHelp") + "
"; + html += ""; + return html; } function getTypeOptions(allOptions, type) { - for (var allTypeOptions = allOptions.TypeOptions || [], i = 0, length = allTypeOptions.length; i < length; i++) { + var allTypeOptions = allOptions.TypeOptions || []; + for (var i = 0; i < allTypeOptions.length; i++) { var typeOptions = allTypeOptions[i]; - if (typeOptions.Type === type) return typeOptions + if (typeOptions.Type === type) return typeOptions; } - return null + return null; } function renderMetadataFetchers(page, availableOptions, libraryOptions) { - for (var html = "", elem = page.querySelector(".metadataFetchers"), i = 0, length = availableOptions.TypeOptions.length; i < length; i++) { + var html = ""; + var elem = page.querySelector(".metadataFetchers"); + for (var i = 0; i < availableOptions.TypeOptions.length; i++) { var availableTypeOptions = availableOptions.TypeOptions[i]; - html += getMetadataFetchersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {}) + html += getMetadataFetchersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {}); } - return elem.innerHTML = html, html ? (elem.classList.remove("hide"), page.querySelector(".fldAutoRefreshInterval").classList.remove("hide"), page.querySelector(".fldMetadataLanguage").classList.remove("hide"), page.querySelector(".fldMetadataCountry").classList.remove("hide")) : (elem.classList.add("hide"), page.querySelector(".fldAutoRefreshInterval").classList.add("hide"), page.querySelector(".fldMetadataLanguage").classList.add("hide"), page.querySelector(".fldMetadataCountry").classList.add("hide")), !0 + elem.innerHTML = html; + if (html) { + elem.classList.remove("hide"); + page.querySelector(".fldAutoRefreshInterval").classList.remove("hide"); + page.querySelector(".fldMetadataLanguage").classList.remove("hide"); + page.querySelector(".fldMetadataCountry").classList.remove("hide"); + } else { + elem.classList.add("hide"); + page.querySelector(".fldAutoRefreshInterval").classList.add("hide"); + page.querySelector(".fldMetadataLanguage").classList.add("hide"); + page.querySelector(".fldMetadataCountry").classList.add("hide"); + } + return true; } function renderSubtitleFetchers(page, availableOptions, libraryOptions) { - try { - var html = "", - elem = page.querySelector(".subtitleFetchers"), - html = "", - plugins = availableOptions.SubtitleFetchers; - if (plugins = getOrderedPlugins(plugins, libraryOptions.SubtitleFetcherOrder || []), !plugins.length) return html; - html += '

' + globalize.translate("LabelSubtitleDownloaders") + "

", html += '
'; - for (var i = 0, length = plugins.length; i < length; i++) { - var plugin = plugins[i]; - html += '
'; - var isChecked = libraryOptions.DisabledSubtitleFetchers ? -1 === libraryOptions.DisabledSubtitleFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled, - checkedHtml = isChecked ? ' checked="checked"' : ""; - html += '", html += '
', html += '

', html += plugin.Name, html += "

", "Open Subtitles" === plugin.Name && (html += '
', html += globalize.translate("OpenSubtitleInstructions"), html += "
"), html += "
", i > 0 ? html += '' : plugins.length > 1 && (html += ''), html += "
" + var html = ""; + var elem = page.querySelector(".subtitleFetchers"); + + var plugins = availableOptions.SubtitleFetchers; + plugins = getOrderedPlugins(plugins, libraryOptions.SubtitleFetcherOrder || []); + if (!plugins.length) return html; + + html += '

' + globalize.translate("LabelSubtitleDownloaders") + "

"; + html += '
'; + for (var i = 0; i < plugins.length; i++) { + var plugin = plugins[i]; + html += '
'; + var isChecked = libraryOptions.DisabledSubtitleFetchers ? -1 === libraryOptions.DisabledSubtitleFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled; + var checkedHtml = isChecked ? ' checked="checked"' : ""; + html += '"; + html += '
'; + html += '

'; + html += plugin.Name; + html += "

"; + if (plugin.Name === "Open Subtitles") { + html += '
'; + html += globalize.translate("OpenSubtitleInstructions"); + html += "
"; } - html += "
", html += '
' + globalize.translate("SubtitleDownloadersHelp") + "
", elem.innerHTML = html - } catch (err) { - alert(err) + html += "
"; + if (i > 0) { + html += ''; + } else if (plugins.length > 1) { + html += ''; + } + html += "
"; } + html += "
"; + html += '
' + globalize.translate("SubtitleDownloadersHelp") + "
"; + elem.innerHTML = html; } function getImageFetchersForTypeHtml(availableTypeOptions, libraryOptionsForType) { - var html = "", - plugins = availableTypeOptions.ImageFetchers; - if (plugins = getOrderedPlugins(plugins, libraryOptionsForType.ImageFetcherOrder || []), !plugins.length) return html; - html += '
', html += '
', html += '

' + globalize.translate("HeaderTypeImageFetchers", availableTypeOptions.Type) + "

"; + var html = ""; + var plugins = availableTypeOptions.ImageFetchers; + + plugins = getOrderedPlugins(plugins, libraryOptionsForType.ImageFetcherOrder || []); + if (!plugins.length) return html; + + html += '
'; + html += '
'; + html += '

' + globalize.translate("HeaderTypeImageFetchers", availableTypeOptions.Type) + "

"; var supportedImageTypes = availableTypeOptions.SupportedImageTypes || []; - (supportedImageTypes.length > 1 || 1 === supportedImageTypes.length && "Primary" !== supportedImageTypes[0]) && (html += '"), html += "
", html += '
'; - for (var i = 0, length = plugins.length; i < length; i++) { + if (supportedImageTypes.length > 1 || 1 === supportedImageTypes.length && "Primary" !== supportedImageTypes[0]) { + html += '"; + } + html += "
"; + html += '
'; + for (var i = 0; i < plugins.length; i++) { var plugin = plugins[i]; html += '
'; - var isChecked = libraryOptionsForType.ImageFetchers ? -1 !== libraryOptionsForType.ImageFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled, - checkedHtml = isChecked ? ' checked="checked"' : ""; - html += '", html += '
', html += '

', html += plugin.Name, html += "

", html += "
", i > 0 ? html += '' : plugins.length > 1 && (html += ''), html += "
" + var isChecked = libraryOptionsForType.ImageFetchers ? -1 !== libraryOptionsForType.ImageFetchers.indexOf(plugin.Name) : plugin.DefaultEnabled; + var checkedHtml = isChecked ? ' checked="checked"' : ""; + html += '"; + html += '
'; + html += '

'; + html += plugin.Name; + html += "

"; + html += "
"; + if (i > 0) { + html += ''; + } else if (plugins.length > 1) { + html += ''; + } + html += "
"; } - return html += "
", html += '
' + globalize.translate("LabelImageFetchersHelp") + "
", html += "
" + html += "
"; + html += '
' + globalize.translate("LabelImageFetchersHelp") + "
"; + html += ""; + return html; } function renderImageFetchers(page, availableOptions, libraryOptions) { - for (var html = "", elem = page.querySelector(".imageFetchers"), i = 0, length = availableOptions.TypeOptions.length; i < length; i++) { + var html = ""; + var elem = page.querySelector(".imageFetchers"); + for (var i = 0; i < availableOptions.TypeOptions.length; i++) { var availableTypeOptions = availableOptions.TypeOptions[i]; - html += getImageFetchersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {}) + html += getImageFetchersForTypeHtml(availableTypeOptions, getTypeOptions(libraryOptions, availableTypeOptions.Type) || {}); } - return elem.innerHTML = html, html ? (elem.classList.remove("hide"), page.querySelector(".chkDownloadImagesInAdvanceContainer").classList.remove("hide"), page.querySelector(".chkSaveLocalContainer").classList.remove("hide")) : (elem.classList.add("hide"), page.querySelector(".chkDownloadImagesInAdvanceContainer").classList.add("hide"), page.querySelector(".chkSaveLocalContainer").classList.add("hide")), !0 + elem.innerHTML = html; + if (html) { + elem.classList.remove("hide"); + page.querySelector(".chkDownloadImagesInAdvanceContainer").classList.remove("hide"); + page.querySelector(".chkSaveLocalContainer").classList.remove("hide"); + } else { + elem.classList.add("hide"); + page.querySelector(".chkDownloadImagesInAdvanceContainer").classList.add("hide"); + page.querySelector(".chkSaveLocalContainer").classList.add("hide"); + } + return true; } function populateMetadataSettings(parent, contentType, isNewLibrary) { @@ -151,15 +263,30 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct LibraryContentType: contentType, IsNewLibrary: isNewLibrary })).then(function(availableOptions) { - currentAvailableOptions = availableOptions, parent.availableOptions = availableOptions, renderMetadataSavers(parent, availableOptions.MetadataSavers), renderMetadataReaders(parent, availableOptions.MetadataReaders), renderMetadataFetchers(parent, availableOptions, {}), renderSubtitleFetchers(parent, availableOptions, {}), renderImageFetchers(parent, availableOptions, {}), availableOptions.SubtitleFetchers.length ? parent.querySelector(".subtitleDownloadSettings").classList.remove("hide") : parent.querySelector(".subtitleDownloadSettings").classList.add("hide") + currentAvailableOptions = availableOptions; + parent.availableOptions = availableOptions; + renderMetadataSavers(parent, availableOptions.MetadataSavers); + renderMetadataReaders(parent, availableOptions.MetadataReaders); + renderMetadataFetchers(parent, availableOptions, {}); + renderSubtitleFetchers(parent, availableOptions, {}); + renderImageFetchers(parent, availableOptions, {}); + availableOptions.SubtitleFetchers.length ? parent.querySelector(".subtitleDownloadSettings").classList.remove("hide") : parent.querySelector(".subtitleDownloadSettings").classList.add("hide") }).catch(function() { - return Promise.resolve() + return Promise.resolve(); }) } function adjustSortableListElement(elem) { var btnSortable = elem.querySelector(".btnSortable"); - elem.previousSibling ? (btnSortable.classList.add("btnSortableMoveUp"), btnSortable.classList.remove("btnSortableMoveDown"), btnSortable.querySelector("i").innerHTML = "keyboard_arrow_up") : (btnSortable.classList.remove("btnSortableMoveUp"), btnSortable.classList.add("btnSortableMoveDown"), btnSortable.querySelector("i").innerHTML = "keyboard_arrow_down") + if (elem.previousSibling) { + btnSortable.classList.add("btnSortableMoveUp"); + btnSortable.classList.remove("btnSortableMoveDown"); + btnSortable.querySelector("i").innerHTML = "keyboard_arrow_up"; + } else { + btnSortable.classList.remove("btnSortableMoveUp"); + btnSortable.classList.add("btnSortableMoveDown"); + btnSortable.querySelector("i").innerHTML = "keyboard_arrow_down"; + } } function showImageOptionsForType(type) { @@ -176,16 +303,16 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct function onImageFetchersContainerClick(e) { var btnImageOptionsForType = dom.parentWithClass(e.target, "btnImageOptionsForType"); if (btnImageOptionsForType) { - return void showImageOptionsForType(dom.parentWithClass(btnImageOptionsForType, "imageFetcher").getAttribute("data-type")) + return void showImageOptionsForType(dom.parentWithClass(btnImageOptionsForType, "imageFetcher").getAttribute("data-type")); } - onSortableContainerClick.call(this, e) + onSortableContainerClick.call(this, e); } function onSortableContainerClick(e) { var btnSortable = dom.parentWithClass(e.target, "btnSortable"); if (btnSortable) { - var li = dom.parentWithClass(btnSortable, "sortableOption"), - list = dom.parentWithClass(li, "paperList"); + var li = dom.parentWithClass(btnSortable, "sortableOption"); + var list = dom.parentWithClass(li, "paperList"); if (btnSortable.classList.contains("btnSortableMoveDown")) { var next = li.nextSibling; next && (li.parentNode.removeChild(li), next.parentNode.insertBefore(li, next.nextSibling)) @@ -198,35 +325,78 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct } function bindEvents(parent) { - parent.querySelector(".metadataReaders").addEventListener("click", onSortableContainerClick), parent.querySelector(".subtitleFetchers").addEventListener("click", onSortableContainerClick), parent.querySelector(".metadataFetchers").addEventListener("click", onSortableContainerClick), parent.querySelector(".imageFetchers").addEventListener("click", onImageFetchersContainerClick) + parent.querySelector(".metadataReaders").addEventListener("click", onSortableContainerClick); + parent.querySelector(".subtitleFetchers").addEventListener("click", onSortableContainerClick); + parent.querySelector(".metadataFetchers").addEventListener("click", onSortableContainerClick); + parent.querySelector(".imageFetchers").addEventListener("click", onImageFetchersContainerClick); } function embed(parent, contentType, libraryOptions) { currentLibraryOptions = { TypeOptions: [] - }, currentAvailableOptions = null; - var isNewLibrary = null == libraryOptions; - return isNewLibrary && parent.classList.add("newlibrary"), new Promise(function(resolve, reject) { + }; + currentAvailableOptions = null; + var isNewLibrary = null === libraryOptions; + isNewLibrary && parent.classList.add("newlibrary"); + return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest; - xhr.open("GET", "components/libraryoptionseditor/libraryoptionseditor.template.html", !0), xhr.onload = function(e) { + xhr.open("GET", "components/libraryoptionseditor/libraryoptionseditor.template.html", true); + xhr.onload = function(e) { var template = this.response; - parent.innerHTML = globalize.translateDocument(template), populateRefreshInterval(parent.querySelector("#selectAutoRefreshInterval")); + parent.innerHTML = globalize.translateDocument(template); + populateRefreshInterval(parent.querySelector("#selectAutoRefreshInterval")); var promises = [populateLanguages(parent), populateCountries(parent.querySelector("#selectCountry"))]; Promise.all(promises).then(function() { return setContentType(parent, contentType).then(function() { - libraryOptions && setLibraryOptions(parent, libraryOptions), bindEvents(parent), resolve() - }) - }) - }, xhr.send() - }) + libraryOptions && setLibraryOptions(parent, libraryOptions); + bindEvents(parent); + resolve(); + }); + }); + }; + xhr.send(); + }); } function setAdvancedVisible(parent, visible) { - for (var elems = parent.querySelectorAll(".advanced"), i = 0, length = elems.length; i < length; i++) visible ? elems[i].classList.remove("advancedHide") : elems[i].classList.add("advancedHide") + var elems = parent.querySelectorAll(".advanced"); + for (var i = 0; i < elems.length; i++) { + visible ? elems[i].classList.remove("advancedHide") : elems[i].classList.add("advancedHide"); + } } function setContentType(parent, contentType) { - return "homevideos" === contentType || "photos" === contentType ? parent.querySelector(".chkEnablePhotosContainer").classList.remove("hide") : parent.querySelector(".chkEnablePhotosContainer").classList.add("hide"), "tvshows" !== contentType && "movies" !== contentType && "homevideos" !== contentType && "musicvideos" !== contentType && "mixed" !== contentType && contentType ? parent.querySelector(".chapterSettingsSection").classList.add("hide") : parent.querySelector(".chapterSettingsSection").classList.remove("hide"), "tvshows" === contentType ? (parent.querySelector(".chkImportMissingEpisodesContainer").classList.remove("hide"), parent.querySelector(".chkAutomaticallyGroupSeriesContainer").classList.remove("hide"), parent.querySelector(".fldSeasonZeroDisplayName").classList.remove("hide"), parent.querySelector("#txtSeasonZeroName").setAttribute("required", "required")) : (parent.querySelector(".chkImportMissingEpisodesContainer").classList.add("hide"), parent.querySelector(".chkAutomaticallyGroupSeriesContainer").classList.add("hide"), parent.querySelector(".fldSeasonZeroDisplayName").classList.add("hide"), parent.querySelector("#txtSeasonZeroName").removeAttribute("required")), "books" === contentType || "boxsets" === contentType || "playlists" === contentType || "music" === contentType ? parent.querySelector(".chkEnableEmbeddedTitlesContainer").classList.add("hide") : parent.querySelector(".chkEnableEmbeddedTitlesContainer").classList.remove("hide"), populateMetadataSettings(parent, contentType) + if (contentType === "homevideos" || contentType === "photos") { + parent.querySelector(".chkEnablePhotosContainer").classList.remove("hide"); + } else { + parent.querySelector(".chkEnablePhotosContainer").classList.add("hide"); + } + + if (contentType !== "tvshows" && contentType !== "movies" && contentType !== "homevideos" && contentType !== "musicvideos" && contentType !== "mixed") { + parent.querySelector(".chapterSettingsSection").classList.add("hide"); + } else { + parent.querySelector(".chapterSettingsSection").classList.remove("hide"); + } + + if (contentType === "tvshows") { + parent.querySelector(".chkImportMissingEpisodesContainer").classList.remove("hide"); + parent.querySelector(".chkAutomaticallyGroupSeriesContainer").classList.remove("hide"); + parent.querySelector(".fldSeasonZeroDisplayName").classList.remove("hide"); + parent.querySelector("#txtSeasonZeroName").setAttribute("required", "required"); + } else { + parent.querySelector(".chkImportMissingEpisodesContainer").classList.add("hide"); + parent.querySelector(".chkAutomaticallyGroupSeriesContainer").classList.add("hide"); + parent.querySelector(".fldSeasonZeroDisplayName").classList.add("hide"); + parent.querySelector("#txtSeasonZeroName").removeAttribute("required"); + } + + if (contentType === "books" || contentType === "boxsets" || contentType === "playlists" || contentType === "music") { + parent.querySelector(".chkEnableEmbeddedTitlesContainer").classList.add("hide"); + } else { + parent.querySelector(".chkEnableEmbeddedTitlesContainer").classList.remove("hide"); + } + + return populateMetadataSettings(parent, contentType); } function setSubtitleFetchersIntoOptions(parent, options) { @@ -234,64 +404,87 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct return !elem.checked }), function(elem) { return elem.getAttribute("data-pluginname") - }), options.SubtitleFetcherOrder = Array.prototype.map.call(parent.querySelectorAll(".subtitleFetcherItem"), function(elem) { + }); + + options.SubtitleFetcherOrder = Array.prototype.map.call(parent.querySelectorAll(".subtitleFetcherItem"), function(elem) { return elem.getAttribute("data-pluginname") - }) + }); } function setMetadataFetchersIntoOptions(parent, options) { - for (var sections = parent.querySelectorAll(".metadataFetcher"), i = 0, length = sections.length; i < length; i++) { - var section = sections[i], - type = section.getAttribute("data-type"), - typeOptions = getTypeOptions(options, type); - typeOptions || (typeOptions = { - Type: type - }, options.TypeOptions.push(typeOptions)), typeOptions.MetadataFetchers = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll(".chkMetadataFetcher"), function(elem) { - return elem.checked + var sections = parent.querySelectorAll(".metadataFetcher"); + for (var i = 0; i < sections.length; i++) { + var section = sections[i]; + var type = section.getAttribute("data-type"); + var typeOptions = getTypeOptions(options, type); + if (!typeOptions) { + typeOptions = { + Type: type + }; + options.TypeOptions.push(typeOptions); + } + typeOptions.MetadataFetchers = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll(".chkMetadataFetcher"), function(elem) { + return elem.checked; }), function(elem) { - return elem.getAttribute("data-pluginname") - }), typeOptions.MetadataFetcherOrder = Array.prototype.map.call(section.querySelectorAll(".metadataFetcherItem"), function(elem) { - return elem.getAttribute("data-pluginname") - }) + return elem.getAttribute("data-pluginname"); + }); + + typeOptions.MetadataFetcherOrder = Array.prototype.map.call(section.querySelectorAll(".metadataFetcherItem"), function(elem) { + return elem.getAttribute("data-pluginname"); + }); } } function setImageFetchersIntoOptions(parent, options) { - for (var sections = parent.querySelectorAll(".imageFetcher"), i = 0, length = sections.length; i < length; i++) { - var section = sections[i], - type = section.getAttribute("data-type"), - typeOptions = getTypeOptions(options, type); - typeOptions || (typeOptions = { - Type: type - }, options.TypeOptions.push(typeOptions)), typeOptions.ImageFetchers = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll(".chkImageFetcher"), function(elem) { + var sections = parent.querySelectorAll(".imageFetcher"); + for (var i = 0; i < sections.length; i++) { + var section = sections[i]; + var type = section.getAttribute("data-type"); + var typeOptions = getTypeOptions(options, type); + if (!typeOptions) { + typeOptions = { + Type: type + }; + options.TypeOptions.push(typeOptions); + } + + typeOptions.ImageFetchers = Array.prototype.map.call(Array.prototype.filter.call(section.querySelectorAll(".chkImageFetcher"), function(elem) { return elem.checked }), function(elem) { return elem.getAttribute("data-pluginname") - }), typeOptions.ImageFetcherOrder = Array.prototype.map.call(section.querySelectorAll(".imageFetcherItem"), function(elem) { + }); + + typeOptions.ImageFetcherOrder = Array.prototype.map.call(section.querySelectorAll(".imageFetcherItem"), function(elem) { return elem.getAttribute("data-pluginname") - }) + }); } } function setImageOptionsIntoOptions(parent, options) { - for (var originalTypeOptions = (currentLibraryOptions || {}).TypeOptions || [], i = 0, length = originalTypeOptions.length; i < length; i++) { - var originalTypeOption = originalTypeOptions[i], - typeOptions = getTypeOptions(options, originalTypeOption.Type); - typeOptions || (typeOptions = { - Type: type - }, options.TypeOptions.push(typeOptions)), originalTypeOption.ImageOptions && (typeOptions.ImageOptions = originalTypeOption.ImageOptions) + var originalTypeOptions = (currentLibraryOptions || {}).TypeOptions || []; + for (var i = 0; i < originalTypeOptions.length; i++) { + var originalTypeOption = originalTypeOptions[i]; + var typeOptions = getTypeOptions(options, originalTypeOption.Type); + + if (!typeOptions) { + typeOptions = { + Type: type + }; + options.TypeOptions.push(typeOptions); + } + originalTypeOption.ImageOptions && (typeOptions.ImageOptions = originalTypeOption.ImageOptions); } } function getLibraryOptions(parent) { var options = { - EnableArchiveMediaFiles: !1, + EnableArchiveMediaFiles: false, EnablePhotos: parent.querySelector(".chkEnablePhotos").checked, EnableRealtimeMonitor: parent.querySelector(".chkEnableRealtimeMonitor").checked, ExtractChapterImagesDuringLibraryScan: parent.querySelector(".chkExtractChaptersDuringLibraryScan").checked, EnableChapterImageExtraction: parent.querySelector(".chkExtractChapterImages").checked, DownloadImagesInAdvance: parent.querySelector("#chkDownloadImagesInAdvance").checked, - EnableInternetProviders: !0, + EnableInternetProviders: true, ImportMissingEpisodes: parent.querySelector("#chkImportMissingEpisodes").checked, SaveLocalMetadata: parent.querySelector("#chkSaveLocal").checked, EnableAutomaticSeriesGrouping: parent.querySelector(".chkAutomaticallyGroupSeries").checked, @@ -311,29 +504,66 @@ define(["globalize", "dom", "emby-checkbox", "emby-select", "emby-input"], funct }), TypeOptions: [] }; - return options.LocalMetadataReaderOrder = Array.prototype.map.call(parent.querySelectorAll(".localReaderOption"), function(elem) { + + options.LocalMetadataReaderOrder = Array.prototype.map.call(parent.querySelectorAll(".localReaderOption"), function(elem) { return elem.getAttribute("data-pluginname") - }), options.SubtitleDownloadLanguages = Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll(".chkSubtitleLanguage"), function(elem) { + }); + options.SubtitleDownloadLanguages = Array.prototype.map.call(Array.prototype.filter.call(parent.querySelectorAll(".chkSubtitleLanguage"), function(elem) { return elem.checked }), function(elem) { return elem.getAttribute("data-lang") - }), setSubtitleFetchersIntoOptions(parent, options), setMetadataFetchersIntoOptions(parent, options), setImageFetchersIntoOptions(parent, options), setImageOptionsIntoOptions(parent, options), options + }); + setSubtitleFetchersIntoOptions(parent, options); + setMetadataFetchersIntoOptions(parent, options); + setImageFetchersIntoOptions(parent, options); + setImageOptionsIntoOptions(parent, options); + + return options; } function getOrderedPlugins(plugins, configuredOrder) { - return plugins = plugins.slice(0), plugins.sort(function(a, b) { + plugins = plugins.slice(0); + plugins.sort(function(a, b) { return a = configuredOrder.indexOf(a.Name), b = configuredOrder.indexOf(b.Name), a < b ? -1 : a > b ? 1 : 0 - }), plugins + }); + return plugins; } function setLibraryOptions(parent, options) { - currentLibraryOptions = options, currentAvailableOptions = parent.availableOptions, parent.querySelector("#selectLanguage").value = options.PreferredMetadataLanguage || "", parent.querySelector("#selectCountry").value = options.MetadataCountryCode || "", parent.querySelector("#selectAutoRefreshInterval").value = options.AutomaticRefreshIntervalDays || "0", parent.querySelector("#txtSeasonZeroName").value = options.SeasonZeroDisplayName || "Specials", parent.querySelector(".chkEnablePhotos").checked = options.EnablePhotos, parent.querySelector(".chkEnableRealtimeMonitor").checked = options.EnableRealtimeMonitor, parent.querySelector(".chkExtractChaptersDuringLibraryScan").checked = options.ExtractChapterImagesDuringLibraryScan, parent.querySelector(".chkExtractChapterImages").checked = options.EnableChapterImageExtraction, parent.querySelector("#chkDownloadImagesInAdvance").checked = options.DownloadImagesInAdvance, parent.querySelector("#chkSaveLocal").checked = options.SaveLocalMetadata, parent.querySelector("#chkImportMissingEpisodes").checked = options.ImportMissingEpisodes, parent.querySelector(".chkAutomaticallyGroupSeries").checked = options.EnableAutomaticSeriesGrouping, parent.querySelector("#chkEnableEmbeddedTitles").checked = options.EnableEmbeddedTitles, parent.querySelector("#chkSkipIfGraphicalSubsPresent").checked = options.SkipSubtitlesIfEmbeddedSubtitlesPresent, parent.querySelector("#chkSaveSubtitlesLocally").checked = options.SaveSubtitlesWithMedia, parent.querySelector("#chkSkipIfAudioTrackPresent").checked = options.SkipSubtitlesIfAudioTrackMatches, parent.querySelector("#chkRequirePerfectMatch").checked = options.RequirePerfectSubtitleMatch, Array.prototype.forEach.call(parent.querySelectorAll(".chkMetadataSaver"), function(elem) { + currentLibraryOptions = options; + currentAvailableOptions = parent.availableOptions; + parent.querySelector("#selectLanguage").value = options.PreferredMetadataLanguage || ""; + parent.querySelector("#selectCountry").value = options.MetadataCountryCode || ""; + parent.querySelector("#selectAutoRefreshInterval").value = options.AutomaticRefreshIntervalDays || "0"; + parent.querySelector("#txtSeasonZeroName").value = options.SeasonZeroDisplayName || "Specials"; + parent.querySelector(".chkEnablePhotos").checked = options.EnablePhotos; + parent.querySelector(".chkEnableRealtimeMonitor").checked = options.EnableRealtimeMonitor; + parent.querySelector(".chkExtractChaptersDuringLibraryScan").checked = options.ExtractChapterImagesDuringLibraryScan; + parent.querySelector(".chkExtractChapterImages").checked = options.EnableChapterImageExtraction; + parent.querySelector("#chkDownloadImagesInAdvance").checked = options.DownloadImagesInAdvance; + parent.querySelector("#chkSaveLocal").checked = options.SaveLocalMetadata; + parent.querySelector("#chkImportMissingEpisodes").checked = options.ImportMissingEpisodes; + parent.querySelector(".chkAutomaticallyGroupSeries").checked = options.EnableAutomaticSeriesGrouping; + parent.querySelector("#chkEnableEmbeddedTitles").checked = options.EnableEmbeddedTitles; + parent.querySelector("#chkSkipIfGraphicalSubsPresent").checked = options.SkipSubtitlesIfEmbeddedSubtitlesPresent; + parent.querySelector("#chkSaveSubtitlesLocally").checked = options.SaveSubtitlesWithMedia; + parent.querySelector("#chkSkipIfAudioTrackPresent").checked = options.SkipSubtitlesIfAudioTrackMatches; + parent.querySelector("#chkRequirePerfectMatch").checked = options.RequirePerfectSubtitleMatch; + Array.prototype.forEach.call(parent.querySelectorAll(".chkMetadataSaver"), function(elem) { elem.checked = options.MetadataSavers ? -1 !== options.MetadataSavers.indexOf(elem.getAttribute("data-pluginname")) : "true" === elem.getAttribute("data-defaultenabled") - }), Array.prototype.forEach.call(parent.querySelectorAll(".chkSubtitleLanguage"), function(elem) { + }); + Array.prototype.forEach.call(parent.querySelectorAll(".chkSubtitleLanguage"), function(elem) { elem.checked = !!options.SubtitleDownloadLanguages && -1 !== options.SubtitleDownloadLanguages.indexOf(elem.getAttribute("data-lang")) - }), renderMetadataReaders(parent, getOrderedPlugins(parent.availableOptions.MetadataReaders, options.LocalMetadataReaderOrder || [])), renderMetadataFetchers(parent, parent.availableOptions, options), renderImageFetchers(parent, parent.availableOptions, options), renderSubtitleFetchers(parent, parent.availableOptions, options) + }); + renderMetadataReaders(parent, getOrderedPlugins(parent.availableOptions.MetadataReaders, options.LocalMetadataReaderOrder || [])); + renderMetadataFetchers(parent, parent.availableOptions, options); + renderImageFetchers(parent, parent.availableOptions, options); + renderSubtitleFetchers(parent, parent.availableOptions, options); } - var currentLibraryOptions, currentAvailableOptions; + + var currentLibraryOptions; + var currentAvailableOptions; + return { embed: embed, setContentType: setContentType, diff --git a/src/components/libraryoptionseditor/libraryoptionseditor.template.html b/src/components/libraryoptionseditor/libraryoptionseditor.template.html index 8a53ee556..ebfdacaa1 100644 --- a/src/components/libraryoptionseditor/libraryoptionseditor.template.html +++ b/src/components/libraryoptionseditor/libraryoptionseditor.template.html @@ -39,16 +39,21 @@
+
+
${MessageEnablingOptionLongerScans}
+
+
+