feat: Einzelne Nachrichten als Link teilen
Backend:
- SharedMessageRecord Model + shared_messages DB-Tabelle
- SharedEndpoint: POST /api/messages/{id}/share, GET /api/shared/{token},
GET /api/shared (Liste), DELETE /api/shared/{token}
- Auth-Ausnahme für GET /api/shared/{token} (öffentlich ohne Login)
- DB-Methoden: CreateSharedMessage, GetSharedMessage, GetChainMessagesUpTo
Frontend:
- Share-Button (fa-share-alt) an jeder Nachricht
- Kontextmenü: Einzelnachricht oder mit Thread-Kontext teilen
- Link wird automatisch in Zwischenablage kopiert
- Öffentliche Shared-Page (#shared/{token}) ohne Login
- Markdown-Rendering in der geteilten Ansicht
- CSS für Share-Button, Share-Menü und Shared-Page
This commit is contained in:
1 parent
4e915f76af
commit
be29984b25
12 files changed
+591
-8
No files matched your search
+10
-3
@@ -28,6 +28,14 @@ function applySettings() {
|
||||
|
||||
document.addEventListener('DOMContentLoaded', async () => {
|
||||
// Auth-Check: Eingeloggt?
|
||||
const { page, id } = parseHash();
|
||||
|
||||
// Shared-Page braucht kein Login
|
||||
if (page === 'shared') {
|
||||
await navigateTo('shared', { id }, { replace: true });
|
||||
return;
|
||||
}
|
||||
|
||||
var user = await apiMe();
|
||||
if (!user) {
|
||||
await navigateTo('login', {}, { replace: true });
|
||||
@@ -39,7 +47,6 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||
applySettings();
|
||||
loadClaudeStatus();
|
||||
|
||||
const { page, id } = parseHash();
|
||||
var target = page === 'login' ? 'dashboard' : page;
|
||||
await navigateTo(target, { id }, { replace: true });
|
||||
});
|
||||
@@ -84,8 +91,8 @@ window.addEventListener('popstate', async (e) => {
|
||||
id = parsed.id;
|
||||
}
|
||||
|
||||
// Login-Seite immer erlauben, alles andere nur wenn eingeloggt
|
||||
if (page !== 'login') {
|
||||
// Login- und Shared-Seite immer erlauben, alles andere nur wenn eingeloggt
|
||||
if (page !== 'login' && page !== 'shared') {
|
||||
var user = await apiMe();
|
||||
if (!user) {
|
||||
await navigateTo('login', {}, { replace: true });
|
||||
|
||||
Reference in new issue
Block a user