From ffc408d9496b8392579ef2c84db1fe688c55c1d9 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 23 Nov 2019 02:33:22 -0500 Subject: shuffle some of the view structure around --- teleterm-web/src/views.rs | 1 + teleterm-web/src/views/list.rs | 50 +--------------------------------- teleterm-web/src/views/sessions.rs | 55 ++++++++++++++++++++++++++++++++++++++ teleterm-web/src/views/terminal.rs | 7 +---- teleterm-web/src/views/watch.rs | 6 ++++- 5 files changed, 63 insertions(+), 56 deletions(-) create mode 100644 teleterm-web/src/views/sessions.rs (limited to 'teleterm-web') diff --git a/teleterm-web/src/views.rs b/teleterm-web/src/views.rs index 738dad7..349a45c 100644 --- a/teleterm-web/src/views.rs +++ b/teleterm-web/src/views.rs @@ -1,4 +1,5 @@ pub(crate) mod list; pub(crate) mod page; +pub(crate) mod sessions; pub(crate) mod terminal; pub(crate) mod watch; diff --git a/teleterm-web/src/views/list.rs b/teleterm-web/src/views/list.rs index 88d8a37..36fcc19 100644 --- a/teleterm-web/src/views/list.rs +++ b/teleterm-web/src/views/list.rs @@ -1,56 +1,8 @@ use crate::prelude::*; 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"], - seed::th!["idle"], - seed::th!["watchers"], - seed::th!["title"], - ], - rows - ], + crate::views::sessions::render(model.sessions()), seed::button![simple_ev(Ev::Click, crate::Msg::Refresh), "refresh"], ] } - -fn row(session: &crate::protocol::Session) -> Node { - seed::tr![ - 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)], - seed::td![session.title], - ] -} - -// XXX copied from teleterm -fn format_time(dur: u32) -> String { - let secs = dur % 60; - let dur = dur / 60; - if dur == 0 { - return format!("{}s", secs); - } - - let mins = dur % 60; - let dur = dur / 60; - if dur == 0 { - return format!("{}m{:02}s", mins, secs); - } - - let hours = dur % 24; - let dur = dur / 24; - if dur == 0 { - return format!("{}h{:02}m{:02}s", hours, mins, secs); - } - - let days = dur; - format!("{}d{:02}h{:02}m{:02}s", days, hours, mins, secs) -} diff --git a/teleterm-web/src/views/sessions.rs b/teleterm-web/src/views/sessions.rs new file mode 100644 index 0000000..f3eb734 --- /dev/null +++ b/teleterm-web/src/views/sessions.rs @@ -0,0 +1,55 @@ +use crate::prelude::*; + +pub(crate) fn render( + sessions: &[crate::protocol::Session], +) -> Node { + let rows: Vec<_> = sessions.iter().map(row).collect(); + seed::table![ + seed::attrs! { At::Class => "list" }, + seed::tr![ + seed::th!["username"], + seed::th!["size"], + seed::th!["idle"], + seed::th!["watchers"], + seed::th!["title"], + ], + rows + ] +} + +fn row(session: &crate::protocol::Session) -> Node { + seed::tr![ + 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)], + seed::td![session.title], + ] +} + +// XXX copied from teleterm +fn format_time(dur: u32) -> String { + let secs = dur % 60; + let dur = dur / 60; + if dur == 0 { + return format!("{}s", secs); + } + + let mins = dur % 60; + let dur = dur / 60; + if dur == 0 { + return format!("{}m{:02}s", mins, secs); + } + + let hours = dur % 24; + let dur = dur / 24; + if dur == 0 { + return format!("{}h{:02}m{:02}s", hours, mins, secs); + } + + let days = dur; + format!("{}d{:02}h{:02}m{:02}s", days, hours, mins, secs) +} diff --git a/teleterm-web/src/views/terminal.rs b/teleterm-web/src/views/terminal.rs index 104fbca..7a44629 100644 --- a/teleterm-web/src/views/terminal.rs +++ b/teleterm-web/src/views/terminal.rs @@ -1,12 +1,7 @@ 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() { - screen - } else { - return seed::empty![]; - }; +pub(crate) fn render(screen: &vt100::Screen) -> Node { let (rows, cols) = screen.size(); let (cursor_row, cursor_col) = screen.cursor_position(); diff --git a/teleterm-web/src/views/watch.rs b/teleterm-web/src/views/watch.rs index b02c647..5fe7830 100644 --- a/teleterm-web/src/views/watch.rs +++ b/teleterm-web/src/views/watch.rs @@ -2,7 +2,11 @@ use crate::prelude::*; pub(crate) fn render(model: &crate::model::Model) -> Vec> { vec![ - crate::views::terminal::render(model), + if let Some(screen) = model.screen() { + crate::views::terminal::render(screen) + } else { + seed::empty![] + }, seed::button![simple_ev(Ev::Click, crate::Msg::StopWatching), "back"], ] } -- cgit v1.2.3-54-g00ecf