Очищение разметки тегов необязательно - PullRequest
0 голосов
/ 30 декабря 2010

Tagsoup мешает вводу и неправильно форматирует его.Например, когда у нас есть следующая разметка

<a href="www.google.com"></a>Text outside anchor

Она отформатирована следующим образом

<a href="www.google.com">Text outside anchor</a>

Это простой пример, но мыесть и другие проблемы.Поэтому мы сделали необязательной очистку / форматирование тегов, добавив дополнительный атрибут в элемент управления textarea.

Вот разница (https://github.com/binnyg/orbeon-forms/commit/044c29e32ce36e5b391abfc782ee44f0354bddd3).

Теперь текстовая область будет выглядеть так

<textarea skip-cleanmarkup="true" mediatype="text/html" />

Два вопроса

  1. Это правильный подход?
  2. Если я предоставлю патч, сможет ли он сделать это на кодовой базе orbeon?

Спасибо BinnyG

Ответы [ 3 ]

0 голосов
/ 31 декабря 2010

Если преобразование TagSoup преобразуется:

<a href="www.google.com"></a>Text outside anchor

В

<a href="www.google.com">Text outside anchor</a>

Не будет ли это ошибкой в ​​TagSoup? Если бы это было так, то я бы сказал, что лучше решить эту проблему, а не отключать TagSoup. Но это не ошибка в TagSoup; вот что, кажется, происходит. Скажем, браузеры отправляют клиенту следующее:

<a shape="rect"></a>After<br clear="none">

Это проходит через TagSoup, результат проходит через код очистки XSLT, и в браузер отправляется следующее:

<a shape="rect"/>After<br clear="none"/>

Проблема в браузере, который преобразует это в:

<a shape="rect">After</a><br clear="none"/>

Проблема в том, что мы сериализуем это как XML с Dom4jUtils.domToString(cleanedDocument), тогда как было бы более разумно сериализовать это как HTML. Здесь мы могли бы использовать саксонский сериализатор. Также используется с HTMLSerializer. Может быть, вы можете попробовать изменить этот код, чтобы использовать его вместо Dom4jUtils.domToString(). Вы дадите нам знать, что найдете, когда получите шанс сделать это.

0 голосов
/ 03 января 2011

Бинеш и я согласны, если есть ошибка, было бы неплохо рассмотреть проблему ближе к корню.Но я думаю, что в конкретном вопросе он является лишь частью вопроса.

Мы думаем, что было бы лучше иметь какое-то отображение имени на стратегию, чтобы RTE могли вызывать обработку на стороне сервера, которая подходит им или по умолчанию, если она не указана.

0 голосов
/ 30 декабря 2010

Эрик, Алекс и др.

Я думаю, что здесь есть два вопроса:

Первая проблема - это вопрос Tag Soup и очистки, которая происходит OOTB: пустые теги преобразуются в одноэлементные теги, которые при использовании / отправке клиентскому браузеру, как разметка, «исправляются» браузерами, такими как firefox, но из-за потеря точности, они делают неправильные вещи.

Отключение этой очистки помогает в этом случае, но только для этой проблемы не совсем правильный ответ, потому что мы убираем функцию безопасности и правильно сформированную функцию разметки ... поэтому может потребоваться некоторая корректировка обработка по крайней мере некоторых пустых тегов (кроме превращения их в недопустимые одноэлементные теги.)

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

Но отключение очистки оптом? Что ж, важно, что мы можем сделать это, если это то, к чему призывает наш сценарий использования, но у нас есть реализация «все или ничего». Было бы неплохо иметь возможность определять стратегии для очистки. Сделайте эту функцию подключаемой. Например: * В XML-конфигурации системы определите «карту» имен конфигурации с именами классов, которые реализуют данную стратегию. В XForm Def автор будет указывать имя с карты.

...