У меня есть несколько настраиваемых форматов стилей, которые добавят класс к выделенному тексту. У меня есть просьба очистить форматирование / классы, если пользователь выберет новый. Им не нужно назначать несколько классов. В идеале мне не нужно изменять какие-либо файлы ядра для tinymce, но при необходимости я готов это сделать.

Мой мыслительный процесс состоит в том, чтобы уловить выбор форматирования, а затем запустить RemoveFormat, но кажется, что он сначала выполнит начальную команду. Он отформатирует, а затем удалит форматирование. Мне интересно, есть ли способ удержать первоначальный запрос и сначала запустить RemoveFormat, а затем установить новое форматирование. Кроме того, если есть лучший способ сделать это, я тоже открыт для этого. Я на версии 4.7.

 ed.on('ExecCommand', function checkListNodes (evt) {
   let cmd = evt.command
   if (cmd === 'mceToggleFormat') {
      this.execCommand('RemoveFormat', false, '');
   }
}

Заранее спасибо

0
Chris 1 Апр 2019 в 22:15

1 ответ

Лучший ответ

Я смог найти решение. Немного хакерский, но выполняет свою работу. Я устанавливаю переменную перед оператором tinymce init. Таким образом, он запустит форматирование, затем очистит все форматирование для выбора и отправит первоначально выбранный параметр. После очистки форматирования он снова запустит форматирование, но на этот раз не удалит форматирование, проверив переменную, для которой было установлено значение true.

let doNotRemoveFormat = false;

setup: function (ed) {
  ed.on('ExecCommand', function checkListNodes (evt) {
if (cmd === 'mceToggleFormat') {
    if(!doNotRemoveFormat) {  
      let val = 'runThis|' + evt.value;
      this.execCommand('RemoveFormat', false, val);
    } else {
      doNotRemoveFormat = false;
    }
} else if (cmd === 'RemoveFormat') {
  let value = evt.value.split("|");
  if(value[0] === 'runThis') {
    doNotRemoveFormat = true;
    this.execCommand('mceToggleFormat', false, value[1])
  }
});
0
Chris 2 Апр 2019 в 15:40