Compare commits

..

7 Commits

Author SHA1 Message Date
Jürgen Mummert 7541c12f66 Add subtle hidden-based event filter animation 2026-04-05 14:01:30 +02:00
Jürgen Mummert e8fd218c74 Remove view transitions and restore hidden-only event filtering 2026-04-05 13:58:54 +02:00
Jürgen Mummert 5f652530ed Scope view transitions to event list and prevent page shift 2026-04-05 13:55:44 +02:00
Jürgen Mummert 11b927b91f Fix event filter transition jank and restore layout animation 2026-04-05 13:46:00 +02:00
Jürgen Mummert e1a426bde4 Handle skipped view transition promises in event filter 2026-04-05 13:40:57 +02:00
Jürgen Mummert 8a422aa4ee Add view transitions for event filter layout animation 2026-04-05 13:36:58 +02:00
Jürgen Mummert f014595bc5 Fix eventmanager asset paths and remove legacy bundle class 2026-03-08 18:22:59 +01:00
5 changed files with 48 additions and 32 deletions
+14 -14
View File
@@ -17,8 +17,8 @@
<script src="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.min.js"></script> <script src="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.min.js"></script>
<script src="https://unpkg.com/filepond-plugin-image-resize/dist/filepond-plugin-image-resize.min.js"></script> <script src="https://unpkg.com/filepond-plugin-image-resize/dist/filepond-plugin-image-resize.min.js"></script>
<script src="https://unpkg.com/filepond-plugin-image-transform/dist/filepond-plugin-image-transform.min.js"></script> <script src="https://unpkg.com/filepond-plugin-image-transform/dist/filepond-plugin-image-transform.min.js"></script>
<script type="module" src="{{ asset('bundles/mummertmediaeventmanager/editor.js') }}?v=1"></script> <script type="module" src="{{ asset('bundles/eventmanager/editor.js') }}?v=1"></script>
<script src="{{ asset('bundles/mummertmediaeventmanager/editor-fallback.js') }}?v=1"></script> <script src="{{ asset('bundles/eventmanager/editor-fallback.js') }}?v=1"></script>
{{ form_start(form, { action: app.request.uri, attr: { 'aria-live': 'polite' } }) }} {{ form_start(form, { action: app.request.uri, attr: { 'aria-live': 'polite' } }) }}
<input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}"> <input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}">
@@ -78,51 +78,51 @@
aria-controls="{{ form.teaser.vars.id }}-editor" aria-controls="{{ form.teaser.vars.id }}-editor"
> >
<button type="button" data-action="paragraph" title="Absatz"> <button type="button" data-action="paragraph" title="Absatz">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/paragraph.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/paragraph.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Absatz</span> <span class="visually-hidden">Absatz</span>
</button> </button>
<button type="button" data-action="h2" title="Überschrift H2"> <button type="button" data-action="h2" title="Überschrift H2">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/h2.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/h2.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">H2</span> <span class="visually-hidden">H2</span>
</button> </button>
<button type="button" data-action="h3" title="Überschrift H3"> <button type="button" data-action="h3" title="Überschrift H3">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/h3.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/h3.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">H3</span> <span class="visually-hidden">H3</span>
</button> </button>
<button type="button" data-action="bold" title="Fett (Strg/Cmd+B)" aria-keyshortcuts="Control+B Meta+B"> <button type="button" data-action="bold" title="Fett (Strg/Cmd+B)" aria-keyshortcuts="Control+B Meta+B">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/bold.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/bold.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Fett</span> <span class="visually-hidden">Fett</span>
</button> </button>
<button type="button" data-action="italic" title="Kursiv (Strg/Cmd+I)" aria-keyshortcuts="Control+I Meta+I"> <button type="button" data-action="italic" title="Kursiv (Strg/Cmd+I)" aria-keyshortcuts="Control+I Meta+I">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/italic.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/italic.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Kursiv</span> <span class="visually-hidden">Kursiv</span>
</button> </button>
<button type="button" data-action="underline" title="Unterstrichen (Strg/Cmd+U)" aria-keyshortcuts="Control+U Meta+U"> <button type="button" data-action="underline" title="Unterstrichen (Strg/Cmd+U)" aria-keyshortcuts="Control+U Meta+U">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/underline.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/underline.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Unterstrichen</span> <span class="visually-hidden">Unterstrichen</span>
</button> </button>
<button type="button" data-action="bulletList" title="Liste"> <button type="button" data-action="bulletList" title="Liste">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/ul.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/ul.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Liste</span> <span class="visually-hidden">Liste</span>
</button> </button>
<button type="button" data-action="orderedList" title="Nummerierte Liste"> <button type="button" data-action="orderedList" title="Nummerierte Liste">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/ol.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/ol.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Nummerierte Liste</span> <span class="visually-hidden">Nummerierte Liste</span>
</button> </button>
<button type="button" data-action="indent" title="Einzug vergrößern"> <button type="button" data-action="indent" title="Einzug vergrößern">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/indent.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/indent.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Einzug vergrößern</span> <span class="visually-hidden">Einzug vergrößern</span>
</button> </button>
<button type="button" data-action="outdent" title="Einzug verkleinern"> <button type="button" data-action="outdent" title="Einzug verkleinern">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/outdent.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/outdent.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Einzug verkleinern</span> <span class="visually-hidden">Einzug verkleinern</span>
</button> </button>
<button type="button" data-action="undo" title="Rückgängig (Strg/Cmd+Z)" aria-keyshortcuts="Control+Z Meta+Z"> <button type="button" data-action="undo" title="Rückgängig (Strg/Cmd+Z)" aria-keyshortcuts="Control+Z Meta+Z">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/undo.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/undo.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Rückgängig</span> <span class="visually-hidden">Rückgängig</span>
</button> </button>
<button type="button" data-action="redo" title="Wiederholen (Strg/Cmd+Shift+Z)" aria-keyshortcuts="Control+Shift+Z Meta+Shift+Z"> <button type="button" data-action="redo" title="Wiederholen (Strg/Cmd+Shift+Z)" aria-keyshortcuts="Control+Shift+Z Meta+Shift+Z">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/redo.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/redo.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Wiederholen</span> <span class="visually-hidden">Wiederholen</span>
</button> </button>
</div> </div>
@@ -37,6 +37,22 @@
<p id="eventfilter-status" class="visually-hidden" aria-live="polite"></p> <p id="eventfilter-status" class="visually-hidden" aria-live="polite"></p>
</div> </div>
<style>
.event-filter-target-list > .event {
opacity: 1;
transform: translateY(0);
transition: opacity 180ms ease, transform 180ms ease;
transition-behavior: allow-discrete;
will-change: opacity, transform;
}
.event-filter-target-list > .event.is-filtered-out {
opacity: 0;
transform: translateY(6px);
pointer-events: none;
}
</style>
<script type="module"> <script type="module">
const filters = document.getElementById('eventfilters'); const filters = document.getElementById('eventfilters');
@@ -114,7 +130,7 @@
const stateStorageKey = 'event-filter-state'; const stateStorageKey = 'event-filter-state';
const stateQueryKey = 'event_filter'; const stateQueryKey = 'event_filter';
const animationMs = 220; const animationMs = 180;
let hideTimers = new WeakMap(); let hideTimers = new WeakMap();
let currentFilter = { type: 'all', value: '' }; let currentFilter = { type: 'all', value: '' };
let suppressedChangeEvents = 0; let suppressedChangeEvents = 0;
@@ -332,7 +348,7 @@
return; return;
} }
const visibleCount = events.filter((eventItem) => !eventItem.hidden).length; const visibleCount = events.filter((eventItem) => matches(eventItem, filterState)).length;
let filterText = 'alle'; let filterText = 'alle';
if (filterState.type === 'tag' && tagSelect) { if (filterState.type === 'tag' && tagSelect) {
@@ -85,4 +85,4 @@
></div> ></div>
<script type="application/json" id="{{ mapDataElementId|e('html_attr') }}">{{ mapItemsJson|raw }}</script> <script type="application/json" id="{{ mapDataElementId|e('html_attr') }}">{{ mapItemsJson|raw }}</script>
<script type="module" src="/bundles/mummertmediaeventmanager/assets/map-module.js?v=20260227b"></script> <script type="module" src="/bundles/eventmanager/assets/map-module.js?v=20260227b"></script>
@@ -56,7 +56,7 @@
</form> </form>
{% endif %} {% endif %}
<script src="/bundles/mummertmediaeventmanager/assets/member-events-confirm.js?v=20260301a"></script> <script src="/bundles/eventmanager/assets/member-events-confirm.js?v=20260301a"></script>
<h2>Vergangene Veranstaltungen</h2> <h2>Vergangene Veranstaltungen</h2>
{% if pastEvents is empty %} {% if pastEvents is empty %}
@@ -11,8 +11,8 @@
<script src="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.min.js"></script> <script src="https://unpkg.com/filepond-plugin-image-preview/dist/filepond-plugin-image-preview.min.js"></script>
<script src="https://unpkg.com/filepond-plugin-image-resize/dist/filepond-plugin-image-resize.min.js"></script> <script src="https://unpkg.com/filepond-plugin-image-resize/dist/filepond-plugin-image-resize.min.js"></script>
<script src="https://unpkg.com/filepond-plugin-image-transform/dist/filepond-plugin-image-transform.min.js"></script> <script src="https://unpkg.com/filepond-plugin-image-transform/dist/filepond-plugin-image-transform.min.js"></script>
<script type="module" src="{{ asset('bundles/mummertmediaeventmanager/editor.js') }}?v=1"></script> <script type="module" src="{{ asset('bundles/eventmanager/editor.js') }}?v=1"></script>
<script src="{{ asset('bundles/mummertmediaeventmanager/editor-fallback.js') }}?v=1"></script> <script src="{{ asset('bundles/eventmanager/editor-fallback.js') }}?v=1"></script>
{{ form_start(form, { attr: { 'aria-live': 'polite' } }) }} {{ form_start(form, { attr: { 'aria-live': 'polite' } }) }}
<input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}"> <input type="hidden" name="REQUEST_TOKEN" value="{{ requestToken }}">
@@ -39,51 +39,51 @@
aria-controls="{{ form.description.vars.id }}-editor" aria-controls="{{ form.description.vars.id }}-editor"
> >
<button type="button" data-action="paragraph" title="Absatz"> <button type="button" data-action="paragraph" title="Absatz">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/paragraph.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/paragraph.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Absatz</span> <span class="visually-hidden">Absatz</span>
</button> </button>
<button type="button" data-action="h2" title="Überschrift H2"> <button type="button" data-action="h2" title="Überschrift H2">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/h2.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/h2.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">H2</span> <span class="visually-hidden">H2</span>
</button> </button>
<button type="button" data-action="h3" title="Überschrift H3"> <button type="button" data-action="h3" title="Überschrift H3">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/h3.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/h3.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">H3</span> <span class="visually-hidden">H3</span>
</button> </button>
<button type="button" data-action="bold" title="Fett (Strg/Cmd+B)" aria-keyshortcuts="Control+B Meta+B"> <button type="button" data-action="bold" title="Fett (Strg/Cmd+B)" aria-keyshortcuts="Control+B Meta+B">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/bold.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/bold.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Fett</span> <span class="visually-hidden">Fett</span>
</button> </button>
<button type="button" data-action="italic" title="Kursiv (Strg/Cmd+I)" aria-keyshortcuts="Control+I Meta+I"> <button type="button" data-action="italic" title="Kursiv (Strg/Cmd+I)" aria-keyshortcuts="Control+I Meta+I">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/italic.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/italic.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Kursiv</span> <span class="visually-hidden">Kursiv</span>
</button> </button>
<button type="button" data-action="underline" title="Unterstrichen (Strg/Cmd+U)" aria-keyshortcuts="Control+U Meta+U"> <button type="button" data-action="underline" title="Unterstrichen (Strg/Cmd+U)" aria-keyshortcuts="Control+U Meta+U">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/underline.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/underline.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Unterstrichen</span> <span class="visually-hidden">Unterstrichen</span>
</button> </button>
<button type="button" data-action="bulletList" title="Liste"> <button type="button" data-action="bulletList" title="Liste">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/ul.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/ul.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Liste</span> <span class="visually-hidden">Liste</span>
</button> </button>
<button type="button" data-action="orderedList" title="Nummerierte Liste"> <button type="button" data-action="orderedList" title="Nummerierte Liste">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/ol.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/ol.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Nummerierte Liste</span> <span class="visually-hidden">Nummerierte Liste</span>
</button> </button>
<button type="button" data-action="indent" title="Einzug vergrößern"> <button type="button" data-action="indent" title="Einzug vergrößern">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/indent.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/indent.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Einzug vergrößern</span> <span class="visually-hidden">Einzug vergrößern</span>
</button> </button>
<button type="button" data-action="outdent" title="Einzug verkleinern"> <button type="button" data-action="outdent" title="Einzug verkleinern">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/outdent.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/outdent.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Einzug verkleinern</span> <span class="visually-hidden">Einzug verkleinern</span>
</button> </button>
<button type="button" data-action="undo" title="Rückgängig (Strg/Cmd+Z)" aria-keyshortcuts="Control+Z Meta+Z"> <button type="button" data-action="undo" title="Rückgängig (Strg/Cmd+Z)" aria-keyshortcuts="Control+Z Meta+Z">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/undo.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/undo.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Rückgängig</span> <span class="visually-hidden">Rückgängig</span>
</button> </button>
<button type="button" data-action="redo" title="Wiederholen (Strg/Cmd+Shift+Z)" aria-keyshortcuts="Control+Shift+Z Meta+Shift+Z"> <button type="button" data-action="redo" title="Wiederholen (Strg/Cmd+Shift+Z)" aria-keyshortcuts="Control+Shift+Z Meta+Shift+Z">
<img src="{{ asset('bundles/mummertmediaeventmanager/icons/redo.svg') }}" alt="" aria-hidden="true"> <img src="{{ asset('bundles/eventmanager/icons/redo.svg') }}" alt="" aria-hidden="true">
<span class="visually-hidden">Wiederholen</span> <span class="visually-hidden">Wiederholen</span>
</button> </button>
</div> </div>