@@ -10,7 +10,7 @@ | |||
- Add Nim syntax highlighting | |||
- Allow static folder to be missing | |||
- Fix shortcodes args being only passed as strings | |||
- Add `page.components` and `section.components` that are equivalent to `path.split('/')` | |||
## 0.2.1 (2017-10-17) | |||
@@ -36,6 +36,8 @@ pub struct Page { | |||
pub slug: String, | |||
/// The URL path of the page | |||
pub path: String, | |||
/// The components of the path of the page | |||
pub components: Vec<String>, | |||
/// The full URL for that page | |||
pub permalink: String, | |||
/// The summary for the article, defaults to None | |||
@@ -63,6 +65,7 @@ impl Page { | |||
content: "".to_string(), | |||
slug: "".to_string(), | |||
path: "".to_string(), | |||
components: vec![], | |||
permalink: "".to_string(), | |||
summary: None, | |||
previous: None, | |||
@@ -112,6 +115,10 @@ impl Page { | |||
page.path = format!("{}/", page.path); | |||
} | |||
page.components = page.path.split('/') | |||
.map(|p| p.to_string()) | |||
.filter(|p| !p.is_empty()) | |||
.collect::<Vec<_>>(); | |||
page.permalink = config.make_permalink(&page.path); | |||
Ok(page) | |||
@@ -184,6 +191,7 @@ impl Default for Page { | |||
content: "".to_string(), | |||
slug: "".to_string(), | |||
path: "".to_string(), | |||
components: vec![], | |||
permalink: "".to_string(), | |||
summary: None, | |||
previous: None, | |||
@@ -195,13 +203,14 @@ impl Default for Page { | |||
impl ser::Serialize for Page { | |||
fn serialize<S>(&self, serializer: S) -> StdResult<S::Ok, S::Error> where S: ser::Serializer { | |||
let mut state = serializer.serialize_struct("page", 16)?; | |||
let mut state = serializer.serialize_struct("page", 17)?; | |||
state.serialize_field("content", &self.content)?; | |||
state.serialize_field("title", &self.meta.title)?; | |||
state.serialize_field("description", &self.meta.description)?; | |||
state.serialize_field("date", &self.meta.date)?; | |||
state.serialize_field("slug", &self.slug)?; | |||
state.serialize_field("path", &self.path)?; | |||
state.serialize_field("components", &self.components)?; | |||
state.serialize_field("permalink", &self.permalink)?; | |||
state.serialize_field("summary", &self.summary)?; | |||
state.serialize_field("tags", &self.meta.tags)?; | |||
@@ -265,6 +274,7 @@ Hello world"#; | |||
assert!(res.is_ok()); | |||
let page = res.unwrap(); | |||
assert_eq!(page.path, "posts/intro/hello-world/"); | |||
assert_eq!(page.components, vec!["posts", "intro", "hello-world"]); | |||
assert_eq!(page.permalink, "http://hello.com/posts/intro/hello-world/"); | |||
} | |||
@@ -280,6 +290,7 @@ Hello world"#; | |||
assert!(res.is_ok()); | |||
let page = res.unwrap(); | |||
assert_eq!(page.path, "hello-world/"); | |||
assert_eq!(page.components, vec!["hello-world"]); | |||
assert_eq!(page.permalink, config.make_permalink("hello-world")); | |||
} | |||
@@ -295,6 +306,7 @@ Hello world"#; | |||
assert!(res.is_ok()); | |||
let page = res.unwrap(); | |||
assert_eq!(page.path, "hello-world/"); | |||
assert_eq!(page.components, vec!["hello-world"]); | |||
assert_eq!(page.permalink, config.make_permalink("hello-world")); | |||
} | |||
@@ -25,6 +25,8 @@ pub struct Section { | |||
pub meta: SectionFrontMatter, | |||
/// The URL path of the page | |||
pub path: String, | |||
/// The components for the path of that page | |||
pub components: Vec<String>, | |||
/// The full URL for that page | |||
pub permalink: String, | |||
/// The actual content of the page, in markdown | |||
@@ -47,8 +49,9 @@ impl Section { | |||
Section { | |||
file: FileInfo::new_section(file_path), | |||
meta: meta, | |||
meta, | |||
path: "".to_string(), | |||
components: vec![], | |||
permalink: "".to_string(), | |||
raw_content: "".to_string(), | |||
content: "".to_string(), | |||
@@ -64,6 +67,10 @@ impl Section { | |||
let mut section = Section::new(file_path, meta); | |||
section.raw_content = content.clone(); | |||
section.path = format!("{}/", section.file.components.join("/")); | |||
section.components = section.path.split('/') | |||
.map(|p| p.to_string()) | |||
.filter(|p| !p.is_empty()) | |||
.collect::<Vec<_>>(); | |||
section.permalink = config.make_permalink(§ion.path); | |||
Ok(section) | |||
} | |||
@@ -140,13 +147,14 @@ impl Section { | |||
impl ser::Serialize for Section { | |||
fn serialize<S>(&self, serializer: S) -> StdResult<S::Ok, S::Error> where S: ser::Serializer { | |||
let mut state = serializer.serialize_struct("section", 12)?; | |||
let mut state = serializer.serialize_struct("section", 13)?; | |||
state.serialize_field("content", &self.content)?; | |||
state.serialize_field("permalink", &self.permalink)?; | |||
state.serialize_field("title", &self.meta.title)?; | |||
state.serialize_field("description", &self.meta.description)?; | |||
state.serialize_field("extra", &self.meta.extra)?; | |||
state.serialize_field("path", &self.path)?; | |||
state.serialize_field("components", &self.components)?; | |||
state.serialize_field("permalink", &self.permalink)?; | |||
state.serialize_field("pages", &self.pages)?; | |||
state.serialize_field("subsections", &self.subsections)?; | |||
@@ -165,6 +173,7 @@ impl Default for Section { | |||
file: FileInfo::default(), | |||
meta: SectionFrontMatter::default(), | |||
path: "".to_string(), | |||
components: vec![], | |||
permalink: "".to_string(), | |||
raw_content: "".to_string(), | |||
content: "".to_string(), | |||
@@ -20,6 +20,8 @@ description: String?; | |||
date: String?; | |||
slug: String; | |||
path: String; | |||
// the path, split on '/' | |||
components: Array<String>; | |||
permalink: String; | |||
summary: String?; | |||
tags: Array<String>; | |||
@@ -51,6 +53,8 @@ description: String?; | |||
date: String?; | |||
slug: String; | |||
path: String; | |||
// the path, split on '/' | |||
components: Array<String>; | |||
permalink: String; | |||
extra: HashMap<String, Any>; | |||
// Pages directly in this section, sorted if asked | |||