‘새 주제’ 버튼이 올바르게 작동하지 않습니다

“새 주제” 버튼을 누르면 새 주제 작성 양식이 바로 표시되지 않습니다. 대신 포럼의 스레드 중 하나를 선택한 후에야 양식이 나타납니다. 여전히 새 주제를 생성하는 것처럼 보이지만, 이는 백그라운드에서 이루어집니다. 기존 주제 중 아무거나 열면, 생성하려 했던 새 주제가 표시됩니다(완전히 정확합니다. 즉, 게시하고자 했던 포럼에 대해, 입력한 주제가 다른 포럼에 있는 경우에도 마찬가지입니다).

이 문제는 특정 사이트(https://discussions.scouting.org/)에서만 발생하고 있으므로, 해당 사이트에서 설정이 잘못되었을 것으로 추정됩니다. 이 문제를 거기에서 제기했지만, 아직까지 해결되지 않았습니다.

안전 모드에서 이 문제가 발생합니까?

안전 모드에서는 재현되지 않습니다. 이 문제는 사용자 지정 테마/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>

즉, 로그인되어 있고, 관리자가 아니며, 모더레이터가 아니며, 신뢰 수준(trust level)이 4인 경우… 페이지 body에 closed-topic 클래스가 추가됩니다.

이 클래스는 model.closed가 false일 때만 제거되므로… 이는 토픽이 닫혀 있지 않은 경우(또는 아예 토픽이 아닌 경우)에도 closed-topic 클래스가 적용됨을 의미합니다.

이 코드 줄:

document.querySelector("body").classList.add("closed-topic");

은 if (model) 블록 내에 있어야 할 것 같습니다. 그렇지 않으면 모델이 존재하지 않을 때(예: 토픽 내부에 있지 않을 때)에도 클래스가 적용됩니다…

원래 의도는 신뢰 수준 4 사용자의 닫힌 토픽에 대한 답글 작성을 방지하는 것이었던 것으로 보이지만, 적용 범위가 지나치게 넓습니다.

정말 감사합니다. 제가 찾고 있던 바로 그 내용입니다.

heehe, 그 변경의 이유가 저 때문일지도 모르겠네요. 그 버그를 발견해 아주 적극적으로 악용했거든요. 기존 토픽에 추가 정보를 제공할 때 굳이 새 스레드를 시작해야 하는 이유를 저는 도무지 이해하지 못했습니다.