Paste Format - чистка вставляемого текста

Главные вкладки

Аватар пользователя duozersk duozersk 7 июня 2012 в 15:44

По следам успеха модуля uLogin (3 месяца после создания - 500+ сайтов используют на данный момент), про который я уже рассказывал на страницах drupal.ru, хочу рассказать о другом проджекте, который направлен лицом к пользователям - Paste Format.

Модуль решает проблему копирования/вставки текста из всяких "умных" источников (продукты от MS, с других сайтов, ещё откуда-то с "продвинутым" форматированием) - а именно проблему того, что копируется и вставляется различный "мусор", который вам совсем не нужен в вашем контенте и, кроме этого, ломает ваши шрифты и стили. Да, при отображении контента это всё можно вырезать, используя формат ввода с нужными фильтрами; НО при этом весь этот мусор сохраняется в БД, подгружается при редактировании контента, ломает стили отображения текста в вашем визуальном редакторе, ваши авторы придумывают мифы и другую "ахинею", что вот при редактировании текст такой, а при отображении все ломается, сайт глючит и так далее. На что тех персонал им обычно отвечает, что вы сами мол "уроды", копируете текст хз откуда, вы должны писать его сразу в визуальном редакторе на сайте или вставлять через спец кнопочку, которая убивает все форматирование... или вообще включает принудительную чистку форматирования при вставке. В общем, ситуация не из приятных Smile

Именно для решения этой проблемы и был написан модуль Paste Format (сейчас работает только в тандеме с CKEditor, как через отдельный модуль для этого редактора, так и через модуль WYSIWYG). Он позволяет отфильтровать вставляемый текст одним из форматов ввода, настроенном на вашем сайте в админке Друпала. То есть никаких регэкспов вам писать не надо, тем более на джаваскрипте Smile

Установка проста - скачать, распаковать, включить. Создать _отдельный_ формат ввода, в котором включить и настроить фильтры, которые будут вычищать ненужный вам маркап (здесь на помощь придут модули WYSIWYG Filter, HTML Purifier, htmLawed и другие) - и настроить Paste Format использовать именно его (иначе будет использоваться формат ввода по умолчанию). Раздать пермишен на использование этого модуля тем ролям, которые создают/редактируют контент на сайте (этот пермишен защищает аяксовый колбек, который и производит фильтрацию вставляемого текста). Включить плагин Paste Format в нужных профилях редактора CKEditor.

Технически модуль вешается на событие вставки текста в визуальный редактор, посылает этот текст на сервер и вставляет уже обработанный текст. При этом вы сами управляете тем, какой маркап оставлять, а какой вычищать - просто настраивая фильтры обработки текста в админке Друпала.

Надеюсь, я ясно изложил позицию, для чего именно и почему был написан такой модуль (и в комментариях не будет разводиться флейм, что вот у CKEditor есть своя собственная чистка при вставке и так далее - на это могу сказать, что вы сами не контролируете, что именно и как вычищает CKEditor (и по моему опыту он может что-то оставлять, убирая что-то нужное - а поправить это я не могу :)); а с этим модулем все находится под вашим полным контролем).
Также надеюсь, что данный модуль поможет улучшить юзер экспириенс авторов контента и отношения между ними и разработчиками/администраторами сайта.

Спасибо!

Комментарии

Аватар пользователя unic@drupal.org unic@drupal.org 8 июня 2012 в 9:35

Спасибо, полезная функциональность.

Умеет ли модуль применять текущий выбранный формат? Или только один заранее определенный?

Аватар пользователя duozersk duozersk 8 июня 2012 в 10:34

"Valeratal" wrote:
хотя в скедитор из ворда вставляется хорошо

Не буду спорить Smile Но для этого, вроде бы, надо нажимать спец кнопочку "вставить из ворда", верно? А с этим модулем можно просто вставлять (хоть Ctrl-V, хоть правый клик -> Вставить). И есть ещё другие "умные" источники для копирования текста, кроме ворда ;).
"<a href="mailto:unic@drupal.org">unic@drupal.org</a>" wrote:
Умеет ли модуль применять текущий выбранный формат? Или только один заранее определенный?

Только один заранее определённый (созданный и выбранный в настройках этого модуля).

Аватар пользователя unic@drupal.org unic@drupal.org 8 июня 2012 в 10:39

"duozersk" wrote:
Но для этого, вроде бы, надо нажимать спец кнопочку "вставить из ворда", верно?

Справедливости ради, такая вставка работает и без спец. кнопочки. Есть соответствующая настройка.

Аватар пользователя duozersk duozersk 8 июня 2012 в 11:42

"<a href="mailto:unic@drupal.org">unic@drupal.org</a>" wrote:
Справедливости ради, такая вставка работает и без спец. кнопочки. Есть соответствующая настройка.

Знаю только про такую настройку - http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.forc... - эта удаляет всё форматирование, в том числе и нужное. Если есть какая другая - буду рад научиться чему-то новому Wink

Не нашёл в списке настроек опцию, управляющую прогонкой вставляемого текста через фильтр "paste from Word". Интернеты пестрят противоречивой информацией о том, что последние версии CKEditor автоматически определяют текст, вставляемый из ворда, и прогоняют его чистку - то ли работает это, то ли нет. Я склонен думать, что работает, но опять-таки, оно работает по каким-то своим алгоритмам... Плюс ко всему, надо бы проверить, что отрабатывает раньше: эта самая чистка от CKEditor или мой плагин чистки; скорее всего мой плагин будет обрабатывать текст уже после чистки "paste from word".

Аватар пользователя unic@drupal.org unic@drupal.org 8 июня 2012 в 11:50

В настройках профиля WYSIWYG группа "Очистка и вывод", настройка "Принудительная чистка кода при стандартной вставке":

В положении включено функция вставки по умолчанию (CTRL-V или SHIFT-INS) ведёт себя как функция плагина "Вставить из Word".

Аватар пользователя dvman dvman 14 июня 2012 в 16:45

<a href="mailto:unic@drupal.org">unic@drupal.org</a> wrote:
В настройках профиля WYSIWYG группа "Очистка и вывод", настройка "Принудительная чистка кода при стандартной вставке":

В положении включено функция вставки по умолчанию (CTRL-V или SHIFT-INS) ведёт себя как функция плагина "Вставить из Word".

мил человек , подскажи , где эти настройки этого профиля

Аватар пользователя Valeratal Valeratal 8 июня 2012 в 15:44

CKEditor
При вставки из ворда, сохраняет жирность, курсив. Не вставляют лишние теги ворда.

Тем не менее, есть и другие места в интернете, при вставке которых хорошо бы чистить

Аватар пользователя keha3912 keha3912 13 июля 2012 в 10:03

Попробовал ваш модуль - работает, но не так как надо Smile Он почему-то переносит деление текста на строки, добавляя тег

можно это как-то исправить? Ведь в реальности разрывов не было в тексте.

Аватар пользователя duozersk duozersk 13 июля 2012 в 11:29

"keha3912" wrote:
можно это как-то исправить?

Да, можно. Нужно правильно настроить формат ввода текста (состоящий из нескольких фильтров ввода), который используется для его чистки.
Скорее всего причина в фильтре ввода, который называется "Line break converter" или как-то так. Нужно его отключить в том формате ввода, который вы используете для чистки текста.

Аватар пользователя keha3912 keha3912 13 июля 2012 в 12:07

Надо бы это в предупреждение добавить, что-ли....
убрать галку "Преобразовывать переводы строк в соответствующие HTML теги (т.е.
и )" в admin/config/content/formats/выбранный_формат

Аватар пользователя andribas74 andribas74 7 ноября 2012 в 11:46

Здравствуйте!

попробовал ваш модуль, работает норм, но осталось 2 момента:

1. как отключить вставку картинок inline? лучше, чтобы они не загружались как в http://cksource.com/forums/viewtopic.php?f=18&t=23646 а просто убирались из текста
2. и второй момент - как запускать вашу чистку при перетаскивании drag & drop текста? попробовал - alert не вызывается вашим модулем при таком сценарии.

есть что-то вот здесь - http://cksource.com/forums/viewtopic.php?t=25213 , там просто отключение перетаскивания из внешних источников - только не пойму как это привязать к вашей чистке - или на худой конец, просто отключать перетаскивание , как там и сделано.

спасибо.

Аватар пользователя andribas74 andribas74 7 ноября 2012 в 11:51

"duozersk" wrote:
Установка проста - скачать, распаковать, включить. Создать _отдельный_ формат ввода, в котором включить и настроить фильтры, которые будут вычищать ненужный вам маркап (здесь на помощь придут модули WYSIWYG Filter, HTML Purifier, htmLawed и другие) - и настроить Paste Format использовать именно его (иначе будет использоваться формат ввода по умолчанию).

И еще, извиняюсь, из этого текста не очень понял - как именно настроить, чтобы он вычищал текст, как будто я нажал на кнопку "paste from word" в ckeditor - если я выберу формат, который использует ckeditor - будет работать?

Аватар пользователя Godwin Godwin 13 января 2015 в 19:31

Есть такой же модуль HTML Purifier, который был выпущен на пять лет раньше. Андрей, чем вас не устроил этот модуль, что вы решили написать свой? Спрашиваю, потому, что размышляю, какой выбрать. Smile

Аватар пользователя duozersk duozersk 13 января 2015 в 21:57

Godwin,

Пожалуйста, прочитайте описание модуля ещё раз - Paste Format абсолютно точно не такой же как HTML Purifier.

Спасибо

Аватар пользователя Godwin Godwin 14 января 2015 в 15:28

Да, спасибо, Андрей, что пояснили. Просмотрел не совсем внимательно, к концу дня устал, разбираясь с настройками папок CKFinder.