From 1db42b84ab288921b74a19becbc83d1f8cddc365 Mon Sep 17 00:00:00 2001 From: wyhaya Date: Thu, 4 Jul 2019 11:16:55 +0800 Subject: accomplish #142 --- src/renderer.rs | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/renderer.rs b/src/renderer.rs index d1e16ea..f8436c2 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -218,6 +218,20 @@ fn archive_button( } } +// Append to the string after the link +fn get_dir_last(link: &str) -> &str { + match link.chars().last() { + Some(d) => { + if d == '/' { + "" + }else { + "/" + } + }, + None => "/" + } +} + /// If they are set, adds query parameters to links to keep them across pages fn parametrized_link( link: &str, @@ -228,7 +242,13 @@ fn parametrized_link( ) -> String { if let Some(method) = sort_method { if let Some(order) = sort_order { - let parametrized_link = format!("{}?sort={}&order={}", link, method, order); + let parametrized_link = format!( + "{}{}?sort={}&order={}", + link, + get_dir_last(&link), + method, + order + ); if color_scheme != default_color_scheme { return format!("{}&theme={}", parametrized_link, color_scheme.to_slug()); @@ -239,10 +259,15 @@ fn parametrized_link( } if color_scheme != default_color_scheme { - return format!("{}?theme={}", link.to_string(), color_scheme.to_slug()); + return format!( + "{}{}?theme={}", + link, + get_dir_last(&link), + color_scheme.to_slug() + ); } - link.to_string() + format!("{}/", link) } /// Partial: table header link @@ -672,6 +697,21 @@ fn css(color_scheme: ColorScheme) -> Markup { .mobile-info {{ display: block; }} + table tbody tr td {{ + padding-top: 10px; + padding-bottom: 0; + }} + a.directory {{ + display: block; + padding: 0.5625rem 0; + }} + .file-entry {{ + align-items: center; + }} + a.file {{ + flex: 1; + padding: 0.5625rem 0; + }} .back {{ display: flex; }} -- cgit v1.2.3 From 06d721d5051f572e49bfab0a1e816a0640bb880a Mon Sep 17 00:00:00 2001 From: wyhaya Date: Mon, 8 Jul 2019 09:10:47 +0800 Subject: add space --- src/renderer.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/renderer.rs b/src/renderer.rs index f8436c2..e08b9d4 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -224,7 +224,7 @@ fn get_dir_last(link: &str) -> &str { Some(d) => { if d == '/' { "" - }else { + } else { "/" } }, -- cgit v1.2.3 From 063b8dbc5192a46a0f9e30c5efcd1047aca8bbbb Mon Sep 17 00:00:00 2001 From: wyhaya Date: Mon, 8 Jul 2019 11:05:48 +0800 Subject: fix parent directory --- src/listing.rs | 15 +++++++++++++-- src/renderer.rs | 59 ++++++++++++++++++++++++++++++--------------------------- 2 files changed, 44 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/listing.rs b/src/listing.rs index ee9c581..4a69108 100644 --- a/src/listing.rs +++ b/src/listing.rs @@ -138,7 +138,6 @@ pub fn directory_listing( let base = Path::new(serve_path); let random_route = format!("/{}", random_route.unwrap_or_default()); let is_root = base.parent().is_none() || req.path() == random_route; - let page_parent = base.parent().map(|p| p.display().to_string()); let current_dir = match base.strip_prefix(random_route) { Ok(c_d) => Path::new("/").join(c_d), Err(_) => base.to_path_buf(), @@ -285,6 +284,19 @@ pub fn directory_listing( .chunked() .body(Body::Streaming(Box::new(rx)))) } else { + // Redirect to directory + if !renderer::has_trailing(&serve_path) { + let query = match req.query_string() { + "" => String::new(), + _ => format!("?{}", req.query_string()) + }; + return Ok( + HttpResponse::MovedPermanenty() + .header("Location", format!("{}/{}", serve_path, query)) + .body("301") + ); + } + Ok(HttpResponse::Ok() .content_type("text/html; charset=utf-8") .body( @@ -292,7 +304,6 @@ pub fn directory_listing( serve_path, entries, is_root, - page_parent, query_params.sort, query_params.order, default_color_scheme, diff --git a/src/renderer.rs b/src/renderer.rs index e08b9d4..4852df1 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -15,7 +15,7 @@ pub fn page( serve_path: &str, entries: Vec, is_root: bool, - page_parent: Option, + // page_parent: Option, sort_method: Option, sort_order: Option, default_color_scheme: ColorScheme, @@ -73,13 +73,11 @@ pub fn page( } tbody { @if !is_root { - @if let Some(parent) = page_parent { - tr { - td colspan="3" { - span.root-chevron { (chevron_left()) } - a.root href=(parametrized_link(&parent, sort_method, sort_order, color_scheme, default_color_scheme)) { - "Parent directory" - } + tr { + td colspan="3" { + span.root-chevron { (chevron_left()) } + a.root href=(parametrized_link("../", sort_method, sort_order, color_scheme, default_color_scheme)) { + "Parent directory" } } } @@ -218,17 +216,20 @@ fn archive_button( } } -// Append to the string after the link -fn get_dir_last(link: &str) -> &str { - match link.chars().last() { - Some(d) => { - if d == '/' { - "" - } else { - "/" - } - }, - None => "/" +// Is there a trailing "/" +pub fn has_trailing(s: &str) -> bool { + match s.chars().last() { + Some(d) => d == '/', + None => false + } +} + +// Add trailing "/" if conditions permit +fn add_trailing(link: &str) -> String { + if has_trailing(&link) { + link.to_string() + }else { + format!("{}/", link) } } @@ -243,9 +244,8 @@ fn parametrized_link( if let Some(method) = sort_method { if let Some(order) = sort_order { let parametrized_link = format!( - "{}{}?sort={}&order={}", - link, - get_dir_last(&link), + "{}?sort={}&order={}", + add_trailing(&link), method, order ); @@ -260,14 +260,13 @@ fn parametrized_link( if color_scheme != default_color_scheme { return format!( - "{}{}?theme={}", - link, - get_dir_last(&link), + "{}?theme={}", + add_trailing(&link), color_scheme.to_slug() ); } - format!("{}/", link) + add_trailing(&link) } /// Partial: table header link @@ -698,7 +697,7 @@ fn css(color_scheme: ColorScheme) -> Markup { display: block; }} table tbody tr td {{ - padding-top: 10px; + padding-top: 0; padding-bottom: 0; }} a.directory {{ @@ -708,10 +707,14 @@ fn css(color_scheme: ColorScheme) -> Markup { .file-entry {{ align-items: center; }} - a.file {{ + a.root, a.file, a.symlink {{ + display: inline-block; flex: 1; padding: 0.5625rem 0; }} + a.symlink {{ + width: 100%; + }} .back {{ display: flex; }} -- cgit v1.2.3 From 33e818f1c84b22df166d4a10632848c9251dbcf5 Mon Sep 17 00:00:00 2001 From: wyhaya Date: Mon, 8 Jul 2019 11:09:44 +0800 Subject: remove page_parent --- src/renderer.rs | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/renderer.rs b/src/renderer.rs index 4852df1..af8f5d7 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -15,7 +15,6 @@ pub fn page( serve_path: &str, entries: Vec, is_root: bool, - // page_parent: Option, sort_method: Option, sort_order: Option, default_color_scheme: ColorScheme, -- cgit v1.2.3