Virtual DOM implemention and application definition inspired from HyperApp.
Crate that providing JSX like macro by proc_marco
and pest parser.
view! {
<button class="clear-completed" onclick={ handler((), move |_| { Some(Action::Submit) }) }>
Submit
</button>
}
Squark runtime implemention for web browser with usinng stdweb.
Here is full example of counter app!
```rust
extern crate squark; extern crate squarkmacros; extern crate squarkstdweb; extern crate stdweb;
use stdweb::traits::*; use stdweb::web::document; use squark::{handler, text, App, View}; use squarkstdweb::Runtime; use squarkmacros::view;
struct State { count: isize, }
impl State { pub fn new() -> State { State { count: 0, } } }
enum Action { Increment, Decrement, }
struct CounterApp; impl App for CounterApp { type State = State; type Action = Action;
fn reducer(mut state: State, action: Action) -> State {
match action {
Action::Increment => {
state.count += 1;
},
Action::Decrement => {
state.count -= 1;
},
};
state
}
fn view(state: State) -> View<Action> {
view! {
<div>
{ text(state.count.to_string()) }
<button onclick={ handler((), |_| Some(Action::Increment)) }>
increment
</button>
<button onclick={ handler((), |_| Some(Action::Decrement)) }>
decrement
</button>
</div>
}
}
}
fn main() {
stdweb::initialize();
Runtime::
Project dir is located at examples/counter.
It is also available TodoMVC example at examples/todomvc and working on https://rail44.github.io/squark/.