기본값을 마크다운 모드로 설정할 수 없음

안녕하세요. “default_composition_mode”를 마크다운 모드로 설정해 두었음에도, 포럼에서 새 주제를 시작할 때 사용자에게 여전히 리치 텍스트 에디터가 표시되는 문제가 있습니다. 포럼 버전은 “Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0”입니다.

변경 사항을 적용할 때마다 “이 변경 사항을 과거 데이터에도 적용하시겠습니까? 이 경우 기존 15명의 사용자 설정이 변경됩니다.”라는 메시지가 표시되며 저는 예(Yes)를 선택하고 있습니다. 그럼에도 불구하고 사용자에게는 여전히 리치 에디터가 제공됩니다. 알려진 버그인가요?

수정 - 참고: 이 문제는 리치/마크다운 간 에디터 모드를 전환하는 토글 옵션을 한 번도 사용해 본 적 없는 사용자에게서 발생하고 있습니다. 해당 사용자들은 주말에 업그레이드 직후 기본 작성 모드를 설정한 후 오늘 로그인했습니다. 또한 테마 CSS를 통해 토글 옵션을 숨겨 두었습니다.

2개의 좋아요

이어서 말씀드리자면, “wrap_open” BBCode 토큰을 사용하는 플러그인이 있습니다. 이 토큰은 아직 리치 텍스트 에디터에서 지원되지 않으므로, 당분간 마크다운 모드를 유지하도록 해야 합니다.

이를 보장하기 위해 Claude Sonnet을 사용하여 아래 코드를 생성했습니다. 개선할 수 있는 부분에 대한 피드백(특히 버그가 있는 경우 :sweat_smile:)을 주시면 감사하겠습니다. 다른 포럼 관리자분들에게도 도움이 될 수 있으니 공유합니다. 이 코드는 테마 설정 > JS (/admin/customize/themes/2/common/js/edit)에 입력합니다:

import {
  apiInitializer
} from "discourse/lib/api";

export default apiInitializer((api) => {
  // Force switch the user's editor to markdown mode
  function switchToMarkdownMode() {
    const currentUser = api.getCurrentUser();

    // User should be signed in if composer was opened
    if (!currentUser) {
      console.error('No user found');
      return;
    }

    // Got this option from here
    // https://github.com/discourse/discourse/blob/f0fc5646dc9bd29b0e814faea490e34800e9b322/app/assets/javascripts/discourse/app/models/user.js#L262C1-L266C4
    const currentMode = currentUser.get('user_option.composition_mode');

    if (currentMode !== 0) {
      // Only switch if not already in markdown mode
      // Example usage: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
      currentUser.set('user_option.composition_mode', 0);

      // Save the user preference to the server
      currentUser.save(['composition_mode']).then(() => {
        console.log('Successfully switched to markdown mode');
      }).catch((error) => {
        console.error('Failed to update composition mode:', error);
      });

      // Immediately toggle the current composer UI
      setTimeout(() => {
        const toggleButton = document.querySelector('.composer-toggle-switch[data-rich-editor]');
        if (toggleButton) {
          const isRichTextActive = toggleButton.getAttribute('aria-checked') === 'true';
          if (isRichTextActive) {
            toggleButton.click();
            console.log('Toggled current composer to markdown mode');
          }
        }
      }, 100); // Small delay to ensure composer is fully rendered
    } else {
      console.log('Already in markdown mode, no change needed');
    }
  }

  api.onAppEvent('composer:opened', () => {
    switchToMarkdownMode();
  });
});

이것은 일반적으로 좋지 않은 관행입니다. 이러한 작업에 타이밍에 의존하는 것은 취약합니다.

이 부분을 분리하겠습니다. 관리자가 마크다운 모드로 기본값을 설정할 수 있도록 하는 것은 분명히 필요합니다.

최소 재현 사례는 무엇입니까?

2개의 좋아요

내일 이 문제를 재현하고 수정을 진행해 보겠지만, 관리자 기본값이 모든 사용자 옵션 값을 설정하기 때문에(프롬프트에서 기존 사용자 옵션을 사용하는 경우), 그리고 토글 스위치를 제어하는 데 이 값들만 사용하고 있으므로 왜 이런 일이 발생하는지 정확히 파악이 되지 않습니다.

2개의 좋아요

빠른 답변 감사합니다! :slightly_smiling_face: 이 문제에 대한 최소 재현 방법을 어떻게 만들어야 할지 모르겠습니다. 포럼에서 추가 정보를 공유할 수 있는 단계가 있다면 알려주세요. 기꺼이 정보를 공유하겠습니다.

2개의 좋아요

오늘 이 문제를 재현해 보았지만 실패했습니다. 다만 한 가지 질문이 있습니다 – 이 설정을 변경한 후 사용자가 브라우저를 새로고침하나요? 그렇지 않다면, 브라우저의 엠퍼(ember)에 이전 사용자 설정 데이터가 여전히 남아 있어 새로운 설정이 아직 사용되지 않기 때문입니다.

이 기능이 의도대로 작동하도록 하기 위해 저는 다음과 같이 진행했습니다:

  • 사용자 A의 에디터가 리치 모드로 설정되어 있는지 확인
  • 관리자 계정으로 기본값을 마크다운 모드로 변경하고 모든 사용자에게 적용
  • 사용자 A 계정으로 페이지를 새로고침하고 에디터를 다시 열었더니 마크다운 모드로 설정되어 있음을 확인

3단계에서 새로고침을 하지 않으면 여전히 리치 모드가 표시됩니다.

1개의 좋아요

후속 답변 감사합니다, Martin. 저는 일요일에 이미 모드를 마크다운으로 설정해 두었습니다. 그 후 월요일에 별도의 브라우저 프로필로 테스트 계정에 로그인했는데, 이 계정에선 리치 에디터가 제공되었습니다.

참고로 도움이 된다면, "default_composition_mode"를 "Markdown"으로 설정할 때마다 다음과 같은 경고가 표시됩니다: “이 변경 사항을 과거에 적용하시겠습니까? 이 경우 기존 61명의 사용자 설정이 변경됩니다.” 처음 한 번은 이런 메시지가 나오는 것이 정상이라고 이해하지만, 매번 특정 수의 사용자에 대해 이 프롬프트가 나오는 것은 버그로 보입니다.

추가 테스트를 위해 10개월 동안 로그인하지 않았던 다른 테스트 계정으로 방금 로그인해 보았는데, 이 계정도 기본적으로 리치 텍스트 모드로 설정되어 있었습니다.

1개의 좋아요

정말 이상하네요… 사이트에는 총 몇 명의 사용자가 있나요? 사이트 설정 변경 시 모든 사용자를 업데이트해야 하는 단계에서 멈추고 있는 것 같아 보이는데, UI에 해당 작업이 아직 진행 중임을 나타내는 표시가 전혀 없어서 그렇습니다.

그 사이에 토글을 통해 설정을 변경한 사용자의 수에 따라 달라집니다. 로컬 테스트에서는 제 환경에서 정상적으로 작동하는 것으로 보입니다.

1개의 좋아요

/about 페이지에 따르면, 우리 사이트에는 20,000명의 회원이 있습니다.

다음은 단계별 설명입니다:

  1. /admin/site_settings/category/all_results?filter=default_composition_mode 경로로 이동합니다.
  2. default_composition_mode를 Markdown 모드로 설정합니다. 이미 Markdown 모드여도 드롭다운을 열어 Markdown 옵션을 선택할 수 있습니다.
  3. XX명의 사용자에게 적용된다는 경고 메시지가 나타납니다. 이를 수락합니다.
  4. 10분을 기다린 후 페이지를 새로고침합니다.
  5. default_composition_mode를 다시 Markdown 모드로 설정합니다(2단계와 동일).
  6. 같은 수의 사용자에게 적용된다는 경고 메시지가 다시 나타납니다.

말씀하신 대로, 과거 사용자 설정이 업데이트되는 데 얼마나 걸리는지(10분 이상?) 저도 잘 모르겠습니다. 또한, 그 짧은 시간 안에 해당 사용자 모두가 설정을 되돌렸을 것이라고 생각하지도 않습니다. 제가 놓치고 있는 부분이 있을 수 있습니다.

1개의 좋아요

음, 맞아요. 그 시간 안에 그렇게 많은 사람들이 토글을 할 것 같지는 않네요 :thinking: 화면 녹화로 무슨 일이 일어나고 있는지 보여줄 수 있을까요?

또한 Chrome 개발자 도구의 Network 탭을 확인해 보시는 것도 좋습니다. 설정을 저장한 후 다음과 같은 두 개의 요청이 표시되어야 합니다 (첫 번째 요청은 XX명의 사용자를 표시하는 프롬프트를 보내는 것이고, 두 번째 요청은 설정을 실제로 저장하고 백필을 수행하는 것입니다):

image

두 번째 요청은 200 상태 코드를 가져야 합니다. 그렇지 않고 페이지를 벗어나게 되면 기존 사용자에게 백필이 적용되지 않습니다.

추가 정보 제공해 주셔서 감사합니다. 두 요청은 아래 이미지와 같습니다. 둘 다 꽤 빨랐습니다.

이 Drive 링크에 영상 녹화가 있습니다. 설정을 하고, 경고 대화상자를 수락한 뒤 잠시 기다렸다가 페이지를 새로고침하고, 다시 설정을 했습니다. 그러자 경고 대화상자가 다시 나타났습니다.

1개의 좋아요

음, 상황이 더 복잡해지네요… 이미 Markdown이 선택된 상태에서 다시 Markdown을 선택하고 저장 옵션이 뜨는 부분 말이에요:

이런 일은 일어나지 않아야 하는데… 리스트 아이템 값(0)을 설정 값('0')과 다르게 취급하는 버그가 있습니다. 그래서 저기서 저장을 눌러도 아무 일이 일어나지 않는 것 같아요. 이 버그는 제가 수정할 수 있지만, 다음을 해보실 수 있을까요:

  • 설정을 "Rich text"로 변경
  • 저장하되 "아니요, 앞으로의 변경에만 적용"을 선택
  • 다시 "Markdown"으로 변경
  • 저장하고, 과거에도 적용할지 묻는 질문에 "예"를 선택

그러면 겪고 계신 문제가 해결되는지 확인해 보세요.

1개의 좋아요

알려주셔서 감사합니다. 이전 테스트 계정으로 로그인해 보았는데, 정상적으로 작동하는 것 같습니다: 첫 실행에서 Markdown 모드가 적용되었습니다 :slightly_smiling_face:

Data Explorer를 사용하여 모든 사용자가 Markdown 모드로 설정되어 있는지 다시 확인할 수 있는 방법이 있을까요?

2개의 좋아요

그 문제가 해결되었다니 기쁩니다!

네, 물론입니다. 다음과 같은 쿼리를 실행할 수 있습니다:

SELECT composition_mode, COUNT(composition_mode) FROM user_options GROUP BY composition_mode;

값은 여기에 있습니다:

2개의 좋아요

감사합니다. 이제 모든 사용자가 마크다운 모드를 사용 중입니다 :partying_face:

3개의 좋아요

@martin 이 주제를 지원에서 버그로 이동하고, 버그를 수정했다고 가정하여 닫겠습니다. 수정하지 않았다면 다시 열어주실 수 있나요?

1개의 좋아요

FIX: Don't show setting save/cancel buttons when selecting the current value - Pull Request #34552%EC%97%90%EC%84%9C - discourse/discourse - GitHub 수정되었습니다

5개의 좋아요