// ============================================================================ // 054 — HTMX Counter // ============================================================================ // A counter that updates without page reloads using HTMX. // // Serve: soma serve 054_htmx_counter.cell // Test: open http://localhost:8080 // // Run: soma run 054_htmx_counter.cell demo // Expect: // Count: 0 // Count: 1 // Count: 2 cell HtmxCounter { face { signal request(method: String, path: String, body: String) -> String signal increment() -> String signal decrement() -> String signal value() -> String signal demo() -> String } memory { data: Map [persistent, consistent] } on request(method: String, path: String, body: String) { return html(" HTMX Counter

HTMX Counter

0
") } on value() { let v = data.get("count") ?? 0 return html(to_string(v)) } on increment() { let v = data.get("count") ?? 0 data.set("count", v + 1) let result = v + 1 return html(to_string(result)) } on decrement() { let v = data.get("count") ?? 0 data.set("count", v - 1) let result = v - 1 return html(to_string(result)) } on demo() { data.set("count", 0) let v0 = data.get("count") print("Count: {v0}") increment() let v1 = data.get("count") print("Count: {v1}") increment() let v2 = data.get("count") print("Count: {v2}") return "done" } }