Estuve mirando los TC de gifs ayer y noté este bloque de código:
let markup = [
"\n",
``,
"\n",
].join("");
if (this.args.model?.customPickHandler) {
this.args.model.customPickHandler(markup);
} else {
this.appEvents.trigger("composer:insert-text", markup);
}
Donde usa el servicio appEvents. La cuestión es, ¿por qué no se puede pasar toolbarEvent en la acción?
api.onToolbarCreate((toolbar) => {
if (toolbar.context.composerEvents) {
toolbar.addButton({
title: themePrefix("gif.composer_title"),
id: "gif_button",
group: "extras",
icon: "discourse-gifs-gif",
condition: () => api.container.lookup("service:site").desktopView,
action: () => {
const modal = api.container.lookup("service:modal");
modal.show(GifModal);
Lo he intentado y parece que funciona. ¿Hubo alguna razón por la que no se usó?
Considerando que usa TextManipulation internamente, parece haber un método insertText .
Solo por curiosidad.
Gracias.
Profundizando un poco más, encontré esta línea:
setupEvents() {
const textManipulation = this.textManipulation;
if (this.composerEvents) {
this.appEvents.on(
"composer:insert-block",
textManipulation,
"insertBlock"
);
this.appEvents.on("composer:insert-text", textManipulation, "insertText");
this.appEvents.on(
"composer:replace-text",
textManipulation,
"replaceText"
);
this.appEvents.on(
"composer:apply-surround",
textManipulation,
"applySurroundSelection"
);
Entonces… ¿el evento de la aplicación todavía funciona igual que textManipulation? ¿Cuál sería la ventaja añadida en el TC?
¿Alguien tiene alguna idea? Estoy considerando event versus toolbarEvent, y saber las diferencias (si las hay) sería útil.
david
(David Taylor)
6 Noviembre, 2025 14:37
6
Creo que discourse-gifs lo hace así porque el Modal también se lanza desde fuera de la barra de herramientas:
Si tu nueva funcionalidad se basa enteramente en la barra de herramientas, entonces estoy de acuerdo en que toolbarEvents es la forma más limpia de hacerlo
1 me gusta
Ah, eso es. Gracias por aclarar, continuaré con toolbarEvent entonces.
1 me gusta