Est-il possible d’avoir des réactions spécifiques aux sujets et aux publications par catégorie ?
Je ne trouve rien d’emblée et aucun composant existant.
Si ce n’est pas possible actuellement, quelles seraient les étapes pour y parvenir ?
Est-il possible d’avoir des réactions spécifiques aux sujets et aux publications par catégorie ?
Je ne trouve rien d’emblée et aucun composant existant.
Si ce n’est pas possible actuellement, quelles seraient les étapes pour y parvenir ?
Salut Noah,
Tu as raison, il n’y a actuellement aucun moyen d’afficher différentes réactions pour les publications/sujets en fonction d’une certaine catégorie.
Ton meilleur recours est de demander dans Marketplace
Parfait ![]()
J’ai de l’expérience en développement dans d’autres environnements, mais j’explore s’il est possible de le faire via un composant de thème.
Avec un peu d’aide de l’IA
, je semble y être parvenu, mais je ne suis pas tout à fait sûr que ce soit la bonne façon de procéder dans Discourse :
<script type="text/discourse-plugin" version="0.1">
api.onPageChange(() => {
try {
const isTopicPage = /^\/t\//.test(window.location.pathname);
// Exécuter uniquement sur les pages de sujets
if (!isTopicPage) return;
const allowedCategories = ['ask-a-question']; // Utiliser directement les slugs de catégorie
// Accéder aux détails du sujet pour obtenir le slug de la catégorie
const topic = Discourse.__container__.lookup("controller:topic");
const categorySlug = topic && topic.get("model.category.slug");
const isAllowedCategory = categorySlug && allowedCategories.includes(categorySlug);
// Fonction pour masquer ou afficher l'emoji spécifique
const toggleReactionEmoji = () => {
const emoji = document.querySelector("[data-reaction='frog']");
if (emoji) {
emoji.style.display = isAllowedCategory ? '' : 'none';
console.log(`Emoji avec data-reaction='frog' ${isAllowedCategory ? 'affiché' : 'masqué'}.`);
}
};
// Vérification initiale au cas où l'élément serait déjà dans le DOM
toggleReactionEmoji();
// Configurer un observateur de mutations pour masquer/afficher l'emoji en fonction des changements de catégorie
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === 1) { // Vérifier s'il s'agit d'un nœud d'élément
const emoji = node.querySelector("[data-reaction='frog']");
if (emoji) {
emoji.style.display = isAllowedCategory ? '' : 'none';
console.log(`Emoji avec data-reaction='frog' trouvé dans la mutation et ${isAllowedCategory ? 'affiché' : 'masqué'}.`);
}
}
});
});
});
// Observer le corps pour les changements de liste d'enfants (par exemple, l'ajout de réactions)
observer.observe(document.body, { childList: true, subtree: true });
// Nettoyer l'observateur lors de la navigation
api.cleanupStream(() => observer.disconnect());
} catch (error) {
console.error("Une erreur s'est produite dans le script de basculement d'emoji :", error);
}
});
</script>