Kategoriebasierte Themen und Beitragreaktionen?

Perfekt :slight_smile:

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 :sweat_smile: 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>