This commit is contained in:
Maciej Jur 2024-09-16 23:20:08 +02:00
parent 1c9d234430
commit 730b9aa4f8
Signed by: kamov
GPG key ID: 191CBFF5F72ECAFD
2 changed files with 32 additions and 25 deletions

View file

@ -12,7 +12,7 @@ socket.addEventListener("message", (event) => {
pub(crate) fn render_head<'s, 'r>( pub(crate) fn render_head<'s, 'r>(
sack: &'s Sack, sack: &'s Sack,
title: String, title: String,
styles: &'s [&str], _styles: &'s [&str],
scripts: Option<&'s [String]>, scripts: Option<&'s [String]>,
) -> Result<impl Renderable + 'r, String> ) -> Result<impl Renderable + 'r, String>
where where
@ -24,8 +24,8 @@ where
let css_p = sack.get_style("leaflet").expect("Missing styles"); let css_p = sack.get_style("leaflet").expect("Missing styles");
let scripts = match scripts { let scripts = match scripts {
Some(scripts) => Some(emit_tags_script(sack, scripts)?), Some(scripts) => Some(emit_tags_script(sack, scripts)?),
None => None, None => None,
}; };
Ok(maud_move!( Ok(maud_move!(
@ -52,7 +52,7 @@ where
} }
@if let Some(scripts) = scripts { @if let Some(scripts) = scripts {
(scripts) (scripts)
} }
)) ))
} }
@ -63,23 +63,26 @@ fn render_style(style: &HashedStyle) -> impl Renderable + '_ {
) )
} }
fn emit_tags_script<'a>(sack: &'a Sack, scripts: &'a [String]) -> Result<impl Renderable + 'a, String> { fn emit_tags_script<'a>(
let tags = scripts sack: &'a Sack,
.iter() scripts: &'a [String],
.map(|script| emit_tag_script(sack, script)) ) -> Result<impl Renderable + 'a, String> {
.collect::<Result<Vec<_>, _>>()?; let tags = scripts
.iter()
.map(|script| emit_tag_script(sack, script))
.collect::<Result<Vec<_>, _>>()?;
Ok(maud_move!( Ok(maud_move!(
@for tag in tags { @for tag in tags {
(tag) (tag)
} }
)) ))
} }
fn emit_tag_script<'a>(sack: &'a Sack, script: &'a str) -> Result<impl Renderable + 'a, String> { fn emit_tag_script<'a>(sack: &'a Sack, script: &'a str) -> Result<impl Renderable + 'a, String> {
let src = sack let src = sack
.get_script(script) .get_script(script)
.ok_or(format!("Missing script {script}"))?; .ok_or(format!("Missing script {script}"))?;
Ok(maud_move!(script type="module" src=(src.path.as_str()) defer {})) Ok(maud_move!(script type="module" src=(src.path.as_str()) defer {}))
} }

View file

@ -1,3 +1,5 @@
use std::fmt::Write;
use camino::Utf8Path; use camino::Utf8Path;
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use hauchiwa::{Bibliography, Outline, Sack}; use hauchiwa::{Bibliography, Outline, Sack};
@ -37,13 +39,15 @@ pub fn parse_content(
.collect::<Vec<_>>() .collect::<Vec<_>>()
}) })
.map(|stack| match stack.len() > 1 { .map(|stack| match stack.len() > 1 {
true => format!( true => {
"<section>{}</section>", let mut buffer = String::from("<section>");
stack
.into_iter() for slide in stack {
.map(|slide| format!("<section>{slide}</section>")) write!(buffer, "<section>{}</section>", slide).unwrap();
.collect::<String>() }
),
buffer
}
false => format!("<section>{}</section>", stack[0]), false => format!("<section>{}</section>", stack[0]),
}) })
.collect::<String>(); .collect::<String>();