Skip to main content

module salix::demo::basic::Counter

rascal-0.41.2
org.rascalmpl.salix-core-0.2.9

Usage

import salix::demo::basic::Counter;

Dependencies

import salix::App;
import salix::HTML;
import salix::Index;

function counterApp

SalixApp[Model] counterApp(str id = "root") 
= makeApp(id, init, withIndex("Counter", id, view), update);

function counterWebApp

App[Model] counterWebApp()
= webApp(counterApp(),|project://salix-core/src/main/rascal|);

alias Model

tuple[int count]

function init

Model init() = <0>;

data Msg

data Msg  
= inc()
| dec()
;

function update

Model update(Msg msg, Model m) {
switch (msg) {
case inc(): m.count += 1;
case dec(): m.count -= 1;
}
return m;
}

function view

void view(Model m) {
h2("My first counter app in Rascal");
counterView(m);
}

function counterView

void counterView(Model m) {
button(onClick(inc()), "+");
span("<m.count>");
button(onClick(dec()), "-");
}