mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
add metadata editor info endpoint
This commit is contained in:
parent
8a641ab831
commit
723e217a6f
4 changed files with 100 additions and 75 deletions
|
@ -205,9 +205,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br />
|
<br />
|
||||||
<div data-role="collapsible" data-mini="true" data-collapsed="false" id="collapsibleDvdEpisodeInfo" style="display: none; margin-top: 1em;">
|
|
||||||
<h3>${HeaderAlternateEpisodeNumbers}</h3>
|
<div class="detailSection" id="collapsibleDvdEpisodeInfo" style="display: none;">
|
||||||
<div>
|
<div class="detailSectionHeader">
|
||||||
|
${HeaderAlternateEpisodeNumbers}
|
||||||
|
</div>
|
||||||
|
<div class="detailSectionContent" style="padding: 0 .5em;">
|
||||||
<br />
|
<br />
|
||||||
<div>
|
<div>
|
||||||
<label for="txtDvdSeasonNumber">${LabelDvdSeasonNumber}</label>
|
<label for="txtDvdSeasonNumber">${LabelDvdSeasonNumber}</label>
|
||||||
|
@ -223,9 +226,12 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div data-role="collapsible" data-mini="true" data-collapsed="false" id="collapsibleSpecialEpisodeInfo" style="display: none; margin-top: 1em;">
|
|
||||||
<h3>${HeaderSpecialEpisodeInfo}</h3>
|
<div class="detailSection" id="collapsibleSpecialEpisodeInfo" style="display: none;">
|
||||||
<div>
|
<div class="detailSectionHeader">
|
||||||
|
${HeaderSpecialEpisodeInfo}
|
||||||
|
</div>
|
||||||
|
<div class="detailSectionContent" style="padding: 0 .5em;">
|
||||||
<br />
|
<br />
|
||||||
<div>
|
<div>
|
||||||
<label for="txtAirsBeforeSeason">${LabelAirsBeforeSeason}</label>
|
<label for="txtAirsBeforeSeason">${LabelAirsBeforeSeason}</label>
|
||||||
|
@ -241,6 +247,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="detailSection">
|
<div class="detailSection">
|
||||||
<div class="detailSectionHeader">
|
<div class="detailSectionHeader">
|
||||||
${HeaderExternalIds}
|
${HeaderExternalIds}
|
||||||
|
|
|
@ -2,14 +2,6 @@
|
||||||
|
|
||||||
var currentItem;
|
var currentItem;
|
||||||
|
|
||||||
var languagesPromise;
|
|
||||||
var countriesPromise;
|
|
||||||
|
|
||||||
function ensureLanguagePromises() {
|
|
||||||
languagesPromise = languagesPromise || ApiClient.getCultures();
|
|
||||||
countriesPromise = countriesPromise || ApiClient.getCountries();
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateTabs(page, item) {
|
function updateTabs(page, item) {
|
||||||
|
|
||||||
var query = MetadataEditor.getEditQueryString(item);
|
var query = MetadataEditor.getEditQueryString(item);
|
||||||
|
@ -23,13 +15,10 @@
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showLoadingMsg();
|
||||||
|
|
||||||
ensureLanguagePromises();
|
|
||||||
|
|
||||||
var promise1 = MetadataEditor.getItemPromise();
|
var promise1 = MetadataEditor.getItemPromise();
|
||||||
var promise2 = languagesPromise;
|
var promise2 = ApiClient.getJSON(ApiClient.getUrl('Items/' + MetadataEditor.currentItemId + '/MetadataEditor'));
|
||||||
var promise3 = countriesPromise;
|
|
||||||
|
|
||||||
$.when(promise1, promise2, promise3).done(function (response1, response2, response3) {
|
$.when(promise1, promise2).done(function (response1, response2) {
|
||||||
|
|
||||||
var item = response1[0];
|
var item = response1[0];
|
||||||
|
|
||||||
|
@ -41,12 +30,12 @@
|
||||||
} else {
|
} else {
|
||||||
$('.editPageInnerContent', page).show();
|
$('.editPageInnerContent', page).show();
|
||||||
}
|
}
|
||||||
var languages = response2[0];
|
|
||||||
var countries = response3[0];
|
|
||||||
|
|
||||||
ApiClient.getJSON(ApiClient.getUrl("Items/" + item.Id + "/ExternalIdInfos")).done(function (idList) {
|
var metadataEditorInfo = response2[0];
|
||||||
loadExternalIds(page, item, idList);
|
var languages = metadataEditorInfo.Cultures;
|
||||||
});
|
var countries = metadataEditorInfo.Countries;
|
||||||
|
|
||||||
|
loadExternalIds(page, item, metadataEditorInfo.ExternalIdInfos);
|
||||||
|
|
||||||
Dashboard.populateLanguages($('#selectLanguage', page), languages);
|
Dashboard.populateLanguages($('#selectLanguage', page), languages);
|
||||||
Dashboard.populateCountries($('#selectCountry', page), countries);
|
Dashboard.populateCountries($('#selectCountry', page), countries);
|
||||||
|
@ -62,7 +51,7 @@
|
||||||
updateTabs(page, item);
|
updateTabs(page, item);
|
||||||
|
|
||||||
setFieldVisibilities(page, item);
|
setFieldVisibilities(page, item);
|
||||||
fillItemInfo(page, item);
|
fillItemInfo(page, item, metadataEditorInfo.ParentalRatingOptions);
|
||||||
|
|
||||||
if (item.Type == "BoxSet") {
|
if (item.Type == "BoxSet") {
|
||||||
$('#btnEditCollectionTitles', page).show();
|
$('#btnEditCollectionTitles', page).show();
|
||||||
|
@ -410,22 +399,19 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function fillItemInfo(page, item) {
|
function fillItemInfo(page, item, parentalRatingOptions) {
|
||||||
|
|
||||||
ApiClient.getParentalRatings().done(function (result) {
|
|
||||||
|
|
||||||
var select = $('#selectOfficialRating', page);
|
var select = $('#selectOfficialRating', page);
|
||||||
|
|
||||||
populateRatings(result, select, item.OfficialRating);
|
populateRatings(parentalRatingOptions, select, item.OfficialRating);
|
||||||
|
|
||||||
select.val(item.OfficialRating || "").selectmenu('refresh');
|
select.val(item.OfficialRating || "").selectmenu('refresh');
|
||||||
|
|
||||||
select = $('#selectCustomRating', page);
|
select = $('#selectCustomRating', page);
|
||||||
|
|
||||||
populateRatings(result, select, item.CustomRating);
|
populateRatings(parentalRatingOptions, select, item.CustomRating);
|
||||||
|
|
||||||
select.val(item.CustomRating || "").selectmenu('refresh');
|
select.val(item.CustomRating || "").selectmenu('refresh');
|
||||||
});
|
|
||||||
|
|
||||||
var selectStatus = $('#selectStatus', page);
|
var selectStatus = $('#selectStatus', page);
|
||||||
populateStatus(selectStatus);
|
populateStatus(selectStatus);
|
||||||
|
|
|
@ -32,6 +32,10 @@
|
||||||
node.li_attr.loadedFromServer = true;
|
node.li_attr.loadedFromServer = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selected) {
|
||||||
|
selectedNodeId = item.Id;
|
||||||
|
}
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,11 +123,6 @@
|
||||||
itemtype: 'mediafolders',
|
itemtype: 'mediafolders',
|
||||||
loadedFromServer: true
|
loadedFromServer: true
|
||||||
},
|
},
|
||||||
children: [
|
|
||||||
{
|
|
||||||
text: 'Loading...',
|
|
||||||
icon: false
|
|
||||||
}],
|
|
||||||
icon: false
|
icon: false
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -150,9 +149,7 @@
|
||||||
|
|
||||||
callback.call(scope, nodes);
|
callback.call(scope, nodes);
|
||||||
|
|
||||||
setTimeout(function () {
|
nodesToLoad.push('MediaFolders');
|
||||||
$.jstree.reference(".libraryTree", page).load_node('MediaFolders');
|
|
||||||
}, 300);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,7 +171,7 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadMediaFolders(page, openItems, callback) {
|
function loadMediaFolders(page, scope, openItems, callback) {
|
||||||
|
|
||||||
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders")).done(function (result) {
|
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders")).done(function (result) {
|
||||||
|
|
||||||
|
@ -186,22 +183,12 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
callback(nodes);
|
callback.call(scope, nodes);
|
||||||
|
|
||||||
for (var i = 0, length = nodes.length; i < length; i++) {
|
for (var i = 0, length = nodes.length; i < length; i++) {
|
||||||
if (nodes[i].state.opened) {
|
if (nodes[i].state.opened) {
|
||||||
|
|
||||||
var nodeId = nodes[i].id;
|
nodesToLoad.push(nodes[i].id);
|
||||||
setTimeout(function () {
|
|
||||||
$.jstree.reference(".libraryTree", page).load_node(nodeId);
|
|
||||||
}, 300);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nodes[i].state.selected) {
|
|
||||||
var scrollNodeId = nodes[i].id;
|
|
||||||
setTimeout(function () {
|
|
||||||
scrollToNode(page, scrollNodeId);
|
|
||||||
}, 300);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,7 +214,7 @@
|
||||||
|
|
||||||
if (id == 'MediaFolders') {
|
if (id == 'MediaFolders') {
|
||||||
|
|
||||||
loadMediaFolders(page, openItems, callback);
|
loadMediaFolders(page, scope, openItems, callback);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,17 +244,7 @@
|
||||||
for (var i = 0, length = nodes.length; i < length; i++) {
|
for (var i = 0, length = nodes.length; i < length; i++) {
|
||||||
if (nodes[i].state.opened) {
|
if (nodes[i].state.opened) {
|
||||||
|
|
||||||
var nodeId = nodes[i].id;
|
nodesToLoad.push(nodes[i].id);
|
||||||
setTimeout(function () {
|
|
||||||
$.jstree.reference(".libraryTree", page).load_node(nodeId);
|
|
||||||
}, 300);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nodes[i].state.selected) {
|
|
||||||
var scrollNodeId = nodes[i].id;
|
|
||||||
setTimeout(function () {
|
|
||||||
scrollToNode(page, scrollNodeId);
|
|
||||||
}, 300);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,6 +265,11 @@
|
||||||
|
|
||||||
function initializeTree(page, currentUser, openItems, selectedId) {
|
function initializeTree(page, currentUser, openItems, selectedId) {
|
||||||
|
|
||||||
|
nodesToLoad = [];
|
||||||
|
selectedNodeId = null;
|
||||||
|
|
||||||
|
$.jstree.destroy();
|
||||||
|
|
||||||
$('.libraryTree', page).jstree({
|
$('.libraryTree', page).jstree({
|
||||||
|
|
||||||
"plugins": ["wholerow"],
|
"plugins": ["wholerow"],
|
||||||
|
@ -322,18 +304,68 @@
|
||||||
|
|
||||||
var node = data.node;
|
var node = data.node;
|
||||||
|
|
||||||
if (!node.li_attr.loadedFromServer) {
|
if (node.children && node.children) {
|
||||||
|
loadNodesToLoad(page, node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
|
||||||
|
|
||||||
node.li_attr.loadedFromServer = true;
|
node.li_attr.loadedFromServer = true;
|
||||||
|
|
||||||
setTimeout(function () {
|
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
|
||||||
$.jstree.reference(".libraryTree", page).load_node(node.id);
|
}
|
||||||
}, 500);
|
|
||||||
|
}).off('load_node.jstree').on('load_node.jstree', function (event, data) {
|
||||||
|
|
||||||
|
var node = data.node;
|
||||||
|
|
||||||
|
if (node.children && node.children) {
|
||||||
|
loadNodesToLoad(page, node);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
|
||||||
|
|
||||||
|
node.li_attr.loadedFromServer = true;
|
||||||
|
|
||||||
|
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadNodesToLoad(page, node) {
|
||||||
|
|
||||||
|
var children = node.children;
|
||||||
|
|
||||||
|
for (var i = 0, length = children.length; i < length; i++) {
|
||||||
|
|
||||||
|
var child = children[i];
|
||||||
|
|
||||||
|
if (nodesToLoad.indexOf(child) != -1) {
|
||||||
|
|
||||||
|
nodesToLoad = nodesToLoad.filter(function (n) {
|
||||||
|
return n != child;
|
||||||
|
});
|
||||||
|
|
||||||
|
$.jstree.reference(".libraryTree", page).load_node(child, loadNodeCallback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadNodeCallback(node) {
|
||||||
|
|
||||||
|
if (selectedNodeId && node.children && node.children.indexOf(selectedNodeId) != -1) {
|
||||||
|
|
||||||
|
setTimeout(function() {
|
||||||
|
|
||||||
|
scrollToNode($.mobile.activePage, selectedNodeId);
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var nodesToLoad = [];
|
||||||
|
var selectedNodeId;
|
||||||
|
|
||||||
function updateEditorNode(page, item) {
|
function updateEditorNode(page, item) {
|
||||||
|
|
||||||
var elem = $('#' + item.Id + '>a', page)[0];
|
var elem = $('#' + item.Id + '>a', page)[0];
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function tryConnect(url) {
|
function tryConnect(url, timeout) {
|
||||||
|
|
||||||
return $.ajax({
|
return $.ajax({
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
url: url + "/mediabrowser/system/info/public",
|
url: url + "/mediabrowser/system/info/public",
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
|
|
||||||
timeout: 15000
|
timeout: timeout || 15000
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -704,7 +704,7 @@
|
||||||
|
|
||||||
//onLocalTestDone();
|
//onLocalTestDone();
|
||||||
// Try to connect to the local address
|
// Try to connect to the local address
|
||||||
tryConnect(server.LocalAddress).done(function (result) {
|
tryConnect(server.LocalAddress, 5000).done(function (result) {
|
||||||
onLocalTestDone(result, MediaBrowser.ConnectionMode.Local);
|
onLocalTestDone(result, MediaBrowser.ConnectionMode.Local);
|
||||||
}).fail(function () {
|
}).fail(function () {
|
||||||
onLocalTestDone();
|
onLocalTestDone();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue