aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-23 05:51:00 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-23 05:51:00 -0500
commit69d725d56cb43d92042eecbcc6d306782799ab88 (patch)
tree519f63929af020effc0ed30eeba86375989a39ff /teleterm-web
parent0650ecd21a522536c5dc3a764847583e0fae61df (diff)
downloadteleterm-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.rs18
-rw-r--r--teleterm-web/src/lib.rs3
-rw-r--r--teleterm-web/src/model.rs14
-rw-r--r--teleterm-web/src/views/page.rs8
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
}