@@ -1,10 +1,14 @@ | |||||
# Changelog | # Changelog | ||||
## 0.1.2 (unreleased) | |||||
- Add `redirect_to` to section front matter to redirect when landing on section | |||||
root page | |||||
## 0.1.1 (2017-07-16) | ## 0.1.1 (2017-07-16) | ||||
- Fix RSS feed not behaving (https://github.com/Keats/gutenberg/issues/101) | - Fix RSS feed not behaving (https://github.com/Keats/gutenberg/issues/101) | ||||
## 0.1.0 (2017-07-14) | ## 0.1.0 (2017-07-14) | ||||
- Parallelize all the things | - Parallelize all the things | ||||
@@ -159,6 +159,13 @@ You can also paginate section, including the index by setting the `paginate_by` | |||||
This represents the number of pages for each pager of the paginator. | This represents the number of pages for each pager of the paginator. | ||||
You will need to access pages through the `paginator` object. (TODO: document that). | You will need to access pages through the `paginator` object. (TODO: document that). | ||||
You can redirect a root section page to another url by using the `redirect_to` parameter of the front-matter followed | |||||
by a path: | |||||
``` | |||||
redirect_to = "docs/docker" | |||||
``` | |||||
### Table of contents | ### Table of contents | ||||
Each page/section will generate a table of content based on the title. It is accessible through `section.toc` and | Each page/section will generate a table of content based on the title. It is accessible through `section.toc` and | ||||
@@ -38,6 +38,11 @@ pub struct SectionFrontMatter { | |||||
/// to be used directly, like a posts section in a personal site | /// to be used directly, like a posts section in a personal site | ||||
#[serde(skip_serializing)] | #[serde(skip_serializing)] | ||||
pub render: Option<bool>, | pub render: Option<bool>, | ||||
/// Whether to redirect when landing on that section. Defaults to `None`. | |||||
/// Useful for the same reason as `render` but when you don't want a 404 when | |||||
/// landing on the root section page | |||||
#[serde(skip_serializing)] | |||||
pub redirect_to: Option<String>, | |||||
/// Any extra parameter present in the front matter | /// Any extra parameter present in the front matter | ||||
pub extra: Option<HashMap<String, Value>>, | pub extra: Option<HashMap<String, Value>>, | ||||
} | } | ||||
@@ -96,6 +101,7 @@ impl Default for SectionFrontMatter { | |||||
paginate_by: None, | paginate_by: None, | ||||
paginate_path: Some(DEFAULT_PAGINATE_PATH.to_string()), | paginate_path: Some(DEFAULT_PAGINATE_PATH.to_string()), | ||||
render: Some(true), | render: Some(true), | ||||
redirect_to: None, | |||||
insert_anchor: Some(InsertAnchor::None), | insert_anchor: Some(InsertAnchor::None), | ||||
extra: None, | extra: None, | ||||
} | } | ||||
@@ -647,6 +647,12 @@ impl Site { | |||||
return Ok(()); | return Ok(()); | ||||
} | } | ||||
if let Some(ref redirect_to) = section.meta.redirect_to { | |||||
let permalink = self.config.make_permalink(redirect_to); | |||||
create_file(&output_path.join("index.html"), &render_redirect_template(&permalink, &self.tera)?)?; | |||||
return Ok(()); | |||||
} | |||||
if section.meta.is_paginated() { | if section.meta.is_paginated() { | ||||
self.render_paginated(&output_path, section)?; | self.render_paginated(&output_path, section)?; | ||||
} else { | } else { | ||||
@@ -1,4 +1,5 @@ | |||||
+++ | +++ | ||||
title = "DevOps" | title = "DevOps" | ||||
sort_by = "order" | sort_by = "order" | ||||
redirect_to = "posts/tutorials/devops/docker" | |||||
+++ | +++ |
@@ -122,6 +122,10 @@ fn can_build_site_without_live_reload() { | |||||
assert!(file_exists!(public, "an-old-url/old-page/index.html")); | assert!(file_exists!(public, "an-old-url/old-page/index.html")); | ||||
assert!(file_contains!(public, "an-old-url/old-page/index.html", "something-else")); | assert!(file_contains!(public, "an-old-url/old-page/index.html", "something-else")); | ||||
// redirect_to works | |||||
assert!(file_exists!(public, "posts/tutorials/devops/index.html")); | |||||
assert!(file_contains!(public, "posts/tutorials/devops/index.html", "docker")); | |||||
// No tags or categories | // No tags or categories | ||||
assert_eq!(file_exists!(public, "categories/index.html"), false); | assert_eq!(file_exists!(public, "categories/index.html"), false); | ||||
assert_eq!(file_exists!(public, "tags/index.html"), false); | assert_eq!(file_exists!(public, "tags/index.html"), false); | ||||