module salix::demo::basic::Files
rascal-0.41.2
org.rascalmpl.salix-core-0.2.9
Usage
import salix::demo::basic::Files;
Dependencies
import salix::App;
import salix::HTML;
import salix::Index;
import salix::Core;
import util::Maybe;
import IO;
function filesApp
SalixApp[Model] filesApp(str id = "root")
= makeApp(id, init, withIndex("Files", id, view), update, subs = subs);
function filesWebApp
App[Model] filesWebApp()
= webApp(filesApp(),|project://salix-core/src/main/rascal|);
function subs
list[Sub] subs(Model m) = [observeFile(fileChange, "it") | just(FSHandle fh) := m.theFile ];
alias Model
tuple[Maybe[FSHandle] theFile, list[list[FSChange]] changes]
function init
Model init() = <nothing(), []>;
data Msg
data Msg
= fileOpened(FSHandle fh)
| fileChange(list[FSChange] changes)
| openFile()
;
function update
Model update(Msg msg, Model m) {
switch (msg) {
case openFile(): do(pickFile(fileOpened, "it"));
case fileOpened(FSHandle fh): {
println(fh);
m.theFile = just(fh);
}
case fileChange(list[FSChange] cs):
m.changes += [cs];
}
return m;
}
function view
void view(Model m) {
h2("Dealing with files");
button(onClick(openFile()), "Open file...");
div("<m.theFile>");
ul(() {
for (list[FSChange] cs <- m.changes) {
li("<cs>");
}
});
}