Komplemente
In der Datenbank werden für Komplemente nur Hinweise und Namen, sowie der Bezug zwischen Komplementen und Geheimnissen (und Komponenten) abgelegt.
Der Inhalt von Komplementen bleibt ungespeichert und wird nur in dem jeweiligen Browser-Tab im Datenbereich eines JavaScripts gehalten.
Soll ein Geheimnis oder eine Komponente angezeigt werden, deren Inhalt syntaktisch eine Komplettierungsaufforderung enthält, z. B.
in_box{ a_partial_secret }
wird überprüft, ob es ein Komplement namens "a_partial_secret" gibt. In diesem Fall wird lokal eine Maske angezeigt, um den Komplement-Inhalt einzugeben. Also z. B. (wenn als Inhalt von a_partial_secret "-added-content-" angegeben wird, wird schließlich als Geheimnis angezeigt:
in_box-added-content-
Gibt es dagegen kein Komplement mit Namen "a_partial_secret" und auch keine Komponente dieses Namens, so erscheint einfach der nicht komplettierte Inhalt:
in_box{ a_partial_secret }
Woher weiß das JavaScript, welche Komplemente es gibt?
Beim Laden des Dokuments (Geheimnis oder Komponente) aus der Box wird dem JavaScript die ID des Dokuments mitgeteilt. Wird nun beim Parsing eine Komplettierungs-Syntax erkannt, fragt das JavaScript beim Server an, ob es für den erkannten Namen ein Komplement gibt. Der Server antwortet entweder mit "false" oder mit dem im Komplement-Objekt abgespeicherten Hinweis.
Warum werden Bezüge zwischen Komplementen und Geheimnissen gespeichert?
Zum Einen ist es wichtig festzustellen, welche Geheimnisse ein Komplement benutzen: Will die Benutzer*in den Inhalt eines Komplements ändern, so muss sie wissen, welche Geheimnisse davon betroffen sind, d. h. welche Logins sie entsprechend ändern muss.
Außerdem ist es bei übertragenen Geheimnissen nötig, Komplement-Bezüge zu beachten. D. h. die Empfänger*in sollte darauf hingewiesen werden, dass die Ersetzung eines Komplements erforderlich ist.
Wie wird das Senden von "komplettierten" Geheimnissen verhindert?
Die komplettierten Geheimnisse werden in der Bearbeitungsansicht über den Knopf "Vorschau" angezeigt. Es handelt sich um Input-Felder, denen aber das "disabled"-Attribut mitgegeben wird, so dass sie beim Abschicken des Formulars nicht mitgesendet werden.
Das hat allerdings den Seiteneffekt, dass das komplettierte Geheimnis nicht via Copy/Paste kopiert werden kann. In der Bearbeitungs-Ansicht ist dies jedoch nicht unbedingt erforderlich, da dafür die Anzeige-Ansicht genutzt werden kann.
In der Anzeige-Ansicht stehen die Input-Felder außerhalb jedes Form-Elements, so dass sie auch, wenn "disabled" nicht gesetzt ist, nicht gesendet werden können.