diff --git a/web/src/lib/components/NoteEditor.svelte b/web/src/lib/components/NoteEditor.svelte index 2083c25..f509b09 100644 --- a/web/src/lib/components/NoteEditor.svelte +++ b/web/src/lib/components/NoteEditor.svelte @@ -43,6 +43,10 @@ editor.innerHTML = note.body.trim() ? markdownToHtml(note.body) : '


'; loadedId = note.id; active = {}; + // Kildevisningen hører til den note, den blev slået til på. Skifter man note, + // er det den rige flade, man skal møde — ellers står den næste note som kode, + // uden at nogen har bedt om det. + asSource = false; colourCode(); }); @@ -138,6 +142,51 @@ readSuggestions(); } + // --- kilden ---------------------------------------------------------------------- + + /** + * Noten som den Markdown, den er. + * + * Fladen er rig tekst, fordi det er den, folk kan. Men filen under er Markdown, + * og der er to ting, den rige flade ikke kan: tage imod Markdown, nogen har + * skrevet et andet sted — indsat i den rige flade er `## Overskrift` fem tegn og + * ikke en overskrift — og vise, hvad der faktisk bliver gemt. Begge dele er det + * samme svar: lad folk se kilden. + * + * Ikke en tredje tilstand at holde styr på: teksten går gennem de samme to + * funktioner som altid, kun den anden vej. Det, man ser i kildefeltet, er ord for + * ord det, der ligger i databasen. + */ + let asSource = $state(false); + let source = $state(''); + + function toggleSource() { + if (!asSource) { + source = htmlToMarkdown(editor); + asSource = true; + return; + } + asSource = false; + onchange?.(source); + // Fyldt fra kilden, ikke fra `note.body`. + // + // Noten i lageret er den sidst gemte, og gemningen venter på sin pause — så + // den vej ville kaste det, der lige er skrevet i kildefeltet, væk. `loadedId` + // røres ikke: $effect ser stadig en note, den har indlæst, og skriver ikke + // hen over det her. + queueMicrotask(() => { + if (!editor) return; + editor.innerHTML = source.trim() ? markdownToHtml(source) : '


'; + colourCode(); + }); + } + + /** Kilden skrives direkte igennem: det er filen, man redigerer. */ + function sourceChanged(event) { + source = event.currentTarget.value; + onchange?.(source); + } + // --- suggesting a project ------------------------------------------------------ let suggestions = $state([]); @@ -373,11 +422,37 @@ + + + + + + {#if asSource} + + + {/if}