Implement manual mapping for MediaBarIsEnabled and enhance video backdrop handling
This commit is contained in:
@@ -63,6 +63,7 @@ const CONFIG = {
|
||||
sortOrder: "Ascending",
|
||||
applyLimitsToCustomIds: false,
|
||||
seasonalSections: "[]",
|
||||
isEnabled: true,
|
||||
};
|
||||
|
||||
// State management
|
||||
@@ -1638,6 +1639,7 @@ const SlideCreator = {
|
||||
"data-item-id": itemId,
|
||||
});
|
||||
|
||||
let videoBackdrop;
|
||||
let backdrop;
|
||||
let isVideo = false;
|
||||
let trailerUrl = null;
|
||||
@@ -1721,7 +1723,7 @@ const SlideCreator = {
|
||||
// Create container for YouTube API
|
||||
const videoClass = CONFIG.fullWidthVideo ? "video-backdrop-full" : "video-backdrop-default";
|
||||
|
||||
backdrop = SlideUtils.createElement("div", {
|
||||
videoBackdrop = SlideUtils.createElement("div", {
|
||||
className: `backdrop video-backdrop ${videoClass}`,
|
||||
id: `youtube-player-${itemId}`
|
||||
});
|
||||
@@ -1864,12 +1866,12 @@ const SlideCreator = {
|
||||
|
||||
videoAttributes.muted = "";
|
||||
|
||||
backdrop = SlideUtils.createElement("video", videoAttributes);
|
||||
backdrop.volume = 0.4;
|
||||
videoBackdrop = SlideUtils.createElement("video", videoAttributes);
|
||||
videoBackdrop.volume = 0.4;
|
||||
|
||||
STATE.slideshow.videoPlayers[itemId] = backdrop;
|
||||
STATE.slideshow.videoPlayers[itemId] = videoBackdrop;
|
||||
|
||||
backdrop.addEventListener('play', (event) => {
|
||||
videoBackdrop.addEventListener('play', (event) => {
|
||||
const slide = document.querySelector(`.slide[data-item-id="${itemId}"]`);
|
||||
if (!slide || !slide.classList.contains('active')) {
|
||||
console.log(`Local video ${itemId} started playing but slide is not active, pausing.`);
|
||||
@@ -1882,14 +1884,14 @@ const SlideCreator = {
|
||||
}
|
||||
});
|
||||
|
||||
backdrop.addEventListener('ended', (event) => {
|
||||
videoBackdrop.addEventListener('ended', (event) => {
|
||||
const slide = event.target.closest('.slide');
|
||||
if (slide && slide.classList.contains('active')) {
|
||||
SlideshowManager.nextSlide();
|
||||
}
|
||||
});
|
||||
|
||||
backdrop.addEventListener('error', (event) => {
|
||||
videoBackdrop.addEventListener('error', (event) => {
|
||||
console.warn(`Local video error for item ${itemId}`);
|
||||
const slide = event.target.closest('.slide');
|
||||
if (slide && slide.classList.contains('active')) {
|
||||
@@ -1899,13 +1901,18 @@ const SlideCreator = {
|
||||
}
|
||||
}
|
||||
|
||||
if (!isVideo) {
|
||||
backdrop = SlideUtils.createElement("img", {
|
||||
className: "backdrop high-quality",
|
||||
src: this.buildImageUrl(item, "Backdrop", 0, serverAddress, 60),
|
||||
alt: LocalizationUtils.getLocalizedString('Backdrop', 'Backdrop'),
|
||||
loading: "eager",
|
||||
});
|
||||
// Always create a static backdrop image (to show while video loads or if no video)
|
||||
backdrop = SlideUtils.createElement("img", {
|
||||
className: "backdrop high-quality",
|
||||
src: this.buildImageUrl(item, "Backdrop", 0, serverAddress, 60),
|
||||
alt: LocalizationUtils.getLocalizedString('Backdrop', 'Backdrop'),
|
||||
loading: "eager",
|
||||
});
|
||||
|
||||
// If video, static backdrop should be strictly a background (no animation)
|
||||
if (isVideo) {
|
||||
backdrop.style.animation = "none";
|
||||
backdrop.style.transition = "none";
|
||||
}
|
||||
|
||||
const backdropOverlay = SlideUtils.createElement("div", {
|
||||
@@ -1915,8 +1922,14 @@ const SlideCreator = {
|
||||
const backdropContainer = SlideUtils.createElement("div", {
|
||||
className: "backdrop-container" + (isVideo && CONFIG.fullWidthVideo ? " full-width-video" : ""),
|
||||
});
|
||||
|
||||
backdropContainer.append(backdrop, backdropOverlay);
|
||||
|
||||
// If video exists, append on top of static backdrop
|
||||
if (isVideo && videoBackdrop) {
|
||||
backdropContainer.appendChild(videoBackdrop);
|
||||
}
|
||||
|
||||
const logo = SlideUtils.createElement("img", {
|
||||
className: "logo high-quality",
|
||||
src: this.buildImageUrl(item, "Logo", undefined, serverAddress, 40),
|
||||
|
||||
Reference in New Issue
Block a user