aboutsummaryrefslogtreecommitdiffstats
path: root/src/renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/renderer.rs118
1 files changed, 104 insertions, 14 deletions
diff --git a/src/renderer.rs b/src/renderer.rs
index d1821dd..ac6b640 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -17,6 +17,7 @@ pub fn page(
breadcrumbs: Vec<Breadcrumb>,
encoded_dir: &str,
conf: &MiniserveConfig,
+ current_user: Option<&CurrentUser>,
) -> Markup {
let upload_route = match conf.random_route {
Some(ref random_route) => format!("/{}/upload", random_route),
@@ -80,7 +81,7 @@ pub fn page(
// wrapped in span so the text doesn't shift slightly when it turns into a link
span { bdi { (el.name) } }
} @else {
- a href=(parametrized_link(&el.link, sort_method, sort_order)) {
+ a href=(parametrized_link(&el.link, sort_method, sort_order, false)) {
bdi { (el.name) }
}
}
@@ -120,22 +121,63 @@ pub fn page(
tr {
td colspan="3" {
span.root-chevron { (chevron_left()) }
- a.root href=(parametrized_link("../", sort_method, sort_order)) {
+ a.root href=(parametrized_link("../", sort_method, sort_order, false)) {
"Parent directory"
}
}
}
}
@for entry in entries {
- (entry_row(entry, sort_method, sort_order))
+ (entry_row(entry, sort_method, sort_order, false))
}
}
}
a.back href="#top" {
(arrow_up())
}
- @if !conf.hide_version_footer {
- (version_footer())
+ div.footer {
+ (wget_download(&title_path, current_user))
+ @if !conf.hide_version_footer {
+ (version_footer())
+ }
+ }
+ }
+ }
+ }
+ }
+}
+/// Renders the file listing
+#[allow(clippy::too_many_arguments)]
+pub fn raw(
+ entries: Vec<Entry>,
+ is_root: bool,
+ sort_method: Option<SortingMethod>,
+ sort_order: Option<SortingOrder>,
+) -> Markup {
+ html! {
+ (DOCTYPE)
+ html {
+ body {
+ table {
+ thead {
+ th.name { "Name" }
+ th.size { "Size" }
+ th.date { "Last modification" }
+ }
+ tbody {
+ @if !is_root {
+ tr {
+ td colspan="3" {
+ a.root href=(parametrized_link("../", sort_method, sort_order, true)) {
+ ".."
+ }
+ }
+ }
+ }
+ @for entry in entries {
+ (entry_row(entry, sort_method, sort_order, true))
+ }
+>>>>>>> 2949329 (Implement a raw rendering mode for recursive folder download)
}
}
}
@@ -146,12 +188,36 @@ pub fn page(
// Partial: version footer
fn version_footer() -> Markup {
html! {
- p.footer {
- (format!("{}/{}", crate_name!(), crate_version!()))
- }
+ div.version {
+ (format!("{}/{}", crate_name!(), crate_version!()))
+ }
}
}
+fn wget_download(title_path: &str, current_user: Option<&CurrentUser>) -> Markup {
+ let count = {
+ let count_slashes = title_path.matches('/').count();
+ if count_slashes > 0 {
+ count_slashes - 1
+ } else {
+ 0
+ }
+ };
+
+ let user_params = if let Some(user) = current_user {
+ format!(" --ask-password --user {}", user.name)
+ } else {
+ "".to_string()
+ };
+
+ return html! {
+ div.downloadWget {
+ p { "Download folder:" }
+ div.cmd { (format!("wget -r -c -nH -np --cut-dirs={} -R \"index.html*\"{} \"http://{}/?raw=true\"", count, user_params, title_path)) }
+ }
+ };
+}
+
/// Build the action of the upload form
fn build_upload_action(
upload_route: &str,
@@ -232,7 +298,7 @@ fn archive_button(
} else {
format!(
"{}&download={}",
- parametrized_link("", sort_method, sort_order,),
+ parametrized_link("", sort_method, sort_order, false),
archive_method
)
};
@@ -260,14 +326,19 @@ fn parametrized_link(
link: &str,
sort_method: Option<SortingMethod>,
sort_order: Option<SortingOrder>,
+ raw: bool,
) -> String {
+ if raw {
+ return format!("{}?raw=true", make_link_with_trailing_slash(link));
+ }
+
if let Some(method) = sort_method {
if let Some(order) = sort_order {
let parametrized_link = format!(
"{}?sort={}&order={}",
make_link_with_trailing_slash(link),
method,
- order
+ order,
);
return parametrized_link;
@@ -315,6 +386,7 @@ fn entry_row(
entry: Entry,
sort_method: Option<SortingMethod>,
sort_order: Option<SortingOrder>,
+ raw: bool,
) -> Markup {
html! {
tr {
@@ -322,7 +394,7 @@ fn entry_row(
p {
@if entry.is_dir() {
@if let Some(symlink_dest) = entry.symlink_info {
- a.symlink href=(parametrized_link(&entry.link, sort_method, sort_order)) {
+ a.symlink href=(parametrized_link(&entry.link, sort_method, sort_order, raw)) {
(entry.name) "/"
span.symlink-symbol { }
a.directory {(symlink_dest) "/"}
@@ -345,9 +417,11 @@ fn entry_row(
}
}
- @if let Some(size) = entry.size {
- span.mobile-info.size {
- (size)
+ @if !raw {
+ @if let Some(size) = entry.size {
+ span.mobile-info.size {
+ (size)
+ }
}
}
}
@@ -477,6 +551,15 @@ pub fn render_error(
conf: &MiniserveConfig,
return_address: &str,
) -> Markup {
+<<<<<<< HEAD
+=======
+ let link = if has_referer {
+ return_address.to_string()
+ } else {
+ parametrized_link(return_address, sort_method, sort_order, false)
+ };
+
+>>>>>>> 2949329 (Implement a raw rendering mode for recursive folder download)
html! {
(DOCTYPE)
html {
@@ -508,8 +591,15 @@ pub fn render_error(
}
}
}
+<<<<<<< HEAD
@if !conf.hide_version_footer {
(version_footer())
+=======
+ @if !hide_version_footer {
+ p.footer {
+ (version_footer())
+ }
+>>>>>>> 2949329 (Implement a raw rendering mode for recursive folder download)
}
}
}