Project

General

Profile

Actions

Разметка документов

При выделении части текста документа необходимо:

Создать фрагмент документа, который будет вставляться в отчеты как текст требования.

Эта задача сейчас решается частично:

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