是否可以为特定类别设置主题和帖子的反应?
我没有找到现成的解决方案,也没有找到现有的组件。
如果目前不可能,那么实现类似功能的步骤是什么?
是否可以为特定类别设置主题和帖子的反应?
我没有找到现成的解决方案,也没有找到现有的组件。
如果目前不可能,那么实现类似功能的步骤是什么?
太棒了 ![]()
我在其他环境中也有一些开发经验,但正在探索是否可以通过主题组件来实现。
在 AI 的一点帮助下
我似乎已经让它工作了,但不太确定这是否是实现 Discourse 的正确方式:
<script type="text/discourse-plugin" version="0.1">
api.onPageChange(() => {
try {
const isTopicPage = /^\/t\//.test(window.location.pathname);
// Only run on topic pages
if (!isTopicPage) return;
const allowedCategories = ['ask-a-question']; // Use category slugs directly
// Access the topic details to get the category slug
const topic = Discourse.__container__.lookup("controller:topic");
const categorySlug = topic && topic.get("model.category.slug");
const isAllowedCategory = categorySlug && allowedCategories.includes(categorySlug);
// Function to hide or show the specific emoji
const toggleReactionEmoji = () => {
const emoji = document.querySelector("[data-reaction='frog']");
if (emoji) {
emoji.style.display = isAllowedCategory ? '' : 'none';
console.log(`Emoji with data-reaction='frog' ${isAllowedCategory ? 'shown' : 'hidden'}.`);
}
};
// Initial check in case the element is already in the DOM
toggleReactionEmoji();
// Set up a mutation observer to hide/show emoji based on category changes
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(node => {
if (node.nodeType === 1) { // Check if it's an element node
const emoji = node.querySelector("[data-reaction='frog']");
if (emoji) {
emoji.style.display = isAllowedCategory ? '' : 'none';
console.log(`Emoji with data-reaction='frog' found in mutation and ${isAllowedCategory ? 'shown' : 'hidden'}.`);
}
}
});
});
});
// Observe the body for child list changes (e.g., reactions being added)
observer.observe(document.body, { childList: true, subtree: true });
// Clean up the observer when navigating away
api.cleanupStream(() => observer.disconnect());
} catch (error) {
console.error("An error occurred in the emoji toggle script:", error);
}
});
</script>