1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00
jellyfin-web/src/bower_components/emby-webcomponents/metadataeditor/metadataeditor.js

482 lines
34 KiB
JavaScript
Raw Normal View History

2018-10-23 01:05:09 +03:00
define(["itemHelper", "dom", "layoutManager", "dialogHelper", "datetime", "loading", "focusManager", "connectionManager", "globalize", "require", "shell", "emby-checkbox", "emby-input", "emby-select", "listViewStyle", "emby-textarea", "emby-button", "paper-icon-button-light", "css!./../formdialog", "clearButtonStyle", "flexStyles"], function(itemHelper, dom, layoutManager, dialogHelper, datetime, loading, focusManager, connectionManager, globalize, require, shell) {
"use strict";
function isDialog() {
return currentContext.classList.contains("dialog")
}
function closeDialog(isSubmitted) {
isDialog() && dialogHelper.close(currentContext)
}
function submitUpdatedItem(form, item) {
function afterContentTypeUpdated() {
require(["toast"], function(toast) {
toast(globalize.translate("sharedcomponents#MessageItemSaved"))
}), loading.hide(), closeDialog(!0)
}
var apiClient = getApiClient();
apiClient.updateItem(item).then(function() {
var newContentType = form.querySelector("#selectContentType").value || "";
(metadataEditorInfo.ContentType || "") !== newContentType ? apiClient.ajax({
url: apiClient.getUrl("Items/" + item.Id + "/ContentType", {
ContentType: newContentType
}),
type: "POST"
}).then(function() {
afterContentTypeUpdated()
}) : afterContentTypeUpdated()
})
}
function getSelectedAirDays(form) {
var checkedItems = form.querySelectorAll(".chkAirDay:checked") || [];
return Array.prototype.map.call(checkedItems, function(c) {
return c.getAttribute("data-day")
})
}
function getAlbumArtists(form) {
return form.querySelector("#txtAlbumArtist").value.trim().split(";").filter(function(s) {
return s.length > 0
}).map(function(a) {
return {
Name: a
}
})
}
function getArtists(form) {
return form.querySelector("#txtArtist").value.trim().split(";").filter(function(s) {
return s.length > 0
}).map(function(a) {
return {
Name: a
}
})
}
function getDateValue(form, element, property) {
var val = form.querySelector(element).value;
if (!val) return null;
if (currentItem[property]) {
var date = datetime.parseISO8601Date(currentItem[property], !0),
parts = date.toISOString().split("T");
if (0 === parts[0].indexOf(val)) {
val += "T" + parts[1]
}
}
return val
}
function onSubmit(e) {
loading.show();
var form = this,
item = {
Id: currentItem.Id,
Name: form.querySelector("#txtName").value,
OriginalTitle: form.querySelector("#txtOriginalName").value,
ForcedSortName: form.querySelector("#txtSortName").value,
CommunityRating: form.querySelector("#txtCommunityRating").value,
CriticRating: form.querySelector("#txtCriticRating").value,
IndexNumber: form.querySelector("#txtIndexNumber").value || null,
AirsBeforeSeasonNumber: form.querySelector("#txtAirsBeforeSeason").value,
AirsAfterSeasonNumber: form.querySelector("#txtAirsAfterSeason").value,
AirsBeforeEpisodeNumber: form.querySelector("#txtAirsBeforeEpisode").value,
ParentIndexNumber: form.querySelector("#txtParentIndexNumber").value || null,
DisplayOrder: form.querySelector("#selectDisplayOrder").value,
Album: form.querySelector("#txtAlbum").value,
AlbumArtists: getAlbumArtists(form),
ArtistItems: getArtists(form),
Overview: form.querySelector("#txtOverview").value,
Status: form.querySelector("#selectStatus").value,
AirDays: getSelectedAirDays(form),
AirTime: form.querySelector("#txtAirTime").value,
Genres: getListValues(form.querySelector("#listGenres")),
Tags: getListValues(form.querySelector("#listTags")),
Studios: getListValues(form.querySelector("#listStudios")).map(function(element) {
return {
Name: element
}
}),
PremiereDate: getDateValue(form, "#txtPremiereDate", "PremiereDate"),
DateCreated: getDateValue(form, "#txtDateAdded", "DateCreated"),
EndDate: getDateValue(form, "#txtEndDate", "EndDate"),
ProductionYear: form.querySelector("#txtProductionYear").value,
AspectRatio: form.querySelector("#txtOriginalAspectRatio").value,
Video3DFormat: form.querySelector("#select3dFormat").value,
OfficialRating: form.querySelector("#selectOfficialRating").value,
CustomRating: form.querySelector("#selectCustomRating").value,
People: currentItem.People,
LockData: form.querySelector("#chkLockData").checked,
LockedFields: Array.prototype.filter.call(form.querySelectorAll(".selectLockedField"), function(c) {
return !c.checked
}).map(function(c) {
return c.getAttribute("data-value")
})
};
item.ProviderIds = Object.assign({}, currentItem.ProviderIds);
var idElements = form.querySelectorAll(".txtExternalId");
if (Array.prototype.map.call(idElements, function(idElem) {
var providerKey = idElem.getAttribute("data-providerkey");
item.ProviderIds[providerKey] = idElem.value
}), item.PreferredMetadataLanguage = form.querySelector("#selectLanguage").value, item.PreferredMetadataCountryCode = form.querySelector("#selectCountry").value, "Person" === currentItem.Type) {
var placeOfBirth = form.querySelector("#txtPlaceOfBirth").value;
item.ProductionLocations = placeOfBirth ? [placeOfBirth] : []
}
if ("Series" === currentItem.Type) {
var seriesRuntime = form.querySelector("#txtSeriesRuntime").value;
item.RunTimeTicks = seriesRuntime ? 6e8 * seriesRuntime : null
}
var tagline = form.querySelector("#txtTagline").value;
return item.Taglines = tagline ? [tagline] : [], submitUpdatedItem(form, item), e.preventDefault(), e.stopPropagation(), !1
}
function getListValues(list) {
return Array.prototype.map.call(list.querySelectorAll(".textValue"), function(el) {
return el.textContent
})
}
function addElementToList(source, sortCallback) {
require(["prompt"], function(prompt) {
prompt({
label: "Value:"
}).then(function(text) {
var list = dom.parentWithClass(source, "editableListviewContainer").querySelector(".paperList"),
items = getListValues(list);
items.push(text), populateListView(list, items, sortCallback)
})
})
}
function removeElementFromList(source) {
var el = dom.parentWithClass(source, "listItem");
el.parentNode.removeChild(el)
}
function editPerson(context, person, index) {
require(["personEditor"], function(personEditor) {
personEditor.show(person).then(function(updatedPerson) {
-1 === index && currentItem.People.push(updatedPerson), populatePeople(context, currentItem.People)
})
})
}
function showMoreMenu(context, button, user) {
require(["itemContextMenu"], function(itemContextMenu) {
var item = currentItem;
itemContextMenu.show({
item: item,
positionTo: button,
edit: !1,
editImages: !0,
editSubtitles: !0,
sync: !1,
share: !1,
play: !1,
queue: !1,
user: user
}).then(function(result) {
result.deleted ? afterDeleted(context, item) : result.updated && reload(context, item.Id, item.ServerId)
})
})
}
function afterDeleted(context, item) {
var parentId = item.ParentId || item.SeasonId || item.SeriesId;
parentId ? reload(context, parentId, item.ServerId) : require(["appRouter"], function(appRouter) {
appRouter.goHome()
})
}
function onEditorClick(e) {
var btnRemoveFromEditorList = dom.parentWithClass(e.target, "btnRemoveFromEditorList");
if (btnRemoveFromEditorList) return void removeElementFromList(btnRemoveFromEditorList);
var btnAddTextItem = dom.parentWithClass(e.target, "btnAddTextItem");
btnAddTextItem && addElementToList(btnAddTextItem)
}
function getApiClient() {
return connectionManager.getApiClient(currentItem.ServerId)
}
function init(context, apiClient) {
context.querySelector(".externalIds").addEventListener("click", function(e) {
var btnOpenExternalId = dom.parentWithClass(e.target, "btnOpenExternalId");
if (btnOpenExternalId) {
var field = context.querySelector("#" + btnOpenExternalId.getAttribute("data-fieldid")),
formatString = field.getAttribute("data-formatstring");
field.value && shell.openUrl(formatString.replace("{0}", field.value))
}
}), context.querySelector(".btnCancel").addEventListener("click", function() {
closeDialog(!1)
}), context.querySelector(".btnMore").addEventListener("click", function(e) {
getApiClient().getCurrentUser().then(function(user) {
showMoreMenu(context, e.target, user)
})
}), context.querySelector(".btnHeaderSave").addEventListener("click", function(e) {
context.querySelector(".btnSave").click()
}), context.querySelector("#chkLockData").addEventListener("click", function(e) {
e.target.checked ? hideElement(".providerSettingsContainer") : showElement(".providerSettingsContainer")
}), context.removeEventListener("click", onEditorClick), context.addEventListener("click", onEditorClick);
var form = context.querySelector("form");
form.removeEventListener("submit", onSubmit), form.addEventListener("submit", onSubmit), context.querySelector("#btnAddPerson").addEventListener("click", function(event, data) {
editPerson(context, {}, -1)
}), context.querySelector("#peopleList").addEventListener("click", function(e) {
var index, btnDeletePerson = dom.parentWithClass(e.target, "btnDeletePerson");
btnDeletePerson && (index = parseInt(btnDeletePerson.getAttribute("data-index")), currentItem.People.splice(index, 1), populatePeople(context, currentItem.People));
var btnEditPerson = dom.parentWithClass(e.target, "btnEditPerson");
btnEditPerson && (index = parseInt(btnEditPerson.getAttribute("data-index")), editPerson(context, currentItem.People[index], index))
})
}
function getItem(itemId, serverId) {
var apiClient = connectionManager.getApiClient(serverId);
return itemId ? apiClient.getItem(apiClient.getCurrentUserId(), itemId) : apiClient.getRootFolder(apiClient.getCurrentUserId())
}
function getEditorConfig(itemId, serverId) {
var apiClient = connectionManager.getApiClient(serverId);
return itemId ? apiClient.getJSON(apiClient.getUrl("Items/" + itemId + "/MetadataEditor")) : Promise.resolve({})
}
function populateCountries(select, allCountries) {
var html = "";
html += "<option value=''></option>";
for (var i = 0, length = allCountries.length; i < length; i++) {
var culture = allCountries[i];
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>"
}
select.innerHTML = html
}
function populateLanguages(select, languages) {
var html = "";
html += "<option value=''></option>";
for (var i = 0, length = languages.length; i < length; i++) {
var culture = languages[i];
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + "</option>"
}
select.innerHTML = html
}
function renderContentTypeOptions(context, metadataInfo) {
metadataInfo.ContentTypeOptions.length ? showElement("#fldContentType", context) : hideElement("#fldContentType", context);
var html = metadataInfo.ContentTypeOptions.map(function(i) {
return '<option value="' + i.Value + '">' + i.Name + "</option>"
}).join(""),
selectEl = context.querySelector("#selectContentType");
selectEl.innerHTML = html, selectEl.value = metadataInfo.ContentType || ""
}
function loadExternalIds(context, item, externalIds) {
for (var html = "", providerIds = item.ProviderIds || {}, i = 0, length = externalIds.length; i < length; i++) {
var idInfo = externalIds[i],
id = "txt1" + idInfo.Key,
formatString = idInfo.UrlFormatString || "",
labelText = globalize.translate("sharedcomponents#LabelDynamicExternalId").replace("{0}", idInfo.Name);
html += '<div class="inputContainer">', html += '<div class="flex align-items-center">';
var value = providerIds[idInfo.Key] || "";
html += '<div class="flex-grow">', html += '<input is="emby-input" class="txtExternalId" value="' + value + '" data-providerkey="' + idInfo.Key + '" data-formatstring="' + formatString + '" id="' + id + '" label="' + labelText + '"/>', html += "</div>", formatString && (html += '<button type="button" is="paper-icon-button-light" class="btnOpenExternalId align-self-flex-end" data-fieldid="' + id + '"><i class="md-icon">open_in_browser</i></button>'), html += "</div>", html += "</div>"
}
context.querySelector(".externalIds", context).innerHTML = html, externalIds.length ? context.querySelector(".externalIdsSection").classList.remove("hide") : context.querySelector(".externalIdsSection").classList.add("hide")
}
function hideElement(selector, context, multiple) {
if (context = context || document, "string" == typeof selector) {
var elements = multiple ? context.querySelectorAll(selector) : [context.querySelector(selector)];
Array.prototype.forEach.call(elements, function(el) {
el && el.classList.add("hide")
})
} else selector.classList.add("hide")
}
function showElement(selector, context, multiple) {
if (context = context || document, "string" == typeof selector) {
var elements = multiple ? context.querySelectorAll(selector) : [context.querySelector(selector)];
Array.prototype.forEach.call(elements, function(el) {
el && el.classList.remove("hide")
})
} else selector.classList.remove("hide")
}
function setFieldVisibilities(context, item) {
item.Path && !1 !== item.EnableMediaSourceDisplay ? showElement("#fldPath", context) : hideElement("#fldPath", context), "Series" === item.Type || "Movie" === item.Type || "Trailer" === item.Type ? showElement("#fldOriginalName", context) : hideElement("#fldOriginalName", context), "Series" === item.Type ? showElement("#fldSeriesRuntime", context) : hideElement("#fldSeriesRuntime", context), "Series" === item.Type || "Person" === item.Type ? showElement("#fldEndDate", context) : hideElement("#fldEndDate", context), "MusicAlbum" === item.Type ? showElement("#albumAssociationMessage", context) : hideElement("#albumAssociationMessage", context), "Movie" === item.Type || "Trailer" === item.Type ? showElement("#fldCriticRating", context) : hideElement("#fldCriticRating", context), "Series" === item.Type ? (showElement("#fldStatus", context), showElement("#fldAirDays", context), showElement("#fldAirTime", context)) : (hideElement("#fldStatus", context), hideElement("#fldAirDays", context), hideElement("#fldAirTime", context)), "Video" === item.MediaType && "TvChannel" !== item.Type ? showElement("#fld3dFormat", context) : hideElement("#fld3dFormat", context), "Audio" === item.Type ? showElement("#fldAlbumArtist", context) : hideElement("#fldAlbumArtist", context), "Audio" === item.Type || "MusicVideo" === item.Type ? (showElement("#fldArtist", context), showElement("#fldAlbum", context)) : (hideElement("#fldArtist", context), hideElement("#fldAlbum", context)), "Episode" === item.Type && 0 === item.ParentIndexNumber ? showElement("#collapsibleSpecialEpisodeInfo", context) : hideElement("#collapsibleSpecialEpisodeInfo", context), "Person" === item.Type || "Genre" === item.Type || "Studio" === item.Type || "GameGenre" === item.Type || "MusicGenre" === item.Type || "TvChannel" === item.Type || "Book" === item.Type ? hideElement("#peopleCollapsible", context) : showElement("#peopleCollapsible", context), "Person" === item.Type || "Genre" === item.Type || "Studio" === item.Type || "GameGenre" === item.Type || "MusicGenre" === item.Type || "TvChannel" === item.Type ? (hideElement("#fldCommunityRating", context), hideElement("#genresCollapsible", context), hideElement("#studiosCollapsible", context), "TvChannel" === item.Type ? showElement("#fldOfficialRating", context) : hideElement("#fldOfficialRating", context), hideElement("#fldCustomRating", context)) : (showElement("#fldCommunityRating", context), showElement("#genresCollapsible", context), showElement("#studiosCollapsible", context), showElement("#fldOfficialRating", context), showElement("#fldCustomRating", context)), showElement("#tagsCollapsible", context), "TvChannel" === item.Type ? (hideElement("#metadataSettingsCollapsible", context), hideElement("#fldPremiereDate", context), hideElement("#fldDateAdded", context), hideElement("#fldYear", context)) : (showElement("#metadataSettingsCollapsible", context), showElement("#fldPremiereDate", context), showElement("#fldDateAdded", context), showElement("#fldYear", context)), "TvChannel" === item.Type ? hideElement(".overviewContainer", context) : showElement(".overviewContainer", context), "Person" === item.Type ? (context.querySelector("#txtProductionYear").label(globalize.translate("sharedcomponents#LabelBirthYear")), context.querySelector("#txtPremiereDate").label(globalize.translate("sharedcomponents#LabelBirthDate")), context.querySelector("#txtEndDate").label(globalize.translate("sharedcomponents#LabelDeathDate")), showElement("#fldPlaceOfBirth")) : (context.querySelector("#txtProductionYear").label(globalize.translate("sharedcomponents#LabelYear")), context.querySelector("#txtPremiereDate").label(globalize.translate("sharedcomponents#LabelReleaseDate")), context.querySelector("#txtEndDate").label(globalize.translate("sharedcomponents#LabelEndDate")), hideElement("#fldPlaceOfBirth")), "Video" === item.MediaType && "TvChannel" !== item.Type ? showElement("#fldOriginalAspectRatio") : hideElement("#fldOriginalAspectRatio"), "Audio" === item.Type || "Episode" === item.Type || "Season" === item.Type ? (showElement("#f
}
function fillItemInfo(context, item, parentalRatingOptions) {
var select = context.querySelector("#selectOfficialRating");
populateRatings(parentalRatingOptions, select, item.OfficialRating), select.value = item.OfficialRating || "", select = context.querySelector("#selectCustomRating"), populateRatings(parentalRatingOptions, select, item.CustomRating), select.value = item.CustomRating || "";
var selectStatus = context.querySelector("#selectStatus");
populateStatus(selectStatus), selectStatus.value = item.Status || "", context.querySelector("#select3dFormat", context).value = item.Video3DFormat || "", Array.prototype.forEach.call(context.querySelectorAll(".chkAirDay", context), function(el) {
el.checked = -1 !== (item.AirDays || []).indexOf(el.getAttribute("data-day"))
}), populateListView(context.querySelector("#listGenres"), item.Genres), populatePeople(context, item.People || []), populateListView(context.querySelector("#listStudios"), (item.Studios || []).map(function(element) {
return element.Name || ""
})), populateListView(context.querySelector("#listTags"), item.Tags);
var lockData = item.LockData || !1,
chkLockData = context.querySelector("#chkLockData");
chkLockData.checked = lockData, chkLockData.checked ? hideElement(".providerSettingsContainer", context) : showElement(".providerSettingsContainer", context), fillMetadataSettings(context, item, item.LockedFields), context.querySelector("#txtPath").value = item.Path || "", context.querySelector("#txtName").value = item.Name || "", context.querySelector("#txtOriginalName").value = item.OriginalTitle || "", context.querySelector("#txtOverview").value = item.Overview || "", context.querySelector("#txtTagline").value = item.Taglines && item.Taglines.length ? item.Taglines[0] : "", context.querySelector("#txtSortName").value = item.ForcedSortName || "", context.querySelector("#txtCommunityRating").value = item.CommunityRating || "", context.querySelector("#txtCriticRating").value = item.CriticRating || "", context.querySelector("#txtIndexNumber").value = null == item.IndexNumber ? "" : item.IndexNumber, context.querySelector("#txtParentIndexNumber").value = null == item.ParentIndexNumber ? "" : item.ParentIndexNumber, context.querySelector("#txtAirsBeforeSeason").value = "AirsBeforeSeasonNumber" in item ? item.AirsBeforeSeasonNumber : "", context.querySelector("#txtAirsAfterSeason").value = "AirsAfterSeasonNumber" in item ? item.AirsAfterSeasonNumber : "", context.querySelector("#txtAirsBeforeEpisode").value = "AirsBeforeEpisodeNumber" in item ? item.AirsBeforeEpisodeNumber : "", context.querySelector("#txtAlbum").value = item.Album || "", context.querySelector("#txtAlbumArtist").value = (item.AlbumArtists || []).map(function(a) {
return a.Name
}).join(";"), item.Type, context.querySelector("#selectDisplayOrder").value = item.DisplayOrder || "", context.querySelector("#txtArtist").value = (item.ArtistItems || []).map(function(a) {
return a.Name
}).join(";");
var date;
if (item.DateCreated) try {
date = datetime.parseISO8601Date(item.DateCreated, !0), context.querySelector("#txtDateAdded").value = date.toISOString().slice(0, 10)
} catch (e) {
context.querySelector("#txtDateAdded").value = ""
} else context.querySelector("#txtDateAdded").value = "";
if (item.PremiereDate) try {
date = datetime.parseISO8601Date(item.PremiereDate, !0), context.querySelector("#txtPremiereDate").value = date.toISOString().slice(0, 10)
} catch (e) {
context.querySelector("#txtPremiereDate").value = ""
} else context.querySelector("#txtPremiereDate").value = "";
if (item.EndDate) try {
date = datetime.parseISO8601Date(item.EndDate, !0), context.querySelector("#txtEndDate").value = date.toISOString().slice(0, 10)
} catch (e) {
context.querySelector("#txtEndDate").value = ""
} else context.querySelector("#txtEndDate").value = "";
context.querySelector("#txtProductionYear").value = item.ProductionYear || "", context.querySelector("#txtAirTime").value = item.AirTime || "";
var placeofBirth = item.ProductionLocations && item.ProductionLocations.length ? item.ProductionLocations[0] : "";
if (context.querySelector("#txtPlaceOfBirth").value = placeofBirth, context.querySelector("#txtOriginalAspectRatio").value = item.AspectRatio || "", context.querySelector("#selectLanguage").value = item.PreferredMetadataLanguage || "", context.querySelector("#selectCountry").value = item.PreferredMetadataCountryCode || "", item.RunTimeTicks) {
var minutes = item.RunTimeTicks / 6e8;
context.querySelector("#txtSeriesRuntime").value = Math.round(minutes)
} else context.querySelector("#txtSeriesRuntime", context).value = ""
}
function populateRatings(allParentalRatings, select, currentValue) {
var html = "";
html += "<option value=''></option>";
var i, length, rating, ratings = [],
currentValueFound = !1;
for (i = 0, length = allParentalRatings.length; i < length; i++) rating = allParentalRatings[i], ratings.push({
Name: rating.Name,
Value: rating.Name
}), rating.Name === currentValue && (currentValueFound = !0);
for (currentValue && !currentValueFound && ratings.push({
Name: currentValue,
Value: currentValue
}), i = 0, length = ratings.length; i < length; i++) rating = ratings[i], html += "<option value='" + rating.Value + "'>" + rating.Name + "</option>";
select.innerHTML = html
}
function populateStatus(select) {
var html = "";
html += "<option value=''></option>", html += "<option value='Continuing'>" + globalize.translate("sharedcomponents#Continuing") + "</option>", html += "<option value='Ended'>" + globalize.translate("sharedcomponents#Ended") + "</option>", select.innerHTML = html
}
function populateListView(list, items, sortCallback) {
items = items || [], void 0 === sortCallback ? items.sort(function(a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase())
}) : items = sortCallback(items);
for (var html = "", i = 0; i < items.length; i++) html += '<div class="listItem">', html += '<i class="md-icon listItemIcon" style="background-color:#333;">live_tv</i>', html += '<div class="listItemBody">', html += '<div class="textValue">', html += items[i], html += "</div>", html += "</div>", html += '<button type="button" is="paper-icon-button-light" data-index="' + i + '" class="btnRemoveFromEditorList autoSize"><i class="md-icon">delete</i></button>', html += "</div>";
list.innerHTML = html
}
function populatePeople(context, people) {
for (var html = "", elem = context.querySelector("#peopleList"), i = 0, length = people.length; i < length; i++) {
var person = people[i];
html += '<div class="listItem">', html += '<i class="md-icon listItemIcon" style="background-color:#333;">person</i>', html += '<div class="listItemBody">', html += '<button style="text-align:left;" type="button" class="btnEditPerson clearButton" data-index="' + i + '">', html += '<div class="textValue">', html += person.Name || "", html += "</div>", person.Role && "" !== person.Role && (html += '<div class="secondary">' + person.Role + "</div>"), html += "</button>", html += "</div>", html += '<button type="button" is="paper-icon-button-light" data-index="' + i + '" class="btnDeletePerson autoSize"><i class="md-icon">delete</i></button>', html += "</div>"
}
elem.innerHTML = html
}
function getLockedFieldsHtml(fields, currentFields) {
for (var html = "", i = 0; i < fields.length; i++) {
var field = fields[i],
name = field.name,
value = field.value || field.name,
checkedHtml = -1 === currentFields.indexOf(value) ? " checked" : "";
html += "<label>", html += '<input type="checkbox" is="emby-checkbox" class="selectLockedField" data-value="' + value + '"' + checkedHtml + "/>", html += "<span>" + name + "</span>", html += "</label>"
}
return html
}
function fillMetadataSettings(context, item, lockedFields) {
var container = context.querySelector(".providerSettingsContainer");
lockedFields = lockedFields || [];
var lockedFieldsList = [{
name: globalize.translate("sharedcomponents#Name"),
value: "Name"
}, {
name: globalize.translate("sharedcomponents#Overview"),
value: "Overview"
}, {
name: globalize.translate("sharedcomponents#Genres"),
value: "Genres"
}, {
name: globalize.translate("sharedcomponents#ParentalRating"),
value: "OfficialRating"
}, {
name: globalize.translate("sharedcomponents#People"),
value: "Cast"
}];
"Person" === item.Type ? lockedFieldsList.push({
name: globalize.translate("sharedcomponents#BirthLocation"),
value: "ProductionLocations"
}) : lockedFieldsList.push({
name: globalize.translate("sharedcomponents#ProductionLocations"),
value: "ProductionLocations"
}), "Series" === item.Type && lockedFieldsList.push({
name: globalize.translate("Runtime"),
value: "Runtime"
}), lockedFieldsList.push({
name: globalize.translate("sharedcomponents#Studios"),
value: "Studios"
}), lockedFieldsList.push({
name: globalize.translate("sharedcomponents#Tags"),
value: "Tags"
});
var html = "";
html += "<h2>" + globalize.translate("sharedcomponents#HeaderEnabledFields") + "</h2>", html += "<p>" + globalize.translate("sharedcomponents#HeaderEnabledFieldsHelp") + "</p>", html += getLockedFieldsHtml(lockedFieldsList, lockedFields), container.innerHTML = html
}
function reload(context, itemId, serverId) {
loading.show(), Promise.all([getItem(itemId, serverId), getEditorConfig(itemId, serverId)]).then(function(responses) {
var item = responses[0];
metadataEditorInfo = responses[1], currentItem = item;
var languages = metadataEditorInfo.Cultures,
countries = metadataEditorInfo.Countries;
renderContentTypeOptions(context, metadataEditorInfo), loadExternalIds(context, item, metadataEditorInfo.ExternalIdInfos), populateLanguages(context.querySelector("#selectLanguage"), languages), populateCountries(context.querySelector("#selectCountry"), countries), setFieldVisibilities(context, item), fillItemInfo(context, item, metadataEditorInfo.ParentalRatingOptions), "Video" === item.MediaType && "Episode" !== item.Type && "TvChannel" !== item.Type ? showElement("#fldTagline", context) : hideElement("#fldTagline", context), loading.hide()
})
}
function centerFocus(elem, horiz, on) {
require(["scrollHelper"], function(scrollHelper) {
var fn = on ? "on" : "off";
scrollHelper.centerFocus[fn](elem, horiz)
})
}
function show(itemId, serverId, resolve, reject) {
loading.show(), require(["text!./metadataeditor.template.html"], function(template) {
var dialogOptions = {
removeOnClose: !0,
scrollY: !1
};
layoutManager.tv ? dialogOptions.size = "fullscreen" : dialogOptions.size = "medium-tall";
var dlg = dialogHelper.createDialog(dialogOptions);
dlg.classList.add("formDialog");
var html = "";
html += globalize.translateDocument(template, "sharedcomponents"), dlg.innerHTML = html, layoutManager.tv && centerFocus(dlg.querySelector(".formDialogContent"), !1, !0), dialogHelper.open(dlg), dlg.addEventListener("close", function() {
layoutManager.tv && centerFocus(dlg.querySelector(".formDialogContent"), !1, !1), resolve()
}), currentContext = dlg, init(dlg, connectionManager.getApiClient(serverId)), reload(dlg, itemId, serverId)
})
}
var currentContext, metadataEditorInfo, currentItem;
return {
show: function(itemId, serverId) {
return new Promise(function(resolve, reject) {
return show(itemId, serverId, resolve, reject)
})
},
embed: function(elem, itemId, serverId) {
return new Promise(function(resolve, reject) {
loading.show(), require(["text!./metadataeditor.template.html"], function(template) {
elem.innerHTML = globalize.translateDocument(template, "sharedcomponents"), elem.querySelector(".formDialogFooter").classList.remove("formDialogFooter"), elem.querySelector(".btnHeaderSave").classList.remove("hide"), elem.querySelector(".btnCancel").classList.add("hide"), currentContext = elem, init(elem, connectionManager.getApiClient(serverId)), reload(elem, itemId, serverId), focusManager.autoFocus(elem)
})
})
}
}
});