Estoy escribiendo un componente de tema y me gustaría modificar/cambiar las publicaciones justo antes de que se cocinen. ¿Cómo puedo acceder al texto/publicación sin cocinar (para la publicación que está a punto de cocinarse/mostrarse)?
Leí la “Guía para desarrolladores de temas de Discourse” y descubrí que podía modificar la publicación cocinada usando los métodos de pluginAPI decorateCooked/decorateCookedElement y addPostTransformCallback, pero no encontré cómo obtenerla antes de que se cocine.
También revisé los controladores y componentes, pero sin éxito.
¡Gracias por tu respuesta! Pero no quiero guardar las modificaciones del texto; quiero cambiarlo después de guardarlo pero antes de mostrarlo (y antes de procesarlo).
La razón es que quiero que el texto original aparezca si el usuario edita la publicación. Sospecho que si usara composerBeforeSave, el texto modificado aparecería al editar (?).
Si quieres hacer esto como un tema, esta será tu única opción. Entrada del usuario (markdown) → procesamiento en el servidor con Ruby → (HTML) recuperación por otros usuarios y posible decoración. Esta es la promesa que se ejecutará antes de pulsar el botón Guardar/Responder. Esto no aparecerá en los borradores, pero tienes razón: sí se mostraría si editas la publicación. Si quieres evitar esto, necesitas deshacer los cambios que realizas al guardar cuando el editor se abre o cambia a la publicación que modificaste antes. Podría entrar en más detalles o simplemente puedes leer el código y hacer tus propias pruebas.
¡Saludos!
EDITO: Acabo de pensar en esto. Teóricamente, también podrías volver a procesar en el lado del cliente. Pero creo que es una mala idea por rendimiento y otras razones. O simplemente crea un plugin: (Superseded) Plugin Tutorial #1 - How to manipulate the text in the composer?