Привет! Я заметил, что даже после установки параметра «default_composition_mode» в режим Markdown, пользователи на моём форуме при создании новой темы по-прежнему получают WYSIWYG-редактор. Версия форума: «Discourse v3.5.0.beta9-dev — https://github.com/discourse/discourse/commits/08e9f9c00b — Ember v5.12.0».
Каждый раз при применении изменения мне предлагается: «Хотите применить это изменение исторически? Это изменит настройки для 15 существующих пользователей», и я нажимаю «Да». Однако пользователям всё равно показывается WYSIWYG-редактор. Это известная ошибка?
Редактирование — примечание: Эта проблема возникает у пользователей, которые никогда не использовали переключатель для смены режима редактора между WYSIWYG и Markdown. Они просто зашли сегодня после того, как я уже установил режим по умолчанию в выходные сразу после обновления. Кроме того, я скрыл переключатель через CSS темы.
В продолжение темы: у нас есть плагин, использующий токены BBCode «wrap_open», которые пока не поддерживаются в редакторе с богатым форматированием. Поэтому нам пока необходимо оставаться в режиме Markdown.
Я использовал Claude Sonnet для генерации следующего кода, чтобы обеспечить это. Буду рад получить любые отзывы о том, как его можно улучшить (особенно если в нём есть какие-либо ошибки ). Также делюсь этим на случай, если это поможет другим администраторам форумов. Код размещается в настройках темы > JS (/admin/customize/themes/2/common/js/edit):
import {
apiInitializer
} from "discourse/lib/api";
export default apiInitializer((api) => {
// Принудительно переключить редактор пользователя в режим Markdown
function switchToMarkdownMode() {
const currentUser = api.getCurrentUser();
// Пользователь должен быть авторизован, если открыт композер
if (!currentUser) {
console.error('Пользователь не найден');
return;
}
// Получил эту опцию отсюда
// 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) {
// Переключать только если ещё не в режиме Markdown
// Пример использования: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
currentUser.set('user_option.composition_mode', 0);
// Сохранить настройку пользователя на сервере
currentUser.save(['composition_mode']).then(() => {
console.log('Успешно переключено в режим Markdown');
}).catch((error) => {
console.error('Не удалось обновить режим композиции:', error);
});
// Немедленно переключить текущий интерфейс композера
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('Переключено текущее окно композиции в режим Markdown');
}
}
}, 100); // Небольшая задержка для полной отрисовки композера
} else {
console.log('Уже в режиме Markdown, изменений не требуется');
}
}
api.onAppEvent('composer:opened', () => {
switchToMarkdownMode();
});
});
Я постараюсь воспроизвести это и завтра займусь исправлением, но не понимаю, почему это происходит, поскольку настройки администратора по умолчанию задают все значения опций пользователя (если вы используете существующую опцию пользователя в подсказке), а мы используем именно их для управления переключателем.
Спасибо за быстрые ответы! Не уверен, как создать минимальный воспроизводимый пример для этого. Я с радостью предоставлю любую дополнительную информацию из моего форума, если вы поделитесь инструкциями по её получению.
Сегодня я попытался воспроизвести это, но безуспешно. У меня есть один вопрос: обновляют ли пользователи браузер после того, как вы внесли это изменение? Если нет, то в браузере в Ember всё ещё хранятся их старые данные о предпочтениях пользователей, поэтому новое предпочтение пока не будет использовано.
Чтобы это работало как ожидалось, я сделал следующее:
Убедился, что у пользователя А редактор переключён в режим богатого форматирования.
Как администратор, я изменил настройку по умолчанию на режим Markdown и применил её для всех пользователей.
Как пользователь А, я перезагрузил страницу и снова открыл редактор, и увидел, что он находится в режиме Markdown.
Если бы я не перезагрузил страницу на шаге 3, я бы всё ещё видел режим богатого форматирования.
Спасибо за уточнение, Мартин. Я уже установил режим Markdown в воскресенье. Затем в понедельник я зашел с тестовой учетной записью в отдельном профиле браузера, где вместо этого был предложен редактор с богатым форматированием.
Кроме того, если это поможет, каждый раз, когда я устанавливаю “default_composition_mode” в значение “Markdown”, появляется предупреждение: “Хотите применить это изменение ко всем предыдущим данным? Это изменит настройки для 61 существующего пользователя.” Я понимаю, что такое предупреждение должно появляться только в первый раз, но, похоже, это ошибка, если оно запрашивает это каждый раз для определенного числа пользователей.
Для дальнейшего тестирования я также только что зашел в другую тестовую учетную запись, из которой не входили в течение 10 месяцев. По умолчанию для неё также был установлен режим Rich Text.
Это действительно очень странно… сколько всего пользователей на вашем сайте? Мне кажется, что процесс может застрять на шаге, где должно происходить обновление всех пользователей в связи с изменением настройки сайта, так как я заметил, что в интерфейсе нет никаких указаний на то, что работа ещё продолжается.
Зависит от того, сколько пользователей изменили эту настройку с помощью переключателя за это время. В моих локальных тестах всё работает корректно.
Согласно нашей странице /about, у нас 20 000 участников.
Я уточню, что шаги следующие:
Перейдите на страницу /admin/site_settings/category/all_results?filter=default_composition_mode.
Установите default_composition_mode в режим Markdown. Даже если он уже установлен в режим Markdown, вы можете открыть выпадающий список и выбрать опцию Markdown.
Появится предупреждение о количестве пользователей XX. Примите его.
Подождите десять минут, затем перезагрузите страницу.
Установите default_composition_mode в режим Markdown (как в шаге 2).
Снова появится предупреждение о том же количестве пользователей.
Как вы упомянули, я тоже не знаю, сколько времени требуется (более 10 минут?) на обновление исторических предпочтений пользователей. Также я не думаю, что все эти пользователи успели бы обновить свои настройки за такой короткий срок. Возможно, я что-то упускаю.
Да, точно, похоже, что не так много людей будут переключаться за это время Можешь сделать запись экрана, чтобы показать, что происходит?
Также рекомендую заглянуть во вкладку Network в инструментах разработчика Chrome. После сохранения там должно появиться два подобных запроса (первый — для отображения подсказки о XX пользователях, второй — для непосредственного сохранения настройки и выполнения backfill):
У второго запроса должен быть статус 200. Если его нет и ты уйдёшь со страницы, то backfill для существующих пользователей выполнен не будет.
Видеозапись доступна по этой ссылке в Google Диске. Я настроил параметр, принял диалоговое окно с предупреждением, немного подождал, обновил страницу и затем настроил параметр снова. После этого диалоговое окно с предупреждением появилось вновь.
— не должен происходить… Здесь есть ошибка: система считает значение элемента списка (0) отличным от значения настройки ('0'). Поэтому, думаю, кнопка «Сохранить» здесь ничего не делает. Я могу исправить эту ошибку, но не могли бы вы сделать следующее:
Измените настройку на «Форматированный текст»
Сохраните её, выбрав «Нет, применить изменения только к будущим сообщениям»
Вернитесь к «Markdown»
Сохраните и выберите «Да», чтобы применить изменения ретроспективно
@martin Я переместил эту тему из раздела поддержки в раздел ошибок и закрою её, предполагая, что вы исправили ошибку. Если вы этого не сделали, пожалуйста, откройте тему снова.