Browse Source

Pass section in context when rendering a page if there is one

index-subcmd
Vincent Prouillet 7 years ago
parent
commit
e76ee7ae4a
7 changed files with 19 additions and 13 deletions
  1. +1
    -0
      CHANGELOG.md
  2. +3
    -3
      src/bin/rebuild.rs
  3. +3
    -2
      src/content/page.rs
  4. +4
    -4
      src/content/pagination.rs
  5. +4
    -4
      src/site.rs
  6. +1
    -0
      test_site/templates/page.html
  7. +3
    -0
      tests/site.rs

+ 1
- 0
CHANGELOG.md View File

@@ -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)




+ 3
- 3
src/bin/rebuild.rs View File

@@ -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(&current, find_parent_section(site, &current));
} }


// 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, &current))?;
}, },
}; };
} }


+ 3
- 2
src/content/page.rs View File

@@ -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", &section);


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()))


+ 4
- 4
src/content/pagination.rs View File

@@ -95,10 +95,10 @@ impl<'a> Paginator<'a> {
} }


Paginator { Paginator {
all_pages: all_pages,
pagers: pagers,
paginate_by: paginate_by,
section: section,
all_pages,
pagers,
paginate_by,
section,
} }
} }




+ 4
- 4
src/site.rs View File

@@ -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(&current_path)?; create_directory(&current_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(&current_path.join("index.html"), &self.inject_livereload(output))?; create_file(&current_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 &section.pages { for page in &section.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
- 0
test_site/templates/page.html View File

@@ -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 %}


+ 3
- 0
tests/site.rs View File

@@ -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…
Cancel
Save