Skip to content

Commit 2ac1d79

Browse files
authored
fix get_taxonomy_url to handle merged taxonomies properly (#1155)
1 parent cc647f8 commit 2ac1d79

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

components/site/src/tpls.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ pub fn register_early_global_fns(site: &mut Site) {
6868
site.tera.register_function("trans", global_fns::Trans::new(site.config.clone()));
6969
site.tera.register_function(
7070
"get_taxonomy_url",
71-
global_fns::GetTaxonomyUrl::new(&site.config.default_language, &site.taxonomies),
71+
global_fns::GetTaxonomyUrl::new(
72+
&site.config.default_language,
73+
&site.taxonomies,
74+
site.config.slugify.taxonomies,
75+
),
7276
);
7377
site.tera.register_function(
7478
"get_file_hash",

components/templates/src/global_fns/mod.rs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use config::Config;
1212
use image::GenericImageView;
1313
use library::{Library, Taxonomy};
1414
use utils::site::resolve_internal_link;
15+
use utils::slugs::{slugify_paths, SlugifyStrategy};
1516

1617
#[macro_use]
1718
mod macros;
@@ -317,18 +318,20 @@ fn image_dimensions(path: &PathBuf) -> Result<(u32, u32)> {
317318
pub struct GetTaxonomyUrl {
318319
taxonomies: HashMap<String, HashMap<String, String>>,
319320
default_lang: String,
321+
slugify: SlugifyStrategy,
320322
}
323+
321324
impl GetTaxonomyUrl {
322-
pub fn new(default_lang: &str, all_taxonomies: &[Taxonomy]) -> Self {
325+
pub fn new(default_lang: &str, all_taxonomies: &[Taxonomy], slugify: SlugifyStrategy) -> Self {
323326
let mut taxonomies = HashMap::new();
324327
for taxo in all_taxonomies {
325328
let mut items = HashMap::new();
326329
for item in &taxo.items {
327-
items.insert(item.name.clone(), item.permalink.clone());
330+
items.insert(slugify_paths(&item.name.clone(), slugify), item.permalink.clone());
328331
}
329332
taxonomies.insert(format!("{}-{}", taxo.kind.name, taxo.kind.lang), items);
330333
}
331-
Self { taxonomies, default_lang: default_lang.to_string() }
334+
Self { taxonomies, default_lang: default_lang.to_string(), slugify: slugify }
332335
}
333336
}
334337
impl TeraFn for GetTaxonomyUrl {
@@ -358,7 +361,7 @@ impl TeraFn for GetTaxonomyUrl {
358361
}
359362
};
360363

361-
if let Some(permalink) = container.get(&name) {
364+
if let Some(permalink) = container.get(&slugify_paths(&name, self.slugify)) {
362365
return Ok(to_value(permalink).unwrap());
363366
}
364367

@@ -650,7 +653,9 @@ mod tests {
650653
let tags_fr = Taxonomy { kind: taxo_config_fr, items: vec![tag_fr] };
651654

652655
let taxonomies = vec![tags.clone(), tags_fr.clone()];
653-
let static_fn = GetTaxonomyUrl::new(&config.default_language, &taxonomies);
656+
let static_fn =
657+
GetTaxonomyUrl::new(&config.default_language, &taxonomies, config.slugify.taxonomies);
658+
654659
// can find it correctly
655660
let mut args = HashMap::new();
656661
args.insert("kind".to_string(), to_value("tags").unwrap());
@@ -659,6 +664,16 @@ mod tests {
659664
static_fn.call(&args).unwrap(),
660665
to_value("http://a-website.com/tags/programming/").unwrap()
661666
);
667+
668+
// can find it correctly with inconsistent capitalisation
669+
let mut args = HashMap::new();
670+
args.insert("kind".to_string(), to_value("tags").unwrap());
671+
args.insert("name".to_string(), to_value("programming").unwrap());
672+
assert_eq!(
673+
static_fn.call(&args).unwrap(),
674+
to_value("http://a-website.com/tags/programming/").unwrap()
675+
);
676+
662677
// works with other languages
663678
let mut args = HashMap::new();
664679
args.insert("kind".to_string(), to_value("tags").unwrap());

0 commit comments

Comments
 (0)