Skip to content

Commit

Permalink
allow to set collapsible default value for each builtin directive
Browse files Browse the repository at this point in the history
  • Loading branch information
yannickseurin committed Apr 29, 2024
1 parent 733d7be commit 271eb97
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 7 deletions.
7 changes: 7 additions & 0 deletions src/markdown.rs
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ fn indent_of(content: &str, position: usize, max: usize) -> usize {

#[cfg(test)]
mod test {
use std::collections::HashMap;

use super::*;
use pretty_assertions::assert_eq;

Expand Down Expand Up @@ -738,6 +740,7 @@ Text
title: Some("Admonish".to_owned()),
css_id_prefix: None,
collapsible: false,
builtins_collapsible: HashMap::default(),
},
&CustomDirectiveMap::default(),
RenderTextMode::Html,
Expand Down Expand Up @@ -774,6 +777,7 @@ Text
title: Some("Admonish".to_owned()),
css_id_prefix: None,
collapsible: false,
builtins_collapsible: HashMap::default(),
},
&CustomDirectiveMap::default(),
RenderTextMode::Html,
Expand Down Expand Up @@ -930,6 +934,7 @@ Text
title: Some("Info".to_owned()),
css_id_prefix: Some("".to_owned()),
collapsible: false,
builtins_collapsible: HashMap::default(),
},
&CustomDirectiveMap::default(),
RenderTextMode::Html,
Expand Down Expand Up @@ -972,6 +977,7 @@ Text
title: Some("Info".to_owned()),
css_id_prefix: Some("prefix-".to_owned()),
collapsible: false,
builtins_collapsible: HashMap::default(),
},
&CustomDirectiveMap::default(),
RenderTextMode::Html,
Expand Down Expand Up @@ -1014,6 +1020,7 @@ Text
title: Some("Info".to_owned()),
css_id_prefix: Some("ignored-prefix-".to_owned()),
collapsible: false,
builtins_collapsible: HashMap::default(),
},
&CustomDirectiveMap::default(),
RenderTextMode::Html,
Expand Down
83 changes: 76 additions & 7 deletions src/resolve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,21 @@ impl AdmonitionMeta {

let directive = Directive::from_str(custom_directives, &raw_directive);

// If the directive is a custom one, use collapsible from block, else use default
// value of the custom directive, else use global default value
let collapsible = match directive {
// If the directive is a builin one, use collapsible from block, else use default
// value of the builtin directive, else use global default value
Ok(Directive::Builtin(_)) => collapsible.unwrap_or(
*defaults
.builtins_collapsible
.get(&raw_directive)
.unwrap_or(&defaults.collapsible),
),
// If the directive is a custom one, use collapsible from block, else use default
// value of the custom directive, else use global default value
Ok(Directive::Custom(ref custom_dir)) => {
collapsible.unwrap_or(custom_dir.collapsible.unwrap_or(defaults.collapsible))
collapsible.unwrap_or(custom_dir.collapsible.unwrap_or(defaults.collapsible))
}
_ => {
collapsible.unwrap_or(defaults.collapsible)
}
Err(_) => collapsible.unwrap_or(defaults.collapsible),
};

// Load the directive (and title, if one still not given)
Expand Down Expand Up @@ -151,6 +157,8 @@ fn uppercase_first(input: &str) -> String {

#[cfg(test)]
mod test {
use std::collections::HashMap;

use super::*;
use pretty_assertions::assert_eq;

Expand Down Expand Up @@ -205,6 +213,7 @@ mod test {
title: Some("Important!!!".to_owned()),
css_id_prefix: Some("custom-prefix-".to_owned()),
collapsible: true,
builtins_collapsible: HashMap::new(),
},
&CustomDirectiveMap::default(),
),
Expand Down Expand Up @@ -233,6 +242,7 @@ mod test {
title: Some("Important!!!".to_owned()),
css_id_prefix: Some("ignored-custom-prefix-".to_owned()),
collapsible: true,
builtins_collapsible: HashMap::new(),
},
&CustomDirectiveMap::default(),
),
Expand Down Expand Up @@ -360,4 +370,63 @@ mod test {
collapsible: true,
}
);
}}
}

#[test]
fn test_admonition_info_from_raw_with_collapsible_builtin_directive() {
assert_eq!(
AdmonitionMeta::resolve(
InstanceConfig {
directive: "abstract".to_owned(),
title: None,
id: None,
additional_classnames: Vec::new(),
collapsible: None,
},
&AdmonitionDefaults {
title: None,
css_id_prefix: None,
collapsible: false,
builtins_collapsible: HashMap::from([("abstract".to_string(), true),]),
},
&CustomDirectiveMap::default(),
),
AdmonitionMeta {
directive: "abstract".to_owned(),
title: "Abstract".to_owned(),
css_id: CssId::Prefix("admonition-".to_owned()),
additional_classnames: Vec::new(),
collapsible: true,
}
);
}

#[test]
fn test_admonition_info_from_raw_with_non_collapsible_builtin_directive() {
assert_eq!(
AdmonitionMeta::resolve(
InstanceConfig {
directive: "abstract".to_owned(),
title: None,
id: None,
additional_classnames: Vec::new(),
collapsible: None,
},
&AdmonitionDefaults {
title: None,
css_id_prefix: None,
collapsible: true,
builtins_collapsible: HashMap::from([("abstract".to_string(), false),]),
},
&CustomDirectiveMap::default(),
),
AdmonitionMeta {
directive: "abstract".to_owned(),
title: "Abstract".to_owned(),
css_id: CssId::Prefix("admonition-".to_owned()),
additional_classnames: Vec::new(),
collapsible: false,
}
);
}
}
3 changes: 3 additions & 0 deletions src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ pub(crate) struct AdmonitionDefaults {
#[serde(default)]
pub(crate) collapsible: bool,

#[serde(default)]
pub(crate) builtins_collapsible: HashMap<String, bool>,

#[serde(default)]
pub(crate) css_id_prefix: Option<String>,
}
Expand Down

0 comments on commit 271eb97

Please sign in to comment.