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