Skip to main content

module salix::demo::basic::All

rascal-0.34.0
salix-core-0.2.3

Usage

import salix::demo::basic::All;

Source code

http://github.com/usethesource/salix-core/src/main/rascal/salix/demo/basic/All.rsc

Dependencies

import salix::HTML;
import salix::App;
import salix::Core;
import salix::Index;
import salix::util::Debug;
import salix::Index;
import salix::demo::basic::Celsius;
import salix::demo::basic::Counter;
import salix::demo::basic::Clock;
import salix::demo::basic::Random;

alias AllModel

tuple[   salix::demo::basic::Celsius::Model celsius,    salix::demo::basic::Counter::Model counter,    salix::demo::basic::Random::TwiceModel random,   salix::demo::basic::Clock::Model clock ]

data Msg

data Msg  
= celsius(Msg msg)
| counter(Msg msg)
| random(Msg msg)
| clock(Msg msg)
;

function allDemosApp

SalixApp[AllModel] allDemosApp(str id = "root") 
= makeApp(id, initAll, withIndex("All", id, viewAll), editAll
, subs = allSubs, parser = parseMsg);

function allDemosWebApp

App[AllModel] allDemosWebApp() 
= webApp(
allDemosApp(),
|project://salix/src/main/rascal|
);

function initAll

AllModel initAll() = <
mapCmds(Msg::celsius, salix::demo::basic::Celsius::init),
mapCmds(Msg::counter, salix::demo::basic::Counter::init),
mapCmds(Msg::random, salix::demo::basic::Random::twiceInit),
mapCmds(Msg::clock, salix::demo::basic::Clock::init)
>;

function allSubs

list[Sub] allSubs(AllModel m) 
= mapSubs(Msg::clock, m.clock, salix::demo::basic::Clock::subs);

function myDebugView

void myDebugView(DebugModel[AllModel] m) {
debugView(m, viewAll);
}

function viewAll

void viewAll(AllModel m) {
mapView(Msg::celsius, m.celsius, salix::demo::basic::Celsius::view);
mapView(Msg::counter, m.counter, salix::demo::basic::Counter::view);
mapView(Msg::random, m.random, salix::demo::basic::Random::twiceView);
mapView(Msg::clock, m.clock, salix::demo::basic::Clock::view);
}

function editAll

AllModel editAll(Msg msg, AllModel m) {

switch (msg) {
case celsius(Msg msg):
m.celsius = mapCmds(Msg::celsius, msg, m.celsius, salix::demo::basic::Celsius::update);

case counter(Msg msg):
m.counter = mapCmds(Msg::counter, msg, m.counter, salix::demo::basic::Counter::update);

case random(Msg msg):
m.random = mapCmds(Msg::random, msg, m.random, twiceUpdate);

case clock(Msg msg):
m.clock = mapCmds(Msg::clock, msg, m.clock, salix::demo::basic::Clock::update);
}

return m;
}