From e6f20e538abaf5b0e2fb77ea9ad8424ec78fd975 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Sat, 2 Dec 2023 10:02:12 -0800 Subject: [PATCH] web: move mobile specific code to separate mod --- web/src/view/mobile.rs | 122 +++++++++++++++++++++++++++++++++++++++++ web/src/view/mod.rs | 116 +-------------------------------------- 2 files changed, 125 insertions(+), 113 deletions(-) create mode 100644 web/src/view/mobile.rs diff --git a/web/src/view/mobile.rs b/web/src/view/mobile.rs new file mode 100644 index 0000000..9753bc9 --- /dev/null +++ b/web/src/view/mobile.rs @@ -0,0 +1,122 @@ +use seed::{prelude::*, *}; + +use crate::{ + api::urls, + graphql::front_page_query::*, + state::{Context, Model, Msg}, + view::{ + human_age, pretty_authors, set_title, tags_chiclet, view_header, view_search_pager, + view_search_pager_legacy, view_thread, view_thread_legacy, + }, +}; + +pub(super) fn view(model: &Model) -> Node { + let content = match &model.context { + Context::None => div![h1!["Loading"]], + Context::Thread(thread_set) => view_thread_legacy(thread_set), + Context::ThreadResult(thread) => view_thread(thread), + Context::Search(search_results) => { + view_mobile_search_results_legacy(&model.query, search_results) + } + Context::SearchResult { + query, + results, + count, + pager, + } => view_mobile_search_results(&query, results.as_slice(), *count, pager), + }; + div![ + view_header(&model.query, &model.refreshing_state), + content, + view_header(&model.query, &model.refreshing_state), + ] +} + +fn view_mobile_search_results( + query: &str, + results: &[FrontPageQuerySearchNodes], + count: usize, + pager: &FrontPageQuerySearchPageInfo, +) -> Node { + if query.is_empty() { + set_title("all mail"); + } else { + set_title(query); + } + let rows = results.iter().map(|r| { + let tid = r.thread.clone(); + let datetime = human_age(r.timestamp as i64); + a![ + C!["has-text-light"], + attrs! { + At::Href => urls::thread(&tid) + }, + div![ + C!["row"], + div![C!["subject"], &r.subject], + span![C!["from", "is-size-7"], pretty_authors(&r.authors)], + div![ + span![C!["is-size-7"], tags_chiclet(&r.tags, true)], + span![C!["is-size-7", "float-right", "date"], datetime] + ] + ] + ] + }); + div![ + C!["search-results"], + view_search_pager(count, pager), + rows, + view_search_pager(count, pager), + ] +} + +fn view_mobile_search_results_legacy( + query: &str, + search_results: &shared::SearchResult, +) -> Node { + if query.is_empty() { + set_title("all mail"); + } else { + set_title(query); + } + let summaries = &search_results.summary.0; + let rows = summaries.iter().map(|r| { + /* + let tid = r.thread.clone(); + tr![ + td![ + C!["from"], + pretty_authors(&r.authors), + IF!(r.total>1 => small![" ", r.total.to_string()]), + ], + td![C!["subject"], tags_chiclet(&r.tags), " ", &r.subject], + td![C!["date"], &r.date_relative], + ev(Ev::Click, move |_| Msg::ShowPrettyRequest(tid)), + ] + */ + let tid = r.thread.clone(); + let datetime = human_age(r.timestamp as i64); + a![ + C!["has-text-light"], + attrs! { + At::Href => urls::thread(&tid) + }, + div![ + C!["row"], + div![C!["subject"], &r.subject], + span![C!["from", "is-size-7"], pretty_authors(&r.authors)], + div![ + span![C!["is-size-7"], tags_chiclet(&r.tags, true)], + span![C!["is-size-7", "float-right", "date"], datetime] + ] + ] + ] + }); + let first = search_results.page * search_results.results_per_page; + div![ + C!["search-results"], + view_search_pager_legacy(first, summaries.len(), search_results.total), + rows, + view_search_pager_legacy(first, summaries.len(), search_results.total) + ] +} diff --git a/web/src/view/mod.rs b/web/src/view/mod.rs index 127ed65..371101a 100644 --- a/web/src/view/mod.rs +++ b/web/src/view/mod.rs @@ -15,10 +15,11 @@ use crate::{ api::urls, consts::{SEARCH_RESULTS_PER_PAGE, USE_GRAPHQL}, graphql::{front_page_query::*, show_thread_query::*}, - state::{Context, Model, Msg, RefreshingState}, + state::{Model, Msg, RefreshingState}, }; mod desktop; +mod mobile; fn view_message(thread: &ThreadNode) -> Node { let message = thread.0.as_ref().expect("ThreadNode missing Message"); @@ -210,95 +211,6 @@ fn human_age(timestamp: i64) -> String { datetime } -fn view_mobile_search_results( - query: &str, - results: &[FrontPageQuerySearchNodes], - count: usize, - pager: &FrontPageQuerySearchPageInfo, -) -> Node { - if query.is_empty() { - set_title("all mail"); - } else { - set_title(query); - } - let rows = results.iter().map(|r| { - let tid = r.thread.clone(); - let datetime = human_age(r.timestamp as i64); - a![ - C!["has-text-light"], - attrs! { - At::Href => urls::thread(&tid) - }, - div![ - C!["row"], - div![C!["subject"], &r.subject], - span![C!["from", "is-size-7"], pretty_authors(&r.authors)], - div![ - span![C!["is-size-7"], tags_chiclet(&r.tags, true)], - span![C!["is-size-7", "float-right", "date"], datetime] - ] - ] - ] - }); - div![ - C!["search-results"], - view_search_pager(count, pager), - rows, - view_search_pager(count, pager), - ] -} - -fn view_mobile_search_results_legacy( - query: &str, - search_results: &shared::SearchResult, -) -> Node { - if query.is_empty() { - set_title("all mail"); - } else { - set_title(query); - } - let summaries = &search_results.summary.0; - let rows = summaries.iter().map(|r| { - /* - let tid = r.thread.clone(); - tr![ - td![ - C!["from"], - pretty_authors(&r.authors), - IF!(r.total>1 => small![" ", r.total.to_string()]), - ], - td![C!["subject"], tags_chiclet(&r.tags), " ", &r.subject], - td![C!["date"], &r.date_relative], - ev(Ev::Click, move |_| Msg::ShowPrettyRequest(tid)), - ] - */ - let tid = r.thread.clone(); - let datetime = human_age(r.timestamp as i64); - a![ - C!["has-text-light"], - attrs! { - At::Href => urls::thread(&tid) - }, - div![ - C!["row"], - div![C!["subject"], &r.subject], - span![C!["from", "is-size-7"], pretty_authors(&r.authors)], - div![ - span![C!["is-size-7"], tags_chiclet(&r.tags, true)], - span![C!["is-size-7", "float-right", "date"], datetime] - ] - ] - ] - }); - let first = search_results.page * search_results.results_per_page; - div![ - C!["search-results"], - view_search_pager_legacy(first, summaries.len(), search_results.total), - rows, - view_search_pager_legacy(first, summaries.len(), search_results.total) - ] -} - fn view_search_results( query: &str, results: &[FrontPageQuerySearchNodes], @@ -688,28 +600,6 @@ fn view_footer(render_time_ms: u128) -> Node { ] } -fn view_mobile(model: &Model) -> Node { - let content = match &model.context { - Context::None => div![h1!["Loading"]], - Context::Thread(thread_set) => view_thread_legacy(thread_set), - Context::ThreadResult(thread) => view_thread(thread), - Context::Search(search_results) => { - view_mobile_search_results_legacy(&model.query, search_results) - } - Context::SearchResult { - query, - results, - count, - pager, - } => view_mobile_search_results(&query, results.as_slice(), *count, pager), - }; - div![ - view_header(&model.query, &model.refreshing_state), - content, - view_header(&model.query, &model.refreshing_state), - ] -} - // `view` describes what to display. pub fn view(model: &Model) -> Node { info!("refreshing {:?}", model.refreshing_state); @@ -728,7 +618,7 @@ pub fn view(model: &Model) -> Node { C!["desktop"] }, if is_mobile { - view_mobile(model) + mobile::view(model) } else { desktop::view(model) },