Logo im Dark Mode sichtbar, Apps öffnen in neuem Tab

- Logo mit fest weißen Palmen statt transparenter Aussparung (war auf dunklem Grund unsichtbar)
- App-Kacheln (Portal und Kopfleiste) öffnen standardmäßig einen neuen Tab (OPEN_APPS_IN_NEW_TAB)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kerimatilganandClaude Opus 5.5 committed 2026-09-27 13:43:44 +02:00
1 parent 97acf2cb66
commit a4945d2cd5
9 files changed
+8 -4

No files matched your search

+2
View File
@@ -20,6 +20,8 @@ AUTHENTIK_TOKEN=
EDITOR_GROUPS=HI-Admin,HI-Leitung EDITOR_GROUPS=HI-Admin,HI-Leitung
# Domains, von denen die Kopfleiste geladen werden darf / auf die nach Login zurückgeleitet wird # Domains, von denen die Kopfleiste geladen werden darf / auf die nach Login zurückgeleitet wird
ALLOWED_DOMAINS=handy-insel.de ALLOWED_DOMAINS=handy-insel.de
# Apps in neuem Tab öffnen (Standard: true)
# OPEN_APPS_IN_NEW_TAB=true
# Optional: Kachel-Reihenfolge (Slugs) und ausgeblendete Apps # Optional: Kachel-Reihenfolge (Slugs) und ausgeblendete Apps
# APP_ORDER=preisliste,vvl,zeiterfassung,timer,kundenkarte,datenuebertragungen,service,paperless,patch-mon # APP_ORDER=preisliste,vvl,zeiterfassung,timer,kundenkarte,datenuebertragungen,service,paperless,patch-mon
# HIDDEN_APPS=portal # HIDDEN_APPS=portal
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#2d1b69" /> <meta name="theme-color" content="#2d1b69" />
<script src="/theme-init.js"></script> <script src="/theme-init.js"></script>
<link rel="icon" type="image/png" href="/favicon.png" /> <link rel="icon" type="image/png" href="/favicon.png?v=2" />
<link rel="apple-touch-icon" href="/icon-192.png" /> <link rel="apple-touch-icon" href="/icon-192.png" />
<title>Handy-Insel Portal</title> <title>Handy-Insel Portal</title>
</head> </head>
+1 -1
View File
@@ -70,7 +70,7 @@ function Header({ user, links }: { user: User; links: Links }) {
<header className="sticky top-0 z-20 border-b border-line bg-surface"> <header className="sticky top-0 z-20 border-b border-line bg-surface">
<div className="flex h-14 items-center justify-between px-4 sm:px-6"> <div className="flex h-14 items-center justify-between px-4 sm:px-6">
<a href="/" className="flex items-center gap-2.5" aria-label="Handy-Insel Portal"> <a href="/" className="flex items-center gap-2.5" aria-label="Handy-Insel Portal">
<img src="/icon-192.png" alt="" className="logo-badge h-8 w-8 rounded-full" /> <img src="/insel-logo.png" alt="" className="logo-badge h-8 w-8 rounded-full" />
<span className="text-lg tracking-tight text-fg"> <span className="text-lg tracking-tight text-fg">
Handy-<span className="font-bold">Insel</span> Handy-<span className="font-bold">Insel</span>
</span> </span>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

+1 -1
View File
@@ -90,7 +90,7 @@ export async function appsForUser(user: PortalUser): Promise<PortalApp[]> {
description: app.meta_description || '', description: app.meta_description || '',
section: app.group || 'Anwendungen', section: app.group || 'Anwendungen',
iconUrl: iconFor(app), iconUrl: iconFor(app),
newTab: app.open_in_new_tab, newTab: config.openAppsInNewTab || app.open_in_new_tab,
})), })),
); );
cache.set(pk, { at: Date.now(), apps }); cache.set(pk, { at: Date.now(), apps });
+2
View File
@@ -39,6 +39,8 @@ export const config = {
editorGroups: list('EDITOR_GROUPS', 'HI-Admin,HI-Leitung'), editorGroups: list('EDITOR_GROUPS', 'HI-Admin,HI-Leitung'),
/** Apps, die nie angezeigt werden (Slugs), z.B. das Portal selbst. */ /** Apps, die nie angezeigt werden (Slugs), z.B. das Portal selbst. */
hiddenApps: list('HIDDEN_APPS', 'portal'), hiddenApps: list('HIDDEN_APPS', 'portal'),
/** Apps immer in neuem Tab öffnen (sonst nur, wenn in Authentik "In neuem Tab öffnen" gesetzt ist). */
openAppsInNewTab: env('OPEN_APPS_IN_NEW_TAB', 'true') !== 'false',
/** Reihenfolge der Kacheln (Slugs); nicht genannte Apps folgen alphabetisch. */ /** Reihenfolge der Kacheln (Slugs); nicht genannte Apps folgen alphabetisch. */
appOrder: list( appOrder: list(
'APP_ORDER', 'APP_ORDER',
+1 -1
View File
@@ -208,7 +208,7 @@ class HiTopbar extends HTMLElement {
this.root.innerHTML = `<style>${css}</style> this.root.innerHTML = `<style>${css}</style>
<nav class="bar" aria-label="Handy-Insel Navigation"> <nav class="bar" aria-label="Handy-Insel Navigation">
<button class="icon-btn" data-toggle="apps" aria-haspopup="true" aria-expanded="${this.open === 'apps'}" title="Anwendungen">${WAFFLE}</button> <button class="icon-btn" data-toggle="apps" aria-haspopup="true" aria-expanded="${this.open === 'apps'}" title="Anwendungen">${WAFFLE}</button>
<a class="brand" href="${esc(links.portal)}"><img src="${PORTAL}/icon-192.png" alt=""><span>Handy-<b>Insel</b></span></a> <a class="brand" href="${esc(links.portal)}"><img src="${PORTAL}/insel-logo.png" alt=""><span>Handy-<b>Insel</b></span></a>
${appName ? `<span class="sep"></span><span class="app-name">${esc(appName)}</span>` : ''} ${appName ? `<span class="sep"></span><span class="app-name">${esc(appName)}</span>` : ''}
<span class="spacer"></span> <span class="spacer"></span>
${ ${