Skip to main content

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>");
}
});

}