From 4be9831eddba9bcdbaa2e21a90955a8384352d14 Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Wed, 13 Aug 2025 20:55:46 +0200 Subject: [PATCH] Add HtmlBuilder --- core/src/scalive/HtmlBuilder.scala | 30 ++++++++++++++++++++++++++++++ core/src/scalive/main.scala | 2 ++ 2 files changed, 32 insertions(+) create mode 100644 core/src/scalive/HtmlBuilder.scala diff --git a/core/src/scalive/HtmlBuilder.scala b/core/src/scalive/HtmlBuilder.scala new file mode 100644 index 0000000..5d08d61 --- /dev/null +++ b/core/src/scalive/HtmlBuilder.scala @@ -0,0 +1,30 @@ +package scalive + +import java.io.StringWriter + +object HtmlBuilder: + + def build(lv: LiveView[?]): String = + val strw = new StringWriter() + build(lv.static, lv.dynamic, strw) + strw.toString() + + private def build( + static: Seq[String], + dynamic: Seq[LiveMod[?]], + strw: StringWriter + ): Unit = + for i <- dynamic.indices do + strw.append(static(i)) + dynamic(i) match + case mod: LiveMod.Dynamic[?, ?] => + strw.append(mod.currentValue.toString) + case mod: LiveMod.When[?] => build(mod, strw) + case mod: LiveMod.Split[?, ?] => build(mod, strw) + strw.append(static.last) + + private def build(mod: LiveMod.When[?], strw: StringWriter): Unit = + if mod.displayed then build(mod.nested.static, mod.nested.dynamic, strw) + + private def build(mod: LiveMod.Split[?, ?], strw: StringWriter): Unit = + mod.dynamic.foreach(entry => build(mod.static, entry, strw)) diff --git a/core/src/scalive/main.scala b/core/src/scalive/main.scala index d6486b9..36c8ca7 100644 --- a/core/src/scalive/main.scala +++ b/core/src/scalive/main.scala @@ -17,6 +17,8 @@ def main = ) println(lv.fullDiff.toJsonPretty) + println(HtmlBuilder.build(lv)) + println("Edit first and last") lv.update( MyModel(