カテゴリ固有のトピックと投稿のリアクションは可能ですか?
標準機能や既存のコンポーネントでは見つかりません。
現在不可能であれば、これを実現するための手順はどのようなものになりますか?
カテゴリ固有のトピックと投稿のリアクションは可能ですか?
標準機能や既存のコンポーネントでは見つかりません。
現在不可能であれば、これを実現するための手順はどのようなものになりますか?
完璧です ![]()
他の環境での開発経験はありますが、テーマコンポーネント経由で可能かどうかを検討しています。
AI
の助けを借りて、動作しているようですが、Discourseでこれを達成する方法としてこれが正確かどうかは100%確信が持てません。
<script type="text/discourse-plugin" version="0.1">
api.onPageChange(() => {
try {
const isTopicPage = /^\/t\//.test(window.location.pathname);
// トピックページでのみ実行
if (!isTopicPage) return;
const allowedCategories = ['ask-a-question']; // カテゴリスラッグを直接使用
// トピックの詳細にアクセスしてカテゴリ スラッグを取得
const topic = Discourse.__container__.lookup("controller:topic");
const categorySlug = topic && topic.get("model.category.slug");
const isAllowedCategory = categorySlug && allowedCategories.includes(categorySlug);
// 特定の絵文字を非表示または表示する関数
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'}.`);
}
};
// 要素が既にDOMにある場合に備えて、初期チェックを実行
toggleReactionEmoji();
// カテゴリの変更に基づいて絵文字を非表示/表示するためのミューテーションオブザーバーを設定
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(node => {
if (node.nodeType === 1) { // 要素ノードかどうかを確認
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'}.`);
}
}
});
});
});
// 反応が追加された場合などの子リストの変更を監視するために body を監視
observer.observe(document.body, { childList: true, subtree: true });
// ナビゲーションを離れる際にオブザーバーをクリーンアップ
api.cleanupStream(() => observer.disconnect());
} catch (error) {
console.error("An error occurred in the emoji toggle script:", error);
}
});
</script>