Machen Sie die „Zum Kalender hinzufügen"-Schaltfläche in der Event-Benutzeroberfläche auffälliger

Während ich mit diesem Kontextmenü herumexperimentiere, frage ich mich, ob die Option „Zum Kalender hinzufügen

2 „Gefällt mir“

In Veranstaltungsbeiträgen platziere ich die Option „Zum Kalender hinzufügen“ an einer offensichtlichen Stelle. Sie können dies zum JavaScript-Header des Themes hinzufügen, der über das Menü „Darstellung“ im Adminbereich erreichbar ist:

<script>
(() => {
    const eventInfoSelector = ".event-header .event-info";
    const submenuButtonSelector = "button.fk-d-menu__trigger.discourse-post-event-more-menu-trigger";
    const menuContentSelector = ".fk-d-menu__inner-content";
    const addToCalendarSelector = "li.add-to-calendar > button";

    // Inline-CSS hinzufügen, um Text und Icon beim Hovern schwarz zu halten
    const style = document.createElement("style");
    style.innerHTML = `
    .btn.btn-icon-text.custom-add-to-calendar-btn,
    .btn.btn-icon-text.custom-add-to-calendar-btn:hover {
        color: black !important;
    }
    .btn.btn-icon-text.custom-add-to-calendar-btn svg,
    .btn.btn-icon-text.custom-add-to-calendar-btn:hover svg {
        fill: black !important;
    }
    `;
    document.head.appendChild(style);

    // Hilfsfunktion, um auf ein Element im DOM zu warten
    const waitForElement = (selector, timeout = 3000) => {
        return new Promise((resolve, reject) => {
            const el = document.querySelector(selector);
            if (el) return resolve(el);

            const observer = new MutationObserver(() => {
                const found = document.querySelector(selector);
                if (found) {
                    observer.disconnect();
                    resolve(found);
                }
            });
            observer.observe(document.body, { childList: true, subtree: true });
            setTimeout(() => {
                observer.disconnect();
                reject();
            }, timeout);
        });
    };

    const createAddToCalendarButton = async () => {
        const eventInfo = document.querySelector(eventInfoSelector);
        if (!eventInfo || eventInfo.querySelector(".custom-add-to-calendar-btn")) return;

        const button = document.createElement("button");
        button.className = "btn btn-icon-text custom-add-to-calendar-btn";
        button.title = "Zum Kalender hinzufügen";
        button.innerHTML = `
            <svg class="fa d-icon d-icon-file svg-icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg">
                <use href="#file"></use>
            </svg>
            <span class="d-button-label">Zum Kalender hinzufügen</span>
        `;

        // Inline-Styles für Linksbündigkeit
        button.style.display = "inline-flex";
        button.style.justifyContent = "flex-start";
        button.style.marginLeft = "0";
        button.style.marginBottom = "4px";
        button.style.backgroundColor = "#f0f0f0";
        button.style.borderRadius = "6px";
        button.style.transition = "transform 0.2s";
        button.style.cursor = "pointer";

        // Klick-Logik: Menü öffnen und ursprünglichen "Zum Kalender hinzufügen"-Button auslösen
        button.addEventListener("click", async () => {
            const submenuButton = document.querySelector(submenuButtonSelector);
            if (!submenuButton) return;
            submenuButton.click(); // Menü öffnen

            let menuContent;
            try {
                menuContent = await waitForElement(menuContentSelector, 2000);
            } catch {
                return;
            }

            const originalButton = menuContent.querySelector(addToCalendarSelector);
            originalButton?.click();
        });

        // In event-info einfügen
        if (eventInfo.firstElementChild) {
            eventInfo.insertBefore(button, eventInfo.firstElementChild.nextSibling);
        } else {
            eventInfo.appendChild(button);
        }
    };

    // DOM-Änderungen beobachten (Ember-sicher)
    const observer = new MutationObserver(() => createAddToCalendarButton());
    observer.observe(document.body, { childList: true, subtree: true });

    // Erster Versuch
    createAddToCalendarButton();
})();
</script>
1 „Gefällt mir“

Ich habe das Skript ausprobiert, aber es öffnet sich das Kontextmenü und nicht die Funktion „Zum Kalender hinzufügen

Ich denke, du hast recht, wir müssen die Bedienung vereinfachen und uns auf das Wesentliche konzentrieren, um unnötige Klicks zu vermeiden.

1 „Gefällt mir“