Escriba código html sin procesar dentro de kotlinx.html DSL

Estoy usando la biblioteca html de Kotlin kotlinx.html para la construcción dinámica de html.

Para la debugging propone que quiero escribir una label como un html sin formatting. Pero no puedo encontrar ningún método que lo haga. La adición de text simple reemplaza caracteres como < a sus códigos, por lo que no ayuda:

 StringBuilder().appendHTML().html { body { +""" <form action="http://courier-voddan.rhcloud.com/customer/new_task" method="get"> get=form id=3333 <button type="submit">ok</button> </form> """.trimIndent() } } 

Simplemente use unsafe dentro de su label para evitar la encoding HTML.

 body { unsafe { +"""<form class="formClass"/>""" } } 

Cualquier cosa dentro de appendHTML será codificada. Si desea agregar text sin formatting, puede usar appendln .

Ejemplo de Streaming · Kotlin / kotlinx.html Wiki · GitHub :

 val text = StringBuilder { appendln("<!DOCTYPE html>") appendHTML().html { body { a("http://kotlinlang.org") { +"link" } } } appendln() } 

Una solución (limitada) sería piratear el DSL y usar onTagContentUnsafe :

 this.consumer.onTagContentUnsafe { +"hello"} 

Cada Tag tiene un consumer propiedad. Este es un object que realmente trata con el DOM. En el caso de la generación de HTML, este object es HTMLStreamBuilder . Tiene un método en onTagContentUnsafe que le da acceso al generador de secuencias.

Yo uso una function auxiliar:

 fun Tag.rawHtml(html: String) { assert(this.consumer is HTMLStreamBuilder) this.consumer.onTagContentUnsafe { +"$html\n"} } 

Como señaló @orangy, esta solución funciona para la generación de código, pero no se puede usar para crear JVM DOM, etc. Para eso hay un ticket: https://github.com/Kotlin/kotlinx.html/issues/ 8

  • ¿Cómo puedo crear un "forEach" que devuelva un object que sea un receptor a la function de consumo?
  • Accediendo a sets fuente con kotlin-dsl para gradle
  • ¿Cómo hacer valer un String vacío y no nulo en Kotlin?
  • No se esperan arguments de tipo para la diversión findViewById (p0: Int): Ver
  • GridView dentro de ListRow usando la biblioteca de Leanback
  • Kotlin EJB con interfaz Java arroja UndeclanetworkingThrowableException
  • Cómo hacer PATCH correctamente en lenguajes fuertemente tipados basados ​​en Spring - example
  • LinkageError en una instancia de la class Kotlin con método notify ()
  • Cómo convertir Any to Int en Kotlin
  • ¿Cómo ejecutar la class Kotlin desde la línea de command?
  • Lista que contiene valores anulables a una Lista anulable en Kotlin