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(