1
0
Fork 0
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:
Luke Pulverenti 2014-12-20 20:23:56 -05:00
parent db0f911a4d
commit 8a641ab831
253 changed files with 9495 additions and 8128 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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);
}
});
}

View file

@ -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";

View file

@ -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;