From f6453245edd4bb6a3bd5bd0374044ec689629241 Mon Sep 17 00:00:00 2001 From: Bao Trinh Date: Tue, 11 Jul 2023 14:37:58 -0500 Subject: simplify theme selection using data attributes --- src/renderer.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/renderer.rs b/src/renderer.rs index 1257a67..2e1ff2e 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -56,26 +56,24 @@ pub fn page( (page_header(&title_path, conf.file_upload, &conf.favicon_route, &conf.css_route)) body #drop-container - .(format!("default_theme_{}", conf.default_color_scheme)) - .(format!("default_theme_dark_{}", conf.default_color_scheme_dark)) { + // .(format!("default_theme_{}", conf.default_color_scheme)) + // .(format!("default_theme_dark_{}", conf.default_color_scheme_dark)) { + { (PreEscaped(r#" "#)) -- cgit v1.2.3 From b369a1a9ff3c60b67a7598d4486253c428e3a4da Mon Sep 17 00:00:00 2001 From: Bao Trinh Date: Wed, 12 Jul 2023 12:46:51 -0500 Subject: Separate color schemes into separate files --- src/main.rs | 17 ++++++++++++++--- src/renderer.rs | 15 +++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 2f81baa..33b0699 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,8 @@ mod renderer; use crate::config::MiniserveConfig; use crate::errors::ContextualError; +static STYLESHEET: &str = include_str!(concat!(env!("OUT_DIR"), "/style.css")); + fn main() -> Result<()> { let args = args::CliArgs::parse(); @@ -181,10 +183,20 @@ async fn run(miniserve_config: MiniserveConfig) -> Result<(), ContextualError> { .map(|sock| sock.to_string().green().bold().to_string()) .collect::>(); + let stylesheet = web::Data::new( + [ + STYLESHEET, + inside_config.default_color_scheme.css(), + inside_config.default_color_scheme_dark.css_dark().as_str(), + ] + .join("\n"), + ); + let srv = actix_web::HttpServer::new(move || { App::new() .wrap(configure_header(&inside_config.clone())) .app_data(inside_config.clone()) + .app_data(stylesheet.clone()) .wrap_fn(errors::error_page_middleware) .wrap(middleware::Logger::default()) .route(&inside_config.favicon_route, web::get().to(favicon)) @@ -345,9 +357,8 @@ async fn favicon() -> impl Responder { .body(logo) } -async fn css() -> impl Responder { - let css = include_str!(concat!(env!("OUT_DIR"), "/style.css")); +async fn css(stylesheet: web::Data) -> impl Responder { HttpResponse::Ok() .insert_header(ContentType(mime::TEXT_CSS)) - .body(css) + .body(stylesheet.to_string()) } diff --git a/src/renderer.rs b/src/renderer.rs index 2e1ff2e..2de95c8 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -346,6 +346,21 @@ pub enum ThemeSlug { Monokai, } +impl ThemeSlug { + pub fn css(&self) -> &str { + match self { + ThemeSlug::Squirrel => include_str!(concat!(env!("OUT_DIR"), "/theme-squirrel.css")), + ThemeSlug::Archlinux => include_str!(concat!(env!("OUT_DIR"), "/theme-archlinux.css")), + ThemeSlug::Zenburn => include_str!(concat!(env!("OUT_DIR"), "/theme-zenburn.css")), + ThemeSlug::Monokai => include_str!(concat!(env!("OUT_DIR"), "/theme-monokai.css")), + } + } + + pub fn css_dark(&self) -> String { + format!("@media (prefers-color-scheme: dark) {{\n{}}}", self.css()) + } +} + /// Partial: qr code spoiler fn qr_spoiler(show_qrcode: bool, content: &Uri) -> Markup { html! { -- cgit v1.2.3 From 142cd6e26011fcdb208e24dce7c4781ad5e812d4 Mon Sep 17 00:00:00 2001 From: Bao Trinh Date: Thu, 20 Jul 2023 08:52:25 -0500 Subject: remove commented code --- src/renderer.rs | 2 -- 1 file changed, 2 deletions(-) (limited to 'src') diff --git a/src/renderer.rs b/src/renderer.rs index 2de95c8..29418da 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -56,8 +56,6 @@ pub fn page( (page_header(&title_path, conf.file_upload, &conf.favicon_route, &conf.css_route)) body #drop-container - // .(format!("default_theme_{}", conf.default_color_scheme)) - // .(format!("default_theme_dark_{}", conf.default_color_scheme_dark)) { { (PreEscaped(r#" -- cgit v1.2.3 From e84ca11eab6636904a42636455ea2cbe239fd1f4 Mon Sep 17 00:00:00 2001 From: Bao Trinh Date: Thu, 20 Jul 2023 19:14:15 -0500 Subject: use grass include macro; remove build.rs --- src/main.rs | 2 +- src/renderer.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 33b0699..851f9ab 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,7 +28,7 @@ mod renderer; use crate::config::MiniserveConfig; use crate::errors::ContextualError; -static STYLESHEET: &str = include_str!(concat!(env!("OUT_DIR"), "/style.css")); +static STYLESHEET: &str = grass::include!("data/style.scss"); fn main() -> Result<()> { let args = args::CliArgs::parse(); diff --git a/src/renderer.rs b/src/renderer.rs index 29418da..946089d 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -347,10 +347,10 @@ pub enum ThemeSlug { impl ThemeSlug { pub fn css(&self) -> &str { match self { - ThemeSlug::Squirrel => include_str!(concat!(env!("OUT_DIR"), "/theme-squirrel.css")), - ThemeSlug::Archlinux => include_str!(concat!(env!("OUT_DIR"), "/theme-archlinux.css")), - ThemeSlug::Zenburn => include_str!(concat!(env!("OUT_DIR"), "/theme-zenburn.css")), - ThemeSlug::Monokai => include_str!(concat!(env!("OUT_DIR"), "/theme-monokai.css")), + ThemeSlug::Squirrel => grass::include!("data/themes/squirrel.scss"), + ThemeSlug::Archlinux => grass::include!("data/themes/archlinux.scss"), + ThemeSlug::Zenburn => grass::include!("data/themes/zenburn.scss"), + ThemeSlug::Monokai => grass::include!("data/themes/monokai.scss"), } } -- cgit v1.2.3 From a2211fa4726336ab480cf0af7d32853edc40daa6 Mon Sep 17 00:00:00 2001 From: Bao Trinh Date: Tue, 25 Jul 2023 19:03:05 -0500 Subject: Consolidate javascript and add comments --- src/renderer.rs | 64 ++++++++++++++++++++++++++------------------------------- 1 file changed, 29 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/renderer.rs b/src/renderer.rs index 946089d..699a01f 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -57,28 +57,6 @@ pub fn page( body #drop-container { - - (PreEscaped(r#" - - "#)) - div.toolbar_box_group { @if conf.file_upload { div.form { @@ -604,6 +582,33 @@ fn page_header(title: &str, file_upload: bool, favicon_route: &str, css_route: & title { (title) } + (PreEscaped(r#" + + "#)) + @if file_upload { (PreEscaped(r#" - "#)) - + body + { div.error { p { (error_code.to_string()) } @for error in error_description.lines() { -- cgit v1.2.3 From 6ef212cb326c91edd315f5a797a90de3796e980b Mon Sep 17 00:00:00 2001 From: Bao Trinh Date: Tue, 25 Jul 2023 19:03:17 -0500 Subject: Fix error page wrapping Error page was incorrectly comparing the full content-type header of error responses against `text/plain`, so no error pages were being wrapped by `map_error_page`. --- src/errors.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/errors.rs b/src/errors.rs index e502634..6875b90 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -5,6 +5,7 @@ use actix_web::{ HttpRequest, HttpResponse, ResponseError, }; use futures::prelude::*; +use std::str::FromStr; use thiserror::Error; use crate::{renderer::render_error, MiniserveConfig}; @@ -131,8 +132,15 @@ where let res = fut.await?.map_into_boxed_body(); if (res.status().is_client_error() || res.status().is_server_error()) - && res.headers().get(header::CONTENT_TYPE).map(AsRef::as_ref) - == Some(mime::TEXT_PLAIN_UTF_8.essence_str().as_bytes()) + && res + .headers() + .get(header::CONTENT_TYPE) + .map(AsRef::as_ref) + .and_then(|s| std::str::from_utf8(s).ok()) + .and_then(|s| mime::Mime::from_str(s).ok()) + .as_ref() + .map(mime::Mime::essence_str) + == Some(mime::TEXT_PLAIN.as_ref()) { let req = res.request().clone(); Ok(res.map_body(|head, body| map_error_page(&req, head, body))) -- cgit v1.2.3