Compare commits

...

11 Commits

Author SHA1 Message Date
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
Jürgen Mummert 6186a0d8bd Clean namespace to Mummert\EventManagerBundle 2026-03-08 18:01:50 +01:00
Jürgen Mummert b28c19cb46 Expose Mummert manager-plugin compatibility 2026-03-08 17:49:53 +01:00
Jürgen Mummert 9b2b87d6ba Rename package to mummert/eventmanager-bundle 2026-03-08 17:37:56 +01:00
Jürgen Mummert dbce287834 Add contao/calendar-bundle dependency 2026-03-02 21:34:29 +01:00
Jürgen Mummert 78c44d8de6 fix: default event list to grid on first load 2026-03-02 17:28:21 +01:00
Jürgen Mummert d0916e7b39 Use class-only grid activation in event filter 2026-03-01 21:57:31 +01:00
Jürgen Mummert a55df0be90 Force default grid layout in event filter initialization 2026-03-01 21:51:35 +01:00
29 changed files with 214 additions and 83 deletions
+2 -2
View File
@@ -10,7 +10,7 @@ Contao 5 Bundle für Organisations-, Veranstaltungsort- und Event-Verwaltung ink
## Installation (lokal via Composer) ## Installation (lokal via Composer)
```bash ```bash
composer require mummert-media/eventmanager-bundle composer require mummert/eventmanager-bundle
``` ```
## Installation im Contao Manager (VCS) ## Installation im Contao Manager (VCS)
@@ -18,7 +18,7 @@ composer require mummert-media/eventmanager-bundle
1. **Contao Manager****Composer****Repositories****Repository hinzufügen** 1. **Contao Manager****Composer****Repositories****Repository hinzufügen**
2. Typ: `vcs` 2. Typ: `vcs`
3. URL: `https://github.com/<owner>/eventmanager-bundle` 3. URL: `https://github.com/<owner>/eventmanager-bundle`
4. Paket hinzufügen: `mummert-media/eventmanager-bundle` 4. Paket hinzufügen: `mummert/eventmanager-bundle`
5. Bei Bedarf Version `dev-main` oder ein Tag (z. B. `1.0.0`) wählen 5. Bei Bedarf Version `dev-main` oder ein Tag (z. B. `1.0.0`) wählen
6. Änderungen anwenden 6. Änderungen anwenden
+4 -3
View File
@@ -1,5 +1,5 @@
{ {
"name": "mummert-media/eventmanager-bundle", "name": "mummert/eventmanager-bundle",
"description": "Internal Contao backend bundle for organizations, locations and event/member assignments.", "description": "Internal Contao backend bundle for organizations, locations and event/member assignments.",
"type": "contao-bundle", "type": "contao-bundle",
"license": "proprietary", "license": "proprietary",
@@ -11,16 +11,17 @@
"require": { "require": {
"php": "^8.3", "php": "^8.3",
"contao/core-bundle": "^5.7", "contao/core-bundle": "^5.7",
"contao/calendar-bundle": "^5.7",
"contao/manager-plugin": "^2.0", "contao/manager-plugin": "^2.0",
"numero2/contao-tags": "^0.5" "numero2/contao-tags": "^0.5"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"MummertMedia\\EventManagerBundle\\": "src/" "Mummert\\EventManagerBundle\\": "src/"
} }
}, },
"extra": { "extra": {
"contao-manager-plugin": "MummertMedia\\EventManagerBundle\\Contao\\Manager\\Plugin" "contao-manager-plugin": "Mummert\\EventManagerBundle\\Contao\\Manager\\Plugin"
}, },
"prefer-stable": true, "prefer-stable": true,
"config": { "config": {
+4 -4
View File
@@ -3,16 +3,16 @@ services:
autowire: true autowire: true
autoconfigure: true autoconfigure: true
MummertMedia\EventManagerBundle\: Mummert\EventManagerBundle\:
resource: ../src/ resource: ../src/
exclude: exclude:
- ../src/DependencyInjection/ - ../src/DependencyInjection/
- ../src/Contao/Manager/ - ../src/Contao/Manager/
- ../src/MummertMediaEventManagerBundle.php - ../src/EventManagerBundle.php
MummertMedia\EventManagerBundle\EventListener\DataContainer\SetDateAddedCallback: Mummert\EventManagerBundle\EventListener\DataContainer\SetDateAddedCallback:
tags: tags:
- { name: contao.callback, table: tl_organization, target: config.onbeforesubmit, method: onBeforeSubmit } - { name: contao.callback, table: tl_organization, target: config.onbeforesubmit, method: onBeforeSubmit }
- { name: contao.callback, table: tl_location, target: config.onbeforesubmit, method: onBeforeSubmit } - { name: contao.callback, table: tl_location, target: config.onbeforesubmit, method: onBeforeSubmit }
MummertMedia\EventManagerBundle\Service\MapModuleDataProvider: ~ Mummert\EventManagerBundle\Service\MapModuleDataProvider: ~
+2 -2
View File
@@ -2,8 +2,8 @@
declare(strict_types=1); declare(strict_types=1);
$GLOBALS['TL_MODELS']['tl_organization'] = MummertMedia\EventManagerBundle\Model\OrganizationModel::class; $GLOBALS['TL_MODELS']['tl_organization'] = Mummert\EventManagerBundle\Model\OrganizationModel::class;
$GLOBALS['TL_MODELS']['tl_location'] = MummertMedia\EventManagerBundle\Model\LocationModel::class; $GLOBALS['TL_MODELS']['tl_location'] = Mummert\EventManagerBundle\Model\LocationModel::class;
$GLOBALS['BE_MOD']['content']['eventmanager_organisationen'] = [ $GLOBALS['BE_MOD']['content']['eventmanager_organisationen'] = [
'tables' => ['tl_organization'], 'tables' => ['tl_organization'],
+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>
+141 -11
View File
@@ -37,6 +37,16 @@
<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>
@media (prefers-reduced-motion: no-preference) {
::view-transition-old(root),
::view-transition-new(root) {
animation-duration: 240ms;
animation-timing-function: ease;
}
}
</style>
<script type="module"> <script type="module">
const filters = document.getElementById('eventfilters'); const filters = document.getElementById('eventfilters');
@@ -46,12 +56,59 @@
const targetEventListId = filters.dataset.eventlistId || 'eventlist'; const targetEventListId = filters.dataset.eventlistId || 'eventlist';
const list = document.getElementById(targetEventListId); const list = document.getElementById(targetEventListId);
const initialStoredEventListView = (() => {
try {
return (window.localStorage.getItem('eventlist_view') || '').trim();
} catch (error) {
return '';
}
})();
const applyDefaultGrid = (targetList) => {
if (!targetList) {
return;
}
targetList.classList.add('event-filter-target-list');
targetList.classList.add('grid');
};
if (!list) { if (!list) {
console.warn(`[event_filter] Target event list #${targetEventListId} was not found.`); console.warn(`[event_filter] Target event list #${targetEventListId} was not found.`);
window.addEventListener('DOMContentLoaded', () => {
applyDefaultGrid(document.getElementById(targetEventListId));
}, { once: true });
} }
list?.classList.add('event-filter-target-list'); applyDefaultGrid(list);
window.addEventListener('DOMContentLoaded', () => {
window.setTimeout(() => {
if ('' !== initialStoredEventListView) {
return;
}
const targetList = document.getElementById(targetEventListId);
if (!targetList) {
return;
}
targetList.classList.remove('list');
applyDefaultGrid(targetList);
const toggleToList = document.getElementById('toggletolist');
const toggleToGrid = document.getElementById('toggletogrid');
toggleToList?.classList.remove('disabled');
toggleToGrid?.classList.add('disabled');
try {
window.localStorage.setItem('eventlist_view', 'grid');
} catch (error) {
}
}, 0);
}, { once: true });
const events = list ? Array.from(list.querySelectorAll(':scope > .event')) : []; const events = list ? Array.from(list.querySelectorAll(':scope > .event')) : [];
const tagSelect = filters.querySelector('#tag-filter'); const tagSelect = filters.querySelector('#tag-filter');
@@ -69,9 +126,61 @@
const animationMs = 220; const animationMs = 220;
let hideTimers = new WeakMap(); let hideTimers = new WeakMap();
const supportsViewTransitions = typeof document.startViewTransition === 'function';
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
let activeViewTransition = null;
let isViewTransitionMutation = false;
let currentFilter = { type: 'all', value: '' }; let currentFilter = { type: 'all', value: '' };
let suppressedChangeEvents = 0; let suppressedChangeEvents = 0;
const runWithLayoutTransition = (mutation) => {
if (!supportsViewTransitions || prefersReducedMotion) {
mutation();
return;
}
if (activeViewTransition) {
mutation();
return;
}
try {
const transition = document.startViewTransition(() => {
isViewTransitionMutation = true;
try {
mutation();
} finally {
isViewTransitionMutation = false;
}
});
activeViewTransition = transition;
transition.ready.catch(() => {
// Can reject when the transition is skipped.
});
transition.updateCallbackDone.catch(() => {
// Keep skipped/aborted update callbacks from surfacing as uncaught.
});
transition.finished
.catch(() => {
// Browsers can skip overlapping transitions; ignore these rejections.
})
.finally(() => {
if (activeViewTransition === transition) {
activeViewTransition = null;
}
});
} catch (error) {
mutation();
}
};
const shouldMutateVisibilityImmediately = () => supportsViewTransitions && !prefersReducedMotion;
const hasOptionValue = (selectElement, value) => { const hasOptionValue = (selectElement, value) => {
if (!selectElement) { if (!selectElement) {
return false; return false;
@@ -204,21 +313,38 @@
} }
}; };
const showEvent = (eventItem) => { const showEvent = (eventItem, { immediateVisibility = false } = {}) => {
clearHideTimer(eventItem); clearHideTimer(eventItem);
eventItem.hidden = false;
if (immediateVisibility) {
eventItem.hidden = false;
eventItem.classList.remove('is-filtered-out');
return;
}
if (eventItem.hidden) {
eventItem.hidden = false;
}
requestAnimationFrame(() => { requestAnimationFrame(() => {
eventItem.classList.remove('is-filtered-out'); eventItem.classList.remove('is-filtered-out');
}); });
}; };
const hideEvent = (eventItem) => { const hideEvent = (eventItem, { immediateVisibility = false } = {}) => {
clearHideTimer(eventItem); clearHideTimer(eventItem);
if (immediateVisibility) {
eventItem.classList.add('is-filtered-out');
eventItem.hidden = true;
return;
}
eventItem.classList.add('is-filtered-out'); eventItem.classList.add('is-filtered-out');
const timer = window.setTimeout(() => { const timer = window.setTimeout(() => {
eventItem.hidden = true; eventItem.hidden = true;
hideTimers.delete(eventItem); hideTimers.delete(eventItem);
}, animationMs); }, animationMs);
@@ -285,7 +411,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) {
@@ -310,12 +436,16 @@
currentFilter = filterState; currentFilter = filterState;
setActiveControl(filterState); setActiveControl(filterState);
events.forEach((eventItem) => { const immediateVisibility = shouldMutateVisibilityImmediately();
if (matches(eventItem, filterState)) {
showEvent(eventItem); runWithLayoutTransition(() => {
} else { events.forEach((eventItem) => {
hideEvent(eventItem); if (matches(eventItem, filterState)) {
} showEvent(eventItem, { immediateVisibility });
} else {
hideEvent(eventItem, { immediateVisibility });
}
});
}); });
updateStatus(filterState); updateStatus(filterState);
@@ -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>
+3 -3
View File
@@ -2,21 +2,21 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Contao\Manager; namespace Mummert\EventManagerBundle\Contao\Manager;
use Contao\CalendarBundle\ContaoCalendarBundle; use Contao\CalendarBundle\ContaoCalendarBundle;
use Contao\CoreBundle\ContaoCoreBundle; use Contao\CoreBundle\ContaoCoreBundle;
use Contao\ManagerPlugin\Bundle\BundlePluginInterface; use Contao\ManagerPlugin\Bundle\BundlePluginInterface;
use Contao\ManagerPlugin\Bundle\Config\BundleConfig; use Contao\ManagerPlugin\Bundle\Config\BundleConfig;
use Contao\ManagerPlugin\Bundle\Parser\ParserInterface; use Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
use MummertMedia\EventManagerBundle\MummertMediaEventManagerBundle; use Mummert\EventManagerBundle\EventManagerBundle;
class Plugin implements BundlePluginInterface class Plugin implements BundlePluginInterface
{ {
public function getBundles(ParserInterface $parser): iterable public function getBundles(ParserInterface $parser): iterable
{ {
return [ return [
BundleConfig::create(MummertMediaEventManagerBundle::class) BundleConfig::create(EventManagerBundle::class)
->setLoadAfter([ContaoCoreBundle::class, ContaoCalendarBundle::class]), ->setLoadAfter([ContaoCoreBundle::class, ContaoCalendarBundle::class]),
]; ];
} }
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Controller\Frontend; namespace Mummert\EventManagerBundle\Controller\Frontend;
use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController; use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule; use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
@@ -13,8 +13,8 @@ use Contao\FrontendUser;
use Contao\ModuleModel; use Contao\ModuleModel;
use Contao\PageModel; use Contao\PageModel;
use Contao\StringUtil; use Contao\StringUtil;
use MummertMedia\EventManagerBundle\Form\EventType; use Mummert\EventManagerBundle\Form\EventType;
use MummertMedia\EventManagerBundle\Service\EventRepository; use Mummert\EventManagerBundle\Service\EventRepository;
use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Controller\Frontend; namespace Mummert\EventManagerBundle\Controller\Frontend;
use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController; use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule; use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Controller\Frontend; namespace Mummert\EventManagerBundle\Controller\Frontend;
use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController; use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule; use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
@@ -10,7 +10,7 @@ use Contao\CoreBundle\Twig\FragmentTemplate;
use Contao\ModuleModel; use Contao\ModuleModel;
use Contao\PageModel; use Contao\PageModel;
use Contao\StringUtil; use Contao\StringUtil;
use MummertMedia\EventManagerBundle\Service\MapModuleDataProvider; use Mummert\EventManagerBundle\Service\MapModuleDataProvider;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Controller\Frontend; namespace Mummert\EventManagerBundle\Controller\Frontend;
use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController; use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule; use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
@@ -11,7 +11,7 @@ use Contao\FrontendUser;
use Contao\ModuleModel; use Contao\ModuleModel;
use Contao\PageModel; use Contao\PageModel;
use Contao\StringUtil; use Contao\StringUtil;
use MummertMedia\EventManagerBundle\Service\EventRepository; use Mummert\EventManagerBundle\Service\EventRepository;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Controller\Frontend; namespace Mummert\EventManagerBundle\Controller\Frontend;
use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController; use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule; use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
@@ -11,7 +11,7 @@ use Contao\FrontendUser;
use Contao\ModuleModel; use Contao\ModuleModel;
use Contao\PageModel; use Contao\PageModel;
use Contao\StringUtil; use Contao\StringUtil;
use MummertMedia\EventManagerBundle\Service\OrganizationRepository; use Mummert\EventManagerBundle\Service\OrganizationRepository;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Controller\Frontend; namespace Mummert\EventManagerBundle\Controller\Frontend;
use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController; use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule; use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
@@ -13,8 +13,8 @@ use Contao\FrontendUser;
use Contao\ModuleModel; use Contao\ModuleModel;
use Contao\PageModel; use Contao\PageModel;
use Contao\StringUtil; use Contao\StringUtil;
use MummertMedia\EventManagerBundle\Form\OrganizationType; use Mummert\EventManagerBundle\Form\OrganizationType;
use MummertMedia\EventManagerBundle\Service\OrganizationRepository; use Mummert\EventManagerBundle\Service\OrganizationRepository;
use Symfony\Component\HttpFoundation\File\UploadedFile; use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@@ -2,14 +2,14 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\DependencyInjection; namespace Mummert\EventManagerBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
class MummertMediaEventManagerExtension extends Extension class EventManagerExtension extends Extension
{ {
public function load(array $configs, ContainerBuilder $container): void public function load(array $configs, ContainerBuilder $container): void
{ {
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\EventListener\DataContainer; namespace Mummert\EventManagerBundle\EventListener\DataContainer;
use Contao\DataContainer; use Contao\DataContainer;
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\EventListener; namespace Mummert\EventManagerBundle\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook; use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\StringUtil; use Contao\StringUtil;
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\EventListener; namespace Mummert\EventManagerBundle\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook; use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\Module; use Contao\Module;
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\EventListener; namespace Mummert\EventManagerBundle\EventListener;
use Contao\CoreBundle\DependencyInjection\Attribute\AsHook; use Contao\CoreBundle\DependencyInjection\Attribute\AsHook;
use Contao\StringUtil; use Contao\StringUtil;
@@ -2,11 +2,11 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle; namespace Mummert\EventManagerBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\HttpKernel\Bundle\Bundle;
class MummertMediaEventManagerBundle extends Bundle class EventManagerBundle extends Bundle
{ {
public function getPath(): string public function getPath(): string
{ {
+1 -1
View File
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Form; namespace Mummert\EventManagerBundle\Form;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
+1 -1
View File
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Form; namespace Mummert\EventManagerBundle\Form;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
+1 -1
View File
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Model; namespace Mummert\EventManagerBundle\Model;
use Contao\Model; use Contao\Model;
+1 -1
View File
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Model; namespace Mummert\EventManagerBundle\Model;
use Contao\Model; use Contao\Model;
+1 -1
View File
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Service; namespace Mummert\EventManagerBundle\Service;
use Doctrine\DBAL\Connection; use Doctrine\DBAL\Connection;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;
+1 -1
View File
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Service; namespace Mummert\EventManagerBundle\Service;
use Contao\CalendarEventsModel; use Contao\CalendarEventsModel;
use Contao\CoreBundle\Framework\ContaoFramework; use Contao\CoreBundle\Framework\ContaoFramework;
+1 -1
View File
@@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace MummertMedia\EventManagerBundle\Service; namespace Mummert\EventManagerBundle\Service;
use Doctrine\DBAL\Connection; use Doctrine\DBAL\Connection;
use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\ParameterType;