Администраторы добавили кастомизацию 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, то к элементу <body> страницы добавляется класс closed-topic.
Этот класс удаляется только если model.closed равно false, что означает… что если тема не закрыта (или даже если это вообще не тема), класс closed-topic будет применён.
Эту строку:
document.querySelector("body").classList.add("closed-topic");
следовало бы, вероятно, поместить внутрь условия if (model), поскольку в противном случае она выполняется даже при отсутствии модели (например, когда вы находитесь не внутри темы)…
Похоже, что целью было предотвратить возможность ответа на закрытые темы для пользователей с уровнем доверия 4, но это правило применяется слишком широко.