Handle channel banner load failures

This commit is contained in:
thePR0M3TH3AN committed 2025-10-17 23:39:35 -04:00
1 parent 6ba44dd2d1
commit 7594902f0b
2 files changed
+39 -4

No files matched your search

+39 -3
View File
@@ -164,9 +164,6 @@ function preloadBannerImage(url) {
if ("referrerPolicy" in img && !img.referrerPolicy) {
img.referrerPolicy = "no-referrer";
}
if ("crossOrigin" in img && !img.crossOrigin) {
img.crossOrigin = "anonymous";
}
img.onload = () => {
resolve(url);
};
@@ -207,6 +204,43 @@ function setBannerVisual(el, url) {
}
}
function ensureBannerFallbackHandler(bannerEl) {
if (!bannerEl) {
return;
}
const tagName = bannerEl.tagName ? bannerEl.tagName.toLowerCase() : "";
if (tagName !== "img") {
return;
}
if (bannerEl.dataset.bannerFallbackAttached === "true") {
return;
}
const handleError = () => {
const fallbackAttr =
(typeof bannerEl.dataset?.fallbackSrc === "string"
? bannerEl.dataset.fallbackSrc.trim()
: "") ||
bannerEl.getAttribute("data-fallback-src") ||
"";
const fallbackSrc = fallbackAttr || FALLBACK_CHANNEL_BANNER;
const activeSrc = bannerEl.currentSrc || bannerEl.src || "";
if (activeSrc) {
channelBannerImageCache.delete(activeSrc);
}
if (fallbackSrc && bannerEl.src !== fallbackSrc) {
bannerEl.src = fallbackSrc;
}
};
bannerEl.addEventListener("error", handleError, { passive: true });
bannerEl.dataset.bannerFallbackAttached = "true";
}
function getChannelZapButton() {
if (cachedZapButton && !document.body.contains(cachedZapButton)) {
cachedZapButton = null;
@@ -2843,6 +2877,8 @@ function applyChannelProfileMetadata({
bannerEl.setAttribute("data-fallback-src", fallbackSrc);
}
ensureBannerFallbackHandler(bannerEl);
if (!normalized.banner) {
setBannerVisual(bannerEl, fallbackSrc);
} else {
-1
View File
@@ -9,7 +9,6 @@
alt="Banner"
loading="lazy"
referrerpolicy="no-referrer"
crossorigin="anonymous"
data-fallback-src="assets/jpg/bitvid.jpg"
/>
<div class="absolute inset-0 rounded-lg bg-black bg-opacity-50"></div>