use maud::{Markup, html};
#[must_use]
pub fn direct_upload_input(name: &str, presign_url: &str, accept: Option<&str>) -> Markup {
html! {
div
data-controller="direct-upload"
data-direct-upload-url=(presign_url)
class="autumn-direct-upload" {
input
type="file"
name=(name)
data-direct-upload-target="input"
accept=[accept] {}
div
class="autumn-upload-progress"
hidden="" {
div class="autumn-upload-bar" {}
}
noscript {
p class="autumn-upload-noscript" {
"Direct upload requires JavaScript. "
"Please enable JavaScript to upload files directly to storage."
}
}
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn direct_upload_input_contains_required_attributes() {
let markup = direct_upload_input("cover_image", "/uploads/presign", Some("image/*"));
let html = markup.into_string();
assert!(html.contains("data-controller=\"direct-upload\""));
assert!(html.contains("data-direct-upload-url=\"/uploads/presign\""));
assert!(html.contains("name=\"cover_image\""));
assert!(html.contains("type=\"file\""));
assert!(html.contains("accept=\"image/*\""));
assert!(html.contains("autumn-upload-progress"));
assert!(
html.contains("direct upload requires javascript")
|| html.contains("Direct upload requires JavaScript")
);
}
#[test]
fn direct_upload_input_without_accept() {
let markup = direct_upload_input("avatar", "/presign", None);
let html = markup.into_string();
assert!(!html.contains("accept="));
assert!(html.contains("name=\"avatar\""));
}
#[test]
fn direct_upload_input_includes_noscript_fallback() {
let markup = direct_upload_input("file", "/presign", None);
let html = markup.into_string();
assert!(html.contains("<noscript>") || html.contains("noscript"));
}
}