Repository navigation
Releases: FriendsOfREDAXO/a11y_datetime_addon
Releases · FriendsOfREDAXO/a11y_datetime_addon
Release list
3.1.1
Fixed
- Kritischer Datenverlust bei
picker_type: datetime(und potenziell allen anderen Picker-Typen): War auf derselben REDAXO-Installation zusätzlich noch das alte, vor der Umbenennung in v3.0.0 installierteflatpickr-Addon aktiv, luden dessenboot.phpund dieses Addonsboot.phpbeide unabhängig voneinander ihre jeweilige Kopie der Vendor-Bibliothek plus ein eigenes Init-Script (flatpickr_init.jsbzw.a11y_datetime_init.js). Beide Scripts scannendocument.querySelectorAll('.a11y_datetime')und initialisieren jedes gefundene Element — jedoch mit jeweils eigenem, nicht gegenseitig erkanntem Guard-Attribut (data-flatpickr-initializedvs.data-a11y-datetime-initialized). Zusätzlich übernimmt die Vendor-Bibliothek beim Erzeugen des sichtbarenaltInputstandardmäßig die kompletteclassNamedes Original-Elements (siehesetupInputs()/altInputClass-Default ina11y_datetime.js) — inklusive der Trigger-Klasse.a11y_datetimeselbst. Dadurch sah der frisch erzeugte, sichtbarealtInputfür jeden späteren Selector-Scan wie ein brandneues, noch nicht initialisiertes Picker-Feld aus. Ergebnis: Der Picker wurde zweimal auf demselben logischen Feld initialisiert (das zweite Mal auf demaltInputder ersten Instanz). Die zweite Instanz erzeugte ein eigenes verstecktes/sichtbares Input-Paar, das der Redakteur tatsächlich bedient — während das ORIGINALE, für den Formular-Submit benannte<input name="FORM[...]">bei der ersten (jetzt verwaisten) Instanz verblieb und nie einselectedDates-Update bekam. Beim Absenden wurde daher ein leerer String übertragen, den PHP zu einem ungültigen Datum wie-0001-11-30 00:00verarbeitete — der ausgewählte Termin ging vollständig verloren. Fix inassets/a11y_datetime_init.js: (1) Das Guard-Attribut wird jetzt synchron VOR dem Aufruf der Vendor-Factory gesetzt (statt danach) und beim Prüfen UND Setzen wird zusätzlich das vomflatpickr-Addon verwendetedata-flatpickr-initialized-Attribut berücksichtigt, sodass sich beide Init-Scripts gegenseitig zuverlässig erkennen. (2)altInputClasswird jetzt explizit gesetzt (Original-Klassenliste minus.a11y_datetime/.a11y_datetime_range), damit der generiertealtInputnicht erneut als Trigger-Element erkannt wird. Ergänzt die Ersatzfeld-Erkennung aus 3.1.0 (isAltInputOfExistingPicker), beide Prüfungen greifen jetzt zusammen. Live gegen eine REDAXO-5.21-Instanz mit beiden Addons parallel installiert reproduziert und verifiziert. (#1) - Platzhalter in der Backend-Konfigurationszusammenfassung (
value.a11y_datetime_addon.tpl.php, Texte wie „Typ: %s“, „Minuten: %s“, „Locale: %s“): Die Lang-Dateien nutzten das altesprintf-Format%s, REDAXOsrex_i18n::msg()ersetzt aber ausschließlich positionelle Platzhalter im Format{0},{1}, … . Dadurch blieb%sim Backend-Hilfetext unter dem Datums-/Zeitfeld immer wortwörtlich stehen, ohne dass der eigentliche Wert (Feldtyp, Minuten-Schrittweite, Locale, …) je sichtbar wurde. Fix: alle betroffenen Keys inlang/de_de.langundlang/en_gb.lang(a11y_datetime_yform_summary_*) von%sauf{0}umgestellt. (#1)
3.1.0
Added
- MForm-Integration: neuer Feldtyp
a11y_datetimeüberMForm::registerFieldType()(MForm ≥10.0), registriert inboot.phpwenn MForm verfügbar ist. Nutzung im Modul-Code:$form->addCustomField('a11y_datetime', $id, ['label' => '...', 'data-enableTime' => 'true']). Funktioniert sowohl im klassischen MForm-Formular als auch im Flex-Repeater (neue KlasseFriendsOfREDAXO\A11yDatetimeAddon\MFormFieldType, implementiertFieldTypeInterface). Anders als das YForm-Value-Feld bietet dieser Feldtyp kein eigenes Manager-Formular für Picker-Optionen — Optionen werden direkt alsdata-*-Attribute übergeben, analog zur manuellen HTML-Einbindung. - Hinweis: Der MForm-Formbuilder (visuelle Drag&Drop-Oberfläche) hat aktuell keine Registrierungs-API für Custom-Feldtypen aus Fremd-Addons —
a11y_datetimeerscheint daher nicht in der Builder-Palette, nur programmatisch überaddCustomField()im Modul-Code nutzbar. Ein entsprechender Vorschlag wurde im MForm-Repository eingereicht.
Fixed
- Init-Script (
a11y_datetime_init.js): Bei jedem weiterenrex:ready(PJAX-Navigation, MBlock, MForm-Flex-Repeater, per Ajax nachgeladenes HTML) wurde das sichtbare Ersatzfeld (altInput) bereits initialisierter Picker selbst noch einmal als Picker initialisiert. Ursache: flatpickr übernimmt beim Anlegen des Ersatzfelds alle Klassen des Originalfelds, also auch.a11y_datetime, und die Init-Schleife erkannte nur das Originalfeld als erledigt. Sichtbar wurde das als verschachtelter zweiter Picker mit falschem Datum (der formatierte Anzeigetext wurde als Wert geparst, etwa01.01.2026), leerer Uhrzeit und Konsolen-WarnungenInvalid date provided. Das Init-Script überspringt Ersatzfelder jetzt (isAltInputOfExistingPicker) und markiert sie zusätzlich direkt nach dem Anlegen mitdata-a11y-datetime-initialized="1". Betrifft Datums- und Range-Picker. Der Fehler wurde erst durch das Entfernen des globalen Init-Guards (nächster Punkt) erreichbar. - Init-Script (
a11y_datetime_init.js): ein globalerwindow.__a11yDatetimeInitRan-Guard verhinderte, dass nach dem ersten Laden der Seite jemals wieder ein Picker initialisiert wurde — betraf jede Form von dynamisch nachträglich eingefügtem Markup (REDAXO-PJAX-Navigation, MForm-Flex-Repeater-Items nach dem Klonen, Ajax-Inhalte). Der Guard war redundant (die eigentliche Mehrfach-Listener-Bindung war bereits separat überjQuery(document).data('a11y-datetime-rex-ready-bound')abgesichert) und wurde ersatzlos entfernt. Betraf auch schon die Vorgängerversion (flatpickr_init.js). - Vendor-Update auf a11y_datetime v5.2.9: behebt einen Bug im
documentClick-Handler, der einen Klick außerhalb des Pickers zwar korrekt erkannte, aber nie tatsächlichclose()aufrief — der Kalender blieb dadurch dauerhaft offen, unabhängig davon, wohin als Nächstes geklickt wurde. Bei mehreren Picker-Instanzen auf einer Seite (z. B. im MForm-Flex-Repeater) konnten dadurch mehrere Kalender gleichzeitig offen bleiben. Root Cause im Vendor-TypeScript-Quellcode gefunden und dort behoben (nicht nur im Addon umgangen).
3.0.0
First release under the new name
This addon was renamed from FriendsOfREDAXO/flatpickr to a11y_datetime_addon. The old repository is archived; development continues here.
BREAKING CHANGE
- Package name (
package.yml), PHP namespace (FriendsOfREDAXO\A11yDatetimeAddon), YForm value type name (a11y_datetime_addon), and file names changed. The CSS marker class is now.a11y_datetime/.a11y_datetime_range. - Named
a11y_datetime_addonrather than plaina11y_datetimeto avoid colliding with the vendor's own source checkout when both live side by side in the same REDAXO installation. - Existing YForm fields using the old
flatpickrtype are migrated automatically via a newinstall.php(idempotent SQL update onrex_yform_field.type_name) — no manual action needed. - A thin deprecated shim class
rex_yform_value_flatpickris kept for installations whose fields haven't run the migration yet. - Two
data-*attributes were renamed:data-flatpickr-disable-callback→data-a11y-datetime-disable-callback,data-flatpickr-expert-json→data-a11y-datetime-expert-json.
Changed
boot.phpandFrontendHelpernow share one asset list (FrontendHelper::assetList()) instead of two independently maintained ones.- Init script simplified: single CSS class detection per picker type, dead
window.flatpickrfallback removed (the vendor bundle always sets both globals). - YForm Manager form: the "year range as JSON" textarea replaced by two plain number fields (years back / years ahead) — no more manual JSON typing. Same simplification for direct HTML/module usage via
data-yearRangePast/data-yearRangeFuture(JSON object attribute kept as fallback).
See CHANGELOG.md for the full list.