Разметка документов¶
При выделении части текста документа необходимо:
Создать фрагмент документа, который будет вставляться в отчеты как текст требования.¶
Эта задача сейчас решается частично:
getSerializer().serializeToString( selection.getRangeAt(0).cloneContents() );
возвращает xhtml фрагмент для выделенной чсасти докумнта, но без учета контекста -
стилей и объемлющих тегов (например, pre).
Пометить выделенную часть, чтобы показывать её в документе как текст требования.¶
В текущей версии выбираются все текстовые узлы DOM-дерева документа, которые пересекаются с выделенной областью, причем пересечение содержит непробельные символы, и оборачиваются в теги
<span class="requality_text id_${uuid}">...</span>
где uuid - это уникальный идентификатор location.
Для текстовых узлов, которые не полностью содержатся в выделенной области, span оборачивает только часть, входящую в выделенную область.
В первый span добавляется
<a name="${uuid}" id="id_${uuid}" class="requality_id"/>
который позволяет позиционировать документ на выделенном тексте. И
<span class="requality_link requality_link_(in)?visible">${id}</span>
Который показывает идентификатор требования, к которому относится выделенный текст.
Таким образом, первый span имеет следующий вид:
<span class="requality_text id_${uuid}"> <a name="${uuid}" id="id_${uuid}" class="requality_id"/> <span class="requality_link requality_link_(in)?visible">${id}</span> ... </span>
requality_link_(in)?visible - означает, что есть стили requality_link_visible и requality_link_invisible, но применяется только один, который соответствует текущему режиму видимости идентификаторов.
Недостатки у такой схемы следующие:
- Если в выделенной части документа нет текста, то выделение заметно не будет.
- Конец выделенной части документа не помечается, поэтому восстановить выделение по разметке нельзя.
Второй недостаток при необходимости победить легко вставкой тега в конце выделенной части.
Для борьбы с первым недостатком необходимо добавлять стиль к узлам, которые не содержат текстовых узлов, а потом определять этот стиль так, чтобы узлы становились визуально отличны. Например, с помощью border.
Пример: если выделена картинка:
<img src="..."/>
Добавим ей стиль:
<img style="requality_node id_${uuid}" src="..."/>
Updated by Alexey Demakov almost 14 years ago · 2 revisions