Files
KefinTweaks/exclusiveElsewhere.js
T

51 lines
1.8 KiB
JavaScript

// Exclusive Elsewhere Script
// Modifies the behavior of the Jellyfin Enhanced Elsewhere functionality
// Adds custom branding when the item is not available on any selected streaming services
//
// If you want to add an icon to the text you can do so by targeting the "exclusive" class.
//
// For example:
// .streaming-lookup-container a.exclusive::after {
// content: '';
// background: url(/path/to/icon.png);
// background-size: contain;
// background-repeat: no-repeat;
// width: 25px;
// height: 25px;
// display: inline-block;
// margin-left: 0.5rem;
// }
(function() {
'use strict';
// Common logging function
const LOG = (...args) => console.log('[ExclusiveElsewhere]', ...args);
const WARN = (...args) => console.warn('[ExclusiveElsewhere]', ...args);
const ERR = (...args) => console.error('[ExclusiveElsewhere]', ...args);
LOG('Script loaded - JS Injector mode');
const observer = new MutationObserver(() => {
const elsewhereContainer = document.querySelector('.itemDetailPage:not(.hide) .streaming-lookup-container>div');
if (elsewhereContainer && elsewhereContainer.children && elsewhereContainer.children.length > 2) {
return;
}
const link = document.querySelector('.itemDetailPage:not(.hide) .streaming-lookup-container>div>div:first-child a');
if (link && !link.classList.contains('exclusive')) {
LOG('Modifying elsewhere link to show exclusive branding');
link.innerHTML = "Only available on Jellyfin";
link.classList.add("exclusive");
link.title = "Jellyfin Exclusive";
link.disable = true;
}
});
observer.observe(document.body, {
childList: true,
subtree: true
});
LOG('Exclusive elsewhere functionality initialized');
})();