Se vuoi mostrare il pulsante “Crea evento” direttamente dall’editor come mostrato di seguito, usa il codice seguente nell’intestazione del tuo tema. admin > aspetto > tema > modifica > modifica codice > head (assicurati che sia posizionato tra i tag <head>)
Testato su discourse 3.5.0.beta9-dev su desktop in firefox
<!-- Pulsante Crea Evento Personalizzato (Basato su Icona, Indipendente dalla Lingua) -->
<script>
(() => {
const composerSelector = ".d-editor-button-bar";
const menuTriggerSelector = ".btn.no-text.fk-d-menu__trigger.toolbar-menu__options-trigger.toolbar__button.options.toolbar-popup-menu-options";
const menuContentSelector = ".fk-d-menu__inner-content";
const menuModalSelector = ".d-modal.fk-d-menu-modal";
// Funzione per trovare il pulsante del calendario nell'editor
const findCalendarButton = (editor) => {
const calendarIcon = editor.querySelector('svg use[href="#calendar-day"]');
return calendarIcon ? calendarIcon.closest("button") : null;
};
// Funzione per attendere che un elemento sia presente nel DOM
const waitForElement = (selector, getElementFn, timeout = 4000) =>
new Promise((resolve, reject) => {
const element = getElementFn(selector);
if (element) return resolve(element);
const observer = new MutationObserver(() => {
const foundElement = getElementFn(selector);
if (foundElement) {
observer.disconnect();
resolve(foundElement);
}
});
observer.observe(document.body, { childList: true, subtree: true });
setTimeout(() => {
observer.disconnect();
reject(new Error("Timeout waiting for element"));
}, timeout);
});
// Funzione per attendere che la modale del menu si apra
const waitForMenuModal = (timeout = 4000) => {
const observer = new MutationObserver(() => {
if (document.querySelector(menuModalSelector)) {
observer.disconnect();
}
});
observer.observe(document.body, { childList: true, subtree: true });
setTimeout(() => observer.disconnect(), timeout);
};
// Funzione per aggiungere il pulsante "Crea evento" personalizzato
const addCustomCreateEventButton = (editor) => {
if (editor.querySelector(".custom-create-event-btn")) return;
const newButton = document.createElement("button");
newButton.className = "btn no-text btn-icon toolbar__button link custom-create-event-btn";
newButton.title = "Create event";
newButton.innerHTML = `
<svg class="fa d-icon d-icon-calendar-day svg-icon">
<use href="#calendar-day"></use>
</svg>
`;
editor.appendChild(newButton);
newButton.addEventListener("click", async () => {
const trigger = document.querySelector(menuTriggerSelector);
if (!trigger) return;
trigger.click();
let menuContent = document.querySelector(menuContentSelector);
if (!menuContent) {
await new Promise((resolve, reject) => {
const c = new MutationObserver(() => {
menuContent = document.querySelector(menuContentSelector);
if (menuContent) {
c.disconnect();
resolve();
}
});
c.observe(document.body, { childList: true, subtree: true });
setTimeout(() => {
c.disconnect();
reject(new Error("Timeout waiting for menu content"));
}, 2000);
});
}
try {
(await waitForElement(menuContentSelector, (sel) => document.querySelector(sel))).click();
waitForMenuModal();
} catch (error) {
console.error("Error clicking create event option:", error);
}
});
};
// Osserva le mutazioni del DOM per trovare il composer e aggiungere il pulsante
const observer = new MutationObserver(() => {
const composer = document.querySelector(composerSelector);
if (composer) {
addCustomCreateEventButton(composer);
}
});
observer.observe(document.body, { childList: true, subtree: true });
// Aggiungi il pulsante se il composer è già presente al caricamento della pagina
const initialComposer = document.querySelector(composerSelector);
if (initialComposer) {
addCustomCreateEventButton(initialComposer);
}
})();
</script>
