Hola, encuentro que incluso cuando he configurado “default_composition_mode” en modo Markdown, a los usuarios de mi foro se les presenta el editor de texto enriquecido al iniciar un nuevo tema. La versión del foro es “Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0”.
Cada vez que aplico el cambio, se me solicita “¿Le gustaría aplicar este cambio históricamente? Esto cambiará las preferencias de 15 usuarios existentes” y hago clic en Sí. Aun así, a los usuarios se les presenta el editor enriquecido. ¿Es este un error conocido?
Editar - nota: Tengo este problema con usuarios que nunca usaron la opción de alternar para cambiar su modo de editor entre enriquecido/markdown. Simplemente iniciaron sesión hoy después de que ya había establecido el modo de composición predeterminado el fin de semana, justo después de la actualización. También había ocultado la opción de alternar a través de CSS del tema.
En seguimiento a esto, tenemos un plugin que utiliza tokens BBCode “wrap_open”, que aún no son compatibles con el editor de texto enriquecido. Por lo tanto, debemos asegurarnos de permanecer en modo Markdown por ahora.
Utilicé Claude Sonnet para generar el siguiente código para asegurarme de esto. Estaría encantado de recibir cualquier comentario sobre cómo podría mejorarlo (especialmente si tiene algún error ). También lo comparto en caso de que ayude a otros administradores del foro. El código va en Configuración del tema > JS (/admin/customize/themes/2/common/js/edit):
import {
apiInitializer
} from "discourse/lib/api";
export default apiInitializer((api) => {
// Forzar el cambio del editor del usuario a modo markdown
function switchToMarkdownMode() {
const currentUser = api.getCurrentUser();
// El usuario debe haber iniciado sesión si el compositor se abrió
if (!currentUser) {
console.error('No se encontró usuario');
return;
}
// Obtenida esta opción de aquí
// 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) {
// Solo cambiar si no está ya en modo markdown
// Uso de ejemplo: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
currentUser.set('user_option.composition_mode', 0);
// Guardar la preferencia del usuario en el servidor
currentUser.save(['composition_mode']).then(() => {
console.log('Cambiado exitosamente a modo markdown');
}).catch((error) => {
console.error('Error al actualizar el modo de composición:', error);
});
// Alternar inmediatamente la interfaz del compositor actual
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('Alternado el compositor actual a modo markdown');
}
}
}, 100); // Pequeña demora para asegurar que el compositor se renderice completamente
} else {
console.log('Ya está en modo markdown, no se necesita cambio');
}
}
api.onAppEvent('composer:opened', () => {
switchToMarkdownMode();
});
});
Intentaré reproducir esto y trabajar en una solución mañana, pero no estoy seguro de por qué esto sucedería ya que la configuración predeterminada del administrador establece todos los valores de las opciones del usuario (si usa la opción de usuario existente en la indicación), y esto es todo lo que usamos para controlar el interruptor.
¡Gracias por las rápidas respuestas! No estoy seguro de cómo puedo crear una reproducción mínima para esto. Estaré encantado de compartir cualquier información adicional de mi foro si puedes compartir los pasos para ello.
Intenté reproducir esto hoy sin éxito. Sin embargo, tengo una pregunta: ¿los usuarios actualizan el navegador después de que usted realiza este cambio? Porque si no lo hacen, todavía tenemos sus datos de preferencia de usuario antiguos en el navegador en ember, por lo que la nueva preferencia aún no se utilizará.
Para que esto funcione como se esperaba, hice esto:
Verifiqué en el usuario A que el editor estaba configurado en modo enriquecido
Como administrador, cambié el valor predeterminado a modo markdown y lo apliqué a todos los usuarios
Como usuario A, recargué la página y volví a abrir el editor, y vi que estaba en modo markdown
Si no hubiera recargado en el paso 3, todavía vería el modo enriquecido.
Gracias por el seguimiento, Martin. Ya había configurado el modo en Markdown el domingo. Luego inicié sesión con una cuenta de prueba el lunes, en un perfil de navegador separado, que recibió el editor Rich en su lugar.
Además, si eso ayuda, cada vez que configuro “default_composition_mode” en “Markdown”, recibo la advertencia: “¿Le gustaría aplicar este cambio históricamente? Esto cambiará las preferencias para 61 usuarios existentes”. Entiendo que debería recibir esto la primera vez, pero parece un error que me lo solicite cada vez para algunos usuarios.
Para realizar más pruebas, también acabo de iniciar sesión en otra cuenta de prueba que no había iniciado sesión en 10 meses. También se configuró en modo Rich Text por defecto.
Esto es realmente muy extraño… ¿cuántos usuarios hay en tu sitio en total? Me pregunto si se está colgando en el paso donde se supone que debe actualizar a todos los usuarios por el cambio de configuración del sitio, porque noté que no hay nada en la interfaz de usuario que indique que el trabajo todavía está en curso.
Depende de cuántos usuarios lo hayan cambiado con el interruptor mientras tanto. Parece que funciona correctamente para mí en pruebas locales.
Establece default_composition_mode en modo Markdown. Incluso cuando ya está en modo Markdown, puedes abrir el menú desplegable y seleccionar la opción Markdown.
Recibe la advertencia para XX número de usuarios. Acéptala.
Espera diez minutos y luego recarga la página.
Establece default_composition_mode en modo Markdown (igual que el paso 2).
De nuevo, recibe la advertencia para el mismo número de usuarios.
Como mencionaste, tampoco sé cuánto tiempo se tarda (¿más de 10 minutos?) en actualizar las preferencias históricas de los usuarios. Tampoco creo que todos esos usuarios hayan actualizado sus preferencias en tan poco tiempo. Podría estar pasando algo por alto aquí.
Sí, definitivamente no parece que mucha gente esté activando eso en ese tiempo ¿Puedes hacer una grabación de pantalla para mostrar lo que está sucediendo?
También te aconsejo que eches un vistazo a la pestaña de Red en las herramientas de desarrollador de Chrome. Debería mostrar 2 solicitudes como esta después de guardarla (la primera es la que muestra el aviso de XX usuarios, la segunda es la que realmente guarda la configuración y realiza el relleno posterior):
La segunda debe tener un estado 200, si no lo tiene y te alejas, no se habrá rellenado para los usuarios existentes.
Una grabación de video está en este enlace de Drive. Establecí la configuración, acepté el cuadro de diálogo de advertencia, esperé un poco, recargué la página y luego la volví a establecer. Entonces volví a recibir el cuadro de diálogo de advertencia.
No debería suceder… hay un error aquí donde considera que el valor del elemento de la lista (0) es diferente del valor de la configuración (’0’). Así que creo que el Guardar aquí no hace nada. Puedo corregir ese error, pero ¿puedes hacer esto?:
Cambia la configuración a “Texto enriquecido”
Guárdalo, pero elige “No, solo aplica los cambios en el futuro”
Vuelve a cambiar a “Markdown”
Guárdalo y elige “Sí” para aplicarlo retroactivamente
Y mira si eso soluciona los problemas que estás teniendo.
Gracias por informarme. Inicié sesión con una cuenta de prueba antigua y parece que funcionó correctamente: obtuvo el modo Markdown en la primera ejecución
¿Hay alguna forma de verificar que todos los usuarios estén en modo Markdown, por ejemplo, utilizando el Explorador de datos?