Skip to content

Releases: FriendsOfREDAXO/a11y_datetime_addon

3.1.1

Choose a tag to compare

@skerbis skerbis released this 03 Oct 16:17
32b1eba

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 installierte flatpickr-Addon aktiv, luden dessen boot.php und dieses Addons boot.php beide unabhängig voneinander ihre jeweilige Kopie der Vendor-Bibliothek plus ein eigenes Init-Script (flatpickr_init.js bzw. a11y_datetime_init.js). Beide Scripts scannen document.querySelectorAll('.a11y_datetime') und initialisieren jedes gefundene Element — jedoch mit jeweils eigenem, nicht gegenseitig erkanntem Guard-Attribut (data-flatpickr-initialized vs. data-a11y-datetime-initialized). Zusätzlich übernimmt die Vendor-Bibliothek beim Erzeugen des sichtbaren altInput standardmäßig die komplette className des Original-Elements (siehe setupInputs()/altInputClass-Default in a11y_datetime.js) — inklusive der Trigger-Klasse .a11y_datetime selbst. Dadurch sah der frisch erzeugte, sichtbare altInput fü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 dem altInput der 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 ein selectedDates-Update bekam. Beim Absenden wurde daher ein leerer String übertragen, den PHP zu einem ungültigen Datum wie -0001-11-30 00:00 verarbeitete — der ausgewählte Termin ging vollständig verloren. Fix in assets/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 vom flatpickr-Addon verwendete data-flatpickr-initialized-Attribut berücksichtigt, sodass sich beide Init-Scripts gegenseitig zuverlässig erkennen. (2) altInputClass wird jetzt explizit gesetzt (Original-Klassenliste minus .a11y_datetime/.a11y_datetime_range), damit der generierte altInput nicht 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 alte sprintf-Format %s, REDAXOs rex_i18n::msg() ersetzt aber ausschließlich positionelle Platzhalter im Format {0}, {1}, … . Dadurch blieb %s im 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 in lang/de_de.lang und lang/en_gb.lang (a11y_datetime_yform_summary_*) von %s auf {0} umgestellt. (#1)

3.1.0

Choose a tag to compare

@skerbis skerbis released this 21 Sep 09:41
f357868

Added

  • MForm-Integration: neuer Feldtyp a11y_datetime über MForm::registerFieldType() (MForm ≥10.0), registriert in boot.php wenn 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 Klasse FriendsOfREDAXO\A11yDatetimeAddon\MFormFieldType, implementiert FieldTypeInterface). Anders als das YForm-Value-Feld bietet dieser Feldtyp kein eigenes Manager-Formular für Picker-Optionen — Optionen werden direkt als data-*-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_datetime erscheint daher nicht in der Builder-Palette, nur programmatisch über addCustomField() im Modul-Code nutzbar. Ein entsprechender Vorschlag wurde im MForm-Repository eingereicht.

Fixed

  • Init-Script (a11y_datetime_init.js): Bei jedem weiteren rex: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, etwa 01.01.2026), leerer Uhrzeit und Konsolen-Warnungen Invalid date provided. Das Init-Script überspringt Ersatzfelder jetzt (isAltInputOfExistingPicker) und markiert sie zusätzlich direkt nach dem Anlegen mit data-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 globaler window.__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 über jQuery(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ächlich close() 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

Choose a tag to compare

@skerbis skerbis released this 14 Sep 17:12

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_addon rather than plain a11y_datetime to 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 flatpickr type are migrated automatically via a new install.php (idempotent SQL update on rex_yform_field.type_name) — no manual action needed.
  • A thin deprecated shim class rex_yform_value_flatpickr is 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.php and FrontendHelper now share one asset list (FrontendHelper::assetList()) instead of two independently maintained ones.
  • Init script simplified: single CSS class detection per picker type, dead window.flatpickr fallback 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.