';
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}