mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-03-21 04:30:53 +00:00
73 lines
2.0 KiB
Rust
73 lines
2.0 KiB
Rust
//! # TODO MVC
|
|
//!
|
|
//! A [TODO MVC](https://todomvc.com/) implementation written using [web-sys](https://rustwasm.github.io/wasm-bindgen/web-sys/overview.html)
|
|
|
|
extern crate wasm_bindgen;
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
extern crate js_sys;
|
|
extern crate web_sys;
|
|
use std::rc::Rc;
|
|
|
|
extern crate askama;
|
|
extern crate console_error_panic_hook;
|
|
|
|
/// Controller of the program
|
|
pub mod controller;
|
|
/// Element wrapper to the DOM
|
|
pub mod element;
|
|
/// Schedule messages to the Controller and View
|
|
pub mod scheduler;
|
|
/// Stores items into localstorage
|
|
pub mod store;
|
|
/// Handles constructing template strings from data
|
|
pub mod template;
|
|
/// Presentation layer
|
|
pub mod view;
|
|
use crate::controller::{Controller, ControllerMessage};
|
|
use crate::scheduler::Scheduler;
|
|
use crate::store::Store;
|
|
use crate::view::{View, ViewMessage};
|
|
|
|
/// Message wrapper enum used to pass through the scheduler to the Controller or View
|
|
pub enum Message {
|
|
/// Message wrapper to send to the controller
|
|
Controller(ControllerMessage),
|
|
/// Message wrapper to send to the view
|
|
View(ViewMessage),
|
|
}
|
|
|
|
/// Used for debugging to the console
|
|
pub fn exit(message: &str) {
|
|
let v = wasm_bindgen::JsValue::from_str(&message.to_string());
|
|
web_sys::console::exception_1(&v);
|
|
std::process::abort();
|
|
}
|
|
|
|
fn app(name: &str) {
|
|
let sched = Rc::new(Scheduler::new());
|
|
let store = match Store::new(name) {
|
|
Some(s) => s,
|
|
None => return,
|
|
};
|
|
let controller = Controller::new(store, Rc::downgrade(&sched));
|
|
if let Some(mut view) = View::new(sched.clone()) {
|
|
let sch: &Rc<Scheduler> = &sched;
|
|
view.init();
|
|
sch.set_view(view);
|
|
sch.set_controller(controller);
|
|
sched.add_message(Message::Controller(ControllerMessage::SetPage(
|
|
"".to_string(),
|
|
)));
|
|
}
|
|
}
|
|
|
|
/// Entry point into the program from JavaScript
|
|
#[wasm_bindgen(start)]
|
|
pub fn run() -> Result<(), JsValue> {
|
|
console_error_panic_hook::set_once();
|
|
app("todos-wasmbindgen");
|
|
|
|
Ok(())
|
|
}
|