| Eigenschaft | Wert |
|---|---|
| Plugin-ID | net.markus-michalski:tab-swap |
| Name | Tab Swap |
| Plugin-Klasse | TabSwapPlugin in class.TabSwapPlugin.php |
| Konfigurationsklasse | TabSwapConfig in config.php |
| Instanzen | Singleton: es gibt genau eine Instanz, enable() legt sie bei Bedarf an |
| PHP | >=7.4 (composer.json) |
bootstrap() ruft checkVersion() auf. Ist installed_version leer oder niedriger als die Version aus plugin.php, schreibt performUpdate() die neue Version in die Konfiguration. Eine Meldung ins Error-Log gibt es nur, wenn die Konstante DEBUG gesetzt und wahr ist.onObjectView() mit dem Signal object.view.onObjectView() tut nur etwas, wenn das übergebene Objekt ein Ticket ist (zum Beispiel keine Aufgabe). Dann wird das Script ausgegeben.Das Plugin gibt ein Element der Form <script data-plugin="tab-swap" data-version="..." nonce="..."> aus:
data-version enthält installed_version, aber nur, wenn der Wert dem Muster Zahl.Zahl oder Zahl.Zahl.Zahl entspricht. Sonst wird 1.0.0 eingesetzt. Der Wert wird zusätzlich HTML-escaped.nonce wird nur gesetzt, wenn die Konstante CSP_NONCE definiert ist. Der Wert wird HTML-escaped.Das Script wirkt erst, wenn alle Voraussetzungen erfüllt sind:
#post-reply-tab, #post-note-tab, #reply und #note existieren.offsetParent ist nicht null).Dann passiert Folgendes:
li-Element des Notiz-Tabs wird in #response-tabs vor das li des Antworten-Tabs verschoben.active entfernt und aria-selected="false" gesetzt. Beim Notiz-Tab wird active ergänzt und aria-selected="true" gesetzt.#reply bekommt display: none, #note bekommt display: block.Der Tausch läuft pro Seitenaufbau einmal. Damit er auch bei später aufgebauten Seiten greift, nutzt das Script:
MutationObserver, der auf #post-reply-tab wartet und nach erfolgreichem Tausch endet,DOMContentLoaded,pjax:success und, falls jQuery vorhanden ist, das Ereignis redraw.staff. In beiden Fällen wird der Zustand zurückgesetzt und der Tausch erneut ausgeführt.jQuery ist nicht zwingend nötig. Fehlt es, entfällt nur die Reaktion auf redraw.staff.
tab-swap/
├── plugin.php # Plugin-Metadaten
├── class.TabSwapPlugin.php # Plugin-Klasse, Signal-Handler, Inline-Script
└── config.php # TabSwapConfig mit den zwei Feldern
Im Repository liegen zusätzlich composer.json, PHPUnit-Tests, CI-Workflow und Dokumentation. Die CI prüft Syntax und führt die Tests mit PHP 7.4 bis 8.3 aus.