Убираем вставку   в пустые div контейнеры в CKEditor 5

Неприятная особенность CKEditor — добавляет в пустые контейнера (в <div>,<p> и т.п.) html код неразрывного пробела.

Покажу как можно от этого избавиться через код в кастомном плагине для CKEditor 5 в экосистеме Drupal 8+.

Нам понадобится скелет плагина. Можно взять какой то простой плагин как шаблон и убрать от туда лишний код. Один из файлов-исходников для билда js плагина, обычно содержит класс, расширяющий ckeditor5/src/core/Plugin.

Не останавливаюсь подробно на создании архитектуры плагина, т.к. это отдельная тема для разговора, и у меня уже есть статья на эту тему. Потому перейду сразу к нашей цели.

Разберем следующий код:

Мы цепляемся к трансформации из модели в HTML код (downcast converstion) для элемента модели htmlDivParagraph, который представляет контейнер div в модели CKE5.

Я беру некоторые атрибуты модели — классы и стили, в данном случае. Если вам нужны какие то еще атрибуты, просто добавьте их в массив htmlAttrs.

Мы знаем, что если контейнер пустой, то CKE добавит nbsp филлер, потому нам нужно обмануть редактор. Я добавляю в контейнер пустую ноду с текстом. Таким образом у контейнера появляется дочерний элемент, а nbsp уже не добавляется.

При этом, если вы вручную добавите внутрь div ‘&nbps;’, то этот текст будет сохранен, по крайней мере на этапе фильтрации текста.

Важен приоритет выполнения конверсии, он должен быть выше normal.


Если вам нужно готовое решение, то можете использовать плагин ckenbsp. Там я реализовал фикс для DIV и P. Можно настроить для каждого текстового формата, использовать или нет NBSP филлер отдельно для DIV и P тегов.

Мало букафф? Читайте есчо !

CKEditor5: удаление элемента при удалении в нем текста (элементов)

Февраль 3, 2025 г.

Пример работы в экосистеме CKE5. Реализуем в нашем плагине обработку изменения данных в модели редактора. При удалении всего текста в инлайновом элементе, удалим сам inline контейнер. Зацепку поместим в init секцию плагина. [crayon-68e38cc52c598971627983/] ...

Читать

Установить фокус ввода в CKE5

Март 23, 2025 г.

При написании плагина столкнулся с тем, что в момент нажатия кнопки в тулзах, редактор терял фокус ввода. Поведение верное, но пользователю не удобно - нужно курсор возвращать на место "вручную". Вернуть фокус можно так: [crayon-68e38cc52c713558861967/] ...

Читать

Подключаем wysiwyg CKeditor к нашим формам в Drupal 7

Декабрь 20, 2014 г.

Как подключить CKeditor к Drupal 7 я рассказывал ранее. После настройки модуль подключит редактор CKeditor к полям редактирования публикаций. А как подключить wysiwyg к собственным формам? В 6-й версии Drupal редактор с помощью модуля CKeditor подключался ...

Читать

CKE5 функция создания контейнера-обертки в модели

Март 20, 2025 г.

Делюсь примером кода, для создания обертки в модели экосистемы CKEditor 5. Здесь есть несколько нюансов. Во-первых, нужно проверить, являются ли оборачиваемые элементы валидными по отношению к обертке, в которую мы их помещаем. У CKE элементов ...

Читать
 

Комментарии к «Убираем вставку &nbsp; в пустые div контейнеры в CKEditor 5»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: