From 67f9b9499beeb47480a3e4c86272c7e6b7c14356 Mon Sep 17 00:00:00 2001 From: snake66 Date: Sat, 6 Mar 2021 22:49:04 +0100 Subject: [PATCH] Fix language specific non-internal urls for get_url. (#1381) * Fix language specific non-internal urls for get_url. * get_url: PathBuf for URL's don't work on Windows. --- components/templates/src/global_fns/mod.rs | 43 ++++++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/components/templates/src/global_fns/mod.rs b/components/templates/src/global_fns/mod.rs index 4fe0ccaa..7038c157 100644 --- a/components/templates/src/global_fns/mod.rs +++ b/components/templates/src/global_fns/mod.rs @@ -149,21 +149,32 @@ impl TeraFn for GetUrl { } } else { // anything else - let mut permalink = self.config.make_permalink(&path); + let mut segments = vec![]; + + if lang != self.config.default_language { + segments.push(lang); + }; + + segments.push(path); + + let path_with_lang = segments.join("/"); + + let mut permalink = self.config.make_permalink(&path_with_lang); if !trailing_slash && permalink.ends_with('/') { permalink.pop(); // Removes the slash } if cachebust { - match open_file(&self.search_paths, &path) + match open_file(&self.search_paths, &path_with_lang) .and_then(|f| compute_file_hash::(f, false)) { Ok(hash) => { permalink = format!("{}?h={}", permalink, hash); } - Err(_) => return file_not_found_err(&self.search_paths, &path), + Err(_) => return file_not_found_err(&self.search_paths, &path_with_lang), }; } + Ok(to_value(permalink).unwrap()) } } @@ -825,6 +836,32 @@ title = "A title" ); } + #[test] + fn can_get_feed_url_with_default_language() { + let config = Config::parse(TRANS_CONFIG).unwrap(); + let static_fn = GetUrl::new(config.clone(), HashMap::new(), vec![TEST_CONTEXT.static_path.clone()]); + let mut args = HashMap::new(); + args.insert("path".to_string(), to_value(config.feed_filename).unwrap()); + args.insert("lang".to_string(), to_value("fr").unwrap()); + assert_eq!( + static_fn.call(&args).unwrap(), + "https://remplace-par-ton-url.fr/atom.xml" + ); + } + + #[test] + fn can_get_feed_url_with_other_language() { + let config = Config::parse(TRANS_CONFIG).unwrap(); + let static_fn = GetUrl::new(config.clone(), HashMap::new(), vec![TEST_CONTEXT.static_path.clone()]); + let mut args = HashMap::new(); + args.insert("path".to_string(), to_value(config.feed_filename).unwrap()); + args.insert("lang".to_string(), to_value("en").unwrap()); + assert_eq!( + static_fn.call(&args).unwrap(), + "https://remplace-par-ton-url.fr/en/atom.xml" + ); + } + #[test] fn can_get_file_hash_sha256() { let static_fn = GetFileHash::new(vec![TEST_CONTEXT.static_path.clone()]);