diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-02-28 15:50:48 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-02-28 23:54:34 +0100 |
| commit | 3ca5b238238e1128aa7bbfbd5db9e632045d8600 (patch) | |
| tree | 2471f4b340a15695b7f4d518c0b39fabaea676c4 /src/library/link.rs | |
| parent | b63c21c91d99a1554a019dc275f955d3e6a34271 (diff) | |
Reorganize library
Diffstat (limited to 'src/library/link.rs')
| -rw-r--r-- | src/library/link.rs | 66 |
1 files changed, 0 insertions, 66 deletions
diff --git a/src/library/link.rs b/src/library/link.rs deleted file mode 100644 index 4a153d46..00000000 --- a/src/library/link.rs +++ /dev/null @@ -1,66 +0,0 @@ -//! Hyperlinking. - -use super::prelude::*; -use super::TextNode; -use crate::util::EcoString; - -/// Link text and other elements to an URL. -#[derive(Debug, Hash)] -pub struct LinkNode { - /// The url the link points to. - pub url: EcoString, - /// How the link is represented. - pub body: Option<Template>, -} - -#[class] -impl LinkNode { - /// The fill color of text in the link. Just the surrounding text color - /// if `auto`. - pub const FILL: Smart<Paint> = Smart::Auto; - /// Whether to underline link. - pub const UNDERLINE: bool = true; - - fn construct(_: &mut Context, args: &mut Args) -> TypResult<Template> { - Ok(Template::show(Self { - url: args.expect::<EcoString>("url")?, - body: args.find()?, - })) - } -} - -impl Show for LinkNode { - fn show(&self, ctx: &mut Context, styles: StyleChain) -> TypResult<Template> { - let mut body = styles - .show(self, ctx, [ - Value::Str(self.url.clone()), - match &self.body { - Some(body) => Value::Template(body.clone()), - None => Value::None, - }, - ])? - .or_else(|| self.body.clone()) - .unwrap_or_else(|| { - let url = &self.url; - let mut text = url.as_str(); - for prefix in ["mailto:", "tel:"] { - text = text.trim_start_matches(prefix); - } - let shorter = text.len() < url.len(); - Template::Text(if shorter { text.into() } else { url.clone() }) - }); - - let mut map = StyleMap::new(); - map.set(TextNode::LINK, Some(self.url.clone())); - - if let Smart::Custom(fill) = styles.get(Self::FILL) { - map.set(TextNode::FILL, fill); - } - - if styles.get(Self::UNDERLINE) { - body = body.underlined(); - } - - Ok(body.styled_with_map(map)) - } -} |
