Wichtig
Detail
Fehlerbehebung
Wichtig
Detail
HTML kann in TLScript in {{{...}}} embeddet werden. Darin können wiederum in {`...}` Script-Ausdrücke eingebettet werden, deren Auswertungsergebnis ausgegeben wird.
Die Attributtypen Macro, Template und Report verwenden diesen HTML-Modus von TL-Script als HTML-Template-Sprache mit eingebetteten Ausdrücken. Das Dokument ist dabei eigentlich HTML, kann aber in Attributen oder Text-Content TL-Script-Ausdrücke eingeschlossen in {`...}` enthalten.
<div> The answer is <b>{6 * 7}</b>. </div>
Das Template-Dokument bleibt dadurch legales HTML und kann auch in einem Browser (oder WYSIWYG-Editor) editiert werden - zumindet solange es sich um einfache Ausdrücke handelt (die als einfacher Text schreibbar sind).
Möchte man allerdings in dem embedded Script dynamisches HTML generieren und dafür wieder mit {{{...}}} in den HTML-Modus wechseln, dann wird dadurch das Gesamtdokument entweder komplett unleserlich, weil man alle <-Zeichen quoten muss, oder aber es ist nicht mehr als HTML darstellbar:
<div> My favorite numbers are: </div> <ul> { count(1,100).filter(x -> $x % 7 == 0).map(x -> {{{ <li>{$x}</li> }}} ) } </ul>
Dieses Dokument enthält Text zwischen <ul> und dem einen <li>...</li> und ist daher kein legales HTML mehr. Um solche Scripte in normalen HTML-Attributen speichern zu können, wäre es besser ein embedded Script über ein HTML-Script-Tag auszeichnen zu können:
<div> My favorite numbers are: </div> <ul> <script type="text/tlscript"> count(1,100).filter(x -> $x % 7 == 0).map(x -> {{{ <li>{$x}</li> }}} ) </script> </ul>
Zwar zeigt ein HTML-Editor den Script-Inhalt in der Preview dann auch nicht ohne weiteres an, aber zumindest kann das Script in der Quellcode-Ansicht des Editors so bearbeitet werden.
Test
- /com.top_logic.model.search/src/test/java/test/com/top_logic/model/search/expr/TestHtmlMacroExpansion-testEmbeddedScriptTag.script.html