-
Notifications
You must be signed in to change notification settings - Fork 391
/
Tags.kt
54 lines (43 loc) · 2.51 KB
/
Tags.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package org.jetbrains.dokka.base.renderers.html
import kotlinx.html.*
import kotlinx.html.stream.createHTML
import org.jetbrains.dokka.base.renderers.html.command.consumers.ImmediateResolutionTagConsumer
import org.jetbrains.dokka.base.templating.Command
import org.jetbrains.dokka.base.templating.toJsonString
typealias TemplateBlock = TemplateCommand.() -> Unit
@HtmlTagMarker
fun FlowOrPhrasingContent.wbr(classes: String? = null, block: WBR.() -> Unit = {}): Unit =
WBR(attributesMapOf("class", classes), consumer).visit(block)
@Suppress("unused")
open class WBR(initialAttributes: Map<String, String>, consumer: TagConsumer<*>) :
HTMLTag("wbr", consumer, initialAttributes, namespace = null, inlineTag = true, emptyTag = false),
HtmlBlockInlineTag
/**
* Work-around until next version of kotlinx.html doesn't come out
*/
@HtmlTagMarker
inline fun FlowOrPhrasingContent.strike(classes : String? = null, crossinline block : STRIKE.() -> Unit = {}) : Unit = STRIKE(attributesMapOf("class", classes), consumer).visit(block)
open class STRIKE(initialAttributes: Map<String, String>, override val consumer: TagConsumer<*>) :
HTMLTag("strike", consumer, initialAttributes, null, false, false), HtmlBlockInlineTag
fun FlowOrMetaDataContent.templateCommand(data: Command, block: TemplateBlock = {}): Unit =
(consumer as? ImmediateResolutionTagConsumer)?.processCommand(data, block)
?: TemplateCommand(attributesMapOf("data", toJsonString(data)), consumer).visit(block)
fun <T> TagConsumer<T>.templateCommand(data: Command, block: TemplateBlock = {}): T =
(this as? ImmediateResolutionTagConsumer)?.processCommandAndFinalize(data, block)
?: TemplateCommand(attributesMapOf("data", toJsonString(data)), this).visitAndFinalize(this, block)
fun templateCommandFor(data: Command, consumer: TagConsumer<*>) =
TemplateCommand(attributesMapOf("data", toJsonString(data)), consumer)
class TemplateCommand(initialAttributes: Map<String, String>, consumer: TagConsumer<*>) :
HTMLTag(
"dokka-template-command",
consumer,
initialAttributes,
namespace = null,
inlineTag = true,
emptyTag = false
),
CommonAttributeGroupFacadeFlowInteractivePhrasingContent
// This hack is outrageous. I hate it but I cannot find any other way around `kotlinx.html` type system.
fun TemplateBlock.buildAsInnerHtml(): String = createHTML(prettyPrint = false).run {
TemplateCommand(emptyMap, this).visitAndFinalize(this, this@buildAsInnerHtml).substringAfter(">").substringBeforeLast("<")
}