Perfekt ![]()
Ich habe einige Erfahrung mit der Entwicklung in anderen Umgebungen, aber ich prüfe, ob dies über eine Theme-Komponente möglich ist.
Mit ein wenig Hilfe von KI
scheint es zu funktionieren, bin mir aber nicht 100% sicher, ob dies der richtige Weg ist, dies in Discourse zu erreichen:
<script type="text/discourse-plugin" version="0.1">
api.onPageChange(() => {
try {
const isTopicPage = /^\/t\//.test(window.location.pathname);
// Nur auf Topic-Seiten ausführen
if (!isTopicPage) return;
const allowedCategories = ['ask-a-question']; // Kategorie-Slugs direkt verwenden
// Auf die Topic-Details zugreifen, um den Kategorie-Slug zu erhalten
const topic = Discourse.__container__.lookup("controller:topic");
const categorySlug = topic && topic.get("model.category.slug");
const isAllowedCategory = categorySlug && allowedCategories.includes(categorySlug);
// Funktion zum Ein- oder Ausblenden des spezifischen Emojis
const toggleReactionEmoji = () => {
const emoji = document.querySelector("[data-reaction='frog']");
if (emoji) {
emoji.style.display = isAllowedCategory ? '' : 'none';
console.log(`Emoji mit data-reaction='frog' ${isAllowedCategory ? 'angezeigt' : 'ausgeblendet'}.`);
}
};
// Erster Check, falls das Element bereits im DOM vorhanden ist
toggleReactionEmoji();
// Einen Mutationsbeobachter einrichten, um Emoji basierend auf Kategorieänderungen ein- oder auszublenden
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(node => {
if (node.nodeType === 1) { // Prüfen, ob es sich um einen Elementknoten handelt
const emoji = node.querySelector("[data-reaction='frog']");
if (emoji) {
emoji.style.display = isAllowedCategory ? '' : 'none';
console.log(`Emoji mit data-reaction='frog' in Mutation gefunden und ${isAllowedCategory ? 'angezeigt' : 'ausgeblendet'}.`);
}
}
});
});
});
// Den Body auf Änderungen der Kindknoten beobachten (z.B. Hinzufügen von Reaktionen)
observer.observe(document.body, { childList: true, subtree: true });
// Den Beobachter beim Navigieren aufräumen
api.cleanupStream(() => observer.disconnect());
} catch (error) {
console.error("Ein Fehler ist im Emoji-Umschaltungs-Skript aufgetreten:", error);
}
});
</script>