mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
added more card layouts
This commit is contained in:
parent
c6064c9e96
commit
98d59dbc02
15 changed files with 95 additions and 40 deletions
|
@ -416,10 +416,6 @@
|
||||||
|
|
||||||
@media all and (min-width: 1920px) {
|
@media all and (min-width: 1920px) {
|
||||||
|
|
||||||
.squareCard {
|
|
||||||
width: 9.0909090909090909090909090909091%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bannerCard {
|
.bannerCard {
|
||||||
width: 25%;
|
width: 25%;
|
||||||
}
|
}
|
||||||
|
@ -430,6 +426,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media all and (min-width: 2300px) {
|
||||||
|
|
||||||
|
.squareCard {
|
||||||
|
width: 9.0909090909090909090909090909091%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** detailPage169 */
|
/** detailPage169 */
|
||||||
.detailPage169Card .cardPadder {
|
.detailPage169Card .cardPadder {
|
||||||
padding-bottom: 56.25%;
|
padding-bottom: 56.25%;
|
||||||
|
|
|
@ -81,8 +81,8 @@
|
||||||
<br />
|
<br />
|
||||||
<ul data-role="listview" class="ulForm">
|
<ul data-role="listview" class="ulForm">
|
||||||
<li>
|
<li>
|
||||||
<label for="txtPrePaddingSeconds">${LabelPrePaddingMinutes}</label>
|
<label for="txtPrePaddingMinutes">${LabelPrePaddingMinutes}</label>
|
||||||
<input type="number" id="txtPrePaddingSeconds" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
<input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
||||||
|
@ -92,8 +92,8 @@
|
||||||
<div style="height: .5em;"></div>
|
<div style="height: .5em;"></div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label for="txtPostPaddingSeconds">${LabelPostPaddingMinutes}</label>
|
<label for="txtPostPaddingMinutes">${LabelPostPaddingMinutes}</label>
|
||||||
<input type="number" id="txtPostPaddingSeconds" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
<input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
||||||
|
|
|
@ -78,8 +78,8 @@
|
||||||
<br />
|
<br />
|
||||||
<ul data-role="listview" class="ulForm">
|
<ul data-role="listview" class="ulForm">
|
||||||
<li>
|
<li>
|
||||||
<label for="txtPrePaddingSeconds">${LabelPrePaddingMinutes}</label>
|
<label for="txtPrePaddingMinutes">${LabelPrePaddingMinutes}</label>
|
||||||
<input type="number" id="txtPrePaddingSeconds" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
<input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
||||||
|
@ -89,8 +89,8 @@
|
||||||
<div style="height: .5em;"></div>
|
<div style="height: .5em;"></div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label for="txtPostPaddingSeconds">${LabelPostPaddingMinutes}</label>
|
<label for="txtPostPaddingMinutes">${LabelPostPaddingMinutes}</label>
|
||||||
<input type="number" id="txtPostPaddingSeconds" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
<input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
||||||
|
|
|
@ -45,8 +45,8 @@
|
||||||
<br />
|
<br />
|
||||||
<ul data-role="listview" class="ulForm">
|
<ul data-role="listview" class="ulForm">
|
||||||
<li>
|
<li>
|
||||||
<label for="txtPrePaddingSeconds">${LabelPrePaddingMinutes}</label>
|
<label for="txtPrePaddingMinutes">${LabelPrePaddingMinutes}</label>
|
||||||
<input type="number" id="txtPrePaddingSeconds" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
<input type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
<input type="checkbox" data-mini="true" id="chkPrePaddingRequired" />
|
||||||
|
@ -56,8 +56,8 @@
|
||||||
<div style="height: .5em;"></div>
|
<div style="height: .5em;"></div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<label for="txtPostPaddingSeconds">${LabelPostPaddingMinutes}</label>
|
<label for="txtPostPaddingMinutes">${LabelPostPaddingMinutes}</label>
|
||||||
<input type="number" id="txtPostPaddingSeconds" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
<input type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" max="30" step="1" />
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
<input type="checkbox" data-mini="true" id="chkPostPaddingRequired" />
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
<option value="Banner">${OptionBanner}</option>
|
<option value="Banner">${OptionBanner}</option>
|
||||||
<option value="List">${OptionList}</option>
|
<option value="List">${OptionList}</option>
|
||||||
<option value="Poster">${OptionPoster}</option>
|
<option value="Poster">${OptionPoster}</option>
|
||||||
|
<option value="PosterCard">${OptionPosterCard}</option>
|
||||||
<option value="Thumb">${OptionThumb}</option>
|
<option value="Thumb">${OptionThumb}</option>
|
||||||
<option value="ThumbCard">${OptionThumbCard}</option>
|
<option value="ThumbCard">${OptionThumbCard}</option>
|
||||||
<option value="Timeline">${OptionTimeline}</option>
|
<option value="Timeline">${OptionTimeline}</option>
|
||||||
|
|
|
@ -1213,10 +1213,6 @@
|
||||||
|
|
||||||
var defaultActionAttribute = options.defaultAction ? (' data-action="' + options.defaultAction + '"') : '';
|
var defaultActionAttribute = options.defaultAction ? (' data-action="' + options.defaultAction + '"') : '';
|
||||||
|
|
||||||
if (options.defaultAction) {
|
|
||||||
cssClass += ' itemWithAction';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '<div' + dataAttributes + ' class="' + cssClass + '">';
|
html += '<div' + dataAttributes + ' class="' + cssClass + '">';
|
||||||
|
|
||||||
var style = "";
|
var style = "";
|
||||||
|
@ -1250,7 +1246,14 @@
|
||||||
html += '<div class="cardScalable">';
|
html += '<div class="cardScalable">';
|
||||||
|
|
||||||
html += '<div class="cardPadder"></div>';
|
html += '<div class="cardPadder"></div>';
|
||||||
html += '<a class="cardContent" href="' + href + '"' + defaultActionAttribute + '>';
|
|
||||||
|
var anchorCssClass = "cardContent";
|
||||||
|
|
||||||
|
if (options.defaultAction) {
|
||||||
|
anchorCssClass += ' itemWithAction';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<a class="' + anchorCssClass + '" href="' + href + '"' + defaultActionAttribute + '>';
|
||||||
html += '<div class="' + imageCssClass + '" style="' + style + '"' + dataSrc + '></div>';
|
html += '<div class="' + imageCssClass + '" style="' + style + '"' + dataSrc + '></div>';
|
||||||
|
|
||||||
html += '<div class="cardOverlayTarget"></div>';
|
html += '<div class="cardOverlayTarget"></div>';
|
||||||
|
|
|
@ -557,6 +557,8 @@
|
||||||
|
|
||||||
function onShowTimerExpired(elem) {
|
function onShowTimerExpired(elem) {
|
||||||
|
|
||||||
|
elem = $('a', elem)[0];
|
||||||
|
|
||||||
if ($(elem).hasClass('hasContextMenu')) {
|
if ($(elem).hasClass('hasContextMenu')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -566,8 +568,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
var innerElem = $('.cardOverlayTarget', elem);
|
var innerElem = $('.cardOverlayTarget', elem);
|
||||||
var id = elem.getAttribute('data-itemid');
|
|
||||||
var commands = elem.getAttribute('data-commands').split(',');
|
var dataElement = elem;
|
||||||
|
while (!dataElement.getAttribute('data-itemid')) {
|
||||||
|
dataElement = dataElement.parentNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
var id = dataElement.getAttribute('data-itemid');
|
||||||
|
var commands = dataElement.getAttribute('data-commands').split(',');
|
||||||
|
|
||||||
var promise1 = ApiClient.getItem(Dashboard.getCurrentUserId(), id);
|
var promise1 = ApiClient.getItem(Dashboard.getCurrentUserId(), id);
|
||||||
var promise2 = Dashboard.getCurrentUser();
|
var promise2 = Dashboard.getCurrentUser();
|
||||||
|
@ -767,11 +775,18 @@
|
||||||
PlaylistManager.showPanel(selection);
|
PlaylistManager.showPanel(selection);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onItemWithActionClick() {
|
function onItemWithActionClick(e) {
|
||||||
|
|
||||||
var elem = this;
|
var elem = this;
|
||||||
|
|
||||||
var action = elem.getAttribute('data-action');
|
var action = elem.getAttribute('data-action');
|
||||||
var elemWithAttributes = elem.getAttribute('data-itemid') ? elem : elem.parentNode;
|
var elemWithAttributes = elem;
|
||||||
|
|
||||||
|
if (action) {
|
||||||
|
while (!elemWithAttributes.getAttribute('data-itemid')) {
|
||||||
|
elemWithAttributes = elemWithAttributes.parentNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var index;
|
var index;
|
||||||
var itemsContainer;
|
var itemsContainer;
|
||||||
|
|
|
@ -25,8 +25,8 @@
|
||||||
$('#chkAllChannels', page).checked(defaultTimer.RecordAnyChannel).checkboxradio('refresh');
|
$('#chkAllChannels', page).checked(defaultTimer.RecordAnyChannel).checkboxradio('refresh');
|
||||||
$('#chkAnyTime', page).checked(defaultTimer.RecordAnyTime).checkboxradio('refresh');
|
$('#chkAnyTime', page).checked(defaultTimer.RecordAnyTime).checkboxradio('refresh');
|
||||||
|
|
||||||
$('#txtPrePaddingSeconds', page).val(defaultTimer.PrePaddingSeconds / 60);
|
$('#txtPrePaddingMinutes', page).val(defaultTimer.PrePaddingSeconds / 60);
|
||||||
$('#txtPostPaddingSeconds', page).val(defaultTimer.PostPaddingSeconds / 60);
|
$('#txtPostPaddingMinutes', page).val(defaultTimer.PostPaddingSeconds / 60);
|
||||||
$('#chkPrePaddingRequired', page).checked(defaultTimer.IsPrePaddingRequired).checkboxradio('refresh');
|
$('#chkPrePaddingRequired', page).checked(defaultTimer.IsPrePaddingRequired).checkboxradio('refresh');
|
||||||
$('#chkPostPaddingRequired', page).checked(defaultTimer.IsPostPaddingRequired).checkboxradio('refresh');
|
$('#chkPostPaddingRequired', page).checked(defaultTimer.IsPostPaddingRequired).checkboxradio('refresh');
|
||||||
|
|
||||||
|
@ -110,8 +110,8 @@
|
||||||
|
|
||||||
ApiClient.getNewLiveTvTimerDefaults({ programId: programId }).done(function (item) {
|
ApiClient.getNewLiveTvTimerDefaults({ programId: programId }).done(function (item) {
|
||||||
|
|
||||||
item.PrePaddingSeconds = $('#txtPrePaddingSeconds', form).val() * 60;
|
item.PrePaddingSeconds = $('#txtPrePaddingMinutes', form).val() * 60;
|
||||||
item.PostPaddingSeconds = $('#txtPostPaddingSeconds', form).val() * 60;
|
item.PostPaddingSeconds = $('#txtPostPaddingMinutes', form).val() * 60;
|
||||||
item.IsPrePaddingRequired = $('#chkPrePaddingRequired', form).checked();
|
item.IsPrePaddingRequired = $('#chkPrePaddingRequired', form).checked();
|
||||||
item.IsPostPaddingRequired = $('#chkPostPaddingRequired', form).checked();
|
item.IsPostPaddingRequired = $('#chkPostPaddingRequired', form).checked();
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,8 @@
|
||||||
|
|
||||||
$('.itemName', page).html(item.Name);
|
$('.itemName', page).html(item.Name);
|
||||||
|
|
||||||
$('#txtPrePaddingSeconds', page).val(item.PrePaddingSeconds / 60);
|
$('#txtPrePaddingMinutes', page).val(item.PrePaddingSeconds / 60);
|
||||||
$('#txtPostPaddingSeconds', page).val(item.PostPaddingSeconds / 60);
|
$('#txtPostPaddingMinutes', page).val(item.PostPaddingSeconds / 60);
|
||||||
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh');
|
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh');
|
||||||
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh');
|
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh');
|
||||||
|
|
||||||
|
@ -107,8 +107,8 @@
|
||||||
|
|
||||||
ApiClient.getLiveTvSeriesTimer(currentItem.Id).done(function (item) {
|
ApiClient.getLiveTvSeriesTimer(currentItem.Id).done(function (item) {
|
||||||
|
|
||||||
item.PrePaddingSeconds = $('#txtPrePaddingSeconds', form).val() * 60;
|
item.PrePaddingSeconds = $('#txtPrePaddingMinutes', form).val() * 60;
|
||||||
item.PostPaddingSeconds = $('#txtPostPaddingSeconds', form).val() * 60;
|
item.PostPaddingSeconds = $('#txtPostPaddingMinutes', form).val() * 60;
|
||||||
item.IsPrePaddingRequired = $('#chkPrePaddingRequired', form).checked();
|
item.IsPrePaddingRequired = $('#chkPrePaddingRequired', form).checked();
|
||||||
item.IsPostPaddingRequired = $('#chkPostPaddingRequired', form).checked();
|
item.IsPostPaddingRequired = $('#chkPostPaddingRequired', form).checked();
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,8 @@
|
||||||
|
|
||||||
LiveTvHelpers.renderMiscProgramInfo($('.miscTvProgramInfo', page), programInfo);
|
LiveTvHelpers.renderMiscProgramInfo($('.miscTvProgramInfo', page), programInfo);
|
||||||
|
|
||||||
$('#txtPrePaddingSeconds', page).val(item.PrePaddingSeconds / 60);
|
$('#txtPrePaddingMinutes', page).val(item.PrePaddingSeconds / 60);
|
||||||
$('#txtPostPaddingSeconds', page).val(item.PostPaddingSeconds / 60);
|
$('#txtPostPaddingMinutes', page).val(item.PostPaddingSeconds / 60);
|
||||||
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh');
|
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh');
|
||||||
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh');
|
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh');
|
||||||
|
|
||||||
|
@ -75,8 +75,8 @@
|
||||||
|
|
||||||
ApiClient.getLiveTvTimer(currentItem.Id).done(function (item) {
|
ApiClient.getLiveTvTimer(currentItem.Id).done(function (item) {
|
||||||
|
|
||||||
item.PrePaddingSeconds = $('#txtPrePaddingSeconds', form).val() * 60;
|
item.PrePaddingSeconds = $('#txtPrePaddingMinutes', form).val() * 60;
|
||||||
item.PostPaddingSeconds = $('#txtPostPaddingSeconds', form).val() * 60;
|
item.PostPaddingSeconds = $('#txtPostPaddingMinutes', form).val() * 60;
|
||||||
item.IsPrePaddingRequired = $('#chkPrePaddingRequired', form).checked();
|
item.IsPrePaddingRequired = $('#chkPrePaddingRequired', form).checked();
|
||||||
item.IsPostPaddingRequired = $('#chkPostPaddingRequired', form).checked();
|
item.IsPostPaddingRequired = $('#chkPostPaddingRequired', form).checked();
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
|
|
||||||
html += pagingHtml;
|
html += pagingHtml;
|
||||||
|
|
||||||
$('#items', page).html(html).trigger('create');
|
$('#items', page).html(html).trigger('create').createCardMenus();
|
||||||
|
|
||||||
$('.btnNextPage', page).on('click', function () {
|
$('.btnNextPage', page).on('click', function () {
|
||||||
query.StartIndex += query.Limit;
|
query.StartIndex += query.Limit;
|
||||||
|
|
|
@ -102,6 +102,18 @@
|
||||||
});
|
});
|
||||||
$('.itemsContainer', page).removeClass('timelineItemsContainer');
|
$('.itemsContainer', page).removeClass('timelineItemsContainer');
|
||||||
}
|
}
|
||||||
|
else if (view == "PosterCard") {
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "portrait",
|
||||||
|
context: 'movies',
|
||||||
|
showTitle: true,
|
||||||
|
showYear: true,
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true
|
||||||
|
});
|
||||||
|
$('.itemsContainer', page).removeClass('timelineItemsContainer');
|
||||||
|
}
|
||||||
else if (view == "Timeline") {
|
else if (view == "Timeline") {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
|
|
@ -87,6 +87,18 @@
|
||||||
});
|
});
|
||||||
$('.itemsContainer', page).removeClass('timelineItemsContainer');
|
$('.itemsContainer', page).removeClass('timelineItemsContainer');
|
||||||
}
|
}
|
||||||
|
else if (view == "PosterCard") {
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "portrait",
|
||||||
|
context: 'tv',
|
||||||
|
showTitle: true,
|
||||||
|
showYear: true,
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true
|
||||||
|
});
|
||||||
|
$('.itemsContainer', page).removeClass('timelineItemsContainer');
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
// Poster
|
// Poster
|
||||||
|
|
|
@ -248,6 +248,13 @@
|
||||||
|
|
||||||
function addAuthenticationInfoFromConnect(server, connectionMode, credentials) {
|
function addAuthenticationInfoFromConnect(server, connectionMode, credentials) {
|
||||||
|
|
||||||
|
if (!server.ExchangeToken) {
|
||||||
|
throw new Error("server.ExchangeToken cannot be null");
|
||||||
|
}
|
||||||
|
if (!credentials.ConnectUserId) {
|
||||||
|
throw new Error("credentials.ConnectUserId cannot be null");
|
||||||
|
}
|
||||||
|
|
||||||
var url = connectionMode == MediaBrowser.ConnectionMode.Local ? server.LocalAddress : server.RemoteAddress;
|
var url = connectionMode == MediaBrowser.ConnectionMode.Local ? server.LocalAddress : server.RemoteAddress;
|
||||||
|
|
||||||
url += "/mediabrowser/Connect/Exchange?format=json&ConnectUserId=" + credentials.ConnectUserId;
|
url += "/mediabrowser/Connect/Exchange?format=json&ConnectUserId=" + credentials.ConnectUserId;
|
||||||
|
@ -641,7 +648,7 @@
|
||||||
|
|
||||||
function onEnsureConnectUserDone() {
|
function onEnsureConnectUserDone() {
|
||||||
|
|
||||||
if (credentials.ConnectUserId && credentials.ConnectAccessToken) {
|
if (credentials.ConnectUserId && credentials.ConnectAccessToken && server.ExchangeToken) {
|
||||||
|
|
||||||
addAuthenticationInfoFromConnect(server, connectionMode, credentials).always(onExchangeTokenDone);
|
addAuthenticationInfoFromConnect(server, connectionMode, credentials).always(onExchangeTokenDone);
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@
|
||||||
<option value="Banner">${OptionBanner}</option>
|
<option value="Banner">${OptionBanner}</option>
|
||||||
<option value="List">${OptionList}</option>
|
<option value="List">${OptionList}</option>
|
||||||
<option value="Poster">${OptionPoster}</option>
|
<option value="Poster">${OptionPoster}</option>
|
||||||
|
<option value="PosterCard">${OptionPosterCard}</option>
|
||||||
<option value="Thumb">${OptionThumb}</option>
|
<option value="Thumb">${OptionThumb}</option>
|
||||||
<option value="ThumbCard">${OptionThumbCard}</option>
|
<option value="ThumbCard">${OptionThumbCard}</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue