Plugins
Mehr Möglichkeiten, ohne mehr Rechte.
Ein Plugin setzt sich neben eine Notiz, zeichnet einen eigenen Codeblock oder zeigt eine Notiz auf ganz andere Weise. Dabei läuft es eingesperrt im Browser und bekommt nur das, was es in seinem Manifest verlangt.
Vier geprüfte Plugins, die gleich dabei sind
nexlore bringt vier Plugins mit. Für jede ihrer Dateien ist eine Prüfsumme hinterlegt, und eine Datei, die davon abweicht, wird nicht installiert.
Inhaltsverzeichnis
Neben der Notiz siehst du ihre Überschriften, wie viele Wörter sie hat und wie lange man zum Lesen braucht. Dafür darf das Plugin die Notiz lesen.
Abfragen
Ein query-Block listet Notizen nach Tag oder Ordner auf, als Liste oder als Tabelle. Das Plugin liest nur und führt nie Dataview-Code aus. Dafür darf es Notizen auflisten.
Kanban
Notizen mit kanban-plugin im Frontmatter erscheinen als Brett. Verschiebst du eine Karte, schreibt das Plugin nur die Spalten neu, die sich geändert haben, und die Datei bleibt gewöhnliches Markdown. Dafür darf es die Notiz lesen und schreiben.
Wiederentdecken
Das Plugin zeigt dir eine zufällige ältere Notiz und das, was du heute vor einem Jahr geschrieben hast. Dafür darf es Notizen auflisten.
Ein Kanban-Brett, das eine ganz normale Notiz bleibt
Jede Spalte ist eine Überschrift, und jede Karte ist eine Aufgabe darunter. So bleibt das Brett eine gewöhnliche Markdown-Datei, die du auch in jedem anderen Editor öffnen kannst.
---
kanban-plugin: basic
---
## Ideen
- [ ] Eigene Bereiche anlegen
## In Arbeit
- [ ] Die Anleitung lesen
## Erledigt
- [x] nexlore einrichten
Jede Person entscheidet selbst, welche Plugins sie nutzt
Dass ein Plugin installiert ist, heißt noch lange nicht, dass es läuft. Bis es bei dir erscheint, sind drei Schritte nötig.
- Der Betreiber installiert
Unter Einstellungen, Server, KI und Plugins wählt er ein Plugin aus dem Katalog. Danach ist es zwar da, aber für alle noch aus.
- Der Betreiber gibt frei
Erst wenn er das Plugin freigibt, taucht es bei den Konten auf.
- Du schaltest es ein
Unter Mein Konto, Plugins für mich schaltest du es nur für dich ein. Dort steht bei jedem Plugin auch, was es darf.
Lore sagtSolange ein Plugin aus ist, siehst du seinen Codeblock einfach als Text. Es läuft also nichts, was du nicht selbst eingeschaltet hast.
Ein Plugin kommt nicht an deine Daten, wenn du es nicht erlaubst
Jedes Plugin läuft in einem abgeschotteten Rahmen ohne eigene Herkunft. Der einzige Weg nach draußen führt über die Seite, auf der es sitzt, und die muss es fragen.
Kein Netz
Ein Plugin kann nichts nachladen, nirgendwohin navigieren und keine Anfrage an einen Server schicken.
Keine Anmeldung
Es bekommt kein Cookie und keinen Zugriff auf den Speicher der App. Deine Sitzung kennt es nicht und kann sie deshalb auch nicht benutzen.
Nur, was im Manifest steht
Die Seite beantwortet nur Fragen, die das Manifest unter permissions nennt. Will ein Plugin schreiben, prüft der Server das Recht dazu noch einmal.
Eigene Plugin-Dateien liegen hinter einem Riegel
Browser erlauben einer Seite nicht, jeden Weg aus so einem Rahmen zu sperren. Über WebRTC könnte Code darin verschicken, was er zu sehen bekommt. Deshalb brauchen Plugin-Dateien, die nicht aus dem Katalog stammen, einen Riegel, den der Betreiber erst öffnen muss. Beim Öffnen und bei jedem Hochladen fragt nexlore mit einer deutlichen Warnung nach.
Ungeprüftes ist gekennzeichnet
Ein Plugin aus einer eigenen Datei trägt in der Liste den Vermerk „eigene Datei, ungeprüft“. Es läuft genauso eingesperrt, aber außer dir hat niemand seinen Code gelesen. Erlaube deshalb nur, was du selbst gelesen hast oder was von jemandem stammt, dem du vertraust.
Dein eigenes Plugin in zwei Dateien
In manifest.json steht, was das Plugin ist und was es darf, und main.js macht die eigentliche Arbeit. Das Beispiel hier zählt die Wörter neben der Notiz.
{
"id": "word-count",
"version": "1.0.0",
"author": "you",
"name": { "en": "Word count", "de": "Wörter" },
"description": { "en": "Counts the words of the note." },
"permissions": ["note:read"],
"place": { "panel": true },
"strings": {
"en": { "words_one": "{{count}} word",
"words_other": "{{count}} words" }
}
}nexlore.ready(function (context) {
nexlore.ask('note.read').then(function (note) {
var words = note.content.split(/\s+/).filter(Boolean).length
document.getElementById('app').textContent =
nexlore.t('words', { count: words })
})
})
nexlore.on('changed', function () {
// die Notiz hat sich geändert: neu lesen
})| Feld | Was hineingehört |
|---|---|
id | Kleinbuchstaben, Ziffern und -, 2 bis 32 Zeichen lang und keine Kennung, die schon im Katalog vorkommt |
version | eine Fassung wie 1.0.0 |
permissions | beliebig viele aus note:read, note:write und vault:read |
place | genau eins davon: { "panel": true } neben der Notiz, { "block": "sprache" } für einen eigenen Codeblock oder { "view": { "frontmatter": "schlüssel" } } als Ansicht für Notizen mit dieser Eigenschaft |
name, description | ein Text oder Texte je Sprache, mindestens en |
strings | die eigenen Texte je Sprache für nexlore.t |
Lore sagtEin eigener Codeblock darf nicht dataview, dataviewjs, tasks, mermaid, math, latex oder query-results heißen, weil diese Namen schon vergeben sind.
Was ein Plugin von nexlore wissen kann
main.js läuft nach einer kleinen Bibliothek namens nexlore. In context stehen Ort, Pfad, Sprache, Texte und Theme und bei einem Codeblock auch dessen Text.
| Anfrage | Braucht | Antwort |
|---|---|---|
nexlore.ask('note.read') | note:read | { path, title, content, hash } |
nexlore.ask('note.write', { content, base_hash }) | note:write | { saved, conflict, hash }; hat sich die Notiz inzwischen geändert, entsteht eine Konfliktkopie |
nexlore.ask('vault.query', { tag, folder, space, sort, limit, random, day }) | vault:read | bis zu 200 Notizen, die das Konto lesen darf |
nexlore.ask('note.open', { path }) | nichts | öffnet eine Notiz, die das Konto lesen darf |
nexlore.ask('note.reveal', { heading, index }) | nichts | scrollt die Notiz zu einer Überschrift |
nexlore.t(schlüssel, { count }) wählt je nach Zahl _one oder _other, und nexlore.resize() passt den Rahmen an seinen Inhalt an, was aber auch von selbst passiert. main.js darf höchstens 512 KB groß sein und das Manifest höchstens 64 KB.