Do not append non-sortables pages when not sortable
This commit is contained in:
parent
9669c3562c
commit
b256aaf7d0
|
@ -5,6 +5,8 @@
|
||||||
- Fix XML templates overriding and reloading
|
- Fix XML templates overriding and reloading
|
||||||
- `title` and `description` are now optional in the front matter
|
- `title` and `description` are now optional in the front matter
|
||||||
- Add GenericConfig, Vim syntax
|
- Add GenericConfig, Vim syntax
|
||||||
|
- Add `_index.md` for homepage as well
|
||||||
|
- Allow sorting by `none`, `date` and `order` for sections
|
||||||
|
|
||||||
## 0.0.4 (2017-04-23)
|
## 0.0.4 (2017-04-23)
|
||||||
|
|
||||||
|
|
41
src/page.rs
41
src/page.rs
|
@ -239,8 +239,10 @@ impl ser::Serialize for Page {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Sort pages
|
/// Sort pages using the method for the given section
|
||||||
/// TODO: write doc and tests
|
///
|
||||||
|
/// Any pages that doesn't have a date when the sorting method is date or order
|
||||||
|
/// when the sorting method is order will be ignored.
|
||||||
pub fn sort_pages(pages: Vec<Page>, section: Option<&Section>) -> Vec<Page> {
|
pub fn sort_pages(pages: Vec<Page>, section: Option<&Section>) -> Vec<Page> {
|
||||||
let sort_by = if let Some(ref sec) = section {
|
let sort_by = if let Some(ref sec) = section {
|
||||||
sec.meta.sort_by()
|
sec.meta.sort_by()
|
||||||
|
@ -260,7 +262,7 @@ pub fn sort_pages(pages: Vec<Page>, section: Option<&Section>) -> Vec<Page> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
can_be_sorted.sort_by(|a, b| b.meta.date().unwrap().cmp(&a.meta.date().unwrap()));
|
can_be_sorted.sort_by(|a, b| b.meta.date().unwrap().cmp(&a.meta.date().unwrap()));
|
||||||
can_be_sorted.append(&mut cannot_be_sorted);
|
// can_be_sorted.append(&mut cannot_be_sorted);
|
||||||
|
|
||||||
can_be_sorted
|
can_be_sorted
|
||||||
},
|
},
|
||||||
|
@ -275,7 +277,7 @@ pub fn sort_pages(pages: Vec<Page>, section: Option<&Section>) -> Vec<Page> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
can_be_sorted.sort_by(|a, b| b.meta.order().cmp(&a.meta.order()));
|
can_be_sorted.sort_by(|a, b| b.meta.order().cmp(&a.meta.order()));
|
||||||
can_be_sorted.append(&mut cannot_be_sorted);
|
// can_be_sorted.append(&mut cannot_be_sorted);
|
||||||
|
|
||||||
can_be_sorted
|
can_be_sorted
|
||||||
},
|
},
|
||||||
|
@ -429,6 +431,37 @@ mod tests {
|
||||||
assert_eq!(pages[2].clone().meta.order.unwrap(), 1);
|
assert_eq!(pages[2].clone().meta.order.unwrap(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_can_sort_none() {
|
||||||
|
let input = vec![
|
||||||
|
create_page_with_order(2),
|
||||||
|
create_page_with_order(3),
|
||||||
|
create_page_with_order(1),
|
||||||
|
];
|
||||||
|
let mut front_matter = FrontMatter::default();
|
||||||
|
front_matter.sort_by = Some(SortBy::None);
|
||||||
|
let section = Section::new(Path::new("hey"), front_matter);
|
||||||
|
let pages = sort_pages(input, Some(§ion));
|
||||||
|
// Should be sorted by date
|
||||||
|
assert_eq!(pages[0].clone().meta.order.unwrap(), 2);
|
||||||
|
assert_eq!(pages[1].clone().meta.order.unwrap(), 3);
|
||||||
|
assert_eq!(pages[2].clone().meta.order.unwrap(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_ignore_page_with_missing_field() {
|
||||||
|
let input = vec![
|
||||||
|
create_page_with_order(2),
|
||||||
|
create_page_with_order(3),
|
||||||
|
create_page_with_date("2019-01-01"),
|
||||||
|
];
|
||||||
|
let mut front_matter = FrontMatter::default();
|
||||||
|
front_matter.sort_by = Some(SortBy::Order);
|
||||||
|
let section = Section::new(Path::new("hey"), front_matter);
|
||||||
|
let pages = sort_pages(input, Some(§ion));
|
||||||
|
assert_eq!(pages.len(), 2);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_populate_previous_and_next_pages() {
|
fn test_populate_previous_and_next_pages() {
|
||||||
let input = vec![
|
let input = vec![
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
+++
|
+++
|
||||||
title = "DevOps"
|
title = "DevOps"
|
||||||
description = ""
|
sort_by = "order"
|
||||||
+++
|
+++
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
+++
|
+++
|
||||||
title = "Docker"
|
title = "Docker"
|
||||||
description = ""
|
order = 1
|
||||||
date = "2017-02-01"
|
|
||||||
+++
|
+++
|
||||||
|
|
||||||
A simple page
|
A simple page
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
+++
|
+++
|
||||||
title = "Nix"
|
title = "Nix"
|
||||||
description = ""
|
order = 2
|
||||||
date = "2017-03-01"
|
|
||||||
+++
|
+++
|
||||||
|
|
||||||
A simple page
|
A simple page
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
+++
|
+++
|
||||||
title = "Programming"
|
title = "Programming"
|
||||||
description = ""
|
sort_by = "order"
|
||||||
+++
|
+++
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
+++
|
+++
|
||||||
title = "Python tutorial"
|
title = "Python tutorial"
|
||||||
description = ""
|
order = 1
|
||||||
+++
|
+++
|
||||||
|
|
||||||
A simple page
|
A simple page
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
+++
|
+++
|
||||||
title = "Rust"
|
title = "Rust"
|
||||||
description = ""
|
order = 2
|
||||||
+++
|
+++
|
||||||
|
|
||||||
A simple page
|
A simple page
|
||||||
|
|
|
@ -44,7 +44,7 @@ fn test_can_parse_site() {
|
||||||
let posts_section = &site.sections[&posts_path];
|
let posts_section = &site.sections[&posts_path];
|
||||||
assert_eq!(posts_section.subsections.len(), 1);
|
assert_eq!(posts_section.subsections.len(), 1);
|
||||||
//println!("{:#?}", posts_section.pages);
|
//println!("{:#?}", posts_section.pages);
|
||||||
assert_eq!(posts_section.pages.len(), 5);
|
assert_eq!(posts_section.pages.len(), 4);
|
||||||
|
|
||||||
let tutorials_section = &site.sections[&posts_path.join("tutorials")];
|
let tutorials_section = &site.sections[&posts_path.join("tutorials")];
|
||||||
assert_eq!(tutorials_section.subsections.len(), 2);
|
assert_eq!(tutorials_section.subsections.len(), 2);
|
||||||
|
|
Loading…
Reference in a new issue