Herkunft
Diese Abspaltung
zotLook ist eine Abspaltung von Zotero7QuickLook von Guillaume Chapron, von dem der Code und die MIT-Lizenz stammen. Gepflegt und weiterentwickelt wird sie von fre-ms.
Ein guter Teil von Chaprons Arbeit steht weiterhin. Gemessen am letzten Upstream-Commit und gezählt nur Zeilen, die weder leer noch Kommentar noch Klammer sind: 45 % des JavaScript und 52 % von bootstrap.js haben wörtlich überlebt, und 20 der ursprünglich 28 Methoden gibt es weiterhin unter ihren eigenen Namen. Das Plugin ist um sie herum gewachsen — diese überlebenden Zeilen sind heute etwa ein Fünfzehntel des Bestands. Die Zahlen stammen aus tool/provenance.mjs, und die Prüfsuite schlägt an, wenn sie von dieser Seite abweichen.
Die Architektur ist durchgehend seine:
- die Gestalt aus Bootstrap und Singleton
- der Tastatur-Lauscher in der Capture-Phase an der Eintragsliste, der sich vor Zoteros eigene Leertasten-Behandlung setzt
- den Vorschau-Prozess offenzuhalten, damit ein zweiter Druck ihn schließt
- die Strategie mit dem temporären Verzeichnis
- einen synchronisierten Anhang aufzulösen, bevor er gezeigt wird
- die Ideen hinter der EPUB-zu-HTML-Wandlung und hinter dem Kontaktbogen
Die Plugin-Kennung lautet zotlook@fre.ms und unterscheidet sich von Chaprons — die beiden installieren sich damit nebeneinander statt übereinander.
Warum eine Abspaltung
Fast die Hälfte von Chaprons Zeilen steht noch, und die Architektur ist durchgehend seine. Warum dann nicht Beiträge zu seinem Projekt statt einer eigenen Linie?
Der Umfang. Was hier hinzugekommen ist, lässt sich nicht als Pull Request stellen: zwei weitere Plattformwege, ein eigener Seiten-Renderer, die Annotations-Kette, die EPUB-Wandlung samt Inhaltsverzeichnis, eine Einstellungsseite, eine Testsuite. Das ist keine Erweiterung, das ist eine andere Größenordnung — und niemandem wäre gedient, wenn ein fremdes Projekt so etwas als Vorschlag auf den Tisch bekäme.
Das Ziel. Chapron beschreibt sein Plugin als „A Zotero 7+ plugin for macOS” und stützt es auf qlmanage, den Quick-Look-Befehl des Systems. Das ist eine klare und legitime Entscheidung: ein Plugin, das auf einem System genau das tut, was es soll. zotLook zielt anders — auf alle drei Systeme — und das ist kein besseres Ziel, sondern ein anderes.
Der Kontaktbogen zeigt es am deutlichsten. Er wurde zunächst von einem mitgelieferten Swift-Programm über PDFKit gezeichnet: 0,12 s für 30 Seiten. Ersetzt hat ihn pdf.js, das Zotero ohnehin mitbringt und das überall läuft — 0,42 s für dieselben Seiten, also gut viermal so lang.
Das Swift-Programm lief nur unter macOS. Es zu behalten hätte zwei Renderer und zwei Arten bedeutet, Annotationen zu zeichnen, die einander optisch gleichen müssen. Die Entscheidung fiel gegen die Geschwindigkeit — unter der Zielsetzung „nur macOS” wäre sie umgekehrt ausgefallen, und das zu Recht.
Die vier Beweggründe, in der Reihenfolge ihres Gewichts:
- Plattformübergreifend. Vorschau unter Linux und Windows, nicht nur unter macOS.
- Annotationen in der Vorschau. Zotero bewahrt sie in seiner Datenbank auf; ohne Zutun zeigt eine Vorschau ein unmarkiertes Dokument. Das war die Lücke, nach der im Zotero-Forum am häufigsten gefragt wurde.
- Verweise vom Kontaktbogen in den Reader. Ein Klick auf eine Miniatur öffnet genau diese Seite — das macht aus einer Übersicht ein Werkzeug.
- EPUB-Vorschau auf allen Systemen. Keine der drei Systemvorschauen stellt ein E-Book dar, deshalb wandelt zotLook es selbst.
Die Abspaltung trägt eine eigene Plugin-Kennung, damit beide nebeneinander bestehen können, und die MIT-Lizenz samt Chaprons Copyright-Vermerk unverändert weiter. Was hier entsteht, steht ihm offen — es ist zum guten Teil sein Code.
Weiter zurück
Dahinter steht ZoteroQuickLook von Mikko Rönkkö, das Quick Look nach Zotero 4–6 brachte und dieser Linie von Plugins ihren Zweck und ihren Namen gab.
Jenes Plugin war eine XUL-Overlay-Erweiterung — install.rdf, overlay.xul, eine Windows-Bridge.exe, ein AppleScript und ein Perl-Skript — eine Architektur, die Zotero 7 schlicht abgeschafft hat. Chapron schrieb deshalb ein neues Plugin, statt das alte zu portieren.
Der direkte Vergleich bestätigt das: Von 250 substanziellen Zeilen des Originals finden sich 28 auch hier, und jede davon ist eine Zeile, die jedes Plugin schreibt — return;, } else {, let path = item.getFilePath();. Alles Weitere, das die beiden teilen, sind Namen aus den Zotero- und DOM-Schnittstellen.
Rönkkö ist deshalb als Urheber der Idee genannt und bewusst nicht als Autor dieses Codes — das Repository trägt keine Lizenz, und es brauchte auch keine, weil nichts daraus übernommen wurde.