feat(frontend): "Auf den Server legen" im Dokumenten-Menue (D76-Nachtrag 8)
Bis hierher kam ein Plan nur per curl auf den Server — der Menueintrag war im Konzept vorgesehen und fehlte. Jetzt legt der Knopf das aktive Dokument an, schaltet dorthin um und schreibt den Link in die Adresszeile und in die Zwischenablage. Die Adresszeile IST der Link: dort sucht man ihn, und ein Neuladen fuehrt ins selbe Dokument zurueck. Die Basis-Adresse ist die eigene Herkunft — produktiv liegt das Backend hinter derselben Domain, wer nichts konfiguriert bekommt also das Richtige. Darueber liegen ?server= (Entwicklung) und die Adresse des offenen Server-Dokuments. Traegt nichts, wird gefragt. Das lokale Dokument bleibt: Wer sein einziges Exemplar einem Server anvertraut, soll es nicht im selben Zug verlieren. Dafuer nennt der Waehler jetzt den Host neben Server-Dokumenten — im Test standen sonst zwei Eintraege "Nur lokal" da, unterscheidbar nur am Tooltip. Und der Knopf verschwindet bei Dokumenten, die schon auf einem Server liegen. Geprueft im Browser gegen ein echtes Backend: Knopf sichtbar bei einem lokalen Dokument, nach dem Klick steht ?live=... in der Adresszeile, das lokale Dokument ist noch da, der Knopf verborgen — und eine getippte Zeile erreicht den Server als Version 2. 523 Frontend-Tests (5 neue fuer serverBase/documentsUrl). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
dce196254c
commit
ea1979d567
@@ -1,7 +1,7 @@
|
||||
import {describe, it, expect} from 'vitest';
|
||||
import {
|
||||
liveUrls, normalize, lines, text, computeOps, applyOps,
|
||||
mapLine, caretToLineCol, lineColToCaret, feedAction,
|
||||
mapLine, caretToLineCol, lineColToCaret, feedAction, serverBase, documentsUrl,
|
||||
} from '../src/live.js';
|
||||
|
||||
describe('Adressen', () => {
|
||||
@@ -185,3 +185,35 @@ describe('Feed-Antwort anwenden oder nicht', () => {
|
||||
expect(feedAction({currentVersion: 9}, 4)).toBe('skip');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Basis-Adresse des Backends', () => {
|
||||
const seite = 'https://werkbaum.example/editor/';
|
||||
|
||||
it('nimmt die Herkunft der Seite, wenn nichts anderes da ist', () => {
|
||||
expect(serverBase(null, null, seite)).toBe('https://werkbaum.example');
|
||||
expect(documentsUrl(serverBase(null, null, seite)))
|
||||
.toBe('https://werkbaum.example/api/v1/documents');
|
||||
});
|
||||
|
||||
it('der ?server=-Parameter hat Vorrang', () => {
|
||||
expect(serverBase('http://localhost:8080', 'https://fremd.example/api/v1/documents/x', seite))
|
||||
.toBe('http://localhost:8080');
|
||||
});
|
||||
|
||||
it('sonst gilt der Server des offenen Dokuments', () => {
|
||||
// Wer in einem ?live=-Dokument sitzt und ein neues anlegt, meint denselben.
|
||||
expect(serverBase(null, 'https://anderer.example/api/v1/documents/3f2a', seite))
|
||||
.toBe('https://anderer.example');
|
||||
});
|
||||
|
||||
it('ein Backend unter einem Unterpfad bleibt erhalten', () => {
|
||||
expect(serverBase(null, 'https://h.example/werkbaum/api/v1/documents/3f2a', seite))
|
||||
.toBe('https://h.example/werkbaum');
|
||||
});
|
||||
|
||||
it('ohne brauchbare Herkunft lieber nichts', () => {
|
||||
// Auf file:// gibt es keine; raten waere schlechter als fragen.
|
||||
expect(serverBase(null, null, 'file:///home/x/index.html')).toBe(null);
|
||||
expect(serverBase('javascript:alert(1)', null, null)).toBe(null);
|
||||
});
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user