#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 );
};