From 69d725d56cb43d92042eecbcc6d306782799ab88 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 23 Nov 2019 05:51:00 -0500 Subject: pass configuration from the web server to the web app --- teleterm-web/src/config.rs | 18 ++++++++++++++++++ teleterm-web/src/lib.rs | 3 ++- teleterm-web/src/model.rs | 14 +++++++++++++- teleterm-web/src/views/page.rs | 8 ++++++-- 4 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 teleterm-web/src/config.rs (limited to 'teleterm-web') 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) -> Init { 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, watch_conn: Option, } 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> { + 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 } -- cgit v1.2.3-54-g00ecf