docmd bietet zwei Browser-APIs: die isomorphe Compile-Engine zum Rendern von Markdown im Browser und die Plugin-API für den Entwicklungsmodus für die Echtzeitkommunikation mit dem Dev-Server.
Isomorphe Compile-Engine
Dieselbe Engine, die statische Websites in Node.js generiert, kann vollständig in einem Webbrowser ausgeführt werden. Dies ist ideal für den Aufbau von CMS-Vorschauen, interaktiven Playgrounds oder die Einbettung von Dokumentationen in bestehende Webanwendungen.
Installation via CDN
<!-- Kern-Styles -->
<link rel="stylesheet" href="https://unpkg.com/@docmd/ui/assets/css/docmd-main.css">
<!-- Die isomorphe Engine -->
<script src="https://unpkg.com/@docmd/live/dist/docmd-live.js"></script>
docmd.compile(markdown, config)
Kompiliert rohes Markdown unter Verwendung des Standard-docmd-Layouts in einen vollständigen HTML-Dokument-String.
Parameter:
markdown(String): Der rohe Markdown-Inhalt.config(Object): Konfigurations-Überschreibungen (gleiches Schema wiedocmd.config.js).
Rückgabe: Promise<String>: Das vollständige HTML-Dokument.
Beispiel: Live-Vorschau
Um eine Stil-Isolation zu gewährleisten, wird empfohlen, die Ausgabe innerhalb eines <iframe> mittels des srcdoc-Attributs zu rendern.
const editor = document.getElementById('editor');
const preview = document.getElementById('preview');
async function updatePreview() {
const html = await docmd.compile(editor.value, {
title: 'Vorschau',
theme: { appearance: 'light' }
});
preview.srcdoc = html;
}
editor.addEventListener('input', updatePreview);
Plugin-API für den Entwicklungsmodus
Während docmd dev aktiv ist, wird automatisch eine globale window.docmd-Variable in jede Seite eingefügt. Diese API ermöglicht die Echtzeitkommunikation zwischen clientseitigem Plugin-Code und serverseitigen Action-Handlern via WebSocket RPC.
Die unten aufgeführten Plugin-API-Methoden sind nur während docmd dev verfügbar. Sie sind nicht in Produktions-Builds enthalten.
docmd.call(action, payload)
Ruft einen serverseitigen Action-Handler auf, der von einem Plugin registriert wurde. Gibt ein Promise zurück, das mit dem Rückgabewert des Handlers aufgelöst wird.
// Eine Plugin-Aktion aufrufen und das Ergebnis erhalten
const threads = await docmd.call('threads:get-threads', {
file: 'docs/erste-schritte.md'
});
console.log(threads); // Array von Thread-Objekten
Wenn die Aktion Quelldateien modifiziert, lädt die Seite nach Auflösung des Promises automatisch neu.
docmd.send(name, data)
Sendet ein „Fire-and-forget“-Ereignis an den Server. Es wird keine Antwort zurückgegeben.
// Den Server über einen Seitenaufruf benachrichtigen
docmd.send('analytics:page-view', {
path: window.location.pathname
});
docmd.on(name, callback)
Abonniert vom Server gesendete Ereignisse (Server-pushed Events). Gibt eine Unsubscribe-Funktion zurück.
docmd.afterReload(name, callback) & docmd.scheduleReload(name, context)
Ermöglichen die Erhaltung des Zustands (z. B. Scrollposition) über einen automatischen Neuladevorgang hinweg, indem Daten im sessionStorage zwischengespeichert werden.
Wichtige Hinweise
- Kein Dateisystem: Die Browser-Engine kann keine Ordner scannen. Sie müssen das
navigation-Array explizit im Konfigurationsobjekt angeben, wenn Sie eine Seitenleiste benötigen. - Node-only Plugins: Plugins, die auf Node.js-APIs angewiesen sind (wie Sitemap oder LLM), sind im Browser deaktiviert.