2014-02-21 14:44:10 -07:00
|
|
|
|
(function ($, document, window) {
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
function getNode(item, folderState, selected) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-03-04 22:41:58 -07:00
|
|
|
|
var htmlName = getNodeInnerHtml(item);
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
var node = {
|
|
|
|
|
id: item.Id,
|
|
|
|
|
text: htmlName,
|
|
|
|
|
|
|
|
|
|
state: {
|
|
|
|
|
opened: item.IsFolder && folderState == 'open',
|
|
|
|
|
selected: selected
|
|
|
|
|
},
|
2014-03-04 22:41:58 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
li_attr: {}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (item.IsFolder) {
|
|
|
|
|
node.children = [
|
|
|
|
|
{
|
|
|
|
|
text: 'Loading...',
|
|
|
|
|
icon: false
|
|
|
|
|
}];
|
|
|
|
|
node.icon = false;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
node.icon = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (node.state.opened) {
|
|
|
|
|
node.li_attr.loadedFromServer = true;
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
if (selected) {
|
|
|
|
|
selectedNodeId = item.Id;
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
return node;
|
2014-03-04 22:41:58 -07:00
|
|
|
|
}
|
2014-07-16 20:17:14 -07:00
|
|
|
|
|
2014-03-04 22:41:58 -07:00
|
|
|
|
function getNodeInnerHtml(item) {
|
2014-07-16 20:17:14 -07:00
|
|
|
|
|
2014-02-21 14:44:10 -07:00
|
|
|
|
var name = item.Name;
|
|
|
|
|
|
|
|
|
|
// Channel number
|
|
|
|
|
if (item.Number) {
|
|
|
|
|
name = item.Number + " - " + name;
|
|
|
|
|
}
|
|
|
|
|
if (item.IndexNumber != null && item.Type != "Season") {
|
|
|
|
|
name = item.IndexNumber + " - " + name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var cssClass = "editorNode";
|
|
|
|
|
|
|
|
|
|
if (item.LocationType == "Offline") {
|
|
|
|
|
cssClass += " offlineEditorNode";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var htmlName = "<div class='" + cssClass + "'>";
|
|
|
|
|
|
|
|
|
|
if (item.LockData) {
|
|
|
|
|
htmlName += '<img src="css/images/editor/lock.png" />';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
htmlName += name;
|
|
|
|
|
|
|
|
|
|
if (!item.LocalTrailerCount && item.Type == "Movie") {
|
2014-07-16 20:17:14 -07:00
|
|
|
|
htmlName += '<img src="css/images/editor/missingtrailer.png" title="' + Globalize.translate('MissingLocalTrailer') + '" />';
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!item.ImageTags || !item.ImageTags.Primary) {
|
2014-07-16 20:17:14 -07:00
|
|
|
|
htmlName += '<img src="css/images/editor/missingprimaryimage.png" title="' + Globalize.translate('MissingPrimaryImage') + '" />';
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!item.BackdropImageTags || !item.BackdropImageTags.length) {
|
2014-03-17 18:45:41 -07:00
|
|
|
|
if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "TvChannel" && item.Type !== "MusicAlbum") {
|
2014-07-16 20:17:14 -07:00
|
|
|
|
htmlName += '<img src="css/images/editor/missingbackdrop.png" title="' + Globalize.translate('MissingBackdropImage') + '" />';
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!item.ImageTags || !item.ImageTags.Logo) {
|
|
|
|
|
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "Series" || item.Type == "MusicArtist" || item.Type == "BoxSet") {
|
2014-07-16 20:17:14 -07:00
|
|
|
|
htmlName += '<img src="css/images/editor/missinglogo.png" title="' + Globalize.translate('MissingLogoImage') + '" />';
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (item.Type == "Episode" && item.LocationType == "Virtual") {
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (item.PremiereDate && (new Date().getTime() >= parseISO8601Date(item.PremiereDate, { toLocal: true }).getTime())) {
|
2014-07-16 20:17:14 -07:00
|
|
|
|
htmlName += '<img src="css/images/editor/missing.png" title="' + Globalize.translate('MissingEpisode') + '" />';
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
htmlName += "</div>";
|
|
|
|
|
|
2014-03-04 22:41:58 -07:00
|
|
|
|
return htmlName;
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
function loadChildrenOfRootNode(page, scope, callback) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-07-16 20:17:14 -07:00
|
|
|
|
var promise2 = ApiClient.getLiveTvChannels({ limit: 0 });
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-06-07 12:46:24 -07:00
|
|
|
|
$.when(promise2).done(function (response2) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-06-10 10:36:06 -07:00
|
|
|
|
var result = response2;
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
var nodes = [];
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
nodes.push({
|
|
|
|
|
|
|
|
|
|
id: 'MediaFolders',
|
|
|
|
|
text: Globalize.translate('HeaderMediaFolders'),
|
|
|
|
|
state: {
|
|
|
|
|
opened: true
|
|
|
|
|
},
|
|
|
|
|
li_attr: {
|
|
|
|
|
itemtype: 'mediafolders',
|
|
|
|
|
loadedFromServer: true
|
|
|
|
|
},
|
|
|
|
|
icon: false
|
|
|
|
|
});
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-06-10 10:36:06 -07:00
|
|
|
|
if (result.TotalRecordCount) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
nodes.push({
|
|
|
|
|
|
|
|
|
|
id: 'livetv',
|
|
|
|
|
text: Globalize.translate('HeaderLiveTV'),
|
|
|
|
|
state: {
|
|
|
|
|
opened: false
|
|
|
|
|
},
|
|
|
|
|
li_attr: {
|
|
|
|
|
itemtype: 'livetv'
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
text: 'Loading...',
|
|
|
|
|
icon: false
|
|
|
|
|
}],
|
|
|
|
|
icon: false
|
|
|
|
|
});
|
|
|
|
|
}
|
2014-03-02 19:17:12 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
callback.call(scope, nodes);
|
2014-03-02 19:17:12 -07:00
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
nodesToLoad.push('MediaFolders');
|
2014-02-21 14:44:10 -07:00
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function loadLiveTvChannels(service, openItems, callback) {
|
|
|
|
|
|
2015-08-24 20:13:04 -07:00
|
|
|
|
ApiClient.getLiveTvChannels({ ServiceName: service, AddCurrentProgram: false }).done(function (result) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
var nodes = result.Items.map(function (i) {
|
|
|
|
|
|
|
|
|
|
var state = openItems.indexOf(i.Id) == -1 ? 'closed' : 'open';
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
return getNode(i, state, false);
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
callback(nodes);
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
function loadMediaFolders(page, scope, openItems, callback) {
|
2014-06-07 12:46:24 -07:00
|
|
|
|
|
2014-07-01 22:16:59 -07:00
|
|
|
|
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders")).done(function (result) {
|
2014-06-07 12:46:24 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
var nodes = result.Items.map(function (n) {
|
2014-06-07 12:46:24 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
var state = openItems.indexOf(n.Id) == -1 ? 'closed' : 'open';
|
2014-06-07 12:46:24 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
return getNode(n, state, false);
|
2014-06-07 12:46:24 -07:00
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
callback.call(scope, nodes);
|
2014-06-07 12:46:24 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
for (var i = 0, length = nodes.length; i < length; i++) {
|
|
|
|
|
if (nodes[i].state.opened) {
|
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
nodesToLoad.push(nodes[i].id);
|
2014-12-20 18:23:56 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2014-06-07 12:46:24 -07:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
function loadNode(page, scope, node, openItems, selectedId, currentUser, callback) {
|
|
|
|
|
|
|
|
|
|
var id = node.id;
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
if (id == '#') {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
loadChildrenOfRootNode(page, scope, callback);
|
2014-02-21 14:44:10 -07:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
if (id == 'livetv') {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
loadLiveTvChannels(id, openItems, callback);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
if (id == 'MediaFolders') {
|
2014-06-07 12:46:24 -07:00
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
loadMediaFolders(page, scope, openItems, callback);
|
2014-06-07 12:46:24 -07:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2014-02-21 14:44:10 -07:00
|
|
|
|
var query = {
|
|
|
|
|
ParentId: id,
|
|
|
|
|
Fields: 'Settings'
|
|
|
|
|
};
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
var itemtype = node.li_attr.itemtype;
|
|
|
|
|
|
2014-02-21 14:44:10 -07:00
|
|
|
|
if (itemtype != "Season" && itemtype != "Series") {
|
|
|
|
|
query.SortBy = "SortName";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ApiClient.getItems(Dashboard.getCurrentUserId(), query).done(function (result) {
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
var nodes = result.Items.map(function (n) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
var state = openItems.indexOf(n.Id) == -1 ? 'closed' : 'open';
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
return getNode(n, state, n.Id == selectedId);
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
callback.call(scope, nodes);
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
for (var i = 0, length = nodes.length; i < length; i++) {
|
|
|
|
|
if (nodes[i].state.opened) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
nodesToLoad.push(nodes[i].id);
|
2014-12-20 18:23:56 -07:00
|
|
|
|
}
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-20 18:23:56 -07:00
|
|
|
|
function scrollToNode(page, id) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
var elem = $('#' + id, page)[0];
|
|
|
|
|
|
|
|
|
|
if (elem) {
|
2015-01-22 23:15:15 -07:00
|
|
|
|
// commenting out for now because it's causing the whole window to scroll in chrome
|
2015-07-15 04:26:47 -07:00
|
|
|
|
elem.scrollIntoView();
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function initializeTree(page, currentUser, openItems, selectedId) {
|
|
|
|
|
|
2015-05-08 20:48:43 -07:00
|
|
|
|
MetadataEditor.loadJsTree().done(function () {
|
|
|
|
|
initializeTreeInternal(page, currentUser, openItems, selectedId);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
function onNodeSelect(event, data) {
|
|
|
|
|
var node = data.node;
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
var eventData = {
|
|
|
|
|
id: node.id,
|
|
|
|
|
itemType: node.li_attr.itemtype
|
|
|
|
|
};
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
if (eventData.itemType != 'livetv' && eventData.itemType != 'mediafolders') {
|
|
|
|
|
$(this).trigger('itemclicked', [eventData]);
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
function onNodeOpen(event, data) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
var page = $(this).parents('.page')[0];
|
|
|
|
|
var node = data.node;
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
if (node.children && node.children) {
|
|
|
|
|
loadNodesToLoad(page, node);
|
|
|
|
|
}
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
node.li_attr.loadedFromServer = true;
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
function onNodeLoad(event, data) {
|
2014-12-20 18:23:56 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
var page = $(this).parents('.page')[0];
|
|
|
|
|
var node = data.node;
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
if (node.children && node.children) {
|
|
|
|
|
loadNodesToLoad(page, node);
|
|
|
|
|
}
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
|
2014-12-20 18:23:56 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
node.li_attr.loadedFromServer = true;
|
2014-12-20 18:23:56 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
|
|
|
|
|
}
|
|
|
|
|
}
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
function initializeTreeInternal(page, currentUser, openItems, selectedId) {
|
2014-12-20 18:23:56 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
nodesToLoad = [];
|
|
|
|
|
selectedNodeId = null;
|
2014-12-20 18:23:56 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
$.jstree.destroy();
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
$('.libraryTree', page).jstree({
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
"plugins": ["wholerow"],
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
core: {
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
check_callback: true,
|
|
|
|
|
data: function (node, callback) {
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
loadNode(page, this, node, openItems, selectedId, currentUser, callback);
|
|
|
|
|
},
|
2014-12-20 22:57:06 -07:00
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
themes: {
|
|
|
|
|
variant: 'large'
|
|
|
|
|
}
|
2014-12-20 18:23:56 -07:00
|
|
|
|
}
|
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
}).off('select_node.jstree', onNodeSelect).on('select_node.jstree', onNodeSelect).off('open_node.jstree', onNodeOpen).on('open_node.jstree', onNodeOpen).off('load_node.jstree', onNodeLoad).on('load_node.jstree', onNodeLoad);
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}
|
2014-07-16 20:17:14 -07:00
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
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) {
|
|
|
|
|
|
2015-05-08 20:48:43 -07:00
|
|
|
|
setTimeout(function () {
|
|
|
|
|
|
2014-12-20 22:57:06 -07:00
|
|
|
|
scrollToNode($.mobile.activePage, selectedNodeId);
|
|
|
|
|
}, 500);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var nodesToLoad = [];
|
|
|
|
|
var selectedNodeId;
|
|
|
|
|
|
2014-03-04 22:41:58 -07:00
|
|
|
|
function updateEditorNode(page, item) {
|
|
|
|
|
|
|
|
|
|
var elem = $('#' + item.Id + '>a', page)[0];
|
|
|
|
|
|
|
|
|
|
if (elem == null) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$('.editorNode', elem).remove();
|
|
|
|
|
|
|
|
|
|
$(elem).append(getNodeInnerHtml(item));
|
2014-07-16 20:17:14 -07:00
|
|
|
|
|
2014-03-04 22:41:58 -07:00
|
|
|
|
if (item.IsFolder) {
|
|
|
|
|
|
|
|
|
|
var tree = jQuery.jstree._reference(".libraryTree");
|
|
|
|
|
var currentNode = tree._get_node(null, false);
|
|
|
|
|
tree.refresh(currentNode);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$(document).on('itemsaved', ".metadataEditorPage", function (e, item) {
|
|
|
|
|
|
|
|
|
|
updateEditorNode(this, item);
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
2015-06-08 22:56:46 -07:00
|
|
|
|
}).on('pagebeforeshowready', ".metadataEditorPage", function () {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
var page = this;
|
|
|
|
|
|
|
|
|
|
Dashboard.getCurrentUser().done(function (user) {
|
|
|
|
|
|
|
|
|
|
var id = MetadataEditor.currentItemId;
|
|
|
|
|
|
|
|
|
|
if (id) {
|
|
|
|
|
|
|
|
|
|
ApiClient.getAncestorItems(id, user.Id).done(function (ancestors) {
|
|
|
|
|
|
|
|
|
|
var ids = ancestors.map(function (i) {
|
|
|
|
|
return i.Id;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
initializeTree(page, user, ids, id);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
initializeTree(page, user, []);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
2015-06-25 14:50:56 -07:00
|
|
|
|
}).on('pageinitdepends', ".metadataEditorPage", function () {
|
|
|
|
|
|
|
|
|
|
Dashboard.importCss('css/metadataeditor.css');
|
2015-08-24 13:37:34 -07:00
|
|
|
|
window.MetadataEditor = new metadataEditor();
|
2015-06-25 14:50:56 -07:00
|
|
|
|
|
2014-02-21 14:44:10 -07:00
|
|
|
|
}).on('pagebeforehide', ".metadataEditorPage", function () {
|
|
|
|
|
|
|
|
|
|
var page = this;
|
|
|
|
|
|
2015-06-29 11:45:42 -07:00
|
|
|
|
$('.libraryTree', page).off('select_node.jstree', onNodeSelect).off('open_node.jstree', onNodeOpen).off('load_node.jstree', onNodeLoad);
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function metadataEditor() {
|
|
|
|
|
|
|
|
|
|
var self = this;
|
|
|
|
|
|
|
|
|
|
function ensureInitialValues() {
|
|
|
|
|
|
2014-06-20 08:10:40 -07:00
|
|
|
|
if (self.currentItemType || self.currentItemId) {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2014-10-21 05:42:02 -07:00
|
|
|
|
var url = window.location.hash || getWindowUrl();
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
var id = getParameterByName('id', url);
|
|
|
|
|
|
|
|
|
|
if (id) {
|
|
|
|
|
self.currentItemId = id;
|
|
|
|
|
self.currentItemType = null;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
self.getItemPromise = function () {
|
|
|
|
|
|
|
|
|
|
var currentItemType = self.currentItemType;
|
|
|
|
|
var currentItemId = self.currentItemId;
|
|
|
|
|
|
2014-03-17 18:45:41 -07:00
|
|
|
|
if (currentItemType == "TvChannel") {
|
2014-02-21 14:44:10 -07:00
|
|
|
|
return ApiClient.getLiveTvChannel(currentItemId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (currentItemId) {
|
|
|
|
|
return ApiClient.getItem(Dashboard.getCurrentUserId(), currentItemId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ApiClient.getRootFolder(Dashboard.getCurrentUserId());
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
self.getEditQueryString = function (item) {
|
|
|
|
|
|
2014-06-20 08:10:40 -07:00
|
|
|
|
var query = "id=" + item.Id;
|
2014-02-21 14:44:10 -07:00
|
|
|
|
|
|
|
|
|
return query;
|
|
|
|
|
};
|
|
|
|
|
|
2015-05-08 20:48:43 -07:00
|
|
|
|
self.loadJsTree = function () {
|
|
|
|
|
|
|
|
|
|
var deferred = DeferredBuilder.Deferred();
|
|
|
|
|
|
|
|
|
|
require([
|
2015-07-28 12:53:57 -07:00
|
|
|
|
'bower_components/jstree/dist/jstree.min'
|
2015-05-08 20:48:43 -07:00
|
|
|
|
], function () {
|
|
|
|
|
|
2015-07-28 12:53:57 -07:00
|
|
|
|
Dashboard.importCss('thirdparty/jstree/themes/default/style.min.css');
|
2015-05-08 20:48:43 -07:00
|
|
|
|
deferred.resolve();
|
|
|
|
|
});
|
|
|
|
|
return deferred.promise();
|
|
|
|
|
};
|
|
|
|
|
|
2014-02-21 14:44:10 -07:00
|
|
|
|
ensureInitialValues();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
})(jQuery, document, window);
|