Обернуть текст в элемент с помощью xforms

Есть ли способ обернуть отмеченный текст в элемент с помощью xforms? Например:

Поместите тег вокруг этого word --> Поместите тег вокруг этого <tag>word</tag>

Я новичок в xforms, в настоящее время использую Xsltxforms на сервере exists-db, и я пытаюсь выяснить, упускаю ли я что-то или, например, нет способа сделать такую ​​​​вещь в текстовом поле. Заранее спасибо!


person nassoo    schedule 15.03.2016    source источник


Ответы (2)


В Рекомендации XForms нет механизма для такой обработки.

Но это было добавлено как расширение в XSLTForms: дополнительное действие с именем «xf:wrap» позволяет указать с контролем, что следует учитывать, и что следует добавить до и после выбора.

<?xml-stylesheet href="xsl/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events">
<head>
    <title>Wrap Selection</title>
    <xf:model>
        <xf:instance>
            <data xmlns="">Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo.</data>
        </xf:instance>
    </xf:model>
</head>
<body>
    <xf:trigger>
        <xf:label>&lt;a&gt;</xf:label>
        <xf:wrap ev:event="DOMActivate" control="t" pre="&lt;a&gt;" post="&lt;/a&gt;"/>
    </xf:trigger>
    <xf:trigger>
        <xf:label>&lt;b&gt;</xf:label>
        <xf:wrap ev:event="DOMActivate" control="t" pre="&lt;b&gt;" post="&lt;/b&gt;"/>
    </xf:trigger>
    <xf:trigger>
        <xf:label>&lt;c&gt;</xf:label>
        <xf:wrap ev:event="DOMActivate" control="t" pre="&lt;c&gt;" post="&lt;/c&gt;"/>
    </xf:trigger>
    <br/>
    <xf:textarea id="t" ref="." incremental="true"/>
    <br/>
    <xf:output value=".">
        <xf:label>Value: </xf:label>
    </xf:output>
</body>
</html>

Есть еще одна возможность с действием xf:setselection:

<?xml-stylesheet href="xsl/xsltforms.xsl" type="text/xsl"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events">
<head>
    <title>Set Selection</title>
    <xf:model>
        <xf:instance>
            <data xmlns="">Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium...</data>
        </xf:instance>
    </xf:model>
</head>
<body>
    <xf:trigger>
        <xf:label>&lt;span&gt;</xf:label>
        <xf:setselection ev:event="DOMActivate" control="t" value="concat('&lt;span start=&quot;', control-property('t', 'selectionStart'), '&quot; end=&quot;', control-property('t', 'selectionEnd'), '&quot;&gt;', selection('t'), '&lt;/span&gt;')"/>
    </xf:trigger>
    <br/>
    <xf:textarea id="t" ref="." incremental="true"/>
    <br/>
    <xf:output value=".">
        <xf:label>Value: </xf:label>
    </xf:output>
</body>
</html>

Демонстрация в реальном времени: http://www.agencexml.com/direct/wrap/setselection.xml< /а>

Как вы думаете?

person Alain Couthures    schedule 15.03.2016
comment
Спасибо, Ален! Кажется, это именно то, что мне было нужно... но я не уверен, как реализовать этот функционал. Когда я пытаюсь открыть ваш файл на сервере существующей базы данных, он возвращает исключение XSLTforms: Ошибка инициализации: xforms:wrap не поддерживается. Я полагаю, мне нужно добавить дополнительный код в xsltforms.xsl, чтобы добавить это дополнительное действие (поскольку вы написали расширение в XSLTForms)? - person nassoo; 17.03.2016
comment
@nassoo В eXist-db вы можете удалить текущее содержимое каталога xsltforms (используя WebDAV или клиент eXist Java Admin). Затем клонируйте последний код XSLTForms из GitHub и повторно заполните каталог xsltforms в eXist содержимым каталога build в репозитории XSLTForms. Я предполагаю, что вы используете eXist 2.2? Я не думаю, что eXist 3.0 RC1 пока работает с последними версиями XSLTForms. - person tat; 17.03.2016

Исправленный ответ: некоторые возможные решения заключаются в интеграции библиотеки, такой как Rangy (https://github.com/timdown/rangy) в XSLTForms или даже в редактор форматированного текста, такой как TinyMCE (что делает XSLTForms в этом примере: http://www.agencexml.com/xsltforms/tinymce.xml). Другой вариант — посмотреть Teian (https://sourceforge.net/projects/teian/) который разработан для TEI, но может быть шагом в правильном направлении.

person wsalesky    schedule 15.03.2016