feat: replace online status metric with favorites counter, ordered Dienste first
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 13s
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 13s
This commit is contained in:
3
Brain.md
3
Brain.md
@@ -189,4 +189,5 @@ volumes:
|
||||
- **PWA-Kachel Entfernung:** Die ungenutzte "PWA Installierbar"-Statistik-Kachel wurde aus der oberen Übersichtsleiste (`index.html`) entfernt. Das Layout der verbleibenden zwei Kacheln ("Online" & "Dienste") wurde in `style.css` auf ein stabiles, zentriertes 2-Spalten-Raster für Desktop und mobile Ansichten angepasst.
|
||||
- **Kompakte Service-Kategoriefilter:** Die Kategorieauswahl (`.segments`) wurde aus der klebrigen (`sticky`) oberen `.control-bar` herausgelöst und in einem separaten `#categoryFilters`-Bereich direkt über dem Dienste-Grid platziert. Sie verbraucht dadurch im ungescrollten Zustand keinen kostbaren Platz mehr auf Mobilgeräten.
|
||||
- **Visual-Premium Redesign & Untertitel:** Die Filter-Pills wurden verkleinert (Höhe von 36px auf 28px reduziert, kleinere Schriftgröße `0.78rem` und kompakteres Padding), linksbündig ausgerichtet und mit sanften Hover- & Aktiv-Transitions versehen. Zudem wurde der fälschlicherweise hinzugefügte dunkle Hintergrundbalken auf der `.control-bar` vollständig entfernt, um den nahtlosen Backdrop-Blur-Effekt über dem globalen Farbverlauf wiederherzustellen. Der Untertitel der Landing Page wurde von *"Cloud, Medien, Code..."* auf den prägnanten Namen *"Die Selfhost-Werkstatt"* abgeändert.
|
||||
- **Cache-Buster & PWA Cache Update:** Die Cache-Busting-Parameter für `style.css` und `app.js` wurden in `index.html` hochgestuft (`v=32` bzw. `v=38`). Im Service-Worker (`sw.js`) wurde der Cache-Name auf `mischlabs-pwa-v24` erhöht und die App-Shell-Liste entsprechend angepasst, um ein sofortiges Update der App bei allen Nutzern ohne manuelles Cache-Leeren zu garantieren.
|
||||
- **Favoriten-Zähler statt Online-Status:** Die "Online"-Statistik-Kachel in der Kopfzeile wurde durch eine dynamische "Favoriten"-Statistik-Kachel ersetzt, um direkt die Anzahl der geladenen Lesezeichen anzuzeigen. Die Reihenfolge wurde auf "Dienste" zuerst und "Favoriten" an zweiter Stelle geändert. Das Erreichbarkeits-Monitoring im Hintergrund läuft weiterhin stabil, um die Status-Punkte der einzelnen Dienste-Karten aktuell zu halten.
|
||||
- **Cache-Buster & PWA Cache Update:** Die Cache-Busting-Parameter für `style.css` und `app.js` wurden in `index.html` auf `v=33` bzw. `v=39` hochgestuft. Im Service-Worker (`sw.js`) wurde der Cache-Name auf `mischlabs-pwa-v25` erhöht und die App-Shell-Liste entsprechend angepasst, um ein sofortiges Update der App bei allen Nutzern ohne manuelles Cache-Leeren zu garantieren.
|
||||
|
||||
13
app.js
13
app.js
@@ -25,7 +25,7 @@ const searchInput = document.querySelector('#serviceSearch');
|
||||
const segments = [...document.querySelectorAll('.segment')];
|
||||
const viewOptions = [...document.querySelectorAll('.view-option')];
|
||||
const emptyState = document.querySelector('#emptyState');
|
||||
const onlineCount = document.querySelector('#onlineCount');
|
||||
const favoriteCount = document.querySelector('#favoriteCount');
|
||||
const serviceCount = document.querySelector('#serviceCount');
|
||||
const lastChecked = document.querySelector('#lastChecked');
|
||||
const dashboardSections = document.querySelector('#dashboardSections');
|
||||
@@ -218,6 +218,10 @@ function createFavoriteCard(favorite) {
|
||||
}
|
||||
|
||||
function renderFavorites() {
|
||||
if (favoriteCount) {
|
||||
favoriteCount.textContent = String(favorites.length);
|
||||
}
|
||||
|
||||
if (!favoritesSections) return;
|
||||
|
||||
if (!MischLabsAuth.isAuthenticated()) {
|
||||
@@ -466,9 +470,7 @@ async function probeService(card) {
|
||||
|
||||
async function refreshStatus() {
|
||||
const results = await Promise.allSettled(cards.map(probeService));
|
||||
const online = results.filter((result) => result.status === 'fulfilled' && result.value).length;
|
||||
const unknown = results.filter((result) => result.status === 'fulfilled' && result.value === null).length;
|
||||
onlineCount.textContent = String(online);
|
||||
lastChecked.textContent = `Status geprueft: ${new Date().toLocaleTimeString('de-DE', {
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
@@ -477,7 +479,6 @@ async function refreshStatus() {
|
||||
|
||||
function scheduleStatusRefresh() {
|
||||
const run = () => refreshStatus().catch(() => {
|
||||
onlineCount.textContent = '--';
|
||||
lastChecked.textContent = 'Status aktuell nicht verfuegbar.';
|
||||
});
|
||||
|
||||
@@ -598,7 +599,9 @@ MischLabsAuth.handleCallback()
|
||||
})
|
||||
.catch(() => {
|
||||
dashboardSections.innerHTML = '<p class="empty-state">Dashboard-Konfiguration konnte nicht geladen werden.</p>';
|
||||
onlineCount.textContent = '--';
|
||||
if (favoriteCount) {
|
||||
favoriteCount.textContent = '--';
|
||||
}
|
||||
});
|
||||
|
||||
// ==========================================================================
|
||||
|
||||
12
index.html
12
index.html
@@ -15,7 +15,7 @@
|
||||
<link rel="icon" type="image/png" sizes="48x48" href="/icons/favicon-48-v4.png">
|
||||
<link rel="icon" type="image/png" sizes="192x192" href="/icons/favicon-192-v4.png">
|
||||
<link rel="apple-touch-icon" href="/icons/apple-touch-icon-v4.png">
|
||||
<link rel="stylesheet" href="style.css?v=32">
|
||||
<link rel="stylesheet" href="style.css?v=33">
|
||||
</head>
|
||||
<body>
|
||||
<header class="shell hero">
|
||||
@@ -29,14 +29,14 @@
|
||||
</div>
|
||||
|
||||
<div class="hero-meta" aria-label="Systemuebersicht">
|
||||
<div class="metric">
|
||||
<span class="metric-value" id="onlineCount">--</span>
|
||||
<span class="metric-label">Online</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-value" id="serviceCount">9</span>
|
||||
<span class="metric-label">Dienste</span>
|
||||
</div>
|
||||
<div class="metric">
|
||||
<span class="metric-value" id="favoriteCount">--</span>
|
||||
<span class="metric-label">Favoriten</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dashboard-menu">
|
||||
@@ -140,6 +140,6 @@
|
||||
</div>
|
||||
|
||||
<script src="/auth.js?v=2" defer></script>
|
||||
<script src="/app.js?v=38" defer></script>
|
||||
<script src="/app.js?v=39" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
6
sw.js
6
sw.js
@@ -1,12 +1,12 @@
|
||||
const CACHE_NAME = 'mischlabs-pwa-v24';
|
||||
const CACHE_NAME = 'mischlabs-pwa-v25';
|
||||
const APP_SHELL = [
|
||||
'/',
|
||||
'/index.html',
|
||||
'/favorites.html',
|
||||
'/offline.html',
|
||||
'/style.css?v=32',
|
||||
'/style.css?v=33',
|
||||
'/auth.js?v=2',
|
||||
'/app.js?v=38',
|
||||
'/app.js?v=39',
|
||||
'/favorites.js?v=1',
|
||||
'/services.json?v=1',
|
||||
'/manifest.webmanifest?v=4',
|
||||
|
||||
Reference in New Issue
Block a user