diff options
author | Martin Fischer <martin@push-f.com> | 2022-10-28 13:40:37 +0200 |
---|---|---|
committer | Martin Fischer <martin@push-f.com> | 2022-10-28 13:41:18 +0200 |
commit | 6d2b42da54335682bf5ba25277323daafca16808 (patch) | |
tree | 4cec078db09052cbf9b9a78bc9e2a036ccf4c02a | |
parent | 025d2619341a6323d87c2cfa3dcf0a0f287c6636 (diff) |
improve error page rendering
Previously 404 pages did not set the viewport meta tag,
which made the links very hard to click on mobile.
-rw-r--r-- | src/error.rs | 12 | ||||
-rw-r--r-- | src/main.rs | 32 |
2 files changed, 26 insertions, 18 deletions
diff --git a/src/error.rs b/src/error.rs index 08829a5..a49301a 100644 --- a/src/error.rs +++ b/src/error.rs @@ -5,7 +5,7 @@ use sputnik::request::QueryError; use sputnik::response::EmptyBuilder; use std::str::Utf8Error; -use crate::HyperResponse; +use crate::{HyperResponse, Page}; /// For convenience this enum also contains nonerroneous variants. #[derive(Debug)] @@ -84,11 +84,17 @@ impl From<Error> for HyperResponse { .unwrap(); } }; - // TODO: use Page Builder::new() .status(status) .header("content-type", "text/html") - .body(message.into()) + .body( + Page { + body: format!("<div>{}</div>", message), + ..Page::default() + } + .render() + .into(), + ) .unwrap() } } diff --git a/src/main.rs b/src/main.rs index af00d3f..e82cfae 100644 --- a/src/main.rs +++ b/src/main.rs @@ -234,7 +234,7 @@ async fn service<C: Controller>( ); Builder::new() .content_type(mime::TEXT_HTML) - .body(render_page(&page).into()) + .body(page.render().into()) .unwrap() } }) @@ -272,21 +272,23 @@ pub struct Page { frame_src: Option<&'static str>, } -fn render_page(page: &Page) -> String { - let mut out = String::new(); - out.push_str("<!doctype html><html><head><meta charset=utf-8>"); - out.push_str(&format!("<title>{}</title>", html_escape(&page.title))); - out.push_str("<meta name=viewport content=\"width=device-width, initial-scale=1\"><style>"); - out.push_str(include_str!("static/style.css")); - out.push_str("</style></head><body><header id=header>"); - out.push_str(&page.header); - out.push_str("</header>"); - out.push_str(&page.body); - for script in &page.scripts { - out.push_str(&format!("<script>{}</script>", script)); +impl Page { + fn render(&self) -> String { + let mut out = String::new(); + out.push_str("<!doctype html><html><head><meta charset=utf-8>"); + out.push_str(&format!("<title>{}</title>", html_escape(&self.title))); + out.push_str("<meta name=viewport content=\"width=device-width, initial-scale=1\"><style>"); + out.push_str(include_str!("static/style.css")); + out.push_str("</style></head><body><header id=header>"); + out.push_str(&self.header); + out.push_str("</header>"); + out.push_str(&self.body); + for script in &self.scripts { + out.push_str(&format!("<script>{}</script>", script)); + } + out.push_str("</body></html>"); + out } - out.push_str("</body></html>"); - out } #[derive(Deserialize)] |