diff options
author | Jesse Luehrs <doy@tozt.net> | 2019-11-23 05:51:00 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2019-11-23 05:51:00 -0500 |
commit | 69d725d56cb43d92042eecbcc6d306782799ab88 (patch) | |
tree | 519f63929af020effc0ed30eeba86375989a39ff /teleterm-web | |
parent | 0650ecd21a522536c5dc3a764847583e0fae61df (diff) | |
download | teleterm-69d725d56cb43d92042eecbcc6d306782799ab88.tar.gz teleterm-69d725d56cb43d92042eecbcc6d306782799ab88.zip |
pass configuration from the web server to the web app
Diffstat (limited to 'teleterm-web')
-rw-r--r-- | teleterm-web/src/config.rs | 18 | ||||
-rw-r--r-- | teleterm-web/src/lib.rs | 3 | ||||
-rw-r--r-- | teleterm-web/src/model.rs | 14 | ||||
-rw-r--r-- | teleterm-web/src/views/page.rs | 8 |
4 files changed, 39 insertions, 4 deletions
diff --git a/teleterm-web/src/config.rs b/teleterm-web/src/config.rs new file mode 100644 index 0000000..c6dbc50 --- /dev/null +++ b/teleterm-web/src/config.rs @@ -0,0 +1,18 @@ +use crate::prelude::*; + +#[wasm_bindgen] +extern "C" { + #[wasm_bindgen] + static TELETERM_CONFIG: JsValue; +} + +#[derive(Clone, Debug, serde::Deserialize)] +pub(crate) struct Config { + pub(crate) title: String, +} + +impl Config { + pub(crate) fn load() -> Self { + TELETERM_CONFIG.into_serde().unwrap() + } +} diff --git a/teleterm-web/src/lib.rs b/teleterm-web/src/lib.rs index 1b8fdde..7b17421 100644 --- a/teleterm-web/src/lib.rs +++ b/teleterm-web/src/lib.rs @@ -1,3 +1,4 @@ +mod config; mod model; mod prelude; mod protocol; @@ -19,7 +20,7 @@ enum Msg { fn init(_: Url, orders: &mut impl Orders<Msg>) -> Init<crate::model::Model> { log::trace!("init"); orders.send_msg(Msg::Refresh); - Init::new(crate::model::Model::default()) + Init::new(crate::model::Model::new(crate::config::Config::load())) } fn update( diff --git a/teleterm-web/src/model.rs b/teleterm-web/src/model.rs index 8a22f1b..1ba1f40 100644 --- a/teleterm-web/src/model.rs +++ b/teleterm-web/src/model.rs @@ -15,13 +15,21 @@ impl Drop for WatchConn { } } -#[derive(Default)] pub(crate) struct Model { + config: crate::config::Config, sessions: Vec<crate::protocol::Session>, watch_conn: Option<WatchConn>, } impl Model { + pub(crate) fn new(config: crate::config::Config) -> Self { + Self { + config, + sessions: vec![], + watch_conn: None, + } + } + pub(crate) fn update( &mut self, msg: crate::Msg, @@ -84,6 +92,10 @@ impl Model { } } + pub(crate) fn title(&self) -> &str { + &self.config.title + } + pub(crate) fn screen(&self) -> Option<&vt100::Screen> { self.watch_conn.as_ref().map(|conn| conn.term.screen()) } diff --git a/teleterm-web/src/views/page.rs b/teleterm-web/src/views/page.rs index 7842172..e30e085 100644 --- a/teleterm-web/src/views/page.rs +++ b/teleterm-web/src/views/page.rs @@ -1,9 +1,13 @@ use crate::prelude::*; pub(crate) fn render(model: &crate::model::Model) -> Vec<Node<crate::Msg>> { + let mut view = vec![seed::h1![model.title()]]; + if model.watching() { - super::watch::render(model) + view.extend(super::watch::render(model)) } else { - super::list::render(model) + view.extend(super::list::render(model)) } + + view } |