From 5d9821a6427d1a3d6dd835f21fc7d88e17cc8424 Mon Sep 17 00:00:00 2001 From: Aden Linday Date: Thu, 20 Aug 2026 11:51:27 +0930 Subject: [PATCH] fix: fix arrows not removing from courses body --- .../built-in/enhancedNavigation/index.ts | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/plugins/built-in/enhancedNavigation/index.ts b/src/plugins/built-in/enhancedNavigation/index.ts index f7dd340f..4b7d85d0 100644 --- a/src/plugins/built-in/enhancedNavigation/index.ts +++ b/src/plugins/built-in/enhancedNavigation/index.ts @@ -199,6 +199,10 @@ const updateArrowState = (course: HTMLElement) => { if (next) next.disabled = idx === -1 || idx >= items.length - 1; }; +const removeArrows = () => { + document.getElementById(ARROW_CONTAINER_ID)?.remove(); +}; + const ensureArrows = (course: HTMLElement) => { if (!course.querySelector(".programmeNavigator")) return; @@ -340,7 +344,15 @@ const enhancedNavigationPlugin: Plugin = { }); const bodyObserver = new MutationObserver((muts) => { + let courseMaybeRemoved = false; muts.forEach((m) => { + m.removedNodes.forEach((n) => { + if (n.nodeType !== 1) return; + const el = n as Element; + if (el.matches(".course") || el.querySelector(".course")) { + courseMaybeRemoved = true; + } + }); m.addedNodes.forEach((n) => { if (n.nodeType !== 1) return; const el = n as Element; @@ -349,17 +361,25 @@ const enhancedNavigationPlugin: Plugin = { } }); }); + if (courseMaybeRemoved && !document.querySelector(".course")) removeArrows(); + }); + bodyObserver.observe(document.body, { childList: true, subtree: true }); + + const pageChange = api.seqta.onPageChange(() => { + requestAnimationFrame(() => { + if (!document.querySelector(".course")) removeArrows(); + }); }); - bodyObserver.observe(document.body, { childList: true }); return () => { window.removeEventListener("resize", positionArrows); + pageChange.unregister(); courseMount.unregister(); navObservers.forEach((observer) => observer.disconnect()); courseObservers.forEach((observer) => observer.disconnect()); slidePaneCleanups.forEach((cleanup) => cleanup()); bodyObserver.disconnect(); - document.getElementById(ARROW_CONTAINER_ID)?.remove(); + removeArrows(); document.getElementById(STYLE_ID)?.remove(); }; },