From b6baa5f30dae06e10018dc6fecf2ce59989acb3e Mon Sep 17 00:00:00 2001 From: Leonid Stashevsky Date: Tue, 23 Jan 2024 17:00:22 +0100 Subject: [PATCH] Added HTML templates (#255) Added template and slot elements. Co-authored-by: Jukka Papinkivi --- api/kotlinx-html.api | 22 +++++++++++++++++++ buildSrc/src/main/resources/html_5.xsd | 22 +++++++++++++++++++ .../kotlin/generated/gen-consumer-tags.kt | 15 +++++++++++++ .../kotlin/generated/gen-tag-groups.kt | 9 ++++++++ src/commonMain/kotlin/generated/gen-tags-s.kt | 9 ++++++++ src/commonMain/kotlin/generated/gen-tags-t.kt | 11 ++++++++++ .../kotlin/generated/gen-consumer-tags-js.kt | 17 ++++++++++++++ src/jsTest/kotlin/generated/gen-tag-tests.kt | 10 +++++++++ .../generated/gen-consumer-tags-wasm-js.kt | 17 ++++++++++++++ .../kotlin/generated/gen-tag-tests.kt | 10 +++++++++ 10 files changed, 142 insertions(+) diff --git a/api/kotlinx-html.api b/api/kotlinx-html.api index d6eb2c8a..a86f84c7 100644 --- a/api/kotlinx-html.api +++ b/api/kotlinx-html.api @@ -3367,6 +3367,8 @@ public final class kotlinx/html/Gen_consumer_tagsKt { public static synthetic fun section$default (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; public static final fun select (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static synthetic fun select$default (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun slot (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static synthetic fun slot$default (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; public static final fun small (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static synthetic fun small$default (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; public static final fun source (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; @@ -3395,6 +3397,8 @@ public final class kotlinx/html/Gen_consumer_tagsKt { public static synthetic fun tbody$default (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; public static final fun td (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static synthetic fun td$default (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; + public static final fun template (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; + public static synthetic fun template$default (Lkotlinx/html/TagConsumer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; public static final fun textArea (Lkotlinx/html/TagConsumer;Ljava/lang/String;Ljava/lang/String;Lkotlinx/html/TextAreaWrap;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object; public static final fun textArea (Lkotlinx/html/TagConsumer;Ljava/lang/String;Ljava/lang/String;Lkotlinx/html/TextAreaWrap;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; public static synthetic fun textArea$default (Lkotlinx/html/TagConsumer;Ljava/lang/String;Ljava/lang/String;Lkotlinx/html/TextAreaWrap;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/Object; @@ -3466,10 +3470,14 @@ public final class kotlinx/html/Gen_tag_groupsKt { public static synthetic fun putForm$default (Lkotlinx/html/FlowContent;Ljava/lang/String;Lkotlinx/html/FormEncType;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public static final fun s (Lkotlinx/html/FlowContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public static synthetic fun s$default (Lkotlinx/html/FlowContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public static final fun slot (Lkotlinx/html/PhrasingContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun slot$default (Lkotlinx/html/PhrasingContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public static final fun summary (Lkotlinx/html/FlowContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public static synthetic fun summary$default (Lkotlinx/html/FlowContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public static final fun table (Lkotlinx/html/FlowContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public static synthetic fun table$default (Lkotlinx/html/FlowContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public static final fun template (Lkotlinx/html/PhrasingContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V + public static synthetic fun template$default (Lkotlinx/html/PhrasingContent;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public static final fun title (Lkotlinx/html/MetaDataContent;Ljava/lang/String;)V public static final fun title (Lkotlinx/html/MetaDataContent;Lkotlin/jvm/functions/Function1;)V public static synthetic fun title$default (Lkotlinx/html/MetaDataContent;Ljava/lang/String;ILjava/lang/Object;)V @@ -3990,9 +3998,11 @@ public final class kotlinx/html/Gen_tags_tKt { public static synthetic fun colGroupTh$default (Lkotlinx/html/TR;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V public static final fun colTh (Lkotlinx/html/TR;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V public static synthetic fun colTh$default (Lkotlinx/html/TR;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V + public static final fun getAsFlowContent (Lkotlinx/html/TEMPLATE;)Lkotlinx/html/FlowContent; public static final fun getAsFlowContent (Lkotlinx/html/TEXTAREA;)Lkotlinx/html/FlowContent; public static final fun getAsFlowContent (Lkotlinx/html/TIME;)Lkotlinx/html/FlowContent; public static final fun getAsInteractiveContent (Lkotlinx/html/TEXTAREA;)Lkotlinx/html/InteractiveContent; + public static final fun getAsPhrasingContent (Lkotlinx/html/TEMPLATE;)Lkotlinx/html/PhrasingContent; public static final fun getAsPhrasingContent (Lkotlinx/html/TEXTAREA;)Lkotlinx/html/PhrasingContent; public static final fun getAsPhrasingContent (Lkotlinx/html/TIME;)Lkotlinx/html/PhrasingContent; public static final fun rowGroupTh (Lkotlinx/html/TR;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V @@ -4830,6 +4840,13 @@ public class kotlinx/html/SELECT : kotlinx/html/HTMLTag, kotlinx/html/CommonAttr public final fun setSize (Ljava/lang/String;)V } +public class kotlinx/html/SLOT : kotlinx/html/HTMLTag, kotlinx/html/HtmlInlineTag { + public fun (Ljava/util/Map;Lkotlinx/html/TagConsumer;)V + public fun getConsumer ()Lkotlinx/html/TagConsumer; + public final fun getName ()Ljava/lang/String; + public final fun setName (Ljava/lang/String;)V +} + public class kotlinx/html/SMALL : kotlinx/html/HTMLTag, kotlinx/html/HtmlBlockInlineTag { public fun (Ljava/util/Map;Lkotlinx/html/TagConsumer;)V public fun getConsumer ()Lkotlinx/html/TagConsumer; @@ -4999,6 +5016,11 @@ public class kotlinx/html/TD : kotlinx/html/HTMLTag, kotlinx/html/HtmlBlockTag { public final fun setRowSpan (Ljava/lang/String;)V } +public class kotlinx/html/TEMPLATE : kotlinx/html/HTMLTag, kotlinx/html/HtmlBlockInlineTag { + public fun (Ljava/util/Map;Lkotlinx/html/TagConsumer;)V + public fun getConsumer ()Lkotlinx/html/TagConsumer; +} + public class kotlinx/html/TEXTAREA : kotlinx/html/HTMLTag, kotlinx/html/CommonAttributeGroupFacadeFlowInteractivePhrasingContent { public fun (Ljava/util/Map;Lkotlinx/html/TagConsumer;)V public final fun getAutoFocus ()Z diff --git a/buildSrc/src/main/resources/html_5.xsd b/buildSrc/src/main/resources/html_5.xsd index 1fe12f05..6bc4ed82 100644 --- a/buildSrc/src/main/resources/html_5.xsd +++ b/buildSrc/src/main/resources/html_5.xsd @@ -207,6 +207,7 @@ + @@ -403,6 +404,7 @@ + @@ -410,6 +412,7 @@ + @@ -634,6 +637,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/commonMain/kotlin/generated/gen-consumer-tags.kt b/src/commonMain/kotlin/generated/gen-consumer-tags.kt index 0f7ae47e..909987f3 100644 --- a/src/commonMain/kotlin/generated/gen-consumer-tags.kt +++ b/src/commonMain/kotlin/generated/gen-consumer-tags.kt @@ -113,6 +113,7 @@ import kotlinx.html.SAMP import kotlinx.html.SCRIPT import kotlinx.html.SECTION import kotlinx.html.SELECT +import kotlinx.html.SLOT import kotlinx.html.SMALL import kotlinx.html.SOURCE import kotlinx.html.SPAN @@ -126,6 +127,7 @@ import kotlinx.html.ScriptCrossorigin import kotlinx.html.TABLE import kotlinx.html.TBODY import kotlinx.html.TD +import kotlinx.html.TEMPLATE import kotlinx.html.TEXTAREA import kotlinx.html.TFOOT import kotlinx.html.TH @@ -965,6 +967,11 @@ public inline fun > C.select(classes: String? = null, cros block: SELECT.() -> Unit = {}): T = SELECT(attributesMapOf("class", classes), this) .visitAndFinalize(this, block) +@HtmlTagMarker +public inline fun > C.slot(classes: String? = null, crossinline + block: SLOT.() -> Unit = {}): T = SLOT(attributesMapOf("class", classes), this) + .visitAndFinalize(this, block) + /** * Small text style */ @@ -1073,6 +1080,14 @@ public inline fun > C.td(classes: String? = null, crossinl block: TD.() -> Unit = {}): T = TD(attributesMapOf("class", classes), this) .visitAndFinalize(this, block) +/** + * Template + */ +@HtmlTagMarker +public inline fun > C.template(classes: String? = null, crossinline + block: TEMPLATE.() -> Unit = {}): T = TEMPLATE(attributesMapOf("class", classes), this) + .visitAndFinalize(this, block) + /** * Multi-line text field */ diff --git a/src/commonMain/kotlin/generated/gen-tag-groups.kt b/src/commonMain/kotlin/generated/gen-tag-groups.kt index af2ab126..4cb686fb 100644 --- a/src/commonMain/kotlin/generated/gen-tag-groups.kt +++ b/src/commonMain/kotlin/generated/gen-tag-groups.kt @@ -177,3 +177,12 @@ inline fun MetaDataContent.title(crossinline block : TITLE.() -> Unit = {}) : Un @HtmlTagMarker fun MetaDataContent.title(content : String = "") : Unit = TITLE(emptyMap, consumer).visit({+content}) +@HtmlTagMarker +inline fun PhrasingContent.slot(classes : String? = null, crossinline block : SLOT.() -> Unit = {}) : Unit = SLOT(attributesMapOf("class", classes), consumer).visit(block) + +/** + * Template + */ +@HtmlTagMarker +inline fun PhrasingContent.template(classes : String? = null, crossinline block : TEMPLATE.() -> Unit = {}) : Unit = TEMPLATE(attributesMapOf("class", classes), consumer).visit(block) + diff --git a/src/commonMain/kotlin/generated/gen-tags-s.kt b/src/commonMain/kotlin/generated/gen-tags-s.kt index 55123e0b..be98de13 100644 --- a/src/commonMain/kotlin/generated/gen-tags-s.kt +++ b/src/commonMain/kotlin/generated/gen-tags-s.kt @@ -171,6 +171,15 @@ val SELECT.asPhrasingContent : PhrasingContent get() = this +@Suppress("unused") +open class SLOT(initialAttributes : Map, override val consumer : TagConsumer<*>) : HTMLTag("slot", consumer, initialAttributes, null, false, false), HtmlInlineTag { + var name : String + get() = attributeStringString.get(this, "name") + set(newValue) {attributeStringString.set(this, "name", newValue)} + + +} + @Suppress("unused") open class SMALL(initialAttributes : Map, override val consumer : TagConsumer<*>) : HTMLTag("small", consumer, initialAttributes, null, true, false), HtmlBlockInlineTag { diff --git a/src/commonMain/kotlin/generated/gen-tags-t.kt b/src/commonMain/kotlin/generated/gen-tags-t.kt index f5604ad6..5f02d65e 100644 --- a/src/commonMain/kotlin/generated/gen-tags-t.kt +++ b/src/commonMain/kotlin/generated/gen-tags-t.kt @@ -82,6 +82,17 @@ open class TD(initialAttributes : Map, override val consumer : T } +@Suppress("unused") +open class TEMPLATE(initialAttributes : Map, override val consumer : TagConsumer<*>) : HTMLTag("template", consumer, initialAttributes, null, false, false), HtmlBlockInlineTag { + +} +val TEMPLATE.asFlowContent : FlowContent + get() = this + +val TEMPLATE.asPhrasingContent : PhrasingContent + get() = this + + @Suppress("unused") open class TEXTAREA(initialAttributes : Map, override val consumer : TagConsumer<*>) : HTMLTag("textarea", consumer, initialAttributes, null, true, false), CommonAttributeGroupFacadeFlowInteractivePhrasingContent { var autoFocus : Boolean diff --git a/src/jsMain/kotlin/generated/gen-consumer-tags-js.kt b/src/jsMain/kotlin/generated/gen-consumer-tags-js.kt index 9f9bd4d3..2eeafd66 100644 --- a/src/jsMain/kotlin/generated/gen-consumer-tags-js.kt +++ b/src/jsMain/kotlin/generated/gen-consumer-tags-js.kt @@ -113,6 +113,7 @@ import kotlinx.html.SAMP import kotlinx.html.SCRIPT import kotlinx.html.SECTION import kotlinx.html.SELECT +import kotlinx.html.SLOT import kotlinx.html.SMALL import kotlinx.html.SOURCE import kotlinx.html.SPAN @@ -126,6 +127,7 @@ import kotlinx.html.ScriptCrossorigin import kotlinx.html.TABLE import kotlinx.html.TBODY import kotlinx.html.TD +import kotlinx.html.TEMPLATE import kotlinx.html.TEXTAREA import kotlinx.html.TFOOT import kotlinx.html.TH @@ -187,6 +189,7 @@ import org.w3c.dom.HTMLTableColElement import org.w3c.dom.HTMLTableElement import org.w3c.dom.HTMLTableRowElement import org.w3c.dom.HTMLTableSectionElement +import org.w3c.dom.HTMLTemplateElement import org.w3c.dom.HTMLTextAreaElement import org.w3c.dom.HTMLTimeElement import org.w3c.dom.HTMLTitleElement @@ -1032,6 +1035,11 @@ public inline fun TagConsumer.select(classes: String? = null, cross this) .visitAndFinalize(this, block) as HTMLSelectElement +@HtmlTagMarker +public inline fun TagConsumer.slot(classes: String? = null, crossinline + block: SLOT.() -> Unit = {}): HTMLElement = SLOT(attributesMapOf("class", classes), this) + .visitAndFinalize(this, block) + /** * Small text style */ @@ -1142,6 +1150,15 @@ public inline fun TagConsumer.td(classes: String? = null, crossinli block: TD.() -> Unit = {}): HTMLTableCellElement = TD(attributesMapOf("class", classes), this) .visitAndFinalize(this, block) as HTMLTableCellElement +/** + * Template + */ +@HtmlTagMarker +public inline fun TagConsumer.template(classes: String? = null, crossinline + block: TEMPLATE.() -> Unit = {}): HTMLTemplateElement = TEMPLATE(attributesMapOf("class", + classes), this) + .visitAndFinalize(this, block) as HTMLTemplateElement + /** * Multi-line text field */ diff --git a/src/jsTest/kotlin/generated/gen-tag-tests.kt b/src/jsTest/kotlin/generated/gen-tag-tests.kt index 62c1e6b4..0ed0710a 100644 --- a/src/jsTest/kotlin/generated/gen-tag-tests.kt +++ b/src/jsTest/kotlin/generated/gen-tag-tests.kt @@ -453,6 +453,11 @@ public class JsTagCastTests { wrapper().select {} } + @test + public fun testSlot() { + wrapper().slot {} + } + @test public fun testSmall() { wrapper().small {} @@ -513,6 +518,11 @@ public class JsTagCastTests { wrapper().td {} } + @test + public fun testTemplate() { + wrapper().template {} + } + @test public fun testTextArea() { wrapper().textArea {} diff --git a/src/wasmJsMain/kotlin/generated/gen-consumer-tags-wasm-js.kt b/src/wasmJsMain/kotlin/generated/gen-consumer-tags-wasm-js.kt index 9b0ea2b8..c7eb9138 100644 --- a/src/wasmJsMain/kotlin/generated/gen-consumer-tags-wasm-js.kt +++ b/src/wasmJsMain/kotlin/generated/gen-consumer-tags-wasm-js.kt @@ -113,6 +113,7 @@ import kotlinx.html.SAMP import kotlinx.html.SCRIPT import kotlinx.html.SECTION import kotlinx.html.SELECT +import kotlinx.html.SLOT import kotlinx.html.SMALL import kotlinx.html.SOURCE import kotlinx.html.SPAN @@ -126,6 +127,7 @@ import kotlinx.html.ScriptCrossorigin import kotlinx.html.TABLE import kotlinx.html.TBODY import kotlinx.html.TD +import kotlinx.html.TEMPLATE import kotlinx.html.TEXTAREA import kotlinx.html.TFOOT import kotlinx.html.TH @@ -187,6 +189,7 @@ import org.w3c.dom.HTMLTableColElement import org.w3c.dom.HTMLTableElement import org.w3c.dom.HTMLTableRowElement import org.w3c.dom.HTMLTableSectionElement +import org.w3c.dom.HTMLTemplateElement import org.w3c.dom.HTMLTextAreaElement import org.w3c.dom.HTMLTimeElement import org.w3c.dom.HTMLTitleElement @@ -1030,6 +1033,11 @@ public inline fun TagConsumer.select(classes: String? = null, crossinli this) .visitAndFinalize(this, block) as HTMLSelectElement +@HtmlTagMarker +public inline fun TagConsumer.slot(classes: String? = null, crossinline + block: SLOT.() -> Unit = {}): Element = SLOT(attributesMapOf("class", classes), this) + .visitAndFinalize(this, block) + /** * Small text style */ @@ -1140,6 +1148,15 @@ public inline fun TagConsumer.td(classes: String? = null, crossinline b = {}): HTMLTableCellElement = TD(attributesMapOf("class", classes), this) .visitAndFinalize(this, block) as HTMLTableCellElement +/** + * Template + */ +@HtmlTagMarker +public inline fun TagConsumer.template(classes: String? = null, crossinline + block: TEMPLATE.() -> Unit = {}): HTMLTemplateElement = TEMPLATE(attributesMapOf("class", + classes), this) + .visitAndFinalize(this, block) as HTMLTemplateElement + /** * Multi-line text field */ diff --git a/src/wasmJsTest/kotlin/generated/gen-tag-tests.kt b/src/wasmJsTest/kotlin/generated/gen-tag-tests.kt index 2554ae20..9ce12862 100644 --- a/src/wasmJsTest/kotlin/generated/gen-tag-tests.kt +++ b/src/wasmJsTest/kotlin/generated/gen-tag-tests.kt @@ -453,6 +453,11 @@ public class JsTagCastTests { wrapper().select {} } + @test + public fun testSlot() { + wrapper().slot {} + } + @test public fun testSmall() { wrapper().small {} @@ -513,6 +518,11 @@ public class JsTagCastTests { wrapper().td {} } + @test + public fun testTemplate() { + wrapper().template {} + } + @test public fun testTextArea() { wrapper().textArea {}