aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-23 02:33:22 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-23 02:33:22 -0500
commitffc408d9496b8392579ef2c84db1fe688c55c1d9 (patch)
tree0ae1d8419a122260e7b637aae802d916cdf70930 /teleterm-web
parenta5a30357a102b8258e2589ce3dfcfe12faee3849 (diff)
downloadteleterm-ffc408d9496b8392579ef2c84db1fe688c55c1d9.tar.gz
teleterm-ffc408d9496b8392579ef2c84db1fe688c55c1d9.zip
shuffle some of the view structure around
Diffstat (limited to 'teleterm-web')
-rw-r--r--teleterm-web/src/views.rs1
-rw-r--r--teleterm-web/src/views/list.rs50
-rw-r--r--teleterm-web/src/views/sessions.rs55
-rw-r--r--teleterm-web/src/views/terminal.rs7
-rw-r--r--teleterm-web/src/views/watch.rs6
5 files changed, 63 insertions, 56 deletions
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<Node<crate::Msg>> {
- 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<crate::Msg> {
- 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<crate::Msg> {
+ 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<crate::Msg> {
+ 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<crate::Msg> {
- let screen = if let Some(screen) = model.screen() {
- screen
- } else {
- return seed::empty![];
- };
+pub(crate) fn render(screen: &vt100::Screen) -> Node<crate::Msg> {
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<Node<crate::Msg>> {
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"],
]
}