Spaces:
Running
Running
Hermes Agent commited on
Commit ·
964e7f6
1
Parent(s): bcf7f1a
fix(ui): revert settings and dashboard UI to default Jellyfin layout
Browse files- apex/combined-entrypoint.sh +8 -0
- apex/ui/abyss.css +2 -56
- apex/ui/spotlight-loader.js +69 -1
apex/combined-entrypoint.sh
CHANGED
|
@@ -220,6 +220,14 @@ PY
|
|
| 220 |
echo "[JELLYFIN] Configured server name as Apex in $SYSTEM_XML"
|
| 221 |
fi
|
| 222 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 223 |
echo "[HEALTH] Jellyfin starting in background (local datadir)..."
|
| 224 |
launch_jellyfin
|
| 225 |
|
|
|
|
| 220 |
echo "[JELLYFIN] Configured server name as Apex in $SYSTEM_XML"
|
| 221 |
fi
|
| 222 |
|
| 223 |
+
# Ensure custom CSS in branding.xml does not force theme into admin pages
|
| 224 |
+
for bcfg in "$LOCAL_ROOT/config/branding.xml" "/data/jellyfin/config/branding.xml"; do
|
| 225 |
+
if [ -f "$bcfg" ]; then
|
| 226 |
+
sed -i 's|<CustomCss>[^<]*abyss[^<]*</CustomCss>|<CustomCss></CustomCss>|g' "$bcfg" 2>/dev/null || true
|
| 227 |
+
sed -i 's|<CustomCss>[^<]*ElegantFin[^<]*</CustomCss>|<CustomCss></CustomCss>|g' "$bcfg" 2>/dev/null || true
|
| 228 |
+
fi
|
| 229 |
+
done
|
| 230 |
+
|
| 231 |
echo "[HEALTH] Jellyfin starting in background (local datadir)..."
|
| 232 |
launch_jellyfin
|
| 233 |
|
apex/ui/abyss.css
CHANGED
|
@@ -655,21 +655,7 @@ html[data-theme="dark"] .MuiDialog-paper {
|
|
| 655 |
backdrop-filter: blur(var(--abyss-glass-blur));
|
| 656 |
}
|
| 657 |
|
| 658 |
-
|
| 659 |
-
background-color: #141416 !important;
|
| 660 |
-
border-radius: 20px !important;
|
| 661 |
-
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.6) !important;
|
| 662 |
-
border: solid 1px rgba(255, 255, 255, 0.12) !important;
|
| 663 |
-
left: 16px;
|
| 664 |
-
top: 16px;
|
| 665 |
-
bottom: 16px;
|
| 666 |
-
padding: 16px 0;
|
| 667 |
-
max-height: calc(100vh - 32px);
|
| 668 |
-
width: 280px !important;
|
| 669 |
-
max-width: 85vw !important;
|
| 670 |
-
-webkit-backdrop-filter: blur(20px);
|
| 671 |
-
backdrop-filter: blur(20px);
|
| 672 |
-
}
|
| 673 |
|
| 674 |
html[data-theme="dark"] .MuiDrawer-paper .MuiDivider-root {
|
| 675 |
display: none;
|
|
@@ -801,21 +787,7 @@ html.abyss-spotlight-visible[data-theme="dark"] .MuiAppBar-root+div[aria-hidden=
|
|
| 801 |
|
| 802 |
|
| 803 |
|
| 804 |
-
/* Navigation / drawer */
|
| 805 |
-
.editPageSidebar,
|
| 806 |
-
.mainDrawer {
|
| 807 |
-
background-color: #141416 !important;
|
| 808 |
-
margin: 16px 0;
|
| 809 |
-
border-radius: 20px !important;
|
| 810 |
-
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.6);
|
| 811 |
-
border: solid 1px rgba(255, 255, 255, 0.12) !important;
|
| 812 |
-
width: 280px !important;
|
| 813 |
-
max-width: 85vw !important;
|
| 814 |
-
}
|
| 815 |
|
| 816 |
-
.mainDrawer.drawer-open {
|
| 817 |
-
margin: 24px;
|
| 818 |
-
}
|
| 819 |
|
| 820 |
.sidebarHeader {
|
| 821 |
margin: 0.9em 0 0.2em;
|
|
@@ -2012,30 +1984,7 @@ body:has(#videoOsdPage) .skinHeader .MuiTypography-root.MuiTypography-body1 {
|
|
| 2012 |
}
|
| 2013 |
|
| 2014 |
|
| 2015 |
-
/* 9. DASHBOARD & ADMIN */
|
| 2016 |
|
| 2017 |
-
.dashboardSection h3 {
|
| 2018 |
-
margin: .5em 0em .5em .5em;
|
| 2019 |
-
}
|
| 2020 |
-
|
| 2021 |
-
.dashboardSection .sectionTitleTextButton>.material-icons.material-icons {
|
| 2022 |
-
margin-top: .5em;
|
| 2023 |
-
margin-bottom: .5em;
|
| 2024 |
-
margin-right: .2em;
|
| 2025 |
-
}
|
| 2026 |
-
|
| 2027 |
-
#dashboardPage .playbackProgress>div {
|
| 2028 |
-
background-color: rgba(var(--abyss-accent), 0.75) !important;
|
| 2029 |
-
}
|
| 2030 |
-
|
| 2031 |
-
#dashboardPage .transcodingProgress>div {
|
| 2032 |
-
background-color: rgba(var(--abyss-accent), 0.35) !important;
|
| 2033 |
-
}
|
| 2034 |
-
|
| 2035 |
-
.navMenuOption-selected {
|
| 2036 |
-
background: rgb(var(--abyss-accent)) !important;
|
| 2037 |
-
color: #121212 !important;
|
| 2038 |
-
}
|
| 2039 |
|
| 2040 |
|
| 2041 |
/* 10. ITEM DETAIL PAGE */
|
|
@@ -2538,10 +2487,7 @@ body:has(#videoOsdPage) .skinHeader .MuiTypography-root.MuiTypography-body1 {
|
|
| 2538 |
font-size: 2em;
|
| 2539 |
}
|
| 2540 |
|
| 2541 |
-
|
| 2542 |
-
width: 280px !important;
|
| 2543 |
-
max-width: 85vw !important;
|
| 2544 |
-
}
|
| 2545 |
}
|
| 2546 |
|
| 2547 |
@media screen and (max-height: 26em) and (orientation: landscape) {
|
|
|
|
| 655 |
backdrop-filter: blur(var(--abyss-glass-blur));
|
| 656 |
}
|
| 657 |
|
| 658 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 659 |
|
| 660 |
html[data-theme="dark"] .MuiDrawer-paper .MuiDivider-root {
|
| 661 |
display: none;
|
|
|
|
| 787 |
|
| 788 |
|
| 789 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 790 |
|
|
|
|
|
|
|
|
|
|
| 791 |
|
| 792 |
.sidebarHeader {
|
| 793 |
margin: 0.9em 0 0.2em;
|
|
|
|
| 1984 |
}
|
| 1985 |
|
| 1986 |
|
|
|
|
| 1987 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1988 |
|
| 1989 |
|
| 1990 |
/* 10. ITEM DETAIL PAGE */
|
|
|
|
| 2487 |
font-size: 2em;
|
| 2488 |
}
|
| 2489 |
|
| 2490 |
+
|
|
|
|
|
|
|
|
|
|
| 2491 |
}
|
| 2492 |
|
| 2493 |
@media screen and (max-height: 26em) and (orientation: landscape) {
|
apex/ui/spotlight-loader.js
CHANGED
|
@@ -407,9 +407,71 @@
|
|
| 407 |
} catch (e) {}
|
| 408 |
}
|
| 409 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 410 |
var installScheduled = false;
|
| 411 |
|
| 412 |
var scheduleInstall = function () {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 413 |
ensureDarkTheme();
|
| 414 |
replaceServerNameText();
|
| 415 |
var alreadyGood =
|
|
@@ -435,12 +497,17 @@
|
|
| 435 |
}
|
| 436 |
};
|
| 437 |
|
|
|
|
| 438 |
ensureDarkTheme();
|
| 439 |
replaceServerNameText();
|
|
|
|
| 440 |
if (typeof MutationObserver === "function") {
|
| 441 |
safe(function () {
|
| 442 |
if (document.documentElement) {
|
| 443 |
-
var themeObserver = new MutationObserver(
|
|
|
|
|
|
|
|
|
|
| 444 |
themeObserver.observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
|
| 445 |
}
|
| 446 |
if (document.body) {
|
|
@@ -456,6 +523,7 @@
|
|
| 456 |
// visibility sync every 2s, so stale SPA navigation state self-corrects
|
| 457 |
// without needing a hard refresh.
|
| 458 |
setInterval(function () {
|
|
|
|
| 459 |
scheduleInstall();
|
| 460 |
replaceServerNameText();
|
| 461 |
if (currentSync) safe(currentSync);
|
|
|
|
| 407 |
} catch (e) {}
|
| 408 |
}
|
| 409 |
|
| 410 |
+
function isSettingsRoute() {
|
| 411 |
+
var hash = (window.location.hash || "").toLowerCase();
|
| 412 |
+
if (
|
| 413 |
+
hash === "" ||
|
| 414 |
+
hash === "#/" ||
|
| 415 |
+
hash.startsWith("#/home") ||
|
| 416 |
+
hash.startsWith("#/movies") ||
|
| 417 |
+
hash.startsWith("#/tv") ||
|
| 418 |
+
hash.startsWith("#/music") ||
|
| 419 |
+
hash.startsWith("#/item") ||
|
| 420 |
+
hash.startsWith("#/details") ||
|
| 421 |
+
hash.startsWith("#/search") ||
|
| 422 |
+
hash.startsWith("#/video") ||
|
| 423 |
+
hash.startsWith("#/favorites")
|
| 424 |
+
) {
|
| 425 |
+
return false;
|
| 426 |
+
}
|
| 427 |
+
return (
|
| 428 |
+
hash.includes("dashboard") ||
|
| 429 |
+
hash.includes("settings") ||
|
| 430 |
+
hash.includes("preference") ||
|
| 431 |
+
hash.includes("configuration") ||
|
| 432 |
+
hash.includes("wizard") ||
|
| 433 |
+
hash.includes("userprofile") ||
|
| 434 |
+
hash.includes("useredit") ||
|
| 435 |
+
hash.includes("devices") ||
|
| 436 |
+
hash.includes("apikeys") ||
|
| 437 |
+
hash.includes("notifications") ||
|
| 438 |
+
hash.includes("activity") ||
|
| 439 |
+
hash.includes("logs") ||
|
| 440 |
+
Boolean(document.querySelector("#dashboardPage, .pageWithSidebar, .adminDrawerLogo, .dashboardSection"))
|
| 441 |
+
);
|
| 442 |
+
}
|
| 443 |
+
|
| 444 |
+
function syncSettingsTheme() {
|
| 445 |
+
var isSettings = isSettingsRoute();
|
| 446 |
+
var themeLink = document.querySelector('link[data-abyss-theme]');
|
| 447 |
+
if (themeLink && themeLink.disabled !== isSettings) {
|
| 448 |
+
themeLink.disabled = isSettings;
|
| 449 |
+
}
|
| 450 |
+
var customCss = document.getElementById("customCss");
|
| 451 |
+
if (customCss && customCss.disabled !== isSettings) {
|
| 452 |
+
customCss.disabled = isSettings;
|
| 453 |
+
}
|
| 454 |
+
if (isSettings) {
|
| 455 |
+
document.documentElement.classList.add("jellyfin-default-settings");
|
| 456 |
+
document.documentElement.classList.remove("abyss-theme-active");
|
| 457 |
+
clearSpotlightBackdrop();
|
| 458 |
+
if (currentIframe) {
|
| 459 |
+
currentIframe.style.display = "none";
|
| 460 |
+
}
|
| 461 |
+
} else {
|
| 462 |
+
document.documentElement.classList.remove("jellyfin-default-settings");
|
| 463 |
+
document.documentElement.classList.add("abyss-theme-active");
|
| 464 |
+
}
|
| 465 |
+
}
|
| 466 |
+
|
| 467 |
var installScheduled = false;
|
| 468 |
|
| 469 |
var scheduleInstall = function () {
|
| 470 |
+
syncSettingsTheme();
|
| 471 |
+
if (isSettingsRoute()) {
|
| 472 |
+
replaceServerNameText();
|
| 473 |
+
return;
|
| 474 |
+
}
|
| 475 |
ensureDarkTheme();
|
| 476 |
replaceServerNameText();
|
| 477 |
var alreadyGood =
|
|
|
|
| 497 |
}
|
| 498 |
};
|
| 499 |
|
| 500 |
+
syncSettingsTheme();
|
| 501 |
ensureDarkTheme();
|
| 502 |
replaceServerNameText();
|
| 503 |
+
window.addEventListener("hashchange", syncSettingsTheme);
|
| 504 |
if (typeof MutationObserver === "function") {
|
| 505 |
safe(function () {
|
| 506 |
if (document.documentElement) {
|
| 507 |
+
var themeObserver = new MutationObserver(function () {
|
| 508 |
+
syncSettingsTheme();
|
| 509 |
+
if (!isSettingsRoute()) ensureDarkTheme();
|
| 510 |
+
});
|
| 511 |
themeObserver.observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
|
| 512 |
}
|
| 513 |
if (document.body) {
|
|
|
|
| 523 |
// visibility sync every 2s, so stale SPA navigation state self-corrects
|
| 524 |
// without needing a hard refresh.
|
| 525 |
setInterval(function () {
|
| 526 |
+
syncSettingsTheme();
|
| 527 |
scheduleInstall();
|
| 528 |
replaceServerNameText();
|
| 529 |
if (currentSync) safe(currentSync);
|