Ya no puedo capturar el comando ForeColor, tinymce 4.1.4

2 minutos de lectura

Tinymce solía activar un evento para el cambio de color del texto, si ejecutaba:

tinymce.activeEditor.on('execCommand', function() {console.log(arguments);} )

vería el execCommand ForeColor, ejecutado cada vez que se cambia el color del texto. Si observa el complemento TinyMCE-Textcolor, no parece tener ningún comando ejecutivo ni ninguna forma de detectar cuándo cambia el color del texto.

  • El complemento TextColor ya no activa el evento execCommand porque ya que este cometerlo utiliza directamente el Infraestructura del formateador. Por lo tanto, no puede obtener su evento anterior, pero puede usar el formatChanged en el formateador para proporcionar una devolución de llamada: jsfiddle.net/9hb4zbyj. Sin embargo, esto también se activará incluso si solo selecciona un texto que ya está coloreado… por lo que, lamentablemente, esta no es la mejor alternativa.

    – nemesv

    23 dic. 14 a las 14:10


  • @nemesv Dado que puede ‘monkey-patch’ editor.formatter.apply, su comentario es básicamente la respuesta a esta pregunta: ¿por qué no hace que su comentario sea la respuesta?

    – Sin errores

    28 dic. 14 a las 5:09

Ya no puedo capturar el comando ForeColor, tinymce 4.1.4
nemesv

El complemento TextColor ya no activa el execCommand evento porque desde este compromiso utiliza directamente el Infraestructura del formateador. Por lo tanto, no puede obtener su antiguo evento.

Sin embargo, puede utilizar el formatChanged en el formateador para proporcionar una devolución de llamada:

tinymce.activeEditor.formatter.formatChanged('forecolor', function (isNew, args) {
    if (isNew)
    console.log("new color", args.node.style.color);
}, true)

Manifestación JSFiddle.

Pero esto también se activará incluso si solo selecciona un texto que ya está coloreado… por lo que, lamentablemente, esta no es la mejor alternativa.

por supuesto el formatter.apply puede ser remendado mono para disparar el viejo ExecCommand evento:

var oldApply = tinymce.activeEditor.formatter.apply;

tinymce.activeEditor.formatter.apply = function apply(name, vars, node) {
    oldApply(name, vars, node);
    tinymce.activeEditor.fire('ExecCommand', {name: name, vars: vars});
}

Manifestación JSFiddle.

Pero esto no se puede hacer globalmente y debe repetirse para cada instancia del editor tinymce, por lo que nuevamente no es la mejor solución …

  • Agregué formatter.apply monkey-patch a la devolución de llamada init_instance_callback de tinymce.init. Eso me permitió aplicar esto a cada instancia a medida que se creó, en lugar de depender de tinymce.activeEditor.

    – Aaron Sieb

    29 ago. 16 a las 22:25

.

¿Ha sido útil esta solución?