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 get references de identificadores personalizados en values ​​/ ids.xml
  • Cuenta el número de dígitos en Kotlin
  • ¿Cómo dividir una cadena con un set de delimitadores y encontrar qué delimitador era? Kotlin
  • Kotlin lambdas y tipo de inferencia
  • El renderizador de forma libGDX no dibuja después de presionar el button Atrás
  • Volver al fragment astackdo de espaldas
  • RuntimeException si minifyEnabled es verdadero con la class ViewModel
  • ¿Hay alguna forma de limitar la visibilidad de las funciones stdlib en Kotlin?
  • ¿Por qué algunos methods de configuration de Java se convierten automáticamente en properties de Kotlin pero otros no?
  • Kotlin y Java en el mismo proyecto utilizando Eclipse IDE
  • Kotlin: configuration de un boolean privado en class Java a través de una class de datos en Kotlin. ¿Por qué no puedo hacer esto?