Изменение стиля плагина format с помощью CKEDITOR.style.addCustomHandler

#javascript #ckeditor

#javascript #ckeditor

Вопрос:

Комментарии в документации CKEditor и ее исходном коде подразумевают, что можно иметь некоторый контроль над тем, как применяются стили, используя addCustomHandler, в том числе для существующих стилей. Например, в core/style.js строке 665 мы имеем:

Задание по обработке стиля, которое включает в себя такие задачи, как применение, удаление, проверка состояния и проверка возможности применения стиля, является очень сложным. Поэтому без глубоких знаний о DOM и особенно {@link CKEDITOR.dom.range ranges} и {@link CKEDITOR.dom.walker DOM walker} невозможно реализовать полностью настраиваемый обработчик стилей, способный обрабатывать стили блочных, встроенных и объектных типов. Однако можно настроить реализацию по умолчанию, переопределив методы по умолчанию и повторно используя их.

Последнее предложение наводит меня на мысль, что я должен иметь возможность изменять то, что происходит, например, когда плагин format используется для применения изменения стиля для преобразования текста в h1 заголовок, используя что-то вроде:

 CKEDITOR.style.addCustomHandler({
    element: 'h1',
    type: 1,
    apply: function( editor ) {
    console.log( 'apply' );
    },
    remove: function( editor ) {
    console.log( 'remove' );
    }
});
  

Но приведенное выше и несколько его вариантов (с разными или опущенными element type атрибутами и) не имеют никакого эффекта.

Я предполагаю, что это либо невозможно, либо я делаю что-то не так, но я не знаю, что именно. Любая помощь будет принята с благодарностью.

(Обратите внимание, что из документов я вижу, как создать совершенно новый стиль, созданный с type помощью атрибута, и изменить его с помощью addCustomHandler , но плагин format создает свои стили с element атрибутом, а не с type атрибутом.)

Спасибо!

Ответ №1:

Однако можно настроить реализацию по умолчанию, переопределив методы по умолчанию и повторно используя их.

Вы неправильно поняли это предложение (прошу прощения за это, потому что я автор: D). С помощью CKEDITOR.style.addCustomHandler вы можете добавлять только новые типы. Под переопределением я подразумевал доступ CKEDITOR.style.prototype . Например:

 var originalApply = CKEDITOR.style.prototype.apply;
CKEDITOR.style.prototype.apply = function( editor ) {
    originalApply.call( this, editor );
};