「新しいトピック」ボタンをクリックしても、新しいトピックフォームがすぐに表示されません。代わりに、フォーラム内のスレッドのいずれかを選択した後にフォームが表示されます。バックグラウンドで表示されているように見えますが、新しいトピックを作成しているようです。既存のトピックをいずれかを開くと、作成しようとしていた新しいトピックが表示されます(完全に正しく、つまり、意図したフォーラムに投稿され、入力したトピックが別のフォーラムにある場合でも)。
セーフモードで発生しますか?
セーフモードでは再現しません。カスタムテーマ/CSSが原因でこの問題が発生しています。
管理者は次のような CSS カスタマイズを追加しました。
body:not([class*="category-council-"]):not(.staff).closed-topic .reply,
body:not([class*="category-council-"]):not(.staff).closed-topic #topic-footer-buttons .create,
body:not([class*="category-council-"]):not(.staff).closed-topic .timeline-container .create,
body:not([class*="category-council-"]):not(.staff).closed-topic #reply-control {
display: none !important;
}
一見問題ないように見えますが、トピックリストに body.closed-topic が適用されていることがわかりました。これは全く意味がありません。
このクラスはデフォルトでは Discourse に存在しないため、別のカスタマイズを探す必要があります…
<script type="text/discourse-plugin" version="0.8">
const container = Discourse.__container__;
const controller = container.lookup("controller:topic");
const currentUser = api.getCurrentUser();
api.onPageChange(() => {
if (!currentUser || currentUser.admin || currentUser.moderator || currentUser.trust_level != 4 ) {
return;
} else {
let model = controller.get("model");
document.querySelector("body").classList.add("closed-topic");
if (model) {
if (!model.closed) {
document.querySelector("body").classList.remove("closed-topic");
}
}
}
});
</script>
ここでは、ログインしていて、管理者でもモデレーターでもなく、トラストレベルが 4 の場合、closed-topic クラスがページの body に追加されます。
このクラスは model.closed が false の場合にのみ削除されます。つまり、トピックが閉じられていない場合(あるいはトピックですらない場合)でも closed-topic クラスが適用されてしまいます。
この行:
document.querySelector("body").classList.add("closed-topic");
model が存在しない場合(例えば、トピック内にいない場合)でも適用されるため、if (model) の中に配置する必要があるでしょう…
トラストレベル 4 のユーザーが閉じられたトピックに返信できないようにすることが意図されていたようですが、適用範囲が広すぎます。
どうもありがとうございます。探していたものです。
へへ、その変更の原因が私だったりして。そのバグを発見して、それを自由に使わせてもらいました。古いスレッドに情報を追加したい場合に、新しいスレッドを開始する必要がある理由が理解できませんでした。
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.