From 0c3e74829ab6aeea96d1e452791e9593ce04f4a3 Mon Sep 17 00:00:00 2001
From: CodeDevMLH <145071728+CodeDevMLH@users.noreply.github.com>
Date: Mon, 9 Feb 2026 16:40:01 +0100
Subject: [PATCH] Remove upstream trailer layout feature from configuration and
UI
---
.../Configuration/PluginConfiguration.cs | 1 -
.../Configuration/configPage.html | 15 +----
.../Web/mediaBarEnhanced.css | 62 -----------------
.../Web/mediaBarEnhanced.js | 67 ++-----------------
4 files changed, 8 insertions(+), 137 deletions(-)
diff --git a/Jellyfin.Plugin.MediaBarEnhanced/Configuration/PluginConfiguration.cs b/Jellyfin.Plugin.MediaBarEnhanced/Configuration/PluginConfiguration.cs
index 894e1ed..725c5c2 100644
--- a/Jellyfin.Plugin.MediaBarEnhanced/Configuration/PluginConfiguration.cs
+++ b/Jellyfin.Plugin.MediaBarEnhanced/Configuration/PluginConfiguration.cs
@@ -36,7 +36,6 @@ namespace Jellyfin.Plugin.MediaBarEnhanced.Configuration
public bool EnableSeasonalContent { get; set; } = false;
public bool IsEnabled { get; set; } = true;
public bool EnableClientSideSettings { get; set; } = false;
- public bool EnableUpstreamTrailerLayout { get; set; } = false;
public string SortBy { get; set; } = "Random";
public string SortOrder { get; set; } = "Ascending";
}
diff --git a/Jellyfin.Plugin.MediaBarEnhanced/Configuration/configPage.html b/Jellyfin.Plugin.MediaBarEnhanced/Configuration/configPage.html
index b263099..b4eb512 100644
--- a/Jellyfin.Plugin.MediaBarEnhanced/Configuration/configPage.html
+++ b/Jellyfin.Plugin.MediaBarEnhanced/Configuration/configPage.html
@@ -73,14 +73,6 @@
Delay slide transition until trailer finishes.
-
-
-
- Enable Upstream Trailer Layout
-
-
Use the upstream (original) layout for trailers. This renders the video inside a container overlaying the backdrop, instead of replacing it to support full-width video.
-
{
@@ -1696,19 +1676,7 @@ const SlideCreator = {
}
},
'onStateChange': (event) => {
- const slide = document.querySelector(`.slide[data-item-id="${itemId}"]`);
- const videoContainer = slide ? slide.querySelector('.video-container') : null;
-
- if (event.data === YT.PlayerState.PLAYING || event.data === YT.PlayerState.BUFFERING) {
- if (videoContainer) videoContainer.classList.add('active');
- } else {
- if (videoContainer && event.data !== YT.PlayerState.BUFFERING) {
- videoContainer.classList.remove('active');
- }
- }
-
if (event.data === YT.PlayerState.ENDED) {
- if (videoContainer) videoContainer.classList.remove('active');
if (CONFIG.waitForTrailerToEnd) {
SlideshowManager.nextSlide();
} else {
@@ -1717,7 +1685,6 @@ const SlideCreator = {
}
},
'onError': () => {
- if (videoContainer) videoContainer.classList.remove('active');
// Fallback to next slide on error
if (CONFIG.waitForTrailerToEnd) {
SlideshowManager.nextSlide();
@@ -1770,34 +1737,12 @@ const SlideCreator = {
SlideshowManager.nextSlide();
}
});
-
- if (CONFIG.enableUpstreamTrailerLayout) {
- // Wrap in container
- const videoContainer = SlideUtils.createElement("div", {
- className: "video-container",
- id: `video-container-${itemId}`
- });
- backdrop.style.position = "";
- videoContainer.appendChild(backdrop);
- slide.appendChild(videoContainer);
-
- isVideo = false;
- hasUpstreamVideo = true;
-
- // Use requestAnimationFrame to ensure listeners attach and class adds correctly
- requestAnimationFrame(() => {
- backdrop.addEventListener('play', () => videoContainer.classList.add('active'));
- backdrop.addEventListener('playing', () => videoContainer.classList.add('active'));
- backdrop.addEventListener('pause', () => videoContainer.classList.remove('active'));
- backdrop.addEventListener('ended', () => videoContainer.classList.remove('active'));
- });
- }
}
}
if (!isVideo) {
backdrop = SlideUtils.createElement("img", {
- className: hasUpstreamVideo ? "backdrop high-quality with-video" : "backdrop high-quality",
+ className: "backdrop high-quality",
src: this.buildImageUrl(item, "Backdrop", 0, serverAddress, 60),
alt: LocalizationUtils.getLocalizedString('Backdrop', 'Backdrop'),
loading: "eager",