From 9c75f4154e4c0a61068ee0e1d12880e0e02e13e8 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 22 Nov 2019 13:29:23 -0500 Subject: more web display improvements --- Cargo.lock | 1 + teleterm-web/Cargo.toml | 1 + teleterm-web/src/views/list.rs | 12 ++--- teleterm-web/src/views/watch.rs | 14 ++++-- teleterm/src/web.rs | 7 +++ teleterm/static/index.html | 3 ++ teleterm/static/teleterm.css | 20 ++++++++ teleterm/static/teleterm_web.js | 89 ++++++++++++++++++----------------- teleterm/static/teleterm_web_bg.wasm | Bin 687220 -> 703753 bytes 9 files changed, 93 insertions(+), 54 deletions(-) create mode 100644 teleterm/static/teleterm.css diff --git a/Cargo.lock b/Cargo.lock index d56d7df..f0cd38a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2155,6 +2155,7 @@ dependencies = [ "seed", "serde", "serde_json", + "unicode-width", "vt100", "wasm-bindgen", "web-sys", diff --git a/teleterm-web/Cargo.toml b/teleterm-web/Cargo.toml index 47496de..9468353 100644 --- a/teleterm-web/Cargo.toml +++ b/teleterm-web/Cargo.toml @@ -18,6 +18,7 @@ log = "0.4" seed = "0.4" serde = "1" serde_json = "1" +unicode-width = "0.1" vt100 = "0.6" wasm-bindgen = "0.2" web-sys = { version = "0.3", features = ["ErrorEvent", "MessageEvent", "WebSocket"] } diff --git a/teleterm-web/src/views/list.rs b/teleterm-web/src/views/list.rs index 6d4ccd5..88d8a37 100644 --- a/teleterm-web/src/views/list.rs +++ b/teleterm-web/src/views/list.rs @@ -4,6 +4,7 @@ pub(crate) fn render(model: &crate::model::Model) -> Vec> { let rows: Vec<_> = model.sessions().iter().map(row).collect(); vec![ seed::table![ + seed::attrs! { At::Class => "list" }, seed::tr![ seed::th!["username"], seed::th!["size"], @@ -19,13 +20,10 @@ pub(crate) fn render(model: &crate::model::Model) -> Vec> { fn row(session: &crate::protocol::Session) -> Node { seed::tr![ - seed::td![seed::a![ - simple_ev( - Ev::Click, - crate::Msg::StartWatching(session.id.clone()) - ), - session.username, - ]], + simple_ev(Ev::Click, crate::Msg::StartWatching(session.id.clone())), + seed::td![ + seed::a![seed::attrs! {At::Href => "#"}, session.username,] + ], seed::td![format!("{}x{}", session.size.cols, session.size.rows)], seed::td![format_time(session.idle_time)], seed::td![format!("{}", session.watchers)], diff --git a/teleterm-web/src/views/watch.rs b/teleterm-web/src/views/watch.rs index 07e8244..841b438 100644 --- a/teleterm-web/src/views/watch.rs +++ b/teleterm-web/src/views/watch.rs @@ -1,4 +1,5 @@ use crate::prelude::*; +use unicode_width::UnicodeWidthStr as _; pub(crate) fn render(model: &crate::model::Model) -> Node { let screen = if let Some(screen) = model.screen() { @@ -13,10 +14,17 @@ pub(crate) fn render(model: &crate::model::Model) -> Node { let mut row = vec![]; for col_idx in 0..cols { let cell = screen.cell(row_idx, col_idx).unwrap(); - row.push(seed::div![cell.contents()]) + let mut contents = cell.contents(); + if contents.trim().is_empty() || contents.width() == 0 { + contents = "\u{00a0}".to_string(); + } + row.push(seed::td![ + seed::attrs! { At::Class => "cell" }, + contents + ]) } - grid.push(seed::div![row]); + grid.push(seed::tr![seed::attrs! { At::Class => "row" }, row]); } - seed::div![grid] + seed::table![seed::attrs! { At::Class => "grid" }, grid] } diff --git a/teleterm/src/web.rs b/teleterm/src/web.rs index b01480d..51da6e8 100644 --- a/teleterm/src/web.rs +++ b/teleterm/src/web.rs @@ -20,6 +20,10 @@ lazy_static_include::lazy_static_include_bytes!( TELETERM_WEB_WASM, "static/teleterm_web_bg.wasm" ); +lazy_static_include::lazy_static_include_bytes!( + TELETERM_CSS, + "static/teleterm.css" +); #[derive( serde::Deserialize, @@ -79,6 +83,9 @@ pub fn router() -> impl gotham::handler::NewHandler { route .get("/teleterm_web_bg.wasm") .to(serve_static("application/wasm", &TELETERM_WEB_WASM)); + route + .get("/teleterm.css") + .to(serve_static("text/css", &TELETERM_CSS)); route.get("/list").to(handle_list); route .get("/watch") diff --git a/teleterm/static/index.html b/teleterm/static/index.html index 2b8e30e..4a43e2b 100644 --- a/teleterm/static/index.html +++ b/teleterm/static/index.html @@ -1,5 +1,8 @@ + + +