Pass section in context when rendering a page if there is one
This commit is contained in:
parent
e57fb7d594
commit
e76ee7ae4a
|
@ -6,6 +6,7 @@
|
||||||
- Add extra builtin shortcode for Streamable videos
|
- Add extra builtin shortcode for Streamable videos
|
||||||
- `path` and `permalink` now end with a `/`
|
- `path` and `permalink` now end with a `/`
|
||||||
- Generate table of contents for each page
|
- Generate table of contents for each page
|
||||||
|
- Add `section` to a page Tera context if there is one
|
||||||
|
|
||||||
## 0.0.6 (2017-05-24)
|
## 0.0.6 (2017-05-24)
|
||||||
|
|
||||||
|
|
|
@ -172,9 +172,9 @@ pub fn after_content_change(site: &mut Site, path: &Path) -> Result<()> {
|
||||||
// Updating a page
|
// Updating a page
|
||||||
let current = site.pages[path].clone();
|
let current = site.pages[path].clone();
|
||||||
// Front matter didn't change, only content did
|
// Front matter didn't change, only content did
|
||||||
// so we render only the section page, not its pages
|
// so we render only the section page, not its content
|
||||||
if current.meta == prev.meta {
|
if current.meta == prev.meta {
|
||||||
return site.render_page(&site.pages[path]);
|
return site.render_page(¤t, find_parent_section(site, ¤t));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Front matter changed
|
// Front matter changed
|
||||||
|
@ -199,7 +199,7 @@ pub fn after_content_change(site: &mut Site, path: &Path) -> Result<()> {
|
||||||
site.render_index()?;
|
site.render_index()?;
|
||||||
},
|
},
|
||||||
PageChangesNeeded::Render => {
|
PageChangesNeeded::Render => {
|
||||||
site.render_page(&site.pages[path])?;
|
site.render_page(&site.pages[path], find_parent_section(site, ¤t))?;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ use rendering::context::Context;
|
||||||
use fs::{read_file};
|
use fs::{read_file};
|
||||||
use content::utils::{find_related_assets, get_reading_analytics};
|
use content::utils::{find_related_assets, get_reading_analytics};
|
||||||
use content::file_info::FileInfo;
|
use content::file_info::FileInfo;
|
||||||
use content::Header;
|
use content::{Header, Section};
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
|
@ -136,7 +136,7 @@ impl Page {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Renders the page using the default layout, unless specified in front-matter
|
/// Renders the page using the default layout, unless specified in front-matter
|
||||||
pub fn render_html(&self, tera: &Tera, config: &Config) -> Result<String> {
|
pub fn render_html(&self, tera: &Tera, config: &Config, section: Option<&Section>) -> Result<String> {
|
||||||
let tpl_name = match self.meta.template {
|
let tpl_name = match self.meta.template {
|
||||||
Some(ref l) => l.to_string(),
|
Some(ref l) => l.to_string(),
|
||||||
None => "page.html".to_string()
|
None => "page.html".to_string()
|
||||||
|
@ -147,6 +147,7 @@ impl Page {
|
||||||
context.add("page", self);
|
context.add("page", self);
|
||||||
context.add("current_url", &self.permalink);
|
context.add("current_url", &self.permalink);
|
||||||
context.add("current_path", &self.path);
|
context.add("current_path", &self.path);
|
||||||
|
context.add("section", §ion);
|
||||||
|
|
||||||
tera.render(&tpl_name, &context)
|
tera.render(&tpl_name, &context)
|
||||||
.chain_err(|| format!("Failed to render page '{}'", self.file.path.display()))
|
.chain_err(|| format!("Failed to render page '{}'", self.file.path.display()))
|
||||||
|
|
|
@ -95,10 +95,10 @@ impl<'a> Paginator<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Paginator {
|
Paginator {
|
||||||
all_pages: all_pages,
|
all_pages,
|
||||||
pagers: pagers,
|
pagers,
|
||||||
paginate_by: paginate_by,
|
paginate_by,
|
||||||
section: section,
|
section,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -304,7 +304,7 @@ impl Site {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Renders a single content page
|
/// Renders a single content page
|
||||||
pub fn render_page(&self, page: &Page) -> Result<()> {
|
pub fn render_page(&self, page: &Page, section: Option<&Section>) -> Result<()> {
|
||||||
ensure_directory_exists(&self.output_path)?;
|
ensure_directory_exists(&self.output_path)?;
|
||||||
|
|
||||||
// Copy the nesting of the content directory if we have sections for that page
|
// Copy the nesting of the content directory if we have sections for that page
|
||||||
|
@ -322,7 +322,7 @@ impl Site {
|
||||||
create_directory(¤t_path)?;
|
create_directory(¤t_path)?;
|
||||||
|
|
||||||
// Finally, create a index.html file there with the page rendered
|
// Finally, create a index.html file there with the page rendered
|
||||||
let output = page.render_html(&self.tera, &self.config)?;
|
let output = page.render_html(&self.tera, &self.config, section)?;
|
||||||
create_file(¤t_path.join("index.html"), &self.inject_livereload(output))?;
|
create_file(¤t_path.join("index.html"), &self.inject_livereload(output))?;
|
||||||
|
|
||||||
// Copy any asset we found previously into the same directory as the index.html
|
// Copy any asset we found previously into the same directory as the index.html
|
||||||
|
@ -501,7 +501,7 @@ impl Site {
|
||||||
|
|
||||||
if render_pages {
|
if render_pages {
|
||||||
for page in §ion.pages {
|
for page in §ion.pages {
|
||||||
self.render_page(page)?;
|
self.render_page(page, Some(section))?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -540,7 +540,7 @@ impl Site {
|
||||||
ensure_directory_exists(&self.output_path)?;
|
ensure_directory_exists(&self.output_path)?;
|
||||||
|
|
||||||
for page in self.get_all_orphan_pages() {
|
for page in self.get_all_orphan_pages() {
|
||||||
self.render_page(page)?;
|
self.render_page(page, None)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
{% extends "index.html" %}
|
{% extends "index.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
{% if section %}Section:{{ section.permalink }}{% endif %}
|
||||||
{{ page.content | safe }}
|
{{ page.content | safe }}
|
||||||
|
|
||||||
{% if page.previous %}Previous article: {{ page.previous.permalink }}{% endif %}
|
{% if page.previous %}Previous article: {{ page.previous.permalink }}{% endif %}
|
||||||
|
|
|
@ -128,6 +128,9 @@ fn can_build_site_without_live_reload() {
|
||||||
// Both pages and sections are in the sitemap
|
// Both pages and sections are in the sitemap
|
||||||
assert!(file_contains!(public, "sitemap.xml", "<loc>https://replace-this-with-your-url.com/posts/simple/</loc>"));
|
assert!(file_contains!(public, "sitemap.xml", "<loc>https://replace-this-with-your-url.com/posts/simple/</loc>"));
|
||||||
assert!(file_contains!(public, "sitemap.xml", "<loc>https://replace-this-with-your-url.com/posts/</loc>"));
|
assert!(file_contains!(public, "sitemap.xml", "<loc>https://replace-this-with-your-url.com/posts/</loc>"));
|
||||||
|
|
||||||
|
// section is in the page context
|
||||||
|
assert!(file_contains!(public, "posts/python/index.html", "Section:"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
Loading…
Reference in a new issue