Add weight sorting
This commit is contained in:
parent
7768a0cc12
commit
c7bea0bc54
6
Cargo.lock
generated
6
Cargo.lock
generated
|
@ -12,7 +12,7 @@ dependencies = [
|
||||||
"mount 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"mount 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"notify 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"notify 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"pulldown-cmark 0.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pulldown-cmark 0.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rayon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde_derive 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -666,7 +666,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rayon"
|
name = "rayon"
|
||||||
version = "0.8.1"
|
version = "0.8.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rayon-core 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rayon-core 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -1194,7 +1194,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
"checksum pulldown-cmark 0.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "378e941dbd392c101f2cb88097fa4d7167bc421d4b88de3ff7dbee503bc3233b"
|
"checksum pulldown-cmark 0.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "378e941dbd392c101f2cb88097fa4d7167bc421d4b88de3ff7dbee503bc3233b"
|
||||||
"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
|
"checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"
|
||||||
"checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d"
|
"checksum rand 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "022e0636ec2519ddae48154b028864bdce4eaf7d35226ab8e65c611be97b189d"
|
||||||
"checksum rayon 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "705cf28d52a26a9ab548930a9a3d9799eb77cf84d66d7cc6e52fa222ca662424"
|
"checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8"
|
||||||
"checksum rayon-core 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7febc28567082c345f10cddc3612c6ea020fc3297a1977d472cf9fdb73e6e493"
|
"checksum rayon-core 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7febc28567082c345f10cddc3612c6ea020fc3297a1977d472cf9fdb73e6e493"
|
||||||
"checksum redox_syscall 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "3041aeb6000db123d2c9c751433f526e1f404b23213bd733167ab770c3989b4d"
|
"checksum redox_syscall 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "3041aeb6000db123d2c9c751433f526e1f404b23213bd733167ab770c3989b4d"
|
||||||
"checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b"
|
"checksum regex 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b"
|
||||||
|
|
|
@ -125,7 +125,7 @@ You can also set the `template` variable to change which template will be used t
|
||||||
Sections will also automatically pick up their subsections, allowing you to make some complex pages layout and
|
Sections will also automatically pick up their subsections, allowing you to make some complex pages layout and
|
||||||
table of contents.
|
table of contents.
|
||||||
|
|
||||||
You can define how a section pages are sorted using the `sort_by` key in the front-matter. The choices are `date`, `order`
|
You can define how a section pages are sorted using the `sort_by` key in the front-matter. The choices are `date`, `order`, `weight` (opposite of order)
|
||||||
and `none` (default). Pages that can't be sorted will currently be silently dropped: the final page will be rendered but it will not appear in
|
and `none` (default). Pages that can't be sorted will currently be silently dropped: the final page will be rendered but it will not appear in
|
||||||
the `pages` variable in the section template.
|
the `pages` variable in the section template.
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ use content::Page;
|
||||||
pub enum SortBy {
|
pub enum SortBy {
|
||||||
Date,
|
Date,
|
||||||
Order,
|
Order,
|
||||||
|
Weight,
|
||||||
None,
|
None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +29,7 @@ pub fn sort_pages(pages: Vec<Page>, sort_by: SortBy) -> (Vec<Page>, Vec<Page>) {
|
||||||
|
|
||||||
(can_be_sorted, cannot_be_sorted)
|
(can_be_sorted, cannot_be_sorted)
|
||||||
},
|
},
|
||||||
SortBy::Order => {
|
SortBy::Order | SortBy::Weight => {
|
||||||
let mut can_be_sorted = vec![];
|
let mut can_be_sorted = vec![];
|
||||||
let mut cannot_be_sorted = vec![];
|
let mut cannot_be_sorted = vec![];
|
||||||
for page in pages {
|
for page in pages {
|
||||||
|
@ -38,7 +39,11 @@ pub fn sort_pages(pages: Vec<Page>, sort_by: SortBy) -> (Vec<Page>, Vec<Page>) {
|
||||||
cannot_be_sorted.push(page);
|
cannot_be_sorted.push(page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if sort_by == SortBy::Order {
|
||||||
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()));
|
||||||
|
} else {
|
||||||
|
can_be_sorted.sort_by(|a, b| a.meta.order().cmp(&b.meta.order()));
|
||||||
|
}
|
||||||
|
|
||||||
(can_be_sorted, cannot_be_sorted)
|
(can_be_sorted, cannot_be_sorted)
|
||||||
},
|
},
|
||||||
|
@ -126,6 +131,20 @@ mod tests {
|
||||||
assert_eq!(pages[2].clone().meta.order.unwrap(), 1);
|
assert_eq!(pages[2].clone().meta.order.unwrap(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_sort_by_weight() {
|
||||||
|
let input = vec![
|
||||||
|
create_page_with_order(2),
|
||||||
|
create_page_with_order(3),
|
||||||
|
create_page_with_order(1),
|
||||||
|
];
|
||||||
|
let (pages, _) = sort_pages(input, SortBy::Weight);
|
||||||
|
// Should be sorted by date
|
||||||
|
assert_eq!(pages[0].clone().meta.order.unwrap(), 1);
|
||||||
|
assert_eq!(pages[1].clone().meta.order.unwrap(), 2);
|
||||||
|
assert_eq!(pages[2].clone().meta.order.unwrap(), 3);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn can_sort_by_none() {
|
fn can_sort_by_none() {
|
||||||
let input = vec![
|
let input = vec![
|
||||||
|
|
Loading…
Reference in a new issue