sdsfsf
This commit is contained in:
@@ -60,6 +60,11 @@ Modulspezifische Assets:
|
|||||||
- `Submenü-Box`: Box direkt unter der Seitenheader-Box für modul- oder seitenbezogene Aktionen.
|
- `Submenü-Box`: Box direkt unter der Seitenheader-Box für modul- oder seitenbezogene Aktionen.
|
||||||
- `Bereichs-Box`: größere Inhaltsbox für einen zusammenhängenden Seitenbereich.
|
- `Bereichs-Box`: größere Inhaltsbox für einen zusammenhängenden Seitenbereich.
|
||||||
- `Karten-Box`: kleinere Karte auf derselben Ebene wie Bereichs-Boxen, meist in Grids.
|
- `Karten-Box`: kleinere Karte auf derselben Ebene wie Bereichs-Boxen, meist in Grids.
|
||||||
|
- Zentrale CSS-Klassen:
|
||||||
|
- `main-header-box`
|
||||||
|
- `submenu-box`
|
||||||
|
- `section-box`
|
||||||
|
- `card-box`
|
||||||
- Modulseiten sollen diesem Muster folgen:
|
- Modulseiten sollen diesem Muster folgen:
|
||||||
- zuerst Seitenheader-Box
|
- zuerst Seitenheader-Box
|
||||||
- danach Submenü-Box
|
- danach Submenü-Box
|
||||||
|
|||||||
@@ -10,6 +10,13 @@ Für die Oberfläche gilt projektweit dieses Naming:
|
|||||||
- `Bereichs-Box`: größere Inhaltsbox für einen zusammenhängenden Bereich; davon können beliebig viele untereinander folgen
|
- `Bereichs-Box`: größere Inhaltsbox für einen zusammenhängenden Bereich; davon können beliebig viele untereinander folgen
|
||||||
- `Karten-Box`: kleinere Inhaltskarte auf derselben Ebene wie Bereichs-Boxen, typischerweise innerhalb eines Grids für Kennzahlen, Statistiken oder Modulübersichten
|
- `Karten-Box`: kleinere Inhaltskarte auf derselben Ebene wie Bereichs-Boxen, typischerweise innerhalb eines Grids für Kennzahlen, Statistiken oder Modulübersichten
|
||||||
|
|
||||||
|
Zentrale CSS-Klassen für dieses Layout:
|
||||||
|
|
||||||
|
- `main-header-box`
|
||||||
|
- `submenu-box`
|
||||||
|
- `section-box`
|
||||||
|
- `card-box`
|
||||||
|
|
||||||
Beispiele:
|
Beispiele:
|
||||||
|
|
||||||
- `Börsenchecker`: Seitenheader-Box, Submenü-Box, Bereichs-Box, Karten-Boxen, Bereichs-Box
|
- `Börsenchecker`: Seitenheader-Box, Submenü-Box, Bereichs-Box, Karten-Boxen, Bereichs-Box
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
$modules = modules()->all();
|
$modules = modules()->all();
|
||||||
$error = null;
|
$error = null;
|
||||||
$notice = null;
|
$notice = null;
|
||||||
$GLOBALS['layout_header_title'] = 'Aktive Module';
|
$GLOBALS['layout_header_base_title'] = 'Modulverwaltung';
|
||||||
|
$GLOBALS['layout_header_title'] = 'Modulverwaltung';
|
||||||
|
$GLOBALS['layout_header_context'] = 'Aktive Module';
|
||||||
$GLOBALS['layout_header_text'] = '';
|
$GLOBALS['layout_header_text'] = '';
|
||||||
$GLOBALS['layout_header_actions'] = [];
|
$GLOBALS['layout_header_actions'] = [];
|
||||||
$knownAuthUsers = modules()->knownAuthUsers();
|
$knownAuthUsers = modules()->knownAuthUsers();
|
||||||
@@ -59,7 +61,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<div class="module-box-soft">
|
<div class="submenu-box">
|
||||||
<div class="module-hero-top module-hero-top--compact">
|
<div class="module-hero-top module-hero-top--compact">
|
||||||
<nav class="module-tabs" aria-label="Modulverwaltung">
|
<nav class="module-tabs" aria-label="Modulverwaltung">
|
||||||
<a class="module-button module-button--tab-active" href="/modules">Aktive Module</a>
|
<a class="module-button module-button--tab-active" href="/modules">Aktive Module</a>
|
||||||
@@ -108,7 +110,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|||||||
? count($pendingMigrations) . ' ausstehend'
|
? count($pendingMigrations) . ' ausstehend'
|
||||||
: (($migrationStatus['available'] ?? 0) > 0 ? 'Schema aktuell' : 'Keine Migrationen');
|
: (($migrationStatus['available'] ?? 0) > 0 ? 'Schema aktuell' : 'Keine Migrationen');
|
||||||
?>
|
?>
|
||||||
<article class="module-admin-card">
|
<article class="card-box module-admin-card">
|
||||||
<div class="module-admin-card__head">
|
<div class="module-admin-card__head">
|
||||||
<div class="module-admin-card__title">
|
<div class="module-admin-card__title">
|
||||||
<h2><?= e($module['title']) ?></h2>
|
<h2><?= e($module['title']) ?></h2>
|
||||||
|
|||||||
@@ -7,13 +7,19 @@ if ($currentModuleName === null && preg_match('~^/modules/(?:setup|access)/([a-z
|
|||||||
$currentModule = $currentModuleName !== null ? modules()->get($currentModuleName) : null;
|
$currentModule = $currentModuleName !== null ? modules()->get($currentModuleName) : null;
|
||||||
$isStagingHost = defined('APP_DOMAIN_PRIMARY') && str_starts_with((string) APP_DOMAIN_PRIMARY, 'staging.');
|
$isStagingHost = defined('APP_DOMAIN_PRIMARY') && str_starts_with((string) APP_DOMAIN_PRIMARY, 'staging.');
|
||||||
$headerEyebrow = '';
|
$headerEyebrow = '';
|
||||||
$headerTitle = $currentModule
|
$defaultHeaderTitle = $currentModule
|
||||||
? (string)($currentModule['title'] ?? $currentModuleName)
|
? (string)($currentModule['title'] ?? $currentModuleName)
|
||||||
: ('Nexus' . ($isStagingHost ? ' (staging)' : ''));
|
: ('Nexus' . ($isStagingHost ? ' (staging)' : ''));
|
||||||
$headerText = $currentModule ? (string)($currentModule['description'] ?? '') : '';
|
$headerText = $currentModule ? (string)($currentModule['description'] ?? '') : '';
|
||||||
|
$headerBaseTitle = isset($GLOBALS['layout_header_base_title']) && is_string($GLOBALS['layout_header_base_title']) && trim($GLOBALS['layout_header_base_title']) !== ''
|
||||||
|
? trim($GLOBALS['layout_header_base_title'])
|
||||||
|
: $defaultHeaderTitle;
|
||||||
$headerTitle = isset($GLOBALS['layout_header_title']) && is_string($GLOBALS['layout_header_title']) && trim($GLOBALS['layout_header_title']) !== ''
|
$headerTitle = isset($GLOBALS['layout_header_title']) && is_string($GLOBALS['layout_header_title']) && trim($GLOBALS['layout_header_title']) !== ''
|
||||||
? trim($GLOBALS['layout_header_title'])
|
? trim($GLOBALS['layout_header_title'])
|
||||||
: $headerTitle;
|
: $headerBaseTitle;
|
||||||
|
$headerContext = isset($GLOBALS['layout_header_context']) && is_string($GLOBALS['layout_header_context'])
|
||||||
|
? trim($GLOBALS['layout_header_context'])
|
||||||
|
: '';
|
||||||
$headerText = isset($GLOBALS['layout_header_text']) && is_string($GLOBALS['layout_header_text'])
|
$headerText = isset($GLOBALS['layout_header_text']) && is_string($GLOBALS['layout_header_text'])
|
||||||
? trim($GLOBALS['layout_header_text'])
|
? trim($GLOBALS['layout_header_text'])
|
||||||
: $headerText;
|
: $headerText;
|
||||||
@@ -50,7 +56,7 @@ $authUser = $auth->user();
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main class="main-shell">
|
<main class="main-shell">
|
||||||
<section class="home-hero app-header" data-module-name="<?= e((string)($currentModuleName ?? '')) ?>">
|
<section class="home-hero app-header main-header-box" data-module-name="<?= e((string)($currentModuleName ?? '')) ?>">
|
||||||
<a class="brand-mark" href="/" aria-label="Nexus">
|
<a class="brand-mark" href="/" aria-label="Nexus">
|
||||||
<img src="/assets/images/logo.png" alt="Nexus Logo">
|
<img src="/assets/images/logo.png" alt="Nexus Logo">
|
||||||
</a>
|
</a>
|
||||||
@@ -58,7 +64,12 @@ $authUser = $auth->user();
|
|||||||
<?php if ($headerEyebrow !== ''): ?>
|
<?php if ($headerEyebrow !== ''): ?>
|
||||||
<span class="eyebrow"><?= e($headerEyebrow) ?></span>
|
<span class="eyebrow"><?= e($headerEyebrow) ?></span>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<h1><?= e($headerTitle) ?></h1>
|
<h1>
|
||||||
|
<?= e($headerTitle) ?>
|
||||||
|
<?php if ($headerContext !== ''): ?>
|
||||||
|
<span class="module-page-context"> / <?= e($headerContext) ?></span>
|
||||||
|
<?php endif; ?>
|
||||||
|
</h1>
|
||||||
<?php if ($headerText !== ''): ?>
|
<?php if ($headerText !== ''): ?>
|
||||||
<p><?= e($headerText) ?></p>
|
<p><?= e($headerText) ?></p>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ a {
|
|||||||
padding: 22px 0 48px;
|
padding: 22px 0 48px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.main-header-box,
|
||||||
.home-hero {
|
.home-hero {
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
@@ -111,6 +112,7 @@ a {
|
|||||||
box-shadow: var(--shadow);
|
box-shadow: var(--shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root[data-theme="night"] .main-header-box,
|
||||||
:root[data-theme="night"] .home-hero {
|
:root[data-theme="night"] .home-hero {
|
||||||
background:
|
background:
|
||||||
linear-gradient(135deg, rgba(8, 18, 28, 0.94), rgba(15, 29, 42, 0.86)),
|
linear-gradient(135deg, rgba(8, 18, 28, 0.94), rgba(15, 29, 42, 0.86)),
|
||||||
@@ -1102,6 +1104,7 @@ body.has-modal-open {
|
|||||||
gap: 16px;
|
gap: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.submenu-box,
|
||||||
.module-hero {
|
.module-hero {
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: 14px;
|
gap: 14px;
|
||||||
@@ -1114,6 +1117,7 @@ body.has-modal-open {
|
|||||||
box-shadow: var(--shadow);
|
box-shadow: var(--shadow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root[data-theme="night"] .submenu-box,
|
||||||
:root[data-theme="night"] .module-hero {
|
:root[data-theme="night"] .module-hero {
|
||||||
background:
|
background:
|
||||||
linear-gradient(135deg, rgba(8, 18, 28, 0.94), rgba(15, 29, 42, 0.86)),
|
linear-gradient(135deg, rgba(8, 18, 28, 0.94), rgba(15, 29, 42, 0.86)),
|
||||||
@@ -1226,6 +1230,8 @@ body.has-modal-open {
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.section-box,
|
||||||
|
.card-box,
|
||||||
.module-box,
|
.module-box,
|
||||||
.module-box-soft,
|
.module-box-soft,
|
||||||
.module-box-table,
|
.module-box-table,
|
||||||
@@ -1237,12 +1243,15 @@ body.has-modal-open {
|
|||||||
backdrop-filter: blur(8px);
|
backdrop-filter: blur(8px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.section-box,
|
||||||
|
.card-box,
|
||||||
.module-box,
|
.module-box,
|
||||||
.module-box-soft,
|
.module-box-soft,
|
||||||
.module-box-table {
|
.module-box-table {
|
||||||
padding: 18px 20px;
|
padding: 18px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.card-box,
|
||||||
.module-box-soft {
|
.module-box-soft {
|
||||||
background: linear-gradient(180deg, rgba(255,255,255,0.96), rgba(248,252,252,0.92));
|
background: linear-gradient(180deg, rgba(255,255,255,0.96), rgba(248,252,252,0.92));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -371,7 +371,7 @@ function module_shell_header(string $module, array $options = []): string
|
|||||||
};
|
};
|
||||||
|
|
||||||
$html = '<div class="module-shell"><div class="module-page-bg"><div class="module-page-stack">';
|
$html = '<div class="module-shell"><div class="module-page-bg"><div class="module-page-stack">';
|
||||||
$html .= '<header class="module-hero">';
|
$html .= '<header class="module-hero submenu-box">';
|
||||||
|
|
||||||
if ($tabs !== [] || $actions !== []) {
|
if ($tabs !== [] || $actions !== []) {
|
||||||
$html .= '<div class="module-hero-top module-hero-top--compact">';
|
$html .= '<div class="module-hero-top module-hero-top--compact">';
|
||||||
|
|||||||
Reference in New Issue
Block a user