module salix::demo::basic::Random
rascal-0.34.0
salix-core-0.2.3
Usage
import salix::demo::basic::Random;
Source code
http://github.com/usethesource/salix-core/src/main/rascal/salix/demo/basic/Random.rsc
Dependencies
import salix::HTML;
import salix::Core;
import salix::App;
import salix::Index;
function randomApp
SalixApp[Model] randomApp(str id = "root")
= makeApp(id, init, withIndex("Random", id, view), update);
function randomWebApp
App[Model] randomWebApp() = webApp(randomApp(), |project://salix/src/main/rascal|);
alias Model
tuple[int dieFace]
function init
Model init() = <1>;
data Msg
data Msg
= roll()
| newFace(int face)
;
function update
Model update(Msg msg, Model m) {
switch (msg) {
case roll(): do(random(newFace, 1, 6));
case newFace(int n): m.dieFace = n;
}
return m;
}
function view
void view(Model m) {
button(onClick(roll()), "Roll");
text(m.dieFace);
}
function twiceWebApp
App[TwiceModel] twiceWebApp()
= webApp(
makeApp("root", twiceInit, withIndex("Twice", "root", twiceView), twiceUpdate),
|project://salix/src/main/rascal|
);
function twiceInit
TwiceModel twiceInit() = twice(init(), init());
data TwiceModel
data TwiceModel
= twice(Model model1, Model model2)
;
data Msg
data Msg
= sub1(Msg msg)
| sub2(Msg msg)
;
function twiceUpdate
TwiceModel twiceUpdate(Msg msg, TwiceModel m) {
switch (msg) {
case sub1(Msg s):
m.model1 = mapCmds(sub1, s, m.model1, update);
case sub2(Msg s):
m.model2 = mapCmds(sub2, s, m.model2, update);
}
return m;
}
function twiceView
void twiceView(TwiceModel m) {
h2("Two times roll a die");
mapView(sub1, m.model1, view);
mapView(sub2, m.model2, view);
}