안녕하세요. “default_composition_mode”를 마크다운 모드로 설정해 두었음에도, 포럼에서 새 주제를 시작할 때 사용자에게 여전히 리치 텍스트 에디터가 표시되는 문제가 있습니다. 포럼 버전은 “Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0”입니다.
변경 사항을 적용할 때마다 “이 변경 사항을 과거 데이터에도 적용하시겠습니까? 이 경우 기존 15명의 사용자 설정이 변경됩니다.”라는 메시지가 표시되며 저는 예(Yes)를 선택하고 있습니다. 그럼에도 불구하고 사용자에게는 여전히 리치 에디터가 제공됩니다. 알려진 버그인가요?
수정 - 참고: 이 문제는 리치/마크다운 간 에디터 모드를 전환하는 토글 옵션을 한 번도 사용해 본 적 없는 사용자에게서 발생하고 있습니다. 해당 사용자들은 주말에 업그레이드 직후 기본 작성 모드를 설정한 후 오늘 로그인했습니다. 또한 테마 CSS를 통해 토글 옵션을 숨겨 두었습니다.
이어서 말씀드리자면, “wrap_open” BBCode 토큰을 사용하는 플러그인이 있습니다. 이 토큰은 아직 리치 텍스트 에디터에서 지원되지 않으므로, 당분간 마크다운 모드를 유지하도록 해야 합니다.
이를 보장하기 위해 Claude Sonnet을 사용하여 아래 코드를 생성했습니다. 개선할 수 있는 부분에 대한 피드백(특히 버그가 있는 경우 )을 주시면 감사하겠습니다. 다른 포럼 관리자분들에게도 도움이 될 수 있으니 공유합니다. 이 코드는 테마 설정 > 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();
});
});
내일 이 문제를 재현하고 수정을 진행해 보겠지만, 관리자 기본값이 모든 사용자 옵션 값을 설정하기 때문에(프롬프트에서 기존 사용자 옵션을 사용하는 경우), 그리고 토글 스위치를 제어하는 데 이 값들만 사용하고 있으므로 왜 이런 일이 발생하는지 정확히 파악이 되지 않습니다.
오늘 이 문제를 재현해 보았지만 실패했습니다. 다만 한 가지 질문이 있습니다 – 이 설정을 변경한 후 사용자가 브라우저를 새로고침하나요? 그렇지 않다면, 브라우저의 엠퍼(ember)에 이전 사용자 설정 데이터가 여전히 남아 있어 새로운 설정이 아직 사용되지 않기 때문입니다.
이 기능이 의도대로 작동하도록 하기 위해 저는 다음과 같이 진행했습니다:
사용자 A의 에디터가 리치 모드로 설정되어 있는지 확인
관리자 계정으로 기본값을 마크다운 모드로 변경하고 모든 사용자에게 적용
사용자 A 계정으로 페이지를 새로고침하고 에디터를 다시 열었더니 마크다운 모드로 설정되어 있음을 확인
후속 답변 감사합니다, Martin. 저는 일요일에 이미 모드를 마크다운으로 설정해 두었습니다. 그 후 월요일에 별도의 브라우저 프로필로 테스트 계정에 로그인했는데, 이 계정에선 리치 에디터가 제공되었습니다.
참고로 도움이 된다면, "default_composition_mode"를 "Markdown"으로 설정할 때마다 다음과 같은 경고가 표시됩니다: “이 변경 사항을 과거에 적용하시겠습니까? 이 경우 기존 61명의 사용자 설정이 변경됩니다.” 처음 한 번은 이런 메시지가 나오는 것이 정상이라고 이해하지만, 매번 특정 수의 사용자에 대해 이 프롬프트가 나오는 것은 버그로 보입니다.
추가 테스트를 위해 10개월 동안 로그인하지 않았던 다른 테스트 계정으로 방금 로그인해 보았는데, 이 계정도 기본적으로 리치 텍스트 모드로 설정되어 있었습니다.
음, 맞아요. 그 시간 안에 그렇게 많은 사람들이 토글을 할 것 같지는 않네요 화면 녹화로 무슨 일이 일어나고 있는지 보여줄 수 있을까요?
또한 Chrome 개발자 도구의 Network 탭을 확인해 보시는 것도 좋습니다. 설정을 저장한 후 다음과 같은 두 개의 요청이 표시되어야 합니다 (첫 번째 요청은 XX명의 사용자를 표시하는 프롬프트를 보내는 것이고, 두 번째 요청은 설정을 실제로 저장하고 백필을 수행하는 것입니다):
두 번째 요청은 200 상태 코드를 가져야 합니다. 그렇지 않고 페이지를 벗어나게 되면 기존 사용자에게 백필이 적용되지 않습니다.