Datenbank bereinigt / Gitea-Integration gefixt
Dieser Commit ist enthalten in:
committet von
Server Deploy
Ursprung
395598c2b0
Commit
c21be47428
@ -25,8 +25,10 @@
|
||||
<link rel="stylesheet" href="css/proposals.css">
|
||||
<link rel="stylesheet" href="css/notifications.css">
|
||||
<link rel="stylesheet" href="css/gitea.css">
|
||||
<link rel="stylesheet" href="css/coding.css">
|
||||
<link rel="stylesheet" href="css/knowledge.css">
|
||||
<link rel="stylesheet" href="css/responsive.css">
|
||||
<link rel="stylesheet" href="css/mobile.css">
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/svg+xml" href="assets/icons/task.svg">
|
||||
@ -102,98 +104,29 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Dateitypen nach Kategorien -->
|
||||
<div class="admin-upload-types">
|
||||
<h3>Erlaubte Dateiformate</h3>
|
||||
<!-- Erlaubte Dateiendungen -->
|
||||
<div class="admin-upload-extensions">
|
||||
<h3>Erlaubte Dateiendungen</h3>
|
||||
|
||||
<!-- Bildformate -->
|
||||
<div class="upload-category" data-category="images">
|
||||
<div class="upload-category-header">
|
||||
<label class="upload-category-toggle">
|
||||
<input type="checkbox" id="upload-cat-images" checked>
|
||||
<span class="upload-category-title">Bildformate</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="upload-category-types">
|
||||
<span class="upload-type-tag" data-type="image/jpeg">JPEG</span>
|
||||
<span class="upload-type-tag" data-type="image/png">PNG</span>
|
||||
<span class="upload-type-tag" data-type="image/gif">GIF</span>
|
||||
<span class="upload-type-tag" data-type="image/webp">WebP</span>
|
||||
<span class="upload-type-tag" data-type="image/svg+xml">SVG</span>
|
||||
<!-- Aktive Endungen als Tags -->
|
||||
<div id="extension-tags" class="extension-tags">
|
||||
<!-- Tags werden dynamisch gerendert -->
|
||||
</div>
|
||||
|
||||
<!-- Neue Endung hinzufügen -->
|
||||
<div class="extension-add-group">
|
||||
<label for="extension-input">Neue Endung hinzufügen</label>
|
||||
<div class="extension-input-row">
|
||||
<input type="text" id="extension-input" class="extension-input" placeholder="z.B. xlsx" maxlength="10">
|
||||
<button type="button" id="btn-add-extension" class="btn btn-secondary">+ Hinzufügen</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Dokumentformate -->
|
||||
<div class="upload-category" data-category="documents">
|
||||
<div class="upload-category-header">
|
||||
<label class="upload-category-toggle">
|
||||
<input type="checkbox" id="upload-cat-documents" checked>
|
||||
<span class="upload-category-title">Dokumentformate</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="upload-category-types">
|
||||
<span class="upload-type-tag" data-type="application/pdf">PDF</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Office-Formate -->
|
||||
<div class="upload-category" data-category="office">
|
||||
<div class="upload-category-header">
|
||||
<label class="upload-category-toggle">
|
||||
<input type="checkbox" id="upload-cat-office" checked>
|
||||
<span class="upload-category-title">Office-Formate</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="upload-category-types">
|
||||
<span class="upload-type-tag" data-type="application/msword">DOC</span>
|
||||
<span class="upload-type-tag" data-type="application/vnd.openxmlformats-officedocument.wordprocessingml.document">DOCX</span>
|
||||
<span class="upload-type-tag" data-type="application/vnd.ms-excel">XLS</span>
|
||||
<span class="upload-type-tag" data-type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">XLSX</span>
|
||||
<span class="upload-type-tag" data-type="application/vnd.ms-powerpoint">PPT</span>
|
||||
<span class="upload-type-tag" data-type="application/vnd.openxmlformats-officedocument.presentationml.presentation">PPTX</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Textformate -->
|
||||
<div class="upload-category" data-category="text">
|
||||
<div class="upload-category-header">
|
||||
<label class="upload-category-toggle">
|
||||
<input type="checkbox" id="upload-cat-text" checked>
|
||||
<span class="upload-category-title">Textformate</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="upload-category-types">
|
||||
<span class="upload-type-tag" data-type="text/plain">TXT</span>
|
||||
<span class="upload-type-tag" data-type="text/csv">CSV</span>
|
||||
<span class="upload-type-tag" data-type="text/markdown">Markdown</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Archivformate -->
|
||||
<div class="upload-category" data-category="archives">
|
||||
<div class="upload-category-header">
|
||||
<label class="upload-category-toggle">
|
||||
<input type="checkbox" id="upload-cat-archives" checked>
|
||||
<span class="upload-category-title">Archivformate</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="upload-category-types">
|
||||
<span class="upload-type-tag" data-type="application/zip">ZIP</span>
|
||||
<span class="upload-type-tag" data-type="application/x-rar-compressed">RAR</span>
|
||||
<span class="upload-type-tag" data-type="application/x-7z-compressed">7Z</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Datenformate -->
|
||||
<div class="upload-category" data-category="data">
|
||||
<div class="upload-category-header">
|
||||
<label class="upload-category-toggle">
|
||||
<input type="checkbox" id="upload-cat-data" checked>
|
||||
<span class="upload-category-title">Datenformate</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="upload-category-types">
|
||||
<span class="upload-type-tag" data-type="application/json">JSON</span>
|
||||
<!-- Vorschläge -->
|
||||
<div class="extension-suggestions">
|
||||
<span class="extension-suggestions-label">Vorschläge:</span>
|
||||
<div id="extension-suggestions-list" class="extension-suggestions-list">
|
||||
<!-- Vorschläge werden dynamisch gerendert -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -212,6 +145,13 @@
|
||||
<!-- Header -->
|
||||
<header class="header">
|
||||
<div class="header-left">
|
||||
<!-- Hamburger Menu Button (Mobile) -->
|
||||
<button id="hamburger-btn" class="hamburger-btn" aria-label="Menu" aria-expanded="false">
|
||||
<span class="hamburger-line"></span>
|
||||
<span class="hamburger-line"></span>
|
||||
<span class="hamburger-line"></span>
|
||||
</button>
|
||||
|
||||
<h1 class="logo">TaskMate</h1>
|
||||
|
||||
<!-- Project Selector -->
|
||||
@ -235,7 +175,7 @@
|
||||
<button class="view-tab" data-view="list">Liste</button>
|
||||
<button class="view-tab" data-view="calendar">Kalender</button>
|
||||
<button class="view-tab" data-view="proposals">Genehmigung</button>
|
||||
<button class="view-tab" data-view="gitea">Gitea</button>
|
||||
<button class="view-tab" data-view="coding">Coding</button>
|
||||
<button class="view-tab" data-view="knowledge">Wissen</button>
|
||||
</nav>
|
||||
</div>
|
||||
@ -509,383 +449,29 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Gitea View -->
|
||||
<div id="view-gitea" class="view view-gitea hidden">
|
||||
|
||||
<!-- Modus-Schalter -->
|
||||
<div id="gitea-mode-switch" class="gitea-mode-switch">
|
||||
<button class="gitea-mode-btn active" data-mode="server">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><rect x="2" y="2" width="20" height="8" rx="2" stroke="currentColor" stroke-width="2" fill="none"/><rect x="2" y="14" width="20" height="8" rx="2" stroke="currentColor" stroke-width="2" fill="none"/><circle cx="6" cy="6" r="1" fill="currentColor"/><circle cx="6" cy="18" r="1" fill="currentColor"/></svg>
|
||||
Server-Anwendung
|
||||
</button>
|
||||
<button class="gitea-mode-btn" data-mode="project">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
Projekt-Repository
|
||||
<!-- Coding View -->
|
||||
<div id="view-coding" class="view view-coding hidden">
|
||||
<!-- Header -->
|
||||
<div class="coding-header coding-header-centered">
|
||||
<button id="add-coding-directory-btn" class="btn btn-primary">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M12 5v14M5 12h14" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/></svg>
|
||||
Anwendung hinzufügen
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Server-Modus Ansicht -->
|
||||
<div id="gitea-server-mode" class="gitea-section">
|
||||
|
||||
<!-- Server Repository Info Header -->
|
||||
<div class="gitea-repo-header">
|
||||
<div class="repo-info">
|
||||
<h2 id="server-repo-name">
|
||||
<svg viewBox="0 0 24 24" width="24" height="24"><rect x="2" y="2" width="20" height="8" rx="2" stroke="currentColor" stroke-width="2" fill="none"/><rect x="2" y="14" width="20" height="8" rx="2" stroke="currentColor" stroke-width="2" fill="none"/><circle cx="6" cy="6" r="1" fill="currentColor"/><circle cx="6" cy="18" r="1" fill="currentColor"/></svg>
|
||||
<span>TaskMate Server</span>
|
||||
</h2>
|
||||
<a id="server-repo-url" class="repo-url" href="#" target="_blank"></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Server-Pfad Anzeige -->
|
||||
<div class="gitea-local-path">
|
||||
<span class="path-label">Server-Pfad:</span>
|
||||
<code id="server-local-path-display">/home/claude-dev/TaskMate</code>
|
||||
</div>
|
||||
|
||||
<!-- Server Git-Status Panel -->
|
||||
<div id="server-status-section" class="gitea-status-panel">
|
||||
<div class="status-grid">
|
||||
<div class="status-item">
|
||||
<span class="status-label">Branch</span>
|
||||
<div class="branch-select-group">
|
||||
<select id="server-branch-select" class="branch-select">
|
||||
<!-- Branches dynamisch -->
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="status-item">
|
||||
<span class="status-label">Status</span>
|
||||
<span id="server-status-indicator" class="status-badge">Prüfe...</span>
|
||||
</div>
|
||||
<div class="status-item">
|
||||
<span class="status-label">Änderungen</span>
|
||||
<span id="server-changes-count" class="changes-count">0</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Server Git-Operationen -->
|
||||
<div id="server-operations-section" class="gitea-operations-panel">
|
||||
<h3>Git-Operationen</h3>
|
||||
<div class="operations-grid">
|
||||
<button id="btn-server-fetch" class="btn btn-secondary operation-btn">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" stroke="currentColor" stroke-width="2" fill="none"/><path d="M3 3v5h5" stroke="currentColor" stroke-width="2" fill="none"/><path d="M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16" stroke="currentColor" stroke-width="2" fill="none"/><path d="M21 21v-5h-5" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
Fetch
|
||||
</button>
|
||||
<button id="btn-server-pull" class="btn btn-secondary operation-btn">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M12 5v14M19 12l-7 7-7-7" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
Pull
|
||||
</button>
|
||||
<button id="btn-server-push" class="btn btn-primary operation-btn">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M12 19V5M5 12l7-7 7 7" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
Push
|
||||
</button>
|
||||
<button id="btn-server-commit" class="btn btn-secondary operation-btn">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><circle cx="12" cy="12" r="4" stroke="currentColor" stroke-width="2" fill="none"/><path d="M12 2v6M12 16v6M2 12h6M16 12h6" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
Commit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Server Änderungen-Liste -->
|
||||
<div id="server-changes-section" class="gitea-changes-panel hidden">
|
||||
<h3>Geänderte Dateien</h3>
|
||||
<div id="server-changes-list" class="changes-list">
|
||||
<!-- Dynamisch gefüllt -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Server Commit-Historie -->
|
||||
<div id="server-commits-section" class="gitea-commits-panel">
|
||||
<div class="commits-header">
|
||||
<h3>Letzte Commits</h3>
|
||||
<button id="btn-server-clear-commits" class="btn btn-small btn-secondary" title="Alle aus Anzeige entfernen">
|
||||
Alle ausblenden
|
||||
</button>
|
||||
</div>
|
||||
<div id="server-commits-list" class="commits-list">
|
||||
<!-- Dynamisch gefüllt -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Grid für Kacheln -->
|
||||
<div id="coding-grid" class="coding-grid">
|
||||
<!-- Kacheln werden per JS gerendert -->
|
||||
</div>
|
||||
|
||||
<!-- Projekt-Modus: Browser-Upload Ansicht -->
|
||||
<div id="gitea-browser-upload" class="gitea-section hidden">
|
||||
|
||||
<!-- Header -->
|
||||
<div class="gitea-config-header">
|
||||
<h2>
|
||||
<svg viewBox="0 0 24 24" width="24" height="24"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
Lokales Verzeichnis hochladen
|
||||
</h2>
|
||||
<p>Wählen Sie ein Verzeichnis von Ihrem Computer und pushen Sie es direkt ins Gitea.</p>
|
||||
<!-- Empty State -->
|
||||
<div id="coding-empty" class="coding-empty hidden">
|
||||
<div class="empty-icon">
|
||||
<svg viewBox="0 0 24 24" width="64" height="64"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
</div>
|
||||
|
||||
<!-- Browser-Kompatibilität Hinweis -->
|
||||
<div id="browser-upload-compat" class="browser-compat-notice hidden">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20"><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="2" fill="none"/><path d="M12 8v4M12 16h.01" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/></svg>
|
||||
<span>Die Verzeichnis-Auswahl funktioniert nur in Chrome, Edge oder Opera. In anderen Browsern können Sie Dateien per Drag & Drop hochladen.</span>
|
||||
</div>
|
||||
|
||||
<!-- Schritt 1: Repository auswählen -->
|
||||
<div class="upload-step">
|
||||
<div class="step-header">
|
||||
<span class="step-number">1</span>
|
||||
<span class="step-title">Ziel-Repository auswählen</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="gitea-repo-select-group">
|
||||
<select id="browser-upload-repo-select" class="form-control">
|
||||
<option value="">-- Repository wählen --</option>
|
||||
</select>
|
||||
<button type="button" id="btn-refresh-upload-repos" class="btn btn-icon" title="Repositories aktualisieren">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" stroke="currentColor" stroke-width="2" fill="none"/><path d="M3 3v5h5" stroke="currentColor" stroke-width="2" fill="none"/><path d="M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16" stroke="currentColor" stroke-width="2" fill="none"/><path d="M21 21v-5h-5" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="browser-upload-branch">Ziel-Branch</label>
|
||||
<input type="text" id="browser-upload-branch" class="form-control" value="main" placeholder="main">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Schritt 2: Verzeichnis auswählen -->
|
||||
<div class="upload-step">
|
||||
<div class="step-header">
|
||||
<span class="step-number">2</span>
|
||||
<span class="step-title">Verzeichnis auswählen</span>
|
||||
</div>
|
||||
<div class="directory-picker">
|
||||
<button type="button" id="btn-select-directory" class="btn btn-secondary btn-lg">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
Verzeichnis auswählen
|
||||
</button>
|
||||
<div id="drop-zone" class="drop-zone hidden">
|
||||
<svg viewBox="0 0 24 24" width="48" height="48"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M17 8l-5-5-5 5M12 3v12" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
<p>Oder Verzeichnis hierher ziehen</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Schritt 3: Datei-Vorschau (erscheint nach Auswahl) -->
|
||||
<div id="upload-preview-section" class="upload-step hidden">
|
||||
<div class="step-header">
|
||||
<span class="step-number">3</span>
|
||||
<span class="step-title">Ausgewählte Dateien</span>
|
||||
<span id="upload-file-count" class="file-count">0 Dateien</span>
|
||||
</div>
|
||||
<div id="upload-files-list" class="upload-files-list">
|
||||
<!-- Dynamisch gefüllt -->
|
||||
</div>
|
||||
<div class="excluded-info">
|
||||
<small>Automatisch ausgeschlossen: .git, node_modules, __pycache__, .env, *.log</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Schritt 4: Commit und Push -->
|
||||
<div id="upload-commit-section" class="upload-step hidden">
|
||||
<div class="step-header">
|
||||
<span class="step-number">4</span>
|
||||
<span class="step-title">Commit erstellen und pushen</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="browser-upload-commit-message">Commit-Nachricht</label>
|
||||
<textarea id="browser-upload-commit-message" class="form-control" rows="2" placeholder="Beschreiben Sie Ihre Änderungen..."></textarea>
|
||||
</div>
|
||||
<div class="upload-actions">
|
||||
<button type="button" id="btn-cancel-upload" class="btn btn-secondary">
|
||||
Abbrechen
|
||||
</button>
|
||||
<button type="button" id="btn-execute-upload" class="btn btn-primary">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M12 19V5M5 12l7-7 7 7" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
Commit & Push
|
||||
</button>
|
||||
</div>
|
||||
<!-- Progress Bar -->
|
||||
<div id="upload-progress-container" class="upload-progress hidden">
|
||||
<div class="progress-bar">
|
||||
<div id="upload-progress-bar" class="progress-fill"></div>
|
||||
</div>
|
||||
<span id="upload-progress-text">0%</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>Keine Anwendungen</h3>
|
||||
<p>Füge deine erste Server-Anwendung hinzu, um mit Claude oder Codex zu arbeiten.</p>
|
||||
</div>
|
||||
|
||||
<!-- Projekt-Modus: Kein Projekt (altes Element, jetzt versteckt) -->
|
||||
<div id="gitea-no-project" class="gitea-empty-state hidden">
|
||||
<svg viewBox="0 0 24 24" width="64" height="64"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
<h3>Kein Projekt ausgewählt</h3>
|
||||
<p>Wählen Sie ein Projekt aus, um die Git-Integration zu konfigurieren.</p>
|
||||
</div>
|
||||
|
||||
<!-- Konfiguration (wenn nicht verknüpft) -->
|
||||
<div id="gitea-config-section" class="gitea-section hidden">
|
||||
<div class="gitea-config-header">
|
||||
<h2>Repository-Konfiguration</h2>
|
||||
<p>Verknüpfen Sie dieses Projekt mit einem Git-Repository</p>
|
||||
</div>
|
||||
|
||||
<!-- Gitea-Verbindungsstatus -->
|
||||
<div id="gitea-connection-status" class="gitea-connection-status">
|
||||
<span class="status-indicator"></span>
|
||||
<span class="status-text">Prüfe Verbindung...</span>
|
||||
</div>
|
||||
|
||||
<form id="gitea-config-form" class="gitea-config-form">
|
||||
<!-- Repository-Auswahl -->
|
||||
<div class="form-group">
|
||||
<label for="gitea-repo-select">Bestehendes Repository auswählen</label>
|
||||
<div class="gitea-repo-select-group">
|
||||
<select id="gitea-repo-select" class="form-control">
|
||||
<option value="">-- Repository wählen --</option>
|
||||
</select>
|
||||
<button type="button" id="btn-refresh-repos" class="btn btn-icon" title="Repositories aktualisieren">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" stroke="currentColor" stroke-width="2" fill="none"/><path d="M3 3v5h5" stroke="currentColor" stroke-width="2" fill="none"/><path d="M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16" stroke="currentColor" stroke-width="2" fill="none"/><path d="M21 21v-5h-5" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="gitea-divider">
|
||||
<span>oder</span>
|
||||
</div>
|
||||
|
||||
<!-- Neues Repository erstellen -->
|
||||
<div class="form-group">
|
||||
<button type="button" id="btn-create-repo" class="btn btn-secondary btn-block">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M12 5v14M5 12h14" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/></svg>
|
||||
Neues Repository erstellen
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="gitea-divider"></div>
|
||||
|
||||
<!-- Lokaler Pfad -->
|
||||
<div class="form-group">
|
||||
<label for="local-path-input">Lokaler Pfad (wo Claude Code arbeitet)</label>
|
||||
<input type="text" id="local-path-input" class="form-control"
|
||||
placeholder="z.B. D:\Projekte\MeinProjekt">
|
||||
<span id="path-validation-result" class="form-hint"></span>
|
||||
</div>
|
||||
|
||||
<!-- Default Branch -->
|
||||
<div class="form-group">
|
||||
<label for="default-branch-input">Standard-Branch</label>
|
||||
<input type="text" id="default-branch-input" class="form-control"
|
||||
value="main" placeholder="main">
|
||||
</div>
|
||||
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary" id="btn-save-config">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" stroke="currentColor" stroke-width="2" fill="none"/><path d="M17 21v-8H7v8M7 3v5h8" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
Konfiguration speichern
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Hauptansicht (wenn verknüpft) -->
|
||||
<div id="gitea-main-section" class="gitea-section hidden">
|
||||
|
||||
<!-- Repository-Info-Header -->
|
||||
<div class="gitea-repo-header">
|
||||
<div class="repo-info">
|
||||
<h2 id="gitea-repo-name">
|
||||
<svg viewBox="0 0 24 24" width="24" height="24"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
<span>Repository</span>
|
||||
</h2>
|
||||
<a id="gitea-repo-url" class="repo-url" href="#" target="_blank"></a>
|
||||
</div>
|
||||
<div class="repo-actions">
|
||||
<button id="btn-edit-config" class="btn btn-icon" title="Konfiguration bearbeiten">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" stroke="currentColor" stroke-width="2" fill="none"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
</button>
|
||||
<button id="btn-remove-config" class="btn btn-icon btn-danger-hover" title="Konfiguration entfernen">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M3 6h18M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Lokaler Pfad Anzeige -->
|
||||
<div class="gitea-local-path">
|
||||
<span class="path-label">Lokaler Pfad:</span>
|
||||
<code id="gitea-local-path-display"></code>
|
||||
</div>
|
||||
|
||||
<!-- Git-Status Panel -->
|
||||
<div id="gitea-status-section" class="gitea-status-panel">
|
||||
<div class="status-grid">
|
||||
<div class="status-item">
|
||||
<span class="status-label">Branch</span>
|
||||
<div class="branch-select-group">
|
||||
<select id="branch-select" class="branch-select">
|
||||
<!-- Branches dynamisch -->
|
||||
</select>
|
||||
<button id="btn-rename-branch" class="btn btn-small btn-icon" title="Branch umbenennen">
|
||||
<svg viewBox="0 0 24 24" width="16" height="16"><path d="M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="status-item">
|
||||
<span class="status-label">Status</span>
|
||||
<span id="git-status-indicator" class="status-badge">Prüfe...</span>
|
||||
</div>
|
||||
<div class="status-item">
|
||||
<span class="status-label">Änderungen</span>
|
||||
<span id="git-changes-count" class="changes-count">0</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Git-Operationen -->
|
||||
<div id="gitea-operations-section" class="gitea-operations-panel">
|
||||
<h3>Git-Operationen</h3>
|
||||
<div class="operations-grid">
|
||||
<button id="btn-git-fetch" class="btn btn-secondary operation-btn">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" stroke="currentColor" stroke-width="2" fill="none"/><path d="M3 3v5h5" stroke="currentColor" stroke-width="2" fill="none"/><path d="M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16" stroke="currentColor" stroke-width="2" fill="none"/><path d="M21 21v-5h-5" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
Fetch
|
||||
</button>
|
||||
<button id="btn-git-pull" class="btn btn-secondary operation-btn">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M12 5v14M19 12l-7 7-7-7" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
Pull
|
||||
</button>
|
||||
<button id="btn-git-push" class="btn btn-primary operation-btn">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><path d="M12 19V5M5 12l7-7 7 7" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
Push
|
||||
</button>
|
||||
<button id="btn-git-commit" class="btn btn-secondary operation-btn">
|
||||
<svg viewBox="0 0 24 24" width="18" height="18"><circle cx="12" cy="12" r="4" stroke="currentColor" stroke-width="2" fill="none"/><path d="M12 2v6M12 16v6M2 12h6M16 12h6" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
Commit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Änderungen-Liste -->
|
||||
<div id="gitea-changes-section" class="gitea-changes-panel hidden">
|
||||
<h3>Geänderte Dateien</h3>
|
||||
<div id="git-changes-list" class="changes-list">
|
||||
<!-- Dynamisch gefüllt -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Commit-Historie -->
|
||||
<div id="gitea-commits-section" class="gitea-commits-panel">
|
||||
<div class="commits-header">
|
||||
<h3>Letzte Commits</h3>
|
||||
<button id="btn-clear-commits" class="btn btn-small btn-secondary" title="Alle aus Anzeige entfernen">
|
||||
Alle ausblenden
|
||||
</button>
|
||||
</div>
|
||||
<div id="git-commits-list" class="commits-list">
|
||||
<!-- Dynamisch gefüllt -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Knowledge View (Wissensmanagement) -->
|
||||
@ -1389,7 +975,21 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="user-password">Passwort <span id="password-hint" class="form-hint">(automatisch generiert)</span></label>
|
||||
<input type="text" id="user-password" minlength="8" readonly>
|
||||
<div class="password-input-group">
|
||||
<input type="text" id="user-password" minlength="8" readonly>
|
||||
<button type="button" id="edit-password-btn" class="btn btn-secondary btn-sm" title="Passwort bearbeiten">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" stroke="currentColor" stroke-width="2" fill="none"/>
|
||||
<path d="m18.5 2.5 3 3L12 15l-4 1 1-4 9.5-9.5z" stroke="currentColor" stroke-width="2" fill="none"/>
|
||||
</svg>
|
||||
</button>
|
||||
<button type="button" id="generate-password-btn" class="btn btn-secondary btn-sm" title="Neues Passwort generieren">
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none">
|
||||
<path d="M1 4v6h6" stroke="currentColor" stroke-width="2" fill="none"/>
|
||||
<path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10" stroke="currentColor" stroke-width="2" fill="none"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="user-role">Rolle</label>
|
||||
@ -1908,9 +1508,152 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Coding Directory Modal -->
|
||||
<div id="coding-modal" class="modal hidden">
|
||||
<div class="modal-content modal-medium">
|
||||
<div class="modal-header">
|
||||
<h3 id="coding-modal-title">Anwendung hinzufügen</h3>
|
||||
<button class="modal-close" aria-label="Schliessen">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label for="coding-name">Anwendungsname *</label>
|
||||
<input type="text" id="coding-name" class="form-control" placeholder="z.B. TaskMate" required>
|
||||
<small class="form-hint" id="coding-path-hint">Ordner: /home/claude-dev/<span id="coding-path-preview">...</span></small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="coding-description">Beschreibung</label>
|
||||
<textarea id="coding-description" class="form-control" rows="2" placeholder="Optionale Beschreibung..."></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Farbe</label>
|
||||
<div class="color-presets" id="coding-color-presets">
|
||||
<!-- Farb-Buttons werden per JS gerendert -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>CLAUDE.md</label>
|
||||
<div class="claude-link-container">
|
||||
<button type="button" id="coding-claude-link" class="claude-link" disabled>
|
||||
<span class="claude-icon">📄</span>
|
||||
<span class="claude-text">Keine CLAUDE.md vorhanden</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<details class="coding-gitea-section">
|
||||
<summary>Gitea-Repository verknüpfen (optional)</summary>
|
||||
<div class="form-group" style="margin-top: 1rem;">
|
||||
<label for="coding-gitea-repo">Repository</label>
|
||||
<select id="coding-gitea-repo" class="form-control">
|
||||
<option value="">-- Kein Repository --</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="coding-branch">Standard-Branch</label>
|
||||
<input type="text" id="coding-branch" class="form-control" value="main" placeholder="main">
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button id="coding-delete-btn" class="btn btn-danger hidden">Löschen</button>
|
||||
<button class="btn btn-secondary modal-cancel">Abbrechen</button>
|
||||
<button id="coding-save-btn" class="btn btn-primary">Speichern</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Coding Command Modal -->
|
||||
<div id="coding-command-modal" class="modal hidden">
|
||||
<div class="modal-content modal-small">
|
||||
<div class="modal-header">
|
||||
<h3>Befehl ausführen</h3>
|
||||
<button class="modal-close" aria-label="Schliessen">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p id="coding-command-hint">Führe diesen Befehl in WSL aus:</p>
|
||||
<div class="command-box">
|
||||
<code id="coding-command-text"></code>
|
||||
<button id="coding-copy-command" class="btn btn-sm btn-secondary">Kopieren</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Toast Container -->
|
||||
<div id="toast-container" class="toast-container"></div>
|
||||
|
||||
<!-- Mobile Navigation Menu -->
|
||||
<nav id="mobile-menu" class="mobile-menu" aria-hidden="true">
|
||||
<div class="mobile-menu-header">
|
||||
<h2 class="mobile-menu-title">TaskMate</h2>
|
||||
<button id="mobile-menu-close" class="mobile-menu-close" aria-label="Menu schliessen">
|
||||
<svg viewBox="0 0 24 24" width="24" height="24">
|
||||
<path d="M18 6L6 18M6 6l12 12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="mobile-menu-section">
|
||||
<label class="mobile-menu-label">Projekt</label>
|
||||
<select id="mobile-project-select" class="mobile-project-select">
|
||||
<!-- Populated by JS -->
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="mobile-menu-section">
|
||||
<label class="mobile-menu-label">Ansicht</label>
|
||||
<div class="mobile-menu-nav">
|
||||
<button class="mobile-nav-item active" data-view="board">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20"><rect x="3" y="3" width="7" height="9" rx="1" stroke="currentColor" stroke-width="2" fill="none"/><rect x="14" y="3" width="7" height="5" rx="1" stroke="currentColor" stroke-width="2" fill="none"/><rect x="14" y="12" width="7" height="9" rx="1" stroke="currentColor" stroke-width="2" fill="none"/><rect x="3" y="16" width="7" height="5" rx="1" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
<span>Board</span>
|
||||
</button>
|
||||
<button class="mobile-nav-item" data-view="list">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>
|
||||
<span>Liste</span>
|
||||
</button>
|
||||
<button class="mobile-nav-item" data-view="calendar">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20"><rect x="3" y="4" width="18" height="18" rx="2" stroke="currentColor" stroke-width="2" fill="none"/><line x1="16" y1="2" x2="16" y2="6" stroke="currentColor" stroke-width="2"/><line x1="8" y1="2" x2="8" y2="6" stroke="currentColor" stroke-width="2"/><line x1="3" y1="10" x2="21" y2="10" stroke="currentColor" stroke-width="2"/></svg>
|
||||
<span>Kalender</span>
|
||||
</button>
|
||||
<button class="mobile-nav-item" data-view="proposals">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M9 11l3 3L22 4" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
<span>Genehmigung</span>
|
||||
</button>
|
||||
<button class="mobile-nav-item" data-view="coding">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20"><polyline points="16 18 22 12 16 6" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/><polyline points="8 6 2 12 8 18" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
<span>Coding</span>
|
||||
</button>
|
||||
<button class="mobile-nav-item" data-view="knowledge">
|
||||
<svg viewBox="0 0 24 24" width="20" height="20"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20" stroke="currentColor" stroke-width="2" fill="none"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z" stroke="currentColor" stroke-width="2" fill="none"/></svg>
|
||||
<span>Wissen</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mobile-menu-section mobile-menu-user">
|
||||
<div class="mobile-user-info">
|
||||
<span id="mobile-user-avatar" class="mobile-user-avatar">U</span>
|
||||
<div class="mobile-user-details">
|
||||
<span id="mobile-user-name" class="mobile-user-name">Benutzer</span>
|
||||
<span id="mobile-user-role" class="mobile-user-role">Angemeldet</span>
|
||||
</div>
|
||||
</div>
|
||||
<button id="mobile-admin-btn" class="mobile-menu-btn hidden">Admin-Bereich</button>
|
||||
<button id="mobile-logout-btn" class="mobile-menu-btn mobile-menu-btn-danger">Abmelden</button>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Mobile Menu Overlay -->
|
||||
<div id="mobile-menu-overlay" class="mobile-menu-overlay"></div>
|
||||
|
||||
<!-- Swipe Indicators -->
|
||||
<div id="swipe-indicator-left" class="swipe-indicator left">
|
||||
<svg viewBox="0 0 24 24" width="24" height="24"><path d="M15 18l-6-6 6-6" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
</div>
|
||||
<div id="swipe-indicator-right" class="swipe-indicator right">
|
||||
<svg viewBox="0 0 24 24" width="24" height="24"><path d="M9 18l6-6-6-6" stroke="currentColor" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/></svg>
|
||||
</div>
|
||||
|
||||
<!-- Onboarding Tour -->
|
||||
<div id="onboarding-overlay" class="onboarding-overlay hidden">
|
||||
<div id="onboarding-tooltip" class="onboarding-tooltip">
|
||||
@ -1934,6 +1677,21 @@
|
||||
<img id="lightbox-image" src="" alt="">
|
||||
</div>
|
||||
|
||||
<!-- CLAUDE.md Modal -->
|
||||
<div id="claude-md-modal" class="modal hidden">
|
||||
<div class="modal-content modal-large">
|
||||
<div class="modal-header">
|
||||
<h3>CLAUDE.md (Nur-Lesen)</h3>
|
||||
<button class="modal-close" aria-label="Schließen">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="claude-md-viewer">
|
||||
<pre id="claude-md-content" class="claude-md-display"></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Socket.io Client -->
|
||||
<script src="/socket.io/socket.io.js"></script>
|
||||
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren