Info-Menü im Tray ergaenzen, Sprunganker im Benutzerhandbuch beheben
Tray-Menü bekommt einen "Info"-Untermenüpunkt (Benutzerhandbuch/ Disclaimer/Lizenz), analog zum Menü in der Titelleiste. Markdown- Überschriften erhalten jetzt stabile id-Attribute (marked vergibt seit Version 5 keine eigenen mehr), damit das neue Inhaltsverzeichnis im Benutzerhandbuch als Sprunganker funktioniert. Reine Sprunganker im Info-Fenster navigieren nicht mehr wie externe Links. Nach jedem Abschnitt verlinkt "[nach oben]" zurück zum Inhaltsverzeichnis. Claude-Session: https://claude.ai/code/session_01VeqoaAZDVSCU4QBtiYDC5C
This commit is contained in:
+38
-2
@@ -4,6 +4,22 @@ Dieses Handbuch richtet sich an Anwender, die Claude Live Dashboard installieren
|
|||||||
und nutzen möchten. Wer die Anwendung selbst bauen oder am Quellcode arbeiten
|
und nutzen möchten. Wer die Anwendung selbst bauen oder am Quellcode arbeiten
|
||||||
möchte, findet die technische Dokumentation in der `README.md`.
|
möchte, findet die technische Dokumentation in der `README.md`.
|
||||||
|
|
||||||
|
## Inhalt
|
||||||
|
|
||||||
|
- [Was die Anwendung tut](#was-die-anwendung-tut)
|
||||||
|
- [Voraussetzungen](#voraussetzungen)
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Windows](#windows)
|
||||||
|
- [Linux (Ubuntu und verwandte Distributionen)](#linux-ubuntu-und-verwandte-distributionen)
|
||||||
|
- [Erster Start](#erster-start)
|
||||||
|
- [Die Oberfläche](#die-oberfläche)
|
||||||
|
- [Endpunkt-Status und Fehler-/Ereignis-Log](#endpunkt-status-und-fehler-ereignis-log)
|
||||||
|
- [Einstellungen](#einstellungen)
|
||||||
|
- [Tray-Menü](#tray-menü)
|
||||||
|
- [Datenschutz und Sicherheit](#datenschutz-und-sicherheit)
|
||||||
|
- [Deinstallation](#deinstallation)
|
||||||
|
- [Häufige Fragen](#häufige-fragen)
|
||||||
|
|
||||||
## Was die Anwendung tut
|
## Was die Anwendung tut
|
||||||
|
|
||||||
Claude Live Dashboard ist ein kleines, immer sichtbares Fenster, das anzeigt,
|
Claude Live Dashboard ist ein kleines, immer sichtbares Fenster, das anzeigt,
|
||||||
@@ -18,12 +34,16 @@ zusätzlich denselben Server-Endpunkt ab, den auch der Befehl `/usage` in
|
|||||||
Claude Code nutzt, um exakte statt geschätzter Werte anzuzeigen — dazu weiter
|
Claude Code nutzt, um exakte statt geschätzter Werte anzuzeigen — dazu weiter
|
||||||
unten mehr unter „Datenschutz und Sicherheit“.
|
unten mehr unter „Datenschutz und Sicherheit“.
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Voraussetzungen
|
## Voraussetzungen
|
||||||
|
|
||||||
- Windows 10/11 oder Ubuntu (bzw. eine vergleichbare Linux-Distribution)
|
- Windows 10/11 oder Ubuntu (bzw. eine vergleichbare Linux-Distribution)
|
||||||
- Claude Code muss installiert sein und mindestens einmal benutzt worden sein
|
- Claude Code muss installiert sein und mindestens einmal benutzt worden sein
|
||||||
— ohne vorhandene Protokolldateien hat das Dashboard nichts anzuzeigen
|
— ohne vorhandene Protokolldateien hat das Dashboard nichts anzuzeigen
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Windows
|
### Windows
|
||||||
@@ -56,6 +76,8 @@ Unter GNOME braucht das Tray-Symbol die Erweiterung **AppIndicator** — bei
|
|||||||
Standard-Ubuntu ist sie bereits vorinstalliert. Fehlt sie, läuft die Anwendung
|
Standard-Ubuntu ist sie bereits vorinstalliert. Fehlt sie, läuft die Anwendung
|
||||||
trotzdem, nur ohne sichtbares Symbol in der oberen Leiste.
|
trotzdem, nur ohne sichtbares Symbol in der oberen Leiste.
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Erster Start
|
## Erster Start
|
||||||
|
|
||||||
Nach dem Start erscheint das Fenster rechts oben auf dem Bildschirm und bleibt
|
Nach dem Start erscheint das Fenster rechts oben auf dem Bildschirm und bleibt
|
||||||
@@ -66,6 +88,8 @@ Unter Windows liegt das Symbol zunächst häufig im Überlaufbereich hinter dem
|
|||||||
Pfeil `^` — per Drag & Drop lässt es sich dauerhaft sichtbar an die Taskleiste
|
Pfeil `^` — per Drag & Drop lässt es sich dauerhaft sichtbar an die Taskleiste
|
||||||
heften.
|
heften.
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Die Oberfläche
|
## Die Oberfläche
|
||||||
|
|
||||||
**Kopfzeile** — per Ziehen lässt sich das Fenster frei positionieren, die
|
**Kopfzeile** — per Ziehen lässt sich das Fenster frei positionieren, die
|
||||||
@@ -110,6 +134,8 @@ einen Neustart hinweg erhalten und lässt sich über den Knopf **Log löschen**
|
|||||||
jederzeit zurücksetzen. Bei einer Fehlermeldung im Programm ist ein Blick in
|
jederzeit zurücksetzen. Bei einer Fehlermeldung im Programm ist ein Blick in
|
||||||
dieses Log meist der schnellste Weg herauszufinden, was los ist.
|
dieses Log meist der schnellste Weg herauszufinden, was los ist.
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Einstellungen
|
## Einstellungen
|
||||||
|
|
||||||
Das Zahnrad öffnet den Einstellungsdialog:
|
Das Zahnrad öffnet den Einstellungsdialog:
|
||||||
@@ -137,12 +163,16 @@ Das Zahnrad öffnet den Einstellungsdialog:
|
|||||||
Updates suchen", siehe oben). `Strg`+`S` speichert, `Esc` schließt den
|
Updates suchen", siehe oben). `Strg`+`S` speichert, `Esc` schließt den
|
||||||
Dialog ohne zu speichern.
|
Dialog ohne zu speichern.
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Tray-Menü
|
## Tray-Menü
|
||||||
|
|
||||||
Ein Rechtsklick (Linux) bzw. Klick (Windows) auf das Symbol im
|
Ein Rechtsklick (Linux) bzw. Klick (Windows) auf das Symbol im
|
||||||
Infobereich/der Systemleiste öffnet ein Menü mit: Dashboard anzeigen/ausblenden,
|
Infobereich/der Systemleiste öffnet ein Menü mit: Dashboard anzeigen/ausblenden,
|
||||||
Deckkraft, Klick-Durchlässigkeit, Autostart, Einstellungen, Datenordner öffnen
|
Deckkraft, Klick-Durchlässigkeit, Autostart, Einstellungen, Info
|
||||||
und Beenden.
|
(Benutzerhandbuch/Disclaimer/Lizenz), Datenordner öffnen und Beenden.
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Datenschutz und Sicherheit
|
## Datenschutz und Sicherheit
|
||||||
|
|
||||||
@@ -169,6 +199,8 @@ und Beenden.
|
|||||||
Zugriffstoken und ohne weitere Daten. Abschaltbar in den Einstellungen.
|
Zugriffstoken und ohne weitere Daten. Abschaltbar in den Einstellungen.
|
||||||
- Es findet keine Übertragung an Dritte statt.
|
- Es findet keine Übertragung an Dritte statt.
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Deinstallation
|
## Deinstallation
|
||||||
|
|
||||||
**Windows:** über *Einstellungen ▸ Apps* bzw. den mitinstallierten
|
**Windows:** über *Einstellungen ▸ Apps* bzw. den mitinstallierten
|
||||||
@@ -179,6 +211,8 @@ erneut installieren.
|
|||||||
**Linux:** `.deb`-Installation mit `sudo apt remove claude-live-dashboard`;
|
**Linux:** `.deb`-Installation mit `sudo apt remove claude-live-dashboard`;
|
||||||
ein AppImage genügt zu löschen.
|
ein AppImage genügt zu löschen.
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|
||||||
## Häufige Fragen
|
## Häufige Fragen
|
||||||
|
|
||||||
**Das Fenster zeigt keine Zahlen an.** Vermutlich wurde Claude Code auf diesem
|
**Das Fenster zeigt keine Zahlen an.** Vermutlich wurde Claude Code auf diesem
|
||||||
@@ -210,3 +244,5 @@ oder Symbol öffnet die Release-Seite im Browser — heruntergeladen oder
|
|||||||
installiert wird nichts automatisch. Das Symbol bleibt sichtbar, bis eine
|
installiert wird nichts automatisch. Das Symbol bleibt sichtbar, bis eine
|
||||||
neuere Version installiert wurde. Abschaltbar über die Einstellung „Nach
|
neuere Version installiert wurde. Abschaltbar über die Einstellung „Nach
|
||||||
Updates suchen".
|
Updates suchen".
|
||||||
|
|
||||||
|
[nach oben](#inhalt)
|
||||||
|
|||||||
+47
-1
@@ -272,6 +272,14 @@ function buildTrayMenu() {
|
|||||||
},
|
},
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{ label: 'Einstellungen …', click: openSettings },
|
{ label: 'Einstellungen …', click: openSettings },
|
||||||
|
{
|
||||||
|
label: 'Info',
|
||||||
|
submenu: [
|
||||||
|
{ label: 'Benutzerhandbuch', click: () => openInfoDoc('manual') },
|
||||||
|
{ label: 'Disclaimer', click: () => openInfoDoc('disclaimer') },
|
||||||
|
{ label: 'Lizenz', click: () => openInfoDoc('license') },
|
||||||
|
],
|
||||||
|
},
|
||||||
{ label: 'Datenordner öffnen', click: () => shell.openPath(USER_DATA_DIR) },
|
{ label: 'Datenordner öffnen', click: () => shell.openPath(USER_DATA_DIR) },
|
||||||
{ type: 'separator' },
|
{ type: 'separator' },
|
||||||
{ label: 'Beenden', click: () => app.quit() },
|
{ label: 'Beenden', click: () => app.quit() },
|
||||||
@@ -396,6 +404,39 @@ function escapeHtml(text) {
|
|||||||
.replace(/>/g, '>');
|
.replace(/>/g, '>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** GitHub-ähnlicher Anker-Slug — reicht für die deutschen Überschriften hier
|
||||||
|
* (Umlaute bleiben erhalten, nur Satzzeichen fallen weg). */
|
||||||
|
function slugify(text) {
|
||||||
|
return text
|
||||||
|
.toLowerCase()
|
||||||
|
.trim()
|
||||||
|
.replace(/[^\p{L}\p{N}\s-]/gu, '')
|
||||||
|
.replace(/\s+/g, '-')
|
||||||
|
.replace(/-+/g, '-');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Markdown→HTML mit `id`-Attributen auf jeder Überschrift, damit
|
||||||
|
* Sprunganker (z. B. aus einem Inhaltsverzeichnis) funktionieren — marked
|
||||||
|
* vergibt seit Version 5 selbst keine Heading-IDs mehr (früher `headerIds`,
|
||||||
|
* jetzt eine separate Erweiterung, die wir nicht zusätzlich einbinden).
|
||||||
|
* Ein frischer Renderer pro Aufruf hält die Dopplungs-Zählung dokumentweise
|
||||||
|
* sauber getrennt.
|
||||||
|
*/
|
||||||
|
function renderMarkdown(raw) {
|
||||||
|
const renderer = new marked.Renderer();
|
||||||
|
const seen = new Map();
|
||||||
|
renderer.heading = function ({ tokens, depth, text }) {
|
||||||
|
const inline = this.parser.parseInline(tokens);
|
||||||
|
let slug = slugify(text) || 'abschnitt';
|
||||||
|
const count = seen.get(slug) || 0;
|
||||||
|
seen.set(slug, count + 1);
|
||||||
|
if (count > 0) slug = `${slug}-${count}`;
|
||||||
|
return `<h${depth} id="${slug}">${inline}</h${depth}>\n`;
|
||||||
|
};
|
||||||
|
return marked.parse(raw, { renderer });
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Behandelt einen Link-Klick im Info-Dialog. Ohne dieses Abfangen navigiert
|
* Behandelt einen Link-Klick im Info-Dialog. Ohne dieses Abfangen navigiert
|
||||||
* Electron das Fenster selbst zum verlinkten Ziel — bei einem relativen Link
|
* Electron das Fenster selbst zum verlinkten Ziel — bei einem relativen Link
|
||||||
@@ -434,7 +475,7 @@ function openInfoDoc(kind) {
|
|||||||
let html;
|
let html;
|
||||||
try {
|
try {
|
||||||
const raw = fs.readFileSync(doc.file, 'utf8');
|
const raw = fs.readFileSync(doc.file, 'utf8');
|
||||||
html = marked.parse(raw);
|
html = renderMarkdown(raw);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
html = `<p>Datei konnte nicht gelesen werden: ${escapeHtml(err.message)}</p>`;
|
html = `<p>Datei konnte nicht gelesen werden: ${escapeHtml(err.message)}</p>`;
|
||||||
}
|
}
|
||||||
@@ -480,6 +521,11 @@ function openInfoDoc(kind) {
|
|||||||
// lassen (siehe handleInfoLink()) — sonst bleibt ein leeres, unschließbares
|
// lassen (siehe handleInfoLink()) — sonst bleibt ein leeres, unschließbares
|
||||||
// Fenster zurück.
|
// Fenster zurück.
|
||||||
infoWin.webContents.on('will-navigate', (event, url) => {
|
infoWin.webContents.on('will-navigate', (event, url) => {
|
||||||
|
// Reiner Sprunganker innerhalb desselben Dokuments (z. B. aus dem
|
||||||
|
// Inhaltsverzeichnis) — Standardverhalten (Scrollen zum Anker) zulassen,
|
||||||
|
// statt es wie eine echte Navigation zu behandeln.
|
||||||
|
const currentBase = infoWin.webContents.getURL().split('#')[0];
|
||||||
|
if (url.split('#')[0] === currentBase) return;
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
handleInfoLink(url);
|
handleInfoLink(url);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user