// browser-counter.el — canonical browser DOM bridge example // // Compile with: elc --target=js examples/browser-counter.el > counter.js // // Then include in an HTML page that has a element. // The page can call window.increment() from any onclick handler, e.g.: // // // On load the display is initialised to "0". Each call to increment() // adds 1 and updates the display text. // // Demonstrates: // - dom_get_element to locate a DOM node by id // - dom_set_text to update visible text content // - dom_is_null to guard against missing elements // - window_set to expose an El function for inline event handlers // - state_set/get for in-memory counter state (survives calls, resets // on page reload — same semantics as the C state_* API) fn init() -> Void { state_set("counter", 0) let display = dom_get_element("count-display") if !dom_is_null(display) { dom_set_text(display, "0") } } fn increment() -> Void { let current = str_to_int(state_get("counter")) let next = current + 1 state_set("counter", next) let display = dom_get_element("count-display") if !dom_is_null(display) { dom_set_text(display, int_to_str(next)) } } fn main() -> Void { init() window_set("increment", increment) }