1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

web client backdrops

This commit is contained in:
Luke Pulverenti 2014-05-11 01:11:53 -04:00
parent c93de38f39
commit 76d39e1345
29 changed files with 385 additions and 150 deletions

View file

@ -0,0 +1,106 @@
(function ($, document) {
function getElement() {
var elem = $('.backdropContainer');
if (!elem.length) {
elem = $('<div class="backdropContainer"></div>').prependTo(document.body);
}
return elem;
}
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min) + min);
}
function getBackdropItemIds(userId, types, parentId) {
var key = 'backdrops_' + userId + (types || '') + (parentId || '');
var deferred = $.Deferred();
var data = localStorage.getItem(key);
if (data) {
console.log('Found backdrop id list in cache. Key: ' + key)
data = JSON.parse(data);
deferred.resolveWith(null, [data]);
} else {
var options = {
SortBy: "Random",
Limit: 50,
Recursive: true,
IncludeItemTypes: types,
ImageTypes: "Backdrop",
//Ids: "8114409aa00a2722456c08e298f90bed",
ParentId: parentId
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
var images = result.Items.map(function (i) {
return {
id: i.Id,
tag: i.BackdropImageTags[0]
};
});
localStorage.setItem(key, JSON.stringify(images));
deferred.resolveWith(null, [images]);
});
}
return deferred.promise();
}
function showBackdrop(type) {
getBackdropItemIds(Dashboard.getCurrentUserId(), type, LibraryMenu.getTopParentId()).done(function (images) {
if (images.length) {
var index = getRandom(0, images.length - 1);
var item = images[index];
var imgUrl = ApiClient.getImageUrl(item.id, {
type: "Backdrop",
tag: item.tag
});
getElement().css('backgroundImage', 'url(\'' + imgUrl + '\')');
} else {
clearBackdrop();
}
});
}
function clearBackdrop() {
$('.backdropContainer').css('backgroundImage', '');
}
$(document).on('pagebeforeshow', ".backdropPage", function () {
var page = this;
// Gets real messy and jumps around the page when scrolling
// Can be reviewed later.
if ($.browser.msie) {
$(page).removeClass('backdropPage');
} else {
var type = page.getAttribute('data-backdroptype');
showBackdrop(type);
}
});
})(jQuery, document);

View file

@ -184,6 +184,14 @@
$('#movieTabs', page).show();
}
if (item.Type == "ChannelVideoItem" || item.Type == "ChannelAudioItem" || item.Type == "ChannelCategoryItem") {
$('#channelTabs', page).show();
}
if (item.Type == "BoxSet") {
$('#boxsetTabs', page).show();
}
if (item.MediaType == "Game") {
$('#gameTabs', page).show();
}

View file

@ -704,7 +704,7 @@
html += '<a data-itemid="' + item.Id + '" class="' + cssClass + '" data-mediasourcecount="' + mediaSourceCount + '" href="' + href + '">';
var style = "";
options.lazy = false;
if (imgUrl && !options.lazy) {
style += 'background-image:url(\'' + imgUrl + '\');';
}

View file

@ -18,22 +18,30 @@
var html = '<div class="viewMenuBar ui-bar-b">';
html += '<button type="button" data-icon="bars" data-iconpos="notext" data-inline="true" title="Menu" class="libraryMenuButton" onclick="LibraryMenu.showLibraryMenu();" data-corners="false">Menu</button>';
html += '<button type="button" data-role="none" title="Menu" onclick="LibraryMenu.showLibraryMenu();" class="headerButton libraryMenuButton headerButtonLeft"><img src="css/images/menu.png" /></button>';
html += '<a class="desktopHomeLink" href="index.html"><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a>';
html += '<a class="desktopHomeLink headerButton headerButtonLeft" href="index.html"><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a>';
html += '<a class="viewMenuRemoteControlButton" href="nowplaying.html" data-role="button" data-icon="play" data-inline="true" data-iconpos="notext" title="Now Playing">Remote Control</a>';
//html += '<a class="viewMenuRemoteControlButton" href="nowplaying.html" data-role="button" data-icon="play" data-inline="true" data-iconpos="notext" title="Now Playing">Remote Control</a>';
html += '<div class="viewMenuSecondary">';
html += '<button id="btnCast" class="btnCast btnDefaultCast" type="button" data-role="none"></button>';
html += '<a href="nowplaying.html" class="headerButton headerButtonRight headerRemoteButton"><img src="css/images/remote.png" /></a>';
html += '<a class="viewMenuLink btnCurrentUser" href="#" onclick="Dashboard.showUserFlyout(this);">';
html += '<button id="btnCast" class="btnCast btnDefaultCast headerButton headerButtonRight" type="button" data-role="none"><div class="btnCastImage"></div></button>';
html += '<button onclick="Search.showSearchPanel($.mobile.activePage);" type="button" data-role="none" class="headerButton headerButtonRight headerSearchButton"><img src="css/images/headersearch.png" /></button>';
if (user.Configuration.IsAdministrator) {
html += '<a href="dashboard.html" class="headerButton headerButtonRight headerSettingsButton"><img src="css/images/items/folders/settings.png" /></a>';
}
html += '<a class="headerButton headerButtonRight" href="#" onclick="Dashboard.showUserFlyout(this);">';
if (user.PrimaryImageTag) {
var url = ApiClient.getUserImageUrl(user.Id, {
height: 24,
height: 18,
tag: user.PrimaryImageTag,
type: "Primary"
});
@ -45,12 +53,6 @@
html += '</a>';
html += '<button onclick="Search.showSearchPanel($.mobile.activePage);" type="button" data-icon="search" data-inline="true" data-iconpos="notext">Search</button>';
if (user.Configuration.IsAdministrator) {
html += '<a href="dashboard.html" data-role="button" data-icon="gear" data-inline="true" data-iconpos="notext">Dashboard</a>';
}
html += '</div>';
html += '</div>';
@ -68,9 +70,9 @@
return LibraryBrowser.getHref(item);
}
function getViewsHtml(user, counts, items, liveTvInfo) {
var html = '';
html += items.map(function (i) {
@ -98,7 +100,8 @@
if (user.Configuration.IsAdministrator) {
html += '<div class="libraryMenuDivider"></div>';
html += '<a class="viewMenuLink viewMenuTextLink lnkMediaFolder tvshowsViewMenu" data-itemid="editor" href="edititemmetadata.html">Metadata Manager</a>';
html += '<a class="viewMenuLink viewMenuTextLink lnkMediaFolder dashboardViewMenu" data-itemid="editor" href="dashboard.html">Dashboard</a>';
html += '<a class="viewMenuLink viewMenuTextLink lnkMediaFolder editorViewMenu" data-itemid="editor" href="edititemmetadata.html">Metadata Manager</a>';
}
return html;
@ -149,7 +152,7 @@
}
updateLibraryNavLinks(page);
return panel;
}
@ -178,7 +181,7 @@
}
}
function updateLibraryNavLinks(page) {
function updateLibraryNavLinks(page, updateElements) {
page = $(page);
@ -236,22 +239,22 @@
});
}).on('pagebeforeshow', ".page", function () {
}).on('pagebeforeshow', ".libraryPage", function () {
var page = this;
if ($(page).hasClass('libraryPage')) {
updateLibraryNavLinks(page);
if (!$('.viewMenuBar', page).length) {
if (!$('.viewMenuBar', page).length) {
Dashboard.getCurrentUser().done(function (user) {
Dashboard.getCurrentUser().done(function (user) {
renderHeader(page, user);
updateLibraryNavLinks(page);
});
}
renderHeader(page, user);
updateCastIcon();
updateLibraryNavLinks(page);
});
}
}).on('pageshow', ".libraryPage", function () {

View file

@ -5,9 +5,9 @@
var html = '';
var title = '';
switch (recommendation.RecommendationType) {
case 'SimilarToRecentlyPlayed':
title = 'Because you watched ' + recommendation.BaselineItemName;
break;
@ -23,7 +23,7 @@
title = 'Starring ' + recommendation.BaselineItemName;
break;
}
html += '<h1 class="listHeader">' + title + '</h1>';
html += '<div>';
@ -34,7 +34,7 @@
return html;
}
$(document).on('pagebeforeshow', "#moviesRecommendedPage", function () {
var parentId = LibraryMenu.getTopParentId();
@ -42,7 +42,7 @@
var screenWidth = $(window).width();
var page = this;
var options = {
SortBy: "DatePlayed",
@ -63,20 +63,20 @@
} else {
$('#resumableSection', page).hide();
}
$('#resumableItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
preferBackdrop: true,
shape: 'backdrop',
overlayText: screenWidth >= 600,
showTitle: true
})).createPosterItemMenus();
});
var url = ApiClient.getUrl("Movies/Recommendations", {
userId: Dashboard.getCurrentUserId(),
categoryLimit: screenWidth >= 1200 ? 6 : 3,
itemLimit: screenWidth >= 1920 ? 10 : (screenWidth >= 1440 ? 8 : 6),
@ -84,7 +84,7 @@
ParentId: parentId
});
$.getJSON(url).done(function(recommendations) {
$.getJSON(url).done(function (recommendations) {
if (!recommendations.length) {
@ -96,6 +96,7 @@
$('.recommendations', page).html(html).createPosterItemMenus();
});
});

View file

@ -13,7 +13,7 @@
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "MusicAlbum",
Limit: screenWidth >= 1920 ? 7 : (screenWidth >= 1440 ? 7 : 5),
Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1440 ? 8 : 5),
Recursive: true,
Fields: "PrimaryImageAspectRatio",
ParentId: parentId
@ -36,7 +36,7 @@
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Audio",
Limit: screenWidth >= 1920 ? 7 : (screenWidth >= 1440 ? 7 : 5),
Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1440 ? 8 : 5),
Recursive: true,
Fields: "PrimaryImageAspectRatio,AudioInfo",
ParentId: parentId
@ -59,7 +59,7 @@
SortBy: "DatePlayed",
SortOrder: "Descending",
IncludeItemTypes: "Audio",
Limit: screenWidth >= 1920 ? 7 : (screenWidth >= 1440 ? 7 : 5),
Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1440 ? 8 : 5),
Recursive: true,
Fields: "PrimaryImageAspectRatio,AudioInfo",
Filters: "IsPlayed",

View file

@ -1175,6 +1175,8 @@ var Dashboard = {
getDisplayTime: function (ticks) {
var ticksPerHour = 36000000000;
var ticksPerMinute = 600000000;
var ticksPerSecond = 10000000;
var parts = [];
@ -1187,8 +1189,6 @@ var Dashboard = {
ticks -= (hours * ticksPerHour);
var ticksPerMinute = 600000000;
var minutes = ticks / ticksPerMinute;
minutes = Math.floor(minutes);
@ -1199,10 +1199,8 @@ var Dashboard = {
}
parts.push(minutes);
var ticksPerSecond = 10000000;
var seconds = ticks / ticksPerSecond;
seconds = Math.round(seconds);
seconds = Math.floor(seconds);
if (seconds < 10) {
seconds = '0' + seconds;