mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge remote-tracking branch 'upstream/master' into hoverbuttons
This commit is contained in:
commit
2915de6e0e
10 changed files with 139 additions and 77 deletions
|
@ -29,7 +29,7 @@ h3 {
|
||||||
}
|
}
|
||||||
|
|
||||||
.layout-tv {
|
.layout-tv {
|
||||||
font-size: 2.5vh;
|
font-size: 130%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layout-mobile {
|
.layout-mobile {
|
||||||
|
|
|
@ -439,10 +439,46 @@
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
|
background-attachment: fixed;
|
||||||
height: 50vh;
|
height: 50vh;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.layout-mobile .itemBackdrop {
|
||||||
|
background-attachment: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-desktop .itemBackdrop::after,
|
||||||
|
.layout-tv .itemBackdrop::after {
|
||||||
|
content: "";
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(0, 0, 0, 0.65);
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-desktop .noBackdrop .itemBackdrop,
|
||||||
|
.layout-tv .noBackdrop .itemBackdrop {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detailPageContent {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding-left: 2%;
|
||||||
|
padding-right: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-desktop .noBackdrop .detailPageContent,
|
||||||
|
.layout-tv .noBackdrop .detailPageContent {
|
||||||
|
margin-top: 2.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-desktop .noBackdrop .detailImageContainer img,
|
||||||
|
.layout-tv .noBackdrop .detailImageContainer img {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.personBackdrop {
|
.personBackdrop {
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
}
|
}
|
||||||
|
@ -503,14 +539,13 @@
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailPagePrimaryContainer {
|
.detailPagePrimaryContainer {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
align-content: center;
|
align-content: center;
|
||||||
position: sticky;
|
|
||||||
top: 3.85em;
|
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,13 +555,21 @@
|
||||||
top: 0;
|
top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layout-tv .detailPagePrimaryContainer {
|
.layout-tv #itemDetailPage:not(.noBackdrop) .detailPagePrimaryContainer,
|
||||||
|
.layout-desktop #itemDetailPage:not(.noBackdrop) .detailPagePrimaryContainer {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
padding-left: 32.45vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailSticky {
|
.layout-desktop .detailSticky,
|
||||||
background-color: #101010;
|
.layout-tv .detailSticky {
|
||||||
|
margin-top: -7.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-desktop .noBackdrop .detailSticky,
|
||||||
|
.layout-tv .noBackdrop .detailSticky {
|
||||||
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.infoWrapper {
|
.infoWrapper {
|
||||||
|
@ -548,23 +591,17 @@
|
||||||
margin: 1.25em 0;
|
margin: 1.25em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailPageContent {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
padding-left: 2%;
|
|
||||||
padding-right: 2%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detailImageContainer {
|
.detailImageContainer {
|
||||||
position: sticky;
|
position: relative;
|
||||||
top: 25%;
|
margin-top: -25vh;
|
||||||
float: left;
|
float: left;
|
||||||
width: 22.786458333333332vw;
|
width: 25vw;
|
||||||
|
z-index: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layout-mobile .detailImageContainer,
|
.layout-desktop .noBackdrop .detailImageContainer,
|
||||||
.layout-tv .detailImageContainer {
|
.layout-tv .noBackdrop .detailImageContainer {
|
||||||
position: relative;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailPagePrimaryContent {
|
.detailPagePrimaryContent {
|
||||||
|
@ -572,15 +609,19 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailLogo {
|
.detailLogo {
|
||||||
width: 25em;
|
width: 67.25vw;
|
||||||
height: 9.375em;
|
height: 14.5vh;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 14.5%;
|
top: 15vh;
|
||||||
right: 10.5%;
|
right: 0;
|
||||||
-webkit-background-size: contain;
|
-webkit-background-size: contain;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.noBackdrop .detailLogo {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
@media all and (max-width: 87.5em) {
|
@media all and (max-width: 87.5em) {
|
||||||
.detailLogo {
|
.detailLogo {
|
||||||
right: 5%;
|
right: 5%;
|
||||||
|
@ -607,8 +648,8 @@
|
||||||
|
|
||||||
.itemDetailImage {
|
.itemDetailImage {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
|
-webkit-box-shadow: 0 0.1em 0.5em 0 rgba(0, 0, 0, 0.75);
|
||||||
-webkit-box-shadow: 0 0.0725em 0.29em 0 rgba(0, 0, 0, 0.37);
|
box-shadow: 0 0.1em 0.5em 0 rgba(0, 0, 0, 0.75);
|
||||||
}
|
}
|
||||||
|
|
||||||
div.itemDetailGalleryLink.defaultCardBackground {
|
div.itemDetailGalleryLink.defaultCardBackground {
|
||||||
|
@ -635,6 +676,16 @@ div.itemDetailGalleryLink.defaultCardBackground {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.layout-desktop .detailPageWrapperContainer,
|
||||||
|
.layout-tv .detailPageWrapperContainer {
|
||||||
|
margin-top: 7.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layout-tv #itemDetailPage:not(.noBackdrop) .detailPagePrimaryContainer,
|
||||||
|
.layout-desktop #itemDetailPage:not(.noBackdrop) .detailPagePrimaryContainer {
|
||||||
|
padding-left: 3.3%;
|
||||||
|
}
|
||||||
|
|
||||||
.btnPlaySimple {
|
.btnPlaySimple {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
@ -849,6 +900,11 @@ div.itemDetailGalleryLink.defaultCardBackground {
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.layout-desktop .noBackdrop .detailPageWrapperContainer,
|
||||||
|
.layout-tv .noBackdrop .detailPageWrapperContainer {
|
||||||
|
margin-top: 3.8em;
|
||||||
|
}
|
||||||
|
|
||||||
.mediaInfoStream {
|
.mediaInfoStream {
|
||||||
margin: 0 3em 0 0;
|
margin: 0 3em 0 0;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
|
@ -15,6 +15,7 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||||
page.querySelector("#selectEncoderPreset").value = config.EncoderPreset || "";
|
page.querySelector("#selectEncoderPreset").value = config.EncoderPreset || "";
|
||||||
page.querySelector("#txtH264Crf").value = config.H264Crf || "";
|
page.querySelector("#txtH264Crf").value = config.H264Crf || "";
|
||||||
page.querySelector("#chkEnableSubtitleExtraction").checked = config.EnableSubtitleExtraction || false;
|
page.querySelector("#chkEnableSubtitleExtraction").checked = config.EnableSubtitleExtraction || false;
|
||||||
|
page.querySelector("#chkEnableThrottling").checked = config.EnableThrottling || false;
|
||||||
page.querySelector("#selectVideoDecoder").dispatchEvent(new CustomEvent("change", {
|
page.querySelector("#selectVideoDecoder").dispatchEvent(new CustomEvent("change", {
|
||||||
bubbles: true
|
bubbles: true
|
||||||
}));
|
}));
|
||||||
|
@ -58,6 +59,7 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||||
config.EncoderPreset = form.querySelector("#selectEncoderPreset").value;
|
config.EncoderPreset = form.querySelector("#selectEncoderPreset").value;
|
||||||
config.H264Crf = parseInt(form.querySelector("#txtH264Crf").value || "0");
|
config.H264Crf = parseInt(form.querySelector("#txtH264Crf").value || "0");
|
||||||
config.EnableSubtitleExtraction = form.querySelector("#chkEnableSubtitleExtraction").checked;
|
config.EnableSubtitleExtraction = form.querySelector("#chkEnableSubtitleExtraction").checked;
|
||||||
|
config.EnableThrottling = form.querySelector("#chkEnableThrottling").checked;
|
||||||
config.HardwareDecodingCodecs = Array.prototype.map.call(Array.prototype.filter.call(form.querySelectorAll(".chkDecodeCodec"), function (c) {
|
config.HardwareDecodingCodecs = Array.prototype.map.call(Array.prototype.filter.call(form.querySelectorAll(".chkDecodeCodec"), function (c) {
|
||||||
return c.checked;
|
return c.checked;
|
||||||
}), function (c) {
|
}), function (c) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "apphost", "imageLoader", "libraryMenu", "globalize", "browser", "events", "scrollHelper", "playbackManager", "libraryBrowser", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-button", "emby-playstatebutton", "emby-ratingbutton", "emby-scroller", "emby-select"], function (loading, appRouter, layoutManager, connectionManager, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, appHost, imageLoader, libraryMenu, globalize, browser, events, scrollHelper, playbackManager, libraryBrowser) {
|
define(["loading", "appRouter", "layoutManager", "connectionManager", "userSettings", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "imageLoader", "libraryMenu", "globalize", "browser", "events", "playbackManager", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-button", "emby-playstatebutton", "emby-ratingbutton", "emby-scroller", "emby-select"], function (loading, appRouter, layoutManager, connectionManager, userSettings, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, imageLoader, libraryMenu, globalize, browser, events, playbackManager) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getPromise(apiClient, params) {
|
function getPromise(apiClient, params) {
|
||||||
|
@ -60,8 +60,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getProgramScheduleHtml(items, options) {
|
function getProgramScheduleHtml(items) {
|
||||||
options = options || {};
|
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-list" data-contextmenu="false">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-list" data-contextmenu="false">';
|
||||||
html += listView.getListViewHtml({
|
html += listView.getListViewHtml({
|
||||||
|
@ -445,7 +444,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderBackdrop(page, item, apiClient) {
|
function renderBackdrop(item) {
|
||||||
if (dom.getWindowSize().innerWidth >= 1000) {
|
if (dom.getWindowSize().innerWidth >= 1000) {
|
||||||
backdrop.setBackdrops([item]);
|
backdrop.setBackdrops([item]);
|
||||||
} else {
|
} else {
|
||||||
|
@ -455,7 +454,6 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
|
|
||||||
function renderDetailPageBackdrop(page, item, apiClient) {
|
function renderDetailPageBackdrop(page, item, apiClient) {
|
||||||
var imgUrl;
|
var imgUrl;
|
||||||
var screenWidth = screen.availWidth;
|
|
||||||
var hasbackdrop = false;
|
var hasbackdrop = false;
|
||||||
var itemBackdropElement = page.querySelector("#itemBackdrop");
|
var itemBackdropElement = page.querySelector("#itemBackdrop");
|
||||||
var usePrimaryImage = item.MediaType === "Video" && item.Type !== "Movie" && item.Type !== "Trailer" ||
|
var usePrimaryImage = item.MediaType === "Video" && item.Type !== "Movie" && item.Type !== "Trailer" ||
|
||||||
|
@ -464,13 +462,17 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
item.Type === "MusicArtist" ||
|
item.Type === "MusicArtist" ||
|
||||||
item.Type === "Person";
|
item.Type === "Person";
|
||||||
|
|
||||||
|
if (!layoutManager.mobile && !userSettings.enableBackdrops()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ("Program" === item.Type && item.ImageTags && item.ImageTags.Thumb) {
|
if ("Program" === item.Type && item.ImageTags && item.ImageTags.Thumb) {
|
||||||
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
imgUrl = apiClient.getScaledImageUrl(item.Id, {
|
||||||
type: "Thumb",
|
type: "Thumb",
|
||||||
index: 0,
|
index: 0,
|
||||||
tag: item.ImageTags.Thumb
|
tag: item.ImageTags.Thumb
|
||||||
});
|
});
|
||||||
itemBackdropElement.classList.remove("noBackdrop");
|
page.classList.remove("noBackdrop");
|
||||||
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
||||||
hasbackdrop = true;
|
hasbackdrop = true;
|
||||||
} else if (usePrimaryImage && item.ImageTags && item.ImageTags.Primary) {
|
} else if (usePrimaryImage && item.ImageTags && item.ImageTags.Primary) {
|
||||||
|
@ -479,7 +481,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
index: 0,
|
index: 0,
|
||||||
tag: item.ImageTags.Primary
|
tag: item.ImageTags.Primary
|
||||||
});
|
});
|
||||||
itemBackdropElement.classList.remove("noBackdrop");
|
page.classList.remove("noBackdrop");
|
||||||
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
||||||
hasbackdrop = true;
|
hasbackdrop = true;
|
||||||
} else if (item.BackdropImageTags && item.BackdropImageTags.length) {
|
} else if (item.BackdropImageTags && item.BackdropImageTags.length) {
|
||||||
|
@ -488,7 +490,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
index: 0,
|
index: 0,
|
||||||
tag: item.BackdropImageTags[0]
|
tag: item.BackdropImageTags[0]
|
||||||
});
|
});
|
||||||
itemBackdropElement.classList.remove("noBackdrop");
|
page.classList.remove("noBackdrop");
|
||||||
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
||||||
hasbackdrop = true;
|
hasbackdrop = true;
|
||||||
} else if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) {
|
} else if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) {
|
||||||
|
@ -497,7 +499,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
index: 0,
|
index: 0,
|
||||||
tag: item.ParentBackdropImageTags[0]
|
tag: item.ParentBackdropImageTags[0]
|
||||||
});
|
});
|
||||||
itemBackdropElement.classList.remove("noBackdrop");
|
page.classList.remove("noBackdrop");
|
||||||
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
||||||
hasbackdrop = true;
|
hasbackdrop = true;
|
||||||
} else if (item.ImageTags && item.ImageTags.Thumb) {
|
} else if (item.ImageTags && item.ImageTags.Thumb) {
|
||||||
|
@ -506,15 +508,16 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
index: 0,
|
index: 0,
|
||||||
tag: item.ImageTags.Thumb
|
tag: item.ImageTags.Thumb
|
||||||
});
|
});
|
||||||
itemBackdropElement.classList.remove("noBackdrop");
|
page.classList.remove("noBackdrop");
|
||||||
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
|
||||||
hasbackdrop = true;
|
hasbackdrop = true;
|
||||||
} else {
|
} else {
|
||||||
itemBackdropElement.classList.add("noBackdrop");
|
|
||||||
itemBackdropElement.style.backgroundImage = "";
|
itemBackdropElement.style.backgroundImage = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("Person" === item.Type) {
|
if ("Person" === item.Type) {
|
||||||
|
// FIXME: This hides the backdrop on all persons to fix a margin issue. Ideally, a proper fix should be made.
|
||||||
|
page.classList.add('noBackdrop');
|
||||||
itemBackdropElement.classList.add("personBackdrop");
|
itemBackdropElement.classList.add("personBackdrop");
|
||||||
} else {
|
} else {
|
||||||
itemBackdropElement.classList.remove("personBackdrop");
|
itemBackdropElement.classList.remove("personBackdrop");
|
||||||
|
@ -526,6 +529,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
function reloadFromItem(instance, page, params, item, user) {
|
function reloadFromItem(instance, page, params, item, user) {
|
||||||
var context = params.context;
|
var context = params.context;
|
||||||
page.querySelector(".detailPagePrimaryContainer").classList.add("detailSticky");
|
page.querySelector(".detailPagePrimaryContainer").classList.add("detailSticky");
|
||||||
|
|
||||||
renderName(item, page.querySelector(".nameContainer"), false, context);
|
renderName(item, page.querySelector(".nameContainer"), false, context);
|
||||||
var apiClient = connectionManager.getApiClient(item.ServerId);
|
var apiClient = connectionManager.getApiClient(item.ServerId);
|
||||||
renderSeriesTimerEditor(page, item, apiClient, user);
|
renderSeriesTimerEditor(page, item, apiClient, user);
|
||||||
|
@ -536,7 +540,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
setInitialCollapsibleState(page, item, apiClient, context, user);
|
setInitialCollapsibleState(page, item, apiClient, context, user);
|
||||||
renderDetails(page, item, apiClient, context);
|
renderDetails(page, item, apiClient, context);
|
||||||
renderTrackSelections(page, instance, item);
|
renderTrackSelections(page, instance, item);
|
||||||
renderBackdrop(page, item, apiClient);
|
renderBackdrop(item);
|
||||||
renderDetailPageBackdrop(page, item, apiClient);
|
renderDetailPageBackdrop(page, item, apiClient);
|
||||||
var canPlay = reloadPlayButtons(page, item);
|
var canPlay = reloadPlayButtons(page, item);
|
||||||
|
|
||||||
|
@ -663,7 +667,9 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
});
|
});
|
||||||
var detailLogo = page.querySelector(".detailLogo");
|
var detailLogo = page.querySelector(".detailLogo");
|
||||||
|
|
||||||
if (url) {
|
if (!layoutManager.mobile && !userSettings.enableBackdrops()) {
|
||||||
|
detailLogo.classList.add("hide");
|
||||||
|
} else if (url) {
|
||||||
detailLogo.classList.remove("hide");
|
detailLogo.classList.remove("hide");
|
||||||
detailLogo.classList.add("lazy");
|
detailLogo.classList.add("lazy");
|
||||||
detailLogo.setAttribute("data-src", url);
|
detailLogo.setAttribute("data-src", url);
|
||||||
|
@ -817,7 +823,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
if (editable) {
|
if (editable) {
|
||||||
html += "</a>";
|
html += "</a>";
|
||||||
} else if (!editable && url === undefined) {
|
} else if (!editable && url === undefined) {
|
||||||
html += "</div>"
|
html += "</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
var progressHtml = item.IsFolder || !item.UserData ? "" : indicators.getProgressBarHtml(item);
|
var progressHtml = item.IsFolder || !item.UserData ? "" : indicators.getProgressBarHtml(item);
|
||||||
|
@ -873,7 +879,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
elem.querySelector(".detailImageProgressContainer").innerHTML = indicators.getProgressBarHtml(item);
|
elem.querySelector(".detailImageProgressContainer").innerHTML = indicators.getProgressBarHtml(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
function refreshImage(page, item, user) {
|
function refreshImage(page, item) {
|
||||||
refreshDetailImageUserData(page.querySelector(".detailImageContainer"), item);
|
refreshDetailImageUserData(page.querySelector(".detailImageContainer"), item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -922,10 +928,10 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
|
|
||||||
if ("Playlist" == item.Type) {
|
if ("Playlist" == item.Type) {
|
||||||
page.querySelector("#childrenCollapsible").classList.remove("hide");
|
page.querySelector("#childrenCollapsible").classList.remove("hide");
|
||||||
renderPlaylistItems(page, item, user);
|
renderPlaylistItems(page, item);
|
||||||
} else if ("Studio" == item.Type || "Person" == item.Type || "Genre" == item.Type || "MusicGenre" == item.Type || "MusicArtist" == item.Type) {
|
} else if ("Studio" == item.Type || "Person" == item.Type || "Genre" == item.Type || "MusicGenre" == item.Type || "MusicArtist" == item.Type) {
|
||||||
page.querySelector("#childrenCollapsible").classList.remove("hide");
|
page.querySelector("#childrenCollapsible").classList.remove("hide");
|
||||||
renderItemsByName(page, item, user);
|
renderItemsByName(page, item);
|
||||||
} else if (item.IsFolder) {
|
} else if (item.IsFolder) {
|
||||||
if ("BoxSet" == item.Type) {
|
if ("BoxSet" == item.Type) {
|
||||||
page.querySelector("#childrenCollapsible").classList.add("hide");
|
page.querySelector("#childrenCollapsible").classList.add("hide");
|
||||||
|
@ -937,7 +943,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
}
|
}
|
||||||
|
|
||||||
if ("Series" == item.Type) {
|
if ("Series" == item.Type) {
|
||||||
renderSeriesSchedule(page, item, user);
|
renderSeriesSchedule(page, item);
|
||||||
renderNextUp(page, item, user);
|
renderNextUp(page, item, user);
|
||||||
} else {
|
} else {
|
||||||
page.querySelector(".nextUpSection").classList.add("hide");
|
page.querySelector(".nextUpSection").classList.add("hide");
|
||||||
|
@ -952,7 +958,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
page.querySelector("#specialsCollapsible").classList.add("hide");
|
page.querySelector("#specialsCollapsible").classList.add("hide");
|
||||||
}
|
}
|
||||||
|
|
||||||
renderCast(page, item, context, enableScrollX() ? null : 12);
|
renderCast(page, item);
|
||||||
|
|
||||||
if (item.PartCount && item.PartCount > 1) {
|
if (item.PartCount && item.PartCount > 1) {
|
||||||
page.querySelector("#additionalPartsCollapsible").classList.remove("hide");
|
page.querySelector("#additionalPartsCollapsible").classList.remove("hide");
|
||||||
|
@ -988,7 +994,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderGenres(page, item, apiClient, context, isStatic) {
|
function renderGenres(page, item, context) {
|
||||||
context = context || inferContext(item);
|
context = context || inferContext(item);
|
||||||
var type;
|
var type;
|
||||||
var genres = item.GenreItems || [];
|
var genres = item.GenreItems || [];
|
||||||
|
@ -1022,7 +1028,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderDirector(page, item, apiClient, context, isStatic) {
|
function renderDirector(page, item, context) {
|
||||||
var directors = (item.People || []).filter(function (p) {
|
var directors = (item.People || []).filter(function (p) {
|
||||||
return "Director" === p.Type;
|
return "Director" === p.Type;
|
||||||
});
|
});
|
||||||
|
@ -1050,8 +1056,8 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
renderSimilarItems(page, item, context);
|
renderSimilarItems(page, item, context);
|
||||||
renderMoreFromSeason(page, item, apiClient);
|
renderMoreFromSeason(page, item, apiClient);
|
||||||
renderMoreFromArtist(page, item, apiClient);
|
renderMoreFromArtist(page, item, apiClient);
|
||||||
renderDirector(page, item, apiClient, context, isStatic);
|
renderDirector(page, item, context);
|
||||||
renderGenres(page, item, apiClient, context, isStatic);
|
renderGenres(page, item, context);
|
||||||
renderChannelGuide(page, apiClient, item);
|
renderChannelGuide(page, apiClient, item);
|
||||||
var taglineElement = page.querySelector(".tagline");
|
var taglineElement = page.querySelector(".tagline");
|
||||||
|
|
||||||
|
@ -1125,14 +1131,6 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
return scrollX ? "overflowSquare" : "square";
|
return scrollX ? "overflowSquare" : "square";
|
||||||
}
|
}
|
||||||
|
|
||||||
function getThumbShape(scrollX) {
|
|
||||||
if (null == scrollX) {
|
|
||||||
scrollX = enableScrollX();
|
|
||||||
}
|
|
||||||
|
|
||||||
return scrollX ? "overflowBackdrop" : "backdrop";
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderMoreFromSeason(view, item, apiClient) {
|
function renderMoreFromSeason(view, item, apiClient) {
|
||||||
var section = view.querySelector(".moreFromSeasonSection");
|
var section = view.querySelector(".moreFromSeasonSection");
|
||||||
|
|
||||||
|
@ -1508,13 +1506,13 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderItemsByName(page, item, user) {
|
function renderItemsByName(page, item) {
|
||||||
require("scripts/itembynamedetailpage".split(","), function () {
|
require("scripts/itembynamedetailpage".split(","), function () {
|
||||||
window.ItemsByName.renderItems(page, item);
|
window.ItemsByName.renderItems(page, item);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderPlaylistItems(page, item, user) {
|
function renderPlaylistItems(page, item) {
|
||||||
require("scripts/playlistedit".split(","), function () {
|
require("scripts/playlistedit".split(","), function () {
|
||||||
PlaylistViewer.render(page, item);
|
PlaylistViewer.render(page, item);
|
||||||
});
|
});
|
||||||
|
@ -1594,7 +1592,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderSeriesSchedule(page, item, user) {
|
function renderSeriesSchedule(page, item) {
|
||||||
var apiClient = connectionManager.getApiClient(item.ServerId);
|
var apiClient = connectionManager.getApiClient(item.ServerId);
|
||||||
apiClient.getLiveTvPrograms({
|
apiClient.getLiveTvPrograms({
|
||||||
UserId: apiClient.getCurrentUserId(),
|
UserId: apiClient.getCurrentUserId(),
|
||||||
|
@ -1844,7 +1842,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderCast(page, item, context, limit, isStatic) {
|
function renderCast(page, item) {
|
||||||
var people = (item.People || []).filter(function (p) {
|
var people = (item.People || []).filter(function (p) {
|
||||||
return "Director" !== p.Type;
|
return "Director" !== p.Type;
|
||||||
});
|
});
|
||||||
|
@ -1934,7 +1932,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
playbackManager.play(playOptions);
|
playbackManager.play(playOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
function playTrailer(page) {
|
function playTrailer() {
|
||||||
playbackManager.playTrailers(currentItem);
|
playbackManager.playTrailers(currentItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1991,11 +1989,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
}
|
}
|
||||||
|
|
||||||
function onPlayTrailerClick() {
|
function onPlayTrailerClick() {
|
||||||
playTrailer(view);
|
playTrailer();
|
||||||
}
|
|
||||||
|
|
||||||
function onDownloadChange() {
|
|
||||||
reload(self, view, params);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDownloadClick() {
|
function onDownloadClick() {
|
||||||
|
@ -2050,9 +2044,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
if (userData) {
|
if (userData) {
|
||||||
currentItem.UserData = userData;
|
currentItem.UserData = userData;
|
||||||
reloadPlayButtons(view, currentItem);
|
reloadPlayButtons(view, currentItem);
|
||||||
apiClient.getCurrentUser().then(function (user) {
|
refreshImage(view, currentItem);
|
||||||
refreshImage(view, currentItem, user);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2083,11 +2075,9 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
||||||
});
|
});
|
||||||
view.addEventListener("click", function (e) {
|
view.addEventListener("click", function (e) {
|
||||||
if (dom.parentWithClass(e.target, "moreScenes")) {
|
if (dom.parentWithClass(e.target, "moreScenes")) {
|
||||||
apiClient.getCurrentUser().then(function (user) {
|
renderScenes(view, currentItem);
|
||||||
renderScenes(view, currentItem);
|
|
||||||
});
|
|
||||||
} else if (dom.parentWithClass(e.target, "morePeople")) {
|
} else if (dom.parentWithClass(e.target, "morePeople")) {
|
||||||
renderCast(view, currentItem, params.context);
|
renderCast(view, currentItem);
|
||||||
} else if (dom.parentWithClass(e.target, "moreSpecials")) {
|
} else if (dom.parentWithClass(e.target, "moreSpecials")) {
|
||||||
apiClient.getCurrentUser().then(function (user) {
|
apiClient.getCurrentUser().then(function (user) {
|
||||||
renderSpecials(view, currentItem, user);
|
renderSpecials(view, currentItem, user);
|
||||||
|
|
|
@ -144,6 +144,14 @@
|
||||||
<div class="fieldDescription checkboxFieldDescription">${AllowOnTheFlySubtitleExtractionHelp}</div>
|
<div class="fieldDescription checkboxFieldDescription">${AllowOnTheFlySubtitleExtractionHelp}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="checkboxContainer checkboxContainer-withDescription">
|
||||||
|
<label>
|
||||||
|
<input is="emby-checkbox" type="checkbox" id="chkEnableThrottling" />
|
||||||
|
<span>${AllowFfmpegThrottling}</span>
|
||||||
|
</label>
|
||||||
|
<div class="fieldDescription checkboxFieldDescription">${AllowFfmpegThrottlingHelp}</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button is="emby-button" type="submit" class="raised button-submit block">
|
<button is="emby-button" type="submit" class="raised button-submit block">
|
||||||
<span>${ButtonSave}</span>
|
<span>${ButtonSave}</span>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<div id="itemDetailPage" data-role="page" class="page libraryPage itemDetailPage noSecondaryNavPage selfBackdropPage" data-backbutton="true">
|
<div id="itemDetailPage" data-role="page" class="page libraryPage itemDetailPage noSecondaryNavPage selfBackdropPage noBackdrop" data-backbutton="true">
|
||||||
<div id="itemBackdrop" class="itemBackdrop noBackdrop">
|
<div id="itemBackdrop" class="itemBackdrop">
|
||||||
<button is="emby-button" type="button" class="btnPlay detailFloatingButton hide fab autoSize" title="${ButtonPlay}" data-mode="resume">
|
<button is="emby-button" type="button" class="btnPlay detailFloatingButton hide fab autoSize" title="${ButtonPlay}" data-mode="resume">
|
||||||
<i class="material-icons play_arrow"></i>
|
<i class="material-icons play_arrow"></i>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
"AllowMediaConversionHelp": "Grant or deny access to the convert media feature.",
|
"AllowMediaConversionHelp": "Grant or deny access to the convert media feature.",
|
||||||
"AllowOnTheFlySubtitleExtraction": "Allow subtitle extraction on the fly",
|
"AllowOnTheFlySubtitleExtraction": "Allow subtitle extraction on the fly",
|
||||||
"AllowOnTheFlySubtitleExtractionHelp": "Embedded subtitles can be extracted from videos and delivered to clients in plain text in order to help prevent video transcoding. On some systems this can take a long time and cause video playback to stall during the extraction process. Disable this to have embedded subtitles burned in with video transcoding when they are not natively supported by the client device.",
|
"AllowOnTheFlySubtitleExtractionHelp": "Embedded subtitles can be extracted from videos and delivered to clients in plain text in order to help prevent video transcoding. On some systems this can take a long time and cause video playback to stall during the extraction process. Disable this to have embedded subtitles burned in with video transcoding when they are not natively supported by the client device.",
|
||||||
|
"AllowFfmpegThrottling": "Throttle Transcodes",
|
||||||
|
"AllowFfmpegThrottlingHelp": "When a transcode or remux gets far enough ahead from the current playback position, pause the process so it will consume less resources. This is most useful when watching without seeking often. Turn this off if you experience playback issues.",
|
||||||
"AllowRemoteAccess": "Allow remote connections to this Jellyfin Server.",
|
"AllowRemoteAccess": "Allow remote connections to this Jellyfin Server.",
|
||||||
"AllowRemoteAccessHelp": "If unchecked, all remote connections will be blocked.",
|
"AllowRemoteAccessHelp": "If unchecked, all remote connections will be blocked.",
|
||||||
"AllowedRemoteAddressesHelp": "Comma separated list of IP addresses or IP/netmask entries for networks that will be allowed to connect remotely. If left blank, all remote addresses will be allowed.",
|
"AllowedRemoteAddressesHelp": "Comma separated list of IP addresses or IP/netmask entries for networks that will be allowed to connect remotely. If left blank, all remote addresses will be allowed.",
|
||||||
|
|
|
@ -112,7 +112,7 @@ html {
|
||||||
.inputLabelFocused,
|
.inputLabelFocused,
|
||||||
.selectLabelFocused,
|
.selectLabelFocused,
|
||||||
.textareaLabelFocused {
|
.textareaLabelFocused {
|
||||||
color: green;
|
color: #00a4dc;
|
||||||
}
|
}
|
||||||
|
|
||||||
.checkboxOutline {
|
.checkboxOutline {
|
||||||
|
|
|
@ -201,6 +201,10 @@ html {
|
||||||
}
|
}
|
||||||
|
|
||||||
.detailSticky {
|
.detailSticky {
|
||||||
|
background: rgba(32, 32, 32, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.noBackdrop .detailSticky {
|
||||||
background: #202020;
|
background: #202020;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,7 +105,7 @@ html {
|
||||||
.inputLabelFocused,
|
.inputLabelFocused,
|
||||||
.selectLabelFocused,
|
.selectLabelFocused,
|
||||||
.textareaLabelFocused {
|
.textareaLabelFocused {
|
||||||
color: green;
|
color: #00a4dc;
|
||||||
}
|
}
|
||||||
|
|
||||||
.checkboxOutline {
|
.checkboxOutline {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue