Serializing lang aware configs
This commit is contained in:
parent
0812b603a6
commit
187bc30f00
|
@ -7,7 +7,8 @@
|
|||
- Newlines are now required after the closing `+++` of front-matter
|
||||
- i18n rework: languages now have their sections in `config.toml` to set up all their options
|
||||
1. taxonomies don't have a `lang` anymore in the config, you need to declare them in their respective language section
|
||||
2.
|
||||
2. the `config` variable in templates has been changed and is now a stripped down language aware version of the previous `config`
|
||||
object
|
||||
|
||||
### Other
|
||||
|
||||
|
|
|
@ -20,14 +20,14 @@ use utils::fs::read_file;
|
|||
// We want a default base url for tests
|
||||
static DEFAULT_BASE_URL: &str = "http://a-website.com";
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum Mode {
|
||||
Build,
|
||||
Serve,
|
||||
Check,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize)]
|
||||
#[derive(Clone, Debug, Deserialize)]
|
||||
#[serde(default)]
|
||||
pub struct Config {
|
||||
/// Base URL of the site, the only required config argument
|
||||
|
@ -87,20 +87,30 @@ pub struct Config {
|
|||
pub output_dir: String,
|
||||
|
||||
pub link_checker: link_checker::LinkChecker,
|
||||
|
||||
/// The setup for which slugification strategies to use for paths, taxonomies and anchors
|
||||
pub slugify: slugify::Slugify,
|
||||
|
||||
/// The search config, telling what to include in the search index
|
||||
pub search: search::Search,
|
||||
|
||||
/// The config for the Markdown rendering: syntax highlighting and everything
|
||||
pub markdown: markup::Markdown,
|
||||
|
||||
/// All user params set in [extra] in the config
|
||||
pub extra: HashMap<String, Toml>,
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct SerializedConfig<'a> {
|
||||
base_url: &'a str,
|
||||
mode: Mode,
|
||||
title: &'a Option<String>,
|
||||
description: &'a Option<String>,
|
||||
languages: HashMap<&'a String, &'a languages::LanguageOptions>,
|
||||
translations: &'a HashMap<String, languages::TranslateTerm>,
|
||||
generate_feed: bool,
|
||||
taxonomies: &'a [taxonomies::Taxonomy],
|
||||
build_search_index: bool,
|
||||
extra: &'a HashMap<String, Toml>,
|
||||
}
|
||||
|
||||
impl Config {
|
||||
/// Parses a string containing TOML to our Config struct
|
||||
/// Any extra parameter will end up in the extra field
|
||||
|
@ -115,7 +125,10 @@ impl Config {
|
|||
}
|
||||
|
||||
if !THEME_SET.themes.contains_key(&config.markdown.highlight_theme) {
|
||||
bail!("Highlight theme {} defined in config does not exist.", config.markdown.highlight_theme);
|
||||
bail!(
|
||||
"Highlight theme {} defined in config does not exist.",
|
||||
config.markdown.highlight_theme
|
||||
);
|
||||
}
|
||||
|
||||
languages::validate_code(&config.default_language)?;
|
||||
|
@ -123,21 +136,7 @@ impl Config {
|
|||
languages::validate_code(&code)?;
|
||||
}
|
||||
|
||||
// We automatically insert a language option for the default language *if* it isn't present
|
||||
// TODO: what to do if there is like an empty dict for the lang? merge it or use the language
|
||||
// TODO: as source of truth?
|
||||
if !config.languages.contains_key(&config.default_language) {
|
||||
config.languages.insert(
|
||||
config.default_language.clone(),
|
||||
languages::LanguageOptions {
|
||||
title: config.title.clone(),
|
||||
description: config.title.clone(),
|
||||
generate_feed: config.generate_feed,
|
||||
build_search_index: config.build_search_index,
|
||||
taxonomies: config.taxonomies.clone(),
|
||||
},
|
||||
);
|
||||
}
|
||||
config.add_default_language();
|
||||
|
||||
if !config.ignored_content.is_empty() {
|
||||
// Convert the file glob strings into a compiled glob set matcher. We want to do this once,
|
||||
|
@ -192,6 +191,25 @@ impl Config {
|
|||
}
|
||||
}
|
||||
|
||||
/// Adds the default language to the list of languages if not present
|
||||
fn add_default_language(&mut self) {
|
||||
// We automatically insert a language option for the default language *if* it isn't present
|
||||
// TODO: what to do if there is like an empty dict for the lang? merge it or use the language
|
||||
// TODO: as source of truth?
|
||||
if !self.languages.contains_key(&self.default_language) {
|
||||
self.languages.insert(
|
||||
self.default_language.clone(),
|
||||
languages::LanguageOptions {
|
||||
title: self.title.clone(),
|
||||
description: self.title.clone(),
|
||||
generate_feed: self.generate_feed,
|
||||
build_search_index: self.build_search_index,
|
||||
taxonomies: self.taxonomies.clone(),
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Merges the extra data from the theme with the config extra data
|
||||
fn add_theme_extra(&mut self, theme: &Theme) -> Result<()> {
|
||||
for (key, val) in &theme.extra {
|
||||
|
@ -259,6 +277,23 @@ impl Config {
|
|||
})
|
||||
.map(|term| term.to_string())
|
||||
}
|
||||
|
||||
pub fn serialize(&self, lang: &str) -> SerializedConfig {
|
||||
let options = &self.languages[lang];
|
||||
|
||||
SerializedConfig {
|
||||
base_url: &self.base_url,
|
||||
mode: self.mode,
|
||||
title: &options.title,
|
||||
description: &options.description,
|
||||
languages: self.languages.iter().filter(|(k, _)| k.as_str() != lang).collect(),
|
||||
translations: &self.translations,
|
||||
generate_feed: options.generate_feed,
|
||||
taxonomies: &options.taxonomies,
|
||||
build_search_index: self.build_search_index,
|
||||
extra: &self.extra,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// merge TOML data that can be a table, or anything else
|
||||
|
@ -291,7 +326,7 @@ pub fn merge(into: &mut Toml, from: &Toml) -> Result<()> {
|
|||
|
||||
impl Default for Config {
|
||||
fn default() -> Config {
|
||||
Config {
|
||||
let mut config = Config {
|
||||
base_url: DEFAULT_BASE_URL.to_string(),
|
||||
title: None,
|
||||
description: None,
|
||||
|
@ -316,7 +351,9 @@ impl Default for Config {
|
|||
search: search::Search::default(),
|
||||
markdown: markup::Markdown::default(),
|
||||
extra: HashMap::new(),
|
||||
}
|
||||
};
|
||||
config.add_default_language();
|
||||
config
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ mod config;
|
|||
pub mod highlighting;
|
||||
mod theme;
|
||||
|
||||
|
||||
pub use crate::config::{
|
||||
languages::LanguageOptions, link_checker::LinkChecker, slugify::Slugify, taxonomies::Taxonomy,
|
||||
Config,
|
||||
|
|
|
@ -249,8 +249,14 @@ impl Page {
|
|||
config: &Config,
|
||||
anchor_insert: InsertAnchor,
|
||||
) -> Result<()> {
|
||||
let mut context =
|
||||
RenderContext::new(tera, config, &self.permalink, permalinks, anchor_insert);
|
||||
let mut context = RenderContext::new(
|
||||
tera,
|
||||
config,
|
||||
&self.lang,
|
||||
&self.permalink,
|
||||
permalinks,
|
||||
anchor_insert,
|
||||
);
|
||||
|
||||
context.tera_context.insert("page", &SerializingPage::from_page_basic(self, None));
|
||||
|
||||
|
@ -275,7 +281,7 @@ impl Page {
|
|||
};
|
||||
|
||||
let mut context = TeraContext::new();
|
||||
context.insert("config", config);
|
||||
context.insert("config", &config.serialize(&self.lang));
|
||||
context.insert("current_url", &self.permalink);
|
||||
context.insert("current_path", &self.path);
|
||||
context.insert("page", &self.to_serialized(library));
|
||||
|
|
|
@ -172,6 +172,7 @@ impl Section {
|
|||
let mut context = RenderContext::new(
|
||||
tera,
|
||||
config,
|
||||
&self.lang,
|
||||
&self.permalink,
|
||||
permalinks,
|
||||
self.meta.insert_anchor_links,
|
||||
|
@ -195,7 +196,7 @@ impl Section {
|
|||
let tpl_name = self.get_template_name();
|
||||
|
||||
let mut context = TeraContext::new();
|
||||
context.insert("config", config);
|
||||
context.insert("config", &config.serialize(&self.lang));
|
||||
context.insert("current_url", &self.permalink);
|
||||
context.insert("current_path", &self.path);
|
||||
context.insert("section", &self.to_serialized(library));
|
||||
|
|
|
@ -223,17 +223,18 @@ impl<'a> Paginator<'a> {
|
|||
library: &Library,
|
||||
) -> Result<String> {
|
||||
let mut context = Context::new();
|
||||
context.insert("config", &config);
|
||||
match self.root {
|
||||
PaginationRoot::Section(s) => {
|
||||
context
|
||||
.insert("section", &SerializingSection::from_section_basic(s, Some(library)));
|
||||
context.insert("lang", &s.lang);
|
||||
context.insert("config", &config.serialize(&s.lang));
|
||||
}
|
||||
PaginationRoot::Taxonomy(t, item) => {
|
||||
context.insert("taxonomy", &t.kind);
|
||||
context.insert("term", &item.serialize(library));
|
||||
context.insert("lang", &t.lang);
|
||||
context.insert("config", &config.serialize(&t.lang));
|
||||
}
|
||||
};
|
||||
context.insert("current_url", &pager.permalink);
|
||||
|
|
|
@ -178,7 +178,7 @@ impl Taxonomy {
|
|||
library: &Library,
|
||||
) -> Result<String> {
|
||||
let mut context = Context::new();
|
||||
context.insert("config", config);
|
||||
context.insert("config", &config.serialize(&self.lang));
|
||||
context.insert("lang", &self.lang);
|
||||
context.insert("term", &SerializedTaxonomyItem::from_item(item, library));
|
||||
context.insert("taxonomy", &self.kind);
|
||||
|
@ -201,7 +201,7 @@ impl Taxonomy {
|
|||
library: &Library,
|
||||
) -> Result<String> {
|
||||
let mut context = Context::new();
|
||||
context.insert("config", config);
|
||||
context.insert("config", &config.serialize(&self.lang));
|
||||
let terms: Vec<SerializedTaxonomyItem> =
|
||||
self.items.iter().map(|i| SerializedTaxonomyItem::from_item(i, library)).collect();
|
||||
context.insert("terms", &terms);
|
||||
|
|
|
@ -20,12 +20,13 @@ impl<'a> RenderContext<'a> {
|
|||
pub fn new(
|
||||
tera: &'a Tera,
|
||||
config: &'a Config,
|
||||
lang: &'a str,
|
||||
current_page_permalink: &'a str,
|
||||
permalinks: &'a HashMap<String, String>,
|
||||
insert_anchor: InsertAnchor,
|
||||
) -> RenderContext<'a> {
|
||||
let mut tera_context = Context::new();
|
||||
tera_context.insert("config", config);
|
||||
tera_context.insert("config", &config.serialize(lang));
|
||||
Self {
|
||||
tera: Cow::Borrowed(tera),
|
||||
tera_context,
|
||||
|
|
|
@ -270,7 +270,14 @@ mod tests {
|
|||
fn render_shortcodes(code: &str, tera: &Tera) -> String {
|
||||
let config = Config::default();
|
||||
let permalinks = HashMap::new();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
super::render_shortcodes(code, &context).unwrap()
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,14 @@ fn hl_lines_simple() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=2
|
||||
|
@ -67,7 +74,14 @@ fn hl_lines_in_middle() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=2-3
|
||||
|
@ -96,7 +110,14 @@ fn hl_lines_all() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=1-4
|
||||
|
@ -123,7 +144,14 @@ fn hl_lines_start_from_one() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=1-3
|
||||
|
@ -151,7 +179,14 @@ fn hl_lines_start_from_zero() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=0-3
|
||||
|
@ -179,7 +214,14 @@ fn hl_lines_end() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=3-4
|
||||
|
@ -207,7 +249,14 @@ fn hl_lines_end_out_of_bounds() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=3-4294967295
|
||||
|
@ -235,7 +284,14 @@ fn hl_lines_overlap() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=2-3 1-2
|
||||
|
@ -262,7 +318,14 @@ fn hl_lines_multiple() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=2-3,hl_lines=1-2
|
||||
|
@ -290,7 +353,14 @@ fn hl_lines_extra_spaces() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
``` hl_lines = 2 - 3 1 - 2
|
||||
|
@ -318,7 +388,14 @@ fn hl_lines_int_and_range() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=1 3-4
|
||||
|
@ -347,7 +424,14 @@ fn hl_lines_single_line_range() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=2-2
|
||||
|
@ -376,7 +460,14 @@ fn hl_lines_reverse_range() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
```hl_lines=3-2
|
||||
|
|
|
@ -13,7 +13,14 @@ fn can_do_render_content_simple() {
|
|||
let tera_ctx = Tera::default();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("hello", &context).unwrap();
|
||||
assert_eq!(res.body, "<p>hello</p>\n");
|
||||
}
|
||||
|
@ -24,7 +31,14 @@ fn doesnt_highlight_code_block_with_highlighting_off() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = false;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("```\n$ gutenberg server\n```", &context).unwrap();
|
||||
assert_eq!(res.body, "<pre><code>$ gutenberg server\n</code></pre>\n");
|
||||
}
|
||||
|
@ -35,7 +49,14 @@ fn can_highlight_code_block_no_lang() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("```\n$ gutenberg server\n$ ping\n```", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -49,7 +70,14 @@ fn can_highlight_code_block_with_lang() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("```python\nlist.append(1)\n```", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -63,7 +91,14 @@ fn can_higlight_code_block_with_unknown_lang() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = true;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("```yolo\nlist.append(1)\n```", &context).unwrap();
|
||||
// defaults to plain text
|
||||
assert_eq!(
|
||||
|
@ -76,7 +111,14 @@ fn can_higlight_code_block_with_unknown_lang() {
|
|||
fn can_render_shortcode() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
Hello
|
||||
|
@ -96,7 +138,14 @@ Hello
|
|||
fn can_render_shortcode_with_markdown_char_in_args_name() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let input = vec!["name", "na_me", "n_a_me", "n1"];
|
||||
for i in input {
|
||||
let res =
|
||||
|
@ -109,7 +158,14 @@ fn can_render_shortcode_with_markdown_char_in_args_name() {
|
|||
fn can_render_shortcode_with_markdown_char_in_args_value() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let input = vec![
|
||||
"ub36ffWAqgQ-hey",
|
||||
"ub36ffWAqgQ_hey",
|
||||
|
@ -139,7 +195,14 @@ fn can_render_body_shortcode_with_markdown_char_in_name() {
|
|||
"<blockquote>{{ body }} - {{ author}}</blockquote>",
|
||||
)
|
||||
.unwrap();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res =
|
||||
render_content(&format!("{{% {}(author=\"Bob\") %}}\nhey\n{{% end %}}", i), &context)
|
||||
|
@ -170,7 +233,14 @@ Here is another paragraph.
|
|||
|
||||
tera.add_raw_template("shortcodes/figure.html", shortcode).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
|
||||
|
@ -203,7 +273,14 @@ Here is another paragraph.
|
|||
|
||||
tera.add_raw_template("shortcodes/figure.html", shortcode).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
|
||||
|
@ -214,7 +291,14 @@ Here is another paragraph.
|
|||
fn can_render_several_shortcode_in_row() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
Hello
|
||||
|
@ -249,7 +333,14 @@ fn doesnt_render_ignored_shortcodes() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.highlight_code = false;
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(r#"```{{/* youtube(id="w7Ft2ymGmfc") */}}```"#, &context).unwrap();
|
||||
assert_eq!(res.body, "<p><code>{{ youtube(id="w7Ft2ymGmfc") }}</code></p>\n");
|
||||
}
|
||||
|
@ -265,7 +356,14 @@ fn can_render_shortcode_with_body() {
|
|||
.unwrap();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(
|
||||
r#"
|
||||
|
@ -285,7 +383,14 @@ fn errors_rendering_unknown_shortcode() {
|
|||
let tera_ctx = Tera::default();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("{{ hello(flash=true) }}", &context);
|
||||
assert!(res.is_err());
|
||||
}
|
||||
|
@ -296,7 +401,14 @@ fn can_make_valid_relative_link() {
|
|||
permalinks.insert("pages/about.md".to_string(), "https://vincent.is/about".to_string());
|
||||
let tera_ctx = Tera::default();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"[rel link](@/pages/about.md), [abs link](https://vincent.is/about)"#,
|
||||
&context,
|
||||
|
@ -314,7 +426,14 @@ fn can_make_relative_links_with_anchors() {
|
|||
permalinks.insert("pages/about.md".to_string(), "https://vincent.is/about".to_string());
|
||||
let tera_ctx = Tera::default();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(r#"[rel link](@/pages/about.md#cv)"#, &context).unwrap();
|
||||
|
||||
assert!(res.body.contains(r#"<p><a href="https://vincent.is/about#cv">rel link</a></p>"#));
|
||||
|
@ -325,7 +444,14 @@ fn errors_relative_link_inexistant() {
|
|||
let tera_ctx = Tera::default();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("[rel link](@/pages/about.md)", &context);
|
||||
assert!(res.is_err());
|
||||
}
|
||||
|
@ -335,7 +461,14 @@ fn can_add_id_to_headings() {
|
|||
let tera_ctx = Tera::default();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(r#"# Hello"#, &context).unwrap();
|
||||
assert_eq!(res.body, "<h1 id=\"hello\">Hello</h1>\n");
|
||||
}
|
||||
|
@ -345,7 +478,14 @@ fn can_add_id_to_headings_same_slug() {
|
|||
let tera_ctx = Tera::default();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("# Hello\n# Hello", &context).unwrap();
|
||||
assert_eq!(res.body, "<h1 id=\"hello\">Hello</h1>\n<h1 id=\"hello-1\">Hello</h1>\n");
|
||||
}
|
||||
|
@ -356,7 +496,14 @@ fn can_add_non_slug_id_to_headings() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.slugify.anchors = SlugifyStrategy::Safe;
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(r#"# L'écologie et vous"#, &context).unwrap();
|
||||
assert_eq!(res.body, "<h1 id=\"L'écologie_et_vous\">L'écologie et vous</h1>\n");
|
||||
}
|
||||
|
@ -366,7 +513,14 @@ fn can_handle_manual_ids_on_headings() {
|
|||
let tera_ctx = Tera::default();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
// Tested things: manual IDs; whitespace flexibility; that automatic IDs avoid collision with
|
||||
// manual IDs; that duplicates are in fact permitted among manual IDs; that any non-plain-text
|
||||
// in the middle of `{#…}` will disrupt it from being acknowledged as a manual ID (that last
|
||||
|
@ -403,7 +557,14 @@ fn blank_headings() {
|
|||
let tera_ctx = Tera::default();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("# \n#\n# {#hmm} \n# {#}", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -415,7 +576,14 @@ fn blank_headings() {
|
|||
fn can_insert_anchor_left() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::Left);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::Left,
|
||||
);
|
||||
let res = render_content("# Hello", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -427,7 +595,14 @@ fn can_insert_anchor_left() {
|
|||
fn can_insert_anchor_right() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::Right);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::Right,
|
||||
);
|
||||
let res = render_content("# Hello", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -439,7 +614,14 @@ fn can_insert_anchor_right() {
|
|||
fn can_insert_anchor_for_multi_heading() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::Right);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::Right,
|
||||
);
|
||||
let res = render_content("# Hello\n# World", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -453,7 +635,14 @@ fn can_insert_anchor_for_multi_heading() {
|
|||
fn can_insert_anchor_with_exclamation_mark() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::Left);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::Left,
|
||||
);
|
||||
let res = render_content("# Hello!", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -466,7 +655,14 @@ fn can_insert_anchor_with_exclamation_mark() {
|
|||
fn can_insert_anchor_with_link() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::Left);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::Left,
|
||||
);
|
||||
let res = render_content("## [Rust](https://rust-lang.org)", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -478,7 +674,14 @@ fn can_insert_anchor_with_link() {
|
|||
fn can_insert_anchor_with_other_special_chars() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::Left);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::Left,
|
||||
);
|
||||
let res = render_content("# Hello*_()", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -493,6 +696,7 @@ fn can_make_toc() {
|
|||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"https://mysite.com/something",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::Left,
|
||||
|
@ -525,6 +729,7 @@ fn can_ignore_tags_in_toc() {
|
|||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"https://mysite.com/something",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::Left,
|
||||
|
@ -558,7 +763,14 @@ fn can_ignore_tags_in_toc() {
|
|||
fn can_understand_backtick_in_titles() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("# `Hello`", &context).unwrap();
|
||||
assert_eq!(res.body, "<h1 id=\"hello\"><code>Hello</code></h1>\n");
|
||||
}
|
||||
|
@ -567,7 +779,14 @@ fn can_understand_backtick_in_titles() {
|
|||
fn can_understand_backtick_in_paragraphs() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("Hello `world`", &context).unwrap();
|
||||
assert_eq!(res.body, "<p>Hello <code>world</code></p>\n");
|
||||
}
|
||||
|
@ -577,7 +796,14 @@ fn can_understand_backtick_in_paragraphs() {
|
|||
fn can_understand_links_in_heading() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("# [Rust](https://rust-lang.org)", &context).unwrap();
|
||||
assert_eq!(res.body, "<h1 id=\"rust\"><a href=\"https://rust-lang.org\">Rust</a></h1>\n");
|
||||
}
|
||||
|
@ -586,7 +812,14 @@ fn can_understand_links_in_heading() {
|
|||
fn can_understand_link_with_title_in_heading() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res =
|
||||
render_content("# [Rust](https://rust-lang.org \"Rust homepage\")", &context).unwrap();
|
||||
assert_eq!(
|
||||
|
@ -599,7 +832,14 @@ fn can_understand_link_with_title_in_heading() {
|
|||
fn can_understand_emphasis_in_heading() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("# *Emphasis* text", &context).unwrap();
|
||||
assert_eq!(res.body, "<h1 id=\"emphasis-text\"><em>Emphasis</em> text</h1>\n");
|
||||
}
|
||||
|
@ -608,7 +848,14 @@ fn can_understand_emphasis_in_heading() {
|
|||
fn can_understand_strong_in_heading() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("# **Strong** text", &context).unwrap();
|
||||
assert_eq!(res.body, "<h1 id=\"strong-text\"><strong>Strong</strong> text</h1>\n");
|
||||
}
|
||||
|
@ -617,7 +864,14 @@ fn can_understand_strong_in_heading() {
|
|||
fn can_understand_code_in_heading() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("# `Code` text", &context).unwrap();
|
||||
assert_eq!(res.body, "<h1 id=\"code-text\"><code>Code</code> text</h1>\n");
|
||||
}
|
||||
|
@ -627,7 +881,14 @@ fn can_understand_code_in_heading() {
|
|||
fn can_understand_footnote_in_heading() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("# text [^1] there\n[^1]: footnote", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -645,7 +906,14 @@ fn can_make_valid_relative_link_in_heading() {
|
|||
permalinks.insert("pages/about.md".to_string(), "https://vincent.is/about/".to_string());
|
||||
let tera_ctx = Tera::default();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(r#" # [rel link](@/pages/about.md)"#, &context).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
|
@ -661,6 +929,7 @@ fn can_make_permalinks_with_colocated_assets_for_link() {
|
|||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"https://vincent.is/about/",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
|
@ -676,6 +945,7 @@ fn can_make_permalinks_with_colocated_assets_for_image() {
|
|||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"https://vincent.is/about/",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
|
@ -694,6 +964,7 @@ fn markdown_doesnt_wrap_html_in_paragraph() {
|
|||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"https://vincent.is/about/",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
|
@ -726,6 +997,7 @@ fn correctly_captures_external_links() {
|
|||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"https://vincent.is/about/",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
|
@ -748,7 +1020,14 @@ fn can_handle_summaries() {
|
|||
let tera_ctx = Tera::default();
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera_ctx, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(
|
||||
r#"
|
||||
Hello [My site][world]
|
||||
|
@ -796,7 +1075,14 @@ fn doesnt_try_to_highlight_content_from_shortcode() {
|
|||
|
||||
tera.add_raw_template("shortcodes/figure.html", shortcode).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
assert_eq!(res.body, expected);
|
||||
|
@ -818,7 +1104,14 @@ fn can_emit_newlines_and_whitespace_with_shortcode() {
|
|||
|
||||
tera.add_raw_template(&format!("shortcodes/{}.html", "preformatted"), shortcode).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
assert_eq!(res.body, expected);
|
||||
|
@ -846,7 +1139,7 @@ fn can_emit_newlines_and_whitespace_with_shortcode() {
|
|||
//
|
||||
// tera.add_raw_template(&format!("shortcodes/{}.html", "alert"), shortcode).unwrap();
|
||||
// let config = Config::default();
|
||||
// let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
// let context = RenderContext::new(&tera, &config, &config.default_language, "", &permalinks_ctx, InsertAnchor::None);
|
||||
//
|
||||
// let res = render_content(markdown_string, &context).unwrap();
|
||||
// assert_eq!(res.body, expected);
|
||||
|
@ -870,6 +1163,7 @@ fn leaves_custom_url_scheme_untouched() {
|
|||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"https://vincent.is/",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
|
@ -896,6 +1190,7 @@ fn stops_with_an_error_on_an_empty_link() {
|
|||
let context = RenderContext::new(
|
||||
&tera_ctx,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"https://vincent.is/",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
|
@ -943,7 +1238,14 @@ Bla bla"#;
|
|||
|
||||
tera.add_raw_template("shortcodes/quote.md", shortcode).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
|
||||
|
@ -973,7 +1275,14 @@ fn can_render_shortcode_body_with_no_invalid_escaping() {
|
|||
|
||||
tera.add_raw_template("shortcodes/resize_image.html", shortcode).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
assert_eq!(res.body, expected);
|
||||
|
@ -1002,7 +1311,14 @@ fn can_render_commented_out_shortcodes_fine() {
|
|||
|
||||
tera.add_raw_template("shortcodes/resize_image.html", shortcode).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
assert_eq!(res.body, expected);
|
||||
|
@ -1034,7 +1350,14 @@ Again more text"#;
|
|||
|
||||
tera.add_raw_template("shortcodes/quote.md", shortcode).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
assert_eq!(res.body, expected);
|
||||
|
@ -1045,7 +1368,14 @@ fn can_render_emoji_alias() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.render_emoji = true;
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("Hello, World! :smile:", &context).unwrap();
|
||||
assert_eq!(res.body, "<p>Hello, World! 😄</p>\n");
|
||||
}
|
||||
|
@ -1054,7 +1384,14 @@ fn can_render_emoji_alias() {
|
|||
fn emoji_aliases_are_ignored_when_disabled_in_config() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("Hello, World! :smile:", &context).unwrap();
|
||||
assert_eq!(res.body, "<p>Hello, World! :smile:</p>\n");
|
||||
}
|
||||
|
@ -1083,7 +1420,14 @@ fn invocation_count_increments_in_shortcode() {
|
|||
tera.add_raw_template("shortcodes/a.html", shortcode_template_a).unwrap();
|
||||
tera.add_raw_template("shortcodes/b.html", shortcode_template_b).unwrap();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&tera, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&tera,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
|
||||
let res = render_content(markdown_string, &context).unwrap();
|
||||
assert_eq!(res.body, expected);
|
||||
|
@ -1093,7 +1437,14 @@ fn invocation_count_increments_in_shortcode() {
|
|||
fn basic_external_links_unchanged() {
|
||||
let permalinks_ctx = HashMap::new();
|
||||
let config = Config::default();
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("<https://google.com>", &context).unwrap();
|
||||
assert_eq!(res.body, "<p><a href=\"https://google.com\">https://google.com</a></p>\n");
|
||||
}
|
||||
|
@ -1103,7 +1454,14 @@ fn can_set_target_blank_for_external_link() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.external_links_target_blank = true;
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("<https://google.com>", &context).unwrap();
|
||||
assert_eq!(res.body, "<p><a rel=\"noopener\" target=\"_blank\" href=\"https://google.com\">https://google.com</a></p>\n");
|
||||
}
|
||||
|
@ -1113,7 +1471,14 @@ fn can_set_nofollow_for_external_link() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.external_links_no_follow = true;
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
// Testing href escaping while we're there
|
||||
let res = render_content("<https://google.com/éllo>", &context).unwrap();
|
||||
assert_eq!(
|
||||
|
@ -1127,7 +1492,14 @@ fn can_set_noreferrer_for_external_link() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.external_links_no_referrer = true;
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("<https://google.com>", &context).unwrap();
|
||||
assert_eq!(
|
||||
res.body,
|
||||
|
@ -1142,7 +1514,14 @@ fn can_set_all_options_for_external_link() {
|
|||
config.markdown.external_links_target_blank = true;
|
||||
config.markdown.external_links_no_follow = true;
|
||||
config.markdown.external_links_no_referrer = true;
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content("<https://google.com>", &context).unwrap();
|
||||
assert_eq!(res.body, "<p><a rel=\"noopener nofollow noreferrer\" target=\"_blank\" href=\"https://google.com\">https://google.com</a></p>\n");
|
||||
}
|
||||
|
@ -1152,7 +1531,14 @@ fn can_use_smart_punctuation() {
|
|||
let permalinks_ctx = HashMap::new();
|
||||
let mut config = Config::default();
|
||||
config.markdown.smart_punctuation = true;
|
||||
let context = RenderContext::new(&ZOLA_TERA, &config, "", &permalinks_ctx, InsertAnchor::None);
|
||||
let context = RenderContext::new(
|
||||
&ZOLA_TERA,
|
||||
&config,
|
||||
&config.default_language,
|
||||
"",
|
||||
&permalinks_ctx,
|
||||
InsertAnchor::None,
|
||||
);
|
||||
let res = render_content(r#"This -- is "it"..."#, &context).unwrap();
|
||||
assert_eq!(res.body, "<p>This – is “it”…</p>\n");
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ pub fn render_feed(
|
|||
pages.iter().take(num_entries).map(|x| x.to_serialized_basic(&library)).collect::<Vec<_>>();
|
||||
|
||||
context.insert("pages", &p);
|
||||
context.insert("config", &site.config);
|
||||
context.insert("config", &site.config.serialize(lang));
|
||||
context.insert("lang", lang);
|
||||
|
||||
let feed_filename = &site.config.feed_filename;
|
||||
|
|
|
@ -760,7 +760,7 @@ impl Site {
|
|||
pub fn render_404(&self) -> Result<()> {
|
||||
ensure_directory_exists(&self.output_path)?;
|
||||
let mut context = Context::new();
|
||||
context.insert("config", &self.config);
|
||||
context.insert("config", &self.config.serialize(&self.config.default_language));
|
||||
context.insert("lang", &self.config.default_language);
|
||||
let output = render_template("404.html", &self.tera, context, &self.config.theme)?;
|
||||
let content = self.inject_livereload(output);
|
||||
|
@ -772,7 +772,7 @@ impl Site {
|
|||
pub fn render_robots(&self) -> Result<()> {
|
||||
ensure_directory_exists(&self.output_path)?;
|
||||
let mut context = Context::new();
|
||||
context.insert("config", &self.config);
|
||||
context.insert("config", &self.config.serialize(&self.config.default_language));
|
||||
let content = render_template("robots.txt", &self.tera, context, &self.config.theme)?;
|
||||
self.write_content(&[], "robots.txt", content, false)?;
|
||||
Ok(())
|
||||
|
|
|
@ -256,9 +256,9 @@ mod tests {
|
|||
}
|
||||
create_dir(&dir).expect("Could not create test directory");
|
||||
if cfg!(target_os = "windows") {
|
||||
let stripped_path = strip_unc(&canonicalize(Path::new(&dir)).unwrap());
|
||||
assert!(same_file::is_same_file(Path::new(&stripped_path),&dir).unwrap());
|
||||
assert!(!stripped_path.starts_with(LOCAL_UNC),"The path was not stripped.");
|
||||
let stripped_path = strip_unc(&canonicalize(Path::new(&dir)).unwrap());
|
||||
assert!(same_file::is_same_file(Path::new(&stripped_path), &dir).unwrap());
|
||||
assert!(!stripped_path.starts_with(LOCAL_UNC), "The path was not stripped.");
|
||||
} else {
|
||||
assert_eq!(
|
||||
strip_unc(&canonicalize(Path::new(&dir)).unwrap()),
|
||||
|
@ -281,9 +281,9 @@ mod tests {
|
|||
remove_dir_all(&dir).expect("Could not free test directory");
|
||||
}
|
||||
create_dir(&dir).expect("Could not create test directory");
|
||||
|
||||
let canonicalized_path = canonicalize(Path::new(&dir)).unwrap();
|
||||
assert!(same_file::is_same_file(Path::new(&canonicalized_path),&dir).unwrap());
|
||||
|
||||
let canonicalized_path = canonicalize(Path::new(&dir)).unwrap();
|
||||
assert!(same_file::is_same_file(Path::new(&canonicalized_path), &dir).unwrap());
|
||||
assert!(canonicalized_path.to_str().unwrap().starts_with(LOCAL_UNC));
|
||||
|
||||
remove_dir_all(&dir).unwrap();
|
||||
|
|
Loading…
Reference in a new issue