Something went wrong. Try again.
Paper Mario mod hosting site - AT Protocol appview starhaven.dev
Something went wrong. Try again.
2.4 kB · 65 lines
Rust
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566use maud::{html, Markup};
use crate::page::icon;
/// What a field's Markdown can have.pub enum Formatting<'a> { /// Bold and italics, as a bio shows. Inline, /// Headings, quotes, lists, links, and tables, as a mod's description /// shows, and with `Images`, images too. Full(Option<Images<'a>>),}
/// Where a field's images are.pub struct Images<'a> { /// The address they're relative to. pub base: &'a str, /// The hidden field that lists the ones uploaded. pub field: &'a str,}
/// `<markdown-input>` around `field`, the markup holding the textarea it/// edits, with a toolbar for `formatting` that its script shows once it has/// taken over the textarea.pub fn render(formatting: Formatting, field: Markup) -> Markup { let images = match &formatting { Formatting::Full(Some(images)) => Some(images), _ => None, }; html! { markdown-input inline[matches!(formatting, Formatting::Inline)] images=[images.map(|images| images.base)] images-name=[images.map(|images| images.field)] { div.markdown-input-toolbar role="toolbar" aria-label="Formatting" hidden { (button("bold", "Bold", icondata::LuBold)) (button("italic", "Italic", icondata::LuItalic)) @if let Formatting::Full(_) = formatting { (button("heading", "Heading", icondata::LuHeading)) (button("quote", "Quote", icondata::LuTextQuote)) (button("list", "List", icondata::LuList)) (button("link", "Link", icondata::LuLink)) (button("table", "Table", icondata::LuTable)) } @if images.is_some() { label.markdown-input-button title="Add image" { (icon(icondata::LuImagePlus)) span.visually-hidden { "Add image" } input type="file" accept="image/*" multiple hidden; } } } (field) } }}
fn button(command: &str, label: &str, symbol: icondata::Icon) -> Markup { html! { button.markdown-input-button type="button" data-command=(command) title=(label) { (icon(symbol)) span.visually-hidden { (label) } } }}