Skip to content

Commit 57a94af

Browse files
committed
add: text rendering
1 parent 45eb94e commit 57a94af

File tree

10 files changed

+37
-10
lines changed

10 files changed

+37
-10
lines changed

renlin/src/commonMain/kotlin/net/kigawa/renlin/dsl/state/BasicDslStateBase.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,10 @@ abstract class BasicDslStateBase : DslState {
4545

4646
abstract fun setElements(index: Int, elements: List<TagNode>)
4747
fun getElements(): List<TagNode> {
48-
return ownElement?.let { listOf(it) }
49-
?: subStates.flatMap { it.getElements() }
48+
return ownElement?.let {
49+
if (it.isEmpty) listOf()
50+
else listOf(it)
51+
} ?: subStates.flatMap { it.getElements() }
5052
}
5153

5254
fun remove() {

renlin/src/commonMain/kotlin/net/kigawa/renlin/element/TagNode.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import net.kigawa.renlin.tag.Tag
44

55
@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
66
expect interface TagNode {
7+
val isEmpty: Boolean
78
fun setTextContent(text: String?)
89
fun newNode(tag: Tag<*>): TagNode
910
fun remove()
10-
1111
fun setNodes(index: Int, nodes: List<TagNode>)
1212
}

renlin/src/commonMain/kotlin/net/kigawa/renlin/tag/Div.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class DivDsl : DslBase(), Dsl, FlowContentDsl, PhrasingContentDsl {
1414

1515
override var textContent: String? = null
1616
set(value) {
17-
textNodeTag.render(this) {
17+
text.render(this) {
1818
text = value
1919
}
2020
field = value

renlin/src/commonMain/kotlin/net/kigawa/renlin/tag/P.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class PDsl() : DslBase(), Dsl, PhrasingContentDsl {
1414

1515
override var textContent: String? = null
1616
set(value) {
17-
textNodeTag.render(this) {
17+
text.render(this) {
1818
text = value
1919
}
2020
field = value

renlin/src/commonMain/kotlin/net/kigawa/renlin/tag/Text.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,20 @@ import net.kigawa.renlin.tag.item.FlowContentItem
88

99
class TextNodeTagDsl : DslBase(), Dsl {
1010
var text: String? = null
11+
set(value) {
12+
dslState?.applyDsl(this)
13+
field = value
14+
}
15+
operator fun String.unaryPlus() {
16+
text = this
17+
}
1118

1219
override fun applyElement(element: TagNode) {
1320
element.setTextContent(text)
1421
}
1522
}
1623

17-
val textNodeTag = TagComponent0<TextNodeTag, TextNodeTagDsl>(TextNodeTag)
24+
val text = TagComponent0<TextNodeTag, TextNodeTagDsl>(TextNodeTag)
1825

1926
object TextNodeTag : FlowContentItem<TextNodeTagDsl>, Tag<TextNodeTagDsl> {
2027
override val name: String

renlin/src/jsMain/kotlin/net/kigawa/renlin/element/DomTagElement.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ class DomTagElement(
1010
override val node: Node,
1111
private val parent: DomTagElement?,
1212
) : TagNode {
13+
override val isEmpty: Boolean
14+
get() = if (node is Text) node.textContent == null else false
15+
1316
override fun setTextContent(text: String?) {
1417
node.textContent = text
1518
}

renlin/src/jsMain/kotlin/net/kigawa/renlin/element/TagNode.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.w3c.dom.Node
55

66
@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
77
actual interface TagNode {
8+
actual val isEmpty: Boolean
89
val node: Node
910
actual fun setTextContent(text: String?)
1011
actual fun newNode(tag: Tag<*>): TagNode

renlin/src/jvmMain/kotlin/net/kigawa/renlin/element/TagNode.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import net.kigawa.renlin.tag.Tag
44

55
@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
66
actual interface TagNode {
7+
actual val isEmpty: Boolean
78
actual fun setTextContent(text: String?)
89
actual fun newNode(tag: Tag<*>): TagNode
910
actual fun remove()

sample/src/commonMain/kotlin/net/kigawa/renlin/sample/SampleComponent.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,24 @@ package net.kigawa.renlin.sample
22

33
import net.kigawa.renlin.tag.div
44
import net.kigawa.renlin.tag.p
5+
import net.kigawa.renlin.tag.text
56

67
class SampleComponent(
78
val name: String,
89
val sub: Sub,
910
) {
11+
lateinit var update: (Int) -> Unit
1012
val root = div.component {
1113
// debug("root")
1214
key = "uuid aaaddasdawaadadssdasaaaa"
1315
+"test root"
14-
for (i in 0..10) {
15-
p {
16-
key = "uuid 1"
17-
+"repeat $i"
16+
div {
17+
key = "uuid 1"
18+
text {
19+
key = "uuid 1-1"
20+
update = {
21+
+"repeat $it"
22+
}
1823
}
1924
}
2025
sub.display {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
package net.kigawa.renlin.sample
22

33
import kotlinx.browser.document
4+
import kotlinx.browser.window
45
import net.kigawa.renlin.Entrypoint
56

67
fun main() {
78
val root = document.getElementById("root") ?: throw Exception("Root not found")
89
val sample = SampleComponent("sample", Sub())
910
Entrypoint(root).render(sample.root)
11+
var i = 0
12+
window.setInterval({
13+
14+
i++
15+
sample.update(i)
16+
}, 1000, 1000)
17+
1018
}

0 commit comments

Comments
 (0)