mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
152 lines
No EOL
4.2 KiB
JavaScript
152 lines
No EOL
4.2 KiB
JavaScript
define(['libraryBrowser', 'itemHelper'], function (libraryBrowser, itemHelper) {
|
|
|
|
function isClickable(target) {
|
|
|
|
while (target != null) {
|
|
var tagName = target.tagName || '';
|
|
if (tagName == 'A' || tagName.indexOf('BUTTON') != -1 || tagName.indexOf('INPUT') != -1) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
//target = target.parentNode;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function onCardClick(e) {
|
|
|
|
var card = parentWithClass(e.target, 'card');
|
|
|
|
if (card) {
|
|
|
|
var itemSelectionPanel = card.querySelector('.itemSelectionPanel');
|
|
if (itemSelectionPanel) {
|
|
return onItemSelectionPanelClick(e, itemSelectionPanel);
|
|
}
|
|
else if (card.classList.contains('groupedCard')) {
|
|
return onGroupedCardClick(e, card);
|
|
}
|
|
}
|
|
}
|
|
|
|
function onGroupedCardClick(e, card) {
|
|
|
|
var itemId = card.getAttribute('data-id');
|
|
var context = card.getAttribute('data-context');
|
|
|
|
var userId = Dashboard.getCurrentUserId();
|
|
|
|
var playedIndicator = card.querySelector('.playedIndicator');
|
|
var playedIndicatorHtml = playedIndicator ? playedIndicator.innerHTML : null;
|
|
var options = {
|
|
|
|
Limit: parseInt(playedIndicatorHtml || '10'),
|
|
Fields: "PrimaryImageAspectRatio,DateCreated",
|
|
ParentId: itemId,
|
|
GroupItems: false
|
|
};
|
|
|
|
var target = e.target;
|
|
if (isClickable(target)) {
|
|
return;
|
|
}
|
|
|
|
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) {
|
|
|
|
if (items.length == 1) {
|
|
Dashboard.navigate(libraryBrowser.getHref(items[0], context));
|
|
return;
|
|
}
|
|
|
|
var url = 'itemdetails.html?id=' + itemId;
|
|
if (context) {
|
|
url += '&context=' + context;
|
|
}
|
|
|
|
Dashboard.navigate(url);
|
|
});
|
|
|
|
e.stopPropagation();
|
|
e.preventDefault();
|
|
return false;
|
|
}
|
|
|
|
function parentWithClass(elem, className) {
|
|
|
|
while (!elem.classList || !elem.classList.contains(className)) {
|
|
elem = elem.parentNode;
|
|
|
|
if (!elem) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
return elem;
|
|
}
|
|
|
|
libraryBrowser.createCardMenus = function (curr, options) {
|
|
|
|
curr.removeEventListener('click', onCardClick);
|
|
curr.addEventListener('click', onCardClick);
|
|
};
|
|
|
|
function showSyncButtonsPerUser(page) {
|
|
|
|
var apiClient = window.ApiClient;
|
|
|
|
if (!apiClient || !apiClient.getCurrentUserId()) {
|
|
return;
|
|
}
|
|
|
|
Dashboard.getCurrentUser().then(function (user) {
|
|
|
|
var item = {
|
|
SupportsSync: true
|
|
};
|
|
|
|
var categorySyncButtons = page.querySelectorAll('.categorySyncButton');
|
|
for (var i = 0, length = categorySyncButtons.length; i < length; i++) {
|
|
if (itemHelper.canSync(user, item)) {
|
|
categorySyncButtons[i].classList.remove('hide');
|
|
} else {
|
|
categorySyncButtons[i].classList.add('hide');
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function onCategorySyncButtonClick(e) {
|
|
|
|
var button = this;
|
|
var category = button.getAttribute('data-category');
|
|
var parentId = LibraryMenu.getTopParentId();
|
|
|
|
require(['syncDialog'], function (syncDialog) {
|
|
syncDialog.showMenu({
|
|
ParentId: parentId,
|
|
Category: category
|
|
});
|
|
});
|
|
}
|
|
|
|
pageClassOn('pageinit', "libraryPage", function () {
|
|
|
|
var page = this;
|
|
|
|
var categorySyncButtons = page.querySelectorAll('.categorySyncButton');
|
|
for (var i = 0, length = categorySyncButtons.length; i < length; i++) {
|
|
categorySyncButtons[i].addEventListener('click', onCategorySyncButtonClick);
|
|
}
|
|
});
|
|
|
|
pageClassOn('pageshow', "libraryPage", function () {
|
|
|
|
var page = this;
|
|
|
|
if (!Dashboard.isServerlessPage()) {
|
|
showSyncButtonsPerUser(page);
|
|
}
|
|
});
|
|
}); |