mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update to jstree 3.0.8
This commit is contained in:
parent
db0f911a4d
commit
8a641ab831
253 changed files with 9495 additions and 8128 deletions
|
@ -239,7 +239,6 @@
|
|||
if (data.id != currentItem.Id) {
|
||||
|
||||
MetadataEditor.currentItemId = data.id;
|
||||
MetadataEditor.currentItemName = data.itemName;
|
||||
MetadataEditor.currentItemType = data.itemType;
|
||||
//Dashboard.navigate('edititemmetadata.html?id=' + data.id);
|
||||
|
||||
|
|
|
@ -524,7 +524,6 @@
|
|||
if (data.id != currentItem.Id) {
|
||||
|
||||
MetadataEditor.currentItemId = data.id;
|
||||
MetadataEditor.currentItemName = data.itemName;
|
||||
MetadataEditor.currentItemType = data.itemType;
|
||||
//Dashboard.navigate('edititemmetadata.html?id=' + data.id);
|
||||
|
||||
|
|
|
@ -136,11 +136,11 @@
|
|||
var buttonId = "btnOpen1" + idInfo.Key;
|
||||
var formatString = idInfo.UrlFormatString || '';
|
||||
|
||||
html += '<div data-role="fieldcontain">';
|
||||
html += '<div>';
|
||||
var idLabel = Globalize.translate('LabelDynamicExternalId').replace('{0}', idInfo.Name);
|
||||
html += '<label for="' + id + '">' + idLabel + '</label>';
|
||||
|
||||
html += '<div style="display: inline-block; width: 250px;">';
|
||||
html += '<div style="display: inline-block; width: 80%;">';
|
||||
|
||||
var value = providerIds[idInfo.Key] || '';
|
||||
|
||||
|
@ -392,7 +392,7 @@
|
|||
$('#fldDisplayOrder', page).show();
|
||||
|
||||
$('#labelDisplayOrder', page).html(Globalize.translate('LabelTitleDisplayOrder'));
|
||||
$('#selectDisplayOrder', page).html('<option value="SortName">'+Globalize.translate('OptionSortName')+'</option><option value="PremiereDate">'+Globalize.translate('OptionReleaseDate')+'</option>').selectmenu('refresh');
|
||||
$('#selectDisplayOrder', page).html('<option value="SortName">' + Globalize.translate('OptionSortName') + '</option><option value="PremiereDate">' + Globalize.translate('OptionReleaseDate') + '</option>').selectmenu('refresh');
|
||||
} else {
|
||||
$('#selectDisplayOrder', page).html('').selectmenu('refresh');
|
||||
$('#fldDisplayOrder', page).hide();
|
||||
|
@ -785,7 +785,7 @@
|
|||
}
|
||||
|
||||
function onDeleted(id) {
|
||||
|
||||
|
||||
var elem = $('#' + id)[0];
|
||||
|
||||
$('.libraryTree').jstree("select_node", elem, true)
|
||||
|
@ -839,9 +839,9 @@
|
|||
Keywords: editableListViewValues($("#listKeywords", form)),
|
||||
Studios: editableListViewValues($("#listStudios", form)).map(function (element) { return { Name: element }; }),
|
||||
|
||||
PremiereDate: $('#txtPremiereDate', form).val() || null,
|
||||
DateCreated: $('#txtDateAdded', form).val() || null,
|
||||
EndDate: $('#txtEndDate', form).val() || null,
|
||||
PremiereDate: EditItemMetadataPage.getDateFromForm(form, '#txtPremiereDate', 'PremiereDate'),
|
||||
DateCreated: EditItemMetadataPage.getDateFromForm(form, '#txtDateAdded', 'DateCreated'),
|
||||
EndDate: EditItemMetadataPage.getDateFromForm(form, '#txtEndDate', 'EndDate'),
|
||||
ProductionYear: $('#txtProductionYear', form).val(),
|
||||
AspectRatio: $('#txtOriginalAspectRatio', form).val(),
|
||||
Video3DFormat: $('#select3dFormat', form).val(),
|
||||
|
@ -898,6 +898,32 @@
|
|||
return false;
|
||||
};
|
||||
|
||||
self.getDateFromForm = function (form, element, property) {
|
||||
|
||||
var val = $(element, form).val();
|
||||
|
||||
if (!val) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (currentItem[property]) {
|
||||
|
||||
var date = parseISO8601Date(currentItem[property], { toLocal: true });
|
||||
|
||||
var parts = date.toISOString().split('T');
|
||||
|
||||
// If the date is the same, preserve the time
|
||||
if (parts[0].indexOf(val) == 0) {
|
||||
|
||||
var iso = parts[1];
|
||||
|
||||
val += 'T' + iso;
|
||||
}
|
||||
}
|
||||
|
||||
return val;
|
||||
};
|
||||
|
||||
self.addElementToEditableListview = function (source, sortCallback) {
|
||||
var input = $(source).parent().find('input[type="text"], select');
|
||||
var text = input.val();
|
||||
|
@ -979,8 +1005,8 @@
|
|||
var id = "txtLookup" + idInfo.Key;
|
||||
|
||||
html += '<div data-role="fieldcontain">';
|
||||
|
||||
var idLabel = Globalize.translate('LabelDynamicExternalId').replace('{0}', idInfo.Name);
|
||||
|
||||
var idLabel = Globalize.translate('LabelDynamicExternalId').replace('{0}', idInfo.Name);
|
||||
html += '<label for="' + id + '">' + idLabel + '</label>';
|
||||
|
||||
var value = providerIds[idInfo.Key] || '';
|
||||
|
@ -1245,7 +1271,6 @@
|
|||
if (data.id != currentItem.Id) {
|
||||
|
||||
MetadataEditor.currentItemId = data.id;
|
||||
MetadataEditor.currentItemName = data.itemName;
|
||||
MetadataEditor.currentItemType = data.itemType;
|
||||
//Dashboard.navigate('edititemmetadata.html?id=' + data.id);
|
||||
|
||||
|
|
|
@ -304,7 +304,6 @@
|
|||
if (data.id != currentItem.Id) {
|
||||
|
||||
MetadataEditor.currentItemId = data.id;
|
||||
MetadataEditor.currentItemName = data.itemName;
|
||||
MetadataEditor.currentItemType = data.itemType;
|
||||
//Dashboard.navigate('edititemmetadata.html?id=' + data.id);
|
||||
|
||||
|
|
|
@ -1,14 +1,38 @@
|
|||
(function ($, document, window) {
|
||||
|
||||
function getNode(item, folderState) {
|
||||
|
||||
var state = item.IsFolder ? folderState : '';
|
||||
function getNode(item, folderState, selected) {
|
||||
|
||||
var htmlName = getNodeInnerHtml(item);
|
||||
|
||||
var rel = item.IsFolder ? 'folder' : 'default';
|
||||
var node = {
|
||||
id: item.Id,
|
||||
text: htmlName,
|
||||
|
||||
return { attr: { id: item.Id, rel: rel, itemtype: item.Type }, data: htmlName, state: state };
|
||||
state: {
|
||||
opened: item.IsFolder && folderState == 'open',
|
||||
selected: selected
|
||||
},
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
function getNodeInnerHtml(item) {
|
||||
|
@ -74,7 +98,7 @@
|
|||
return htmlName;
|
||||
}
|
||||
|
||||
function loadChildrenOfRootNode(page, callback, openItems, selectedId) {
|
||||
function loadChildrenOfRootNode(page, scope, callback) {
|
||||
|
||||
var promise2 = ApiClient.getLiveTvChannels({ limit: 0 });
|
||||
|
||||
|
@ -84,22 +108,51 @@
|
|||
|
||||
var nodes = [];
|
||||
|
||||
nodes.push({ attr: { id: 'MediaFolders', rel: 'folder', itemtype: 'mediafolders' }, data: Globalize.translate('HeaderMediaFolders'), state: 'open' });
|
||||
nodes.push({
|
||||
|
||||
id: 'MediaFolders',
|
||||
text: Globalize.translate('HeaderMediaFolders'),
|
||||
state: {
|
||||
opened: true
|
||||
},
|
||||
li_attr: {
|
||||
itemtype: 'mediafolders',
|
||||
loadedFromServer: true
|
||||
},
|
||||
children: [
|
||||
{
|
||||
text: 'Loading...',
|
||||
icon: false
|
||||
}],
|
||||
icon: false
|
||||
});
|
||||
|
||||
if (result.TotalRecordCount) {
|
||||
nodes.push({ attr: { id: 'livetv', rel: 'folder', itemtype: 'livetv' }, data: Globalize.translate('HeaderLiveTV'), state: 'closed' });
|
||||
|
||||
nodes.push({
|
||||
|
||||
id: 'livetv',
|
||||
text: Globalize.translate('HeaderLiveTV'),
|
||||
state: {
|
||||
opened: false
|
||||
},
|
||||
li_attr: {
|
||||
itemtype: 'livetv'
|
||||
},
|
||||
children: [
|
||||
{
|
||||
text: 'Loading...',
|
||||
icon: false
|
||||
}],
|
||||
icon: false
|
||||
});
|
||||
}
|
||||
|
||||
callback(nodes);
|
||||
callback.call(scope, nodes);
|
||||
|
||||
if (selectedId && nodes.filter(function (f) {
|
||||
|
||||
return f.attr.id == selectedId;
|
||||
|
||||
}).length) {
|
||||
|
||||
selectNode(page, selectedId);
|
||||
}
|
||||
setTimeout(function () {
|
||||
$.jstree.reference(".libraryTree", page).load_node('MediaFolders');
|
||||
}, 300);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -111,7 +164,7 @@
|
|||
|
||||
var state = openItems.indexOf(i.Id) == -1 ? 'closed' : 'open';
|
||||
|
||||
return getNode(i, state);
|
||||
return getNode(i, state, false);
|
||||
|
||||
});
|
||||
|
||||
|
@ -121,45 +174,60 @@
|
|||
|
||||
}
|
||||
|
||||
function loadMediaFolders(service, openItems, callback) {
|
||||
function loadMediaFolders(page, openItems, callback) {
|
||||
|
||||
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders")).done(function (result) {
|
||||
|
||||
var nodes = result.Items.map(function (i) {
|
||||
var nodes = result.Items.map(function (n) {
|
||||
|
||||
var state = openItems.indexOf(i.Id) == -1 ? 'closed' : 'open';
|
||||
var state = openItems.indexOf(n.Id) == -1 ? 'closed' : 'open';
|
||||
|
||||
return getNode(i, state);
|
||||
return getNode(n, state, false);
|
||||
|
||||
});
|
||||
|
||||
callback(nodes);
|
||||
|
||||
for (var i = 0, length = nodes.length; i < length; i++) {
|
||||
if (nodes[i].state.opened) {
|
||||
|
||||
var nodeId = 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);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function loadNode(page, node, openItems, selectedId, currentUser, callback) {
|
||||
function loadNode(page, scope, node, openItems, selectedId, currentUser, callback) {
|
||||
|
||||
if (node == '-1') {
|
||||
var id = node.id;
|
||||
|
||||
loadChildrenOfRootNode(page, callback, openItems, selectedId);
|
||||
if (id == '#') {
|
||||
|
||||
loadChildrenOfRootNode(page, scope, callback);
|
||||
return;
|
||||
}
|
||||
|
||||
var id = node.attr("id");
|
||||
|
||||
var itemtype = node.attr("itemtype");
|
||||
|
||||
if (itemtype == 'livetv') {
|
||||
if (id == 'livetv') {
|
||||
|
||||
loadLiveTvChannels(id, openItems, callback);
|
||||
return;
|
||||
}
|
||||
|
||||
if (itemtype == 'mediafolders') {
|
||||
if (id == 'MediaFolders') {
|
||||
|
||||
loadMediaFolders(id, openItems, callback);
|
||||
loadMediaFolders(page, openItems, callback);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -168,41 +236,49 @@
|
|||
Fields: 'Settings'
|
||||
};
|
||||
|
||||
var itemtype = node.li_attr.itemtype;
|
||||
|
||||
if (itemtype != "Season" && itemtype != "Series") {
|
||||
query.SortBy = "SortName";
|
||||
}
|
||||
|
||||
ApiClient.getItems(Dashboard.getCurrentUserId(), query).done(function (result) {
|
||||
|
||||
var nodes = result.Items.map(function (i) {
|
||||
var nodes = result.Items.map(function (n) {
|
||||
|
||||
var state = openItems.indexOf(i.Id) == -1 ? 'closed' : 'open';
|
||||
var state = openItems.indexOf(n.Id) == -1 ? 'closed' : 'open';
|
||||
|
||||
return getNode(i, state);
|
||||
return getNode(n, state, n.Id == selectedId);
|
||||
|
||||
});
|
||||
|
||||
callback(nodes);
|
||||
callback.call(scope, nodes);
|
||||
|
||||
if (selectedId && result.Items.filter(function (f) {
|
||||
for (var i = 0, length = nodes.length; i < length; i++) {
|
||||
if (nodes[i].state.opened) {
|
||||
|
||||
return f.Id == selectedId;
|
||||
var nodeId = nodes[i].id;
|
||||
setTimeout(function () {
|
||||
$.jstree.reference(".libraryTree", page).load_node(nodeId);
|
||||
}, 300);
|
||||
}
|
||||
|
||||
}).length) {
|
||||
|
||||
selectNode(page, selectedId);
|
||||
if (nodes[i].state.selected) {
|
||||
var scrollNodeId = nodes[i].id;
|
||||
setTimeout(function () {
|
||||
scrollToNode(page, scrollNodeId);
|
||||
}, 300);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function selectNode(page, id) {
|
||||
function scrollToNode(page, id) {
|
||||
|
||||
var elem = $('#' + id, page)[0];
|
||||
|
||||
$.jstree._reference(".libraryTree", page).select_node(elem);
|
||||
|
||||
if (elem) {
|
||||
elem.scrollIntoView();
|
||||
}
|
||||
|
@ -214,39 +290,47 @@
|
|||
|
||||
$('.libraryTree', page).jstree({
|
||||
|
||||
"plugins": ["themes", "ui", "json_data"],
|
||||
"plugins": ["wholerow"],
|
||||
|
||||
data: function (node, callback) {
|
||||
loadNode(page, node, openItems, selectedId, currentUser, callback);
|
||||
},
|
||||
|
||||
json_data: {
|
||||
core: {
|
||||
|
||||
check_callback: true,
|
||||
data: function (node, callback) {
|
||||
loadNode(page, node, openItems, selectedId, currentUser, callback);
|
||||
|
||||
loadNode(page, this, node, openItems, selectedId, currentUser, callback);
|
||||
},
|
||||
|
||||
themes: {
|
||||
variant: 'large'
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
core: { initially_open: [], load_open: true, html_titles: true },
|
||||
ui: { initially_select: [] },
|
||||
|
||||
themes: {
|
||||
theme: 'mb3',
|
||||
url: 'thirdparty/jstree1.0/themes/mb3/style.css?v=' + Dashboard.initialServerVersion
|
||||
}
|
||||
|
||||
}).off('select_node.jstree').on('select_node.jstree', function (event, data) {
|
||||
|
||||
var node = data.node;
|
||||
|
||||
var eventData = {
|
||||
id: data.rslt.obj.attr("id"),
|
||||
itemType: data.rslt.obj.attr("itemtype")
|
||||
id: node.id,
|
||||
itemType: node.li_attr.itemtype
|
||||
};
|
||||
|
||||
if (eventData.itemType != 'livetv' && eventData.itemType != 'mediafolders') {
|
||||
$(this).trigger('itemclicked', [eventData]);
|
||||
}
|
||||
|
||||
}).off('open_node.jstree').on('open_node.jstree', function (event, data) {
|
||||
|
||||
var node = data.node;
|
||||
|
||||
if (!node.li_attr.loadedFromServer) {
|
||||
|
||||
node.li_attr.loadedFromServer = true;
|
||||
|
||||
setTimeout(function () {
|
||||
$.jstree.reference(".libraryTree", page).load_node(node.id);
|
||||
}, 500);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,31 @@ $.fn.buttonEnabled = function (enabled) {
|
|||
return enabled ? this.attr('disabled', '').removeAttr('disabled') : this.attr('disabled', 'disabled');
|
||||
};
|
||||
|
||||
$.fn.dateTimeVal = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
|
||||
var now = val;
|
||||
|
||||
var year = now.getFullYear();
|
||||
var month = now.getMonth().toString().length === 1 ? '0' + (now.getMonth() + 1).toString() : now.getMonth() + 1;
|
||||
var date = now.getDate().toString().length === 1 ? '0' + (now.getDate()).toString() : now.getDate();
|
||||
var hours = now.getHours().toString().length === 1 ? '0' + now.getHours().toString() : now.getHours();
|
||||
var minutes = now.getMinutes().toString().length === 1 ? '0' + now.getMinutes().toString() : now.getMinutes();
|
||||
var seconds = now.getSeconds().toString().length === 1 ? '0' + now.getSeconds().toString() : now.getSeconds();
|
||||
|
||||
var formattedDateTime = year + '-' + month + '-' + date + 'T' + hours + ':' + minutes + ':' + seconds;
|
||||
|
||||
//if (onlyBlank === true && $(this).val()) {
|
||||
// return this;
|
||||
//}
|
||||
|
||||
return this.val(formattedDateTime);
|
||||
}
|
||||
|
||||
return this.val();
|
||||
};
|
||||
|
||||
if (!Array.prototype.filter) {
|
||||
Array.prototype.filter = function (fun /*, thisp*/) {
|
||||
"use strict";
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
html += '<button id="btnCast" class="btnCast btnDefaultCast headerButton headerButtonRight" type="button" data-role="none"><div class="headerSelectedPlayer"></div><div class="btnCastImage"></div></button>';
|
||||
|
||||
html += '<button onclick="Search.showSearchPanel($.mobile.activePage);" type="button" data-role="none" class="headerButton headerButtonRight headerSearchButton"><div class="fa fa-search" style="font-size:20px;"></div></button>';
|
||||
html += '<button onclick="Search.showSearchPanel($.mobile.activePage);" type="button" data-role="none" class="headerButton headerButtonRight headerSearchButton"><div class="fa fa-search" style="font-size:21px;"></div></button>';
|
||||
} else {
|
||||
html += '<button id="btnCast" class="btnCast btnDefaultCast headerButton headerButtonRight" type="button" data-role="none" style="visibility:hidden;"><div class="headerSelectedPlayer"></div><div class="btnCastImage"></div></button>';
|
||||
|
||||
|
@ -32,7 +32,7 @@
|
|||
|
||||
if (user.imageUrl) {
|
||||
|
||||
var userButtonHeight = 23;
|
||||
var userButtonHeight = 24;
|
||||
|
||||
var url = user.imageUrl;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue