From 2d321b4e579d5a06bf7a1aaaf11431e6389d311d Mon Sep 17 00:00:00 2001 From: folx bot Date: Tue, 25 Aug 2026 11:53:28 +0200 Subject: [PATCH] zunanje povezave se odpirajo v novem zavihku (delegiran klik pokrije tudi povezave v HTML clankov) --- client/src/App.tsx | 26 ++++++++++++++++++++++++++ client/src/pages/empfang.tsx | 2 ++ server/static.ts | 2 +- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/client/src/App.tsx b/client/src/App.tsx index 6a6a814..46933a1 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -25,6 +25,31 @@ import AdminPushPage from "@/pages/admin-push"; import CookieConsent from "@/components/cookie-consent"; import MobileStickyAd from "@/components/mobile-sticky-ad"; +// Vse povezave, ki vodijo z nase domene, se odprejo v novem zavihku. Delegiran +// klik pokrije tudi povezave znotraj HTML vsebine clankov, kjer atributa +// target ne moremo nastaviti vnaprej. +function ExternalLinksNewTab() { + useEffect(() => { + const onClick = (e: MouseEvent) => { + if (e.defaultPrevented || e.button !== 0 || e.metaKey || e.ctrlKey || e.shiftKey || e.altKey) return; + const el = e.target as HTMLElement | null; + const a = el && el.closest ? (el.closest("a[href]") as HTMLAnchorElement | null) : null; + if (!a) return; + const href = a.getAttribute("href") || ""; + if (!/^https?:\/\//i.test(href)) return; + let u: URL; + try { u = new URL(href, window.location.href); } catch { return; } + if (u.host === window.location.host) return; + if (a.target === "_blank") return; + e.preventDefault(); + window.open(u.href, "_blank", "noopener,noreferrer"); + }; + document.addEventListener("click", onClick); + return () => document.removeEventListener("click", onClick); + }, []); + return null; +} + function ScrollToTop() { const [location] = useLocation(); useEffect(() => { @@ -37,6 +62,7 @@ function Router() { return (
+ diff --git a/client/src/pages/empfang.tsx b/client/src/pages/empfang.tsx index 5bd9e6d..fea0e45 100644 --- a/client/src/pages/empfang.tsx +++ b/client/src/pages/empfang.tsx @@ -138,6 +138,8 @@ export default function EmpfangPage() { Besuchen Sie{" "} diff --git a/server/static.ts b/server/static.ts index 0bef0cb..ecf7be4 100644 --- a/server/static.ts +++ b/server/static.ts @@ -193,7 +193,7 @@ export function serveStatic(app: Express) { ``, `

${escapeHtml(desc)}

`, chapterHtml, - `

Das ganze Video auf YouTube ansehen

`, + `

Das ganze Video auf YouTube ansehen

`, v.articleUrl ? `

Ganzer Artikel auf folx.tv

` : "", descHtml ? `

Zum Video

${descHtml}` : "", "",