Fix generation of edit links
The `IndexPreprocessor` rewrites the path for files named `README.md` to be `index.md`. This breaks the edit link in some circumstances. To address this issues, the `Chapter` struct has now a new attribute called `source_path`. This is initialized with the same value as `path`, but is never ever changed. Finally, the edit link is built by using the `source_path` rather than the `path`.
This commit is contained in:
parent
bbf54d7459
commit
7aff98a859
|
@ -160,6 +160,8 @@ pub struct Chapter {
|
||||||
pub sub_items: Vec<BookItem>,
|
pub sub_items: Vec<BookItem>,
|
||||||
/// The chapter's location, relative to the `SUMMARY.md` file.
|
/// The chapter's location, relative to the `SUMMARY.md` file.
|
||||||
pub path: Option<PathBuf>,
|
pub path: Option<PathBuf>,
|
||||||
|
/// The chapter's source file, relative to the `SUMMARY.md` file.
|
||||||
|
pub source_path: Option<PathBuf>,
|
||||||
/// An ordered list of the names of each chapter above this one in the hierarchy.
|
/// An ordered list of the names of each chapter above this one in the hierarchy.
|
||||||
pub parent_names: Vec<String>,
|
pub parent_names: Vec<String>,
|
||||||
}
|
}
|
||||||
|
@ -169,13 +171,15 @@ impl Chapter {
|
||||||
pub fn new<P: Into<PathBuf>>(
|
pub fn new<P: Into<PathBuf>>(
|
||||||
name: &str,
|
name: &str,
|
||||||
content: String,
|
content: String,
|
||||||
path: P,
|
p: P,
|
||||||
parent_names: Vec<String>,
|
parent_names: Vec<String>,
|
||||||
) -> Chapter {
|
) -> Chapter {
|
||||||
|
let path: PathBuf = p.into();
|
||||||
Chapter {
|
Chapter {
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
content,
|
content,
|
||||||
path: Some(path.into()),
|
path: Some(path.clone()),
|
||||||
|
source_path: Some(path),
|
||||||
parent_names,
|
parent_names,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
|
@ -188,6 +192,7 @@ impl Chapter {
|
||||||
name: name.to_string(),
|
name: name.to_string(),
|
||||||
content: String::new(),
|
content: String::new(),
|
||||||
path: None,
|
path: None,
|
||||||
|
source_path: None,
|
||||||
parent_names,
|
parent_names,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
|
@ -438,6 +443,7 @@ And here is some \
|
||||||
content: String::from("Hello World!"),
|
content: String::from("Hello World!"),
|
||||||
number: Some(SectionNumber(vec![1, 2])),
|
number: Some(SectionNumber(vec![1, 2])),
|
||||||
path: Some(PathBuf::from("second.md")),
|
path: Some(PathBuf::from("second.md")),
|
||||||
|
source_path: Some(PathBuf::from("second.md")),
|
||||||
parent_names: vec![String::from("Chapter 1")],
|
parent_names: vec![String::from("Chapter 1")],
|
||||||
sub_items: Vec::new(),
|
sub_items: Vec::new(),
|
||||||
};
|
};
|
||||||
|
@ -446,6 +452,7 @@ And here is some \
|
||||||
content: String::from(DUMMY_SRC),
|
content: String::from(DUMMY_SRC),
|
||||||
number: None,
|
number: None,
|
||||||
path: Some(PathBuf::from("chapter_1.md")),
|
path: Some(PathBuf::from("chapter_1.md")),
|
||||||
|
source_path: Some(PathBuf::from("chapter_1.md")),
|
||||||
parent_names: Vec::new(),
|
parent_names: Vec::new(),
|
||||||
sub_items: vec![
|
sub_items: vec![
|
||||||
BookItem::Chapter(nested.clone()),
|
BookItem::Chapter(nested.clone()),
|
||||||
|
@ -470,6 +477,7 @@ And here is some \
|
||||||
name: String::from("Chapter 1"),
|
name: String::from("Chapter 1"),
|
||||||
content: String::from(DUMMY_SRC),
|
content: String::from(DUMMY_SRC),
|
||||||
path: Some(PathBuf::from("chapter_1.md")),
|
path: Some(PathBuf::from("chapter_1.md")),
|
||||||
|
source_path: Some(PathBuf::from("chapter_1.md")),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})],
|
})],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
@ -510,6 +518,7 @@ And here is some \
|
||||||
content: String::from(DUMMY_SRC),
|
content: String::from(DUMMY_SRC),
|
||||||
number: None,
|
number: None,
|
||||||
path: Some(PathBuf::from("Chapter_1/index.md")),
|
path: Some(PathBuf::from("Chapter_1/index.md")),
|
||||||
|
source_path: Some(PathBuf::from("Chapter_1/index.md")),
|
||||||
parent_names: Vec::new(),
|
parent_names: Vec::new(),
|
||||||
sub_items: vec![
|
sub_items: vec![
|
||||||
BookItem::Chapter(Chapter::new(
|
BookItem::Chapter(Chapter::new(
|
||||||
|
@ -562,6 +571,7 @@ And here is some \
|
||||||
content: String::from(DUMMY_SRC),
|
content: String::from(DUMMY_SRC),
|
||||||
number: None,
|
number: None,
|
||||||
path: Some(PathBuf::from("Chapter_1/index.md")),
|
path: Some(PathBuf::from("Chapter_1/index.md")),
|
||||||
|
source_path: Some(PathBuf::from("Chapter_1/index.md")),
|
||||||
parent_names: Vec::new(),
|
parent_names: Vec::new(),
|
||||||
sub_items: vec![
|
sub_items: vec![
|
||||||
BookItem::Chapter(Chapter::new(
|
BookItem::Chapter(Chapter::new(
|
||||||
|
|
|
@ -559,6 +559,7 @@ impl Default for HtmlConfig {
|
||||||
search: None,
|
search: None,
|
||||||
git_repository_url: None,
|
git_repository_url: None,
|
||||||
git_repository_icon: None,
|
git_repository_icon: None,
|
||||||
|
git_repository_edit_url_template: None,
|
||||||
input_404: None,
|
input_404: None,
|
||||||
site_url: None,
|
site_url: None,
|
||||||
cname: None,
|
cname: None,
|
||||||
|
|
|
@ -40,7 +40,12 @@ impl HtmlHandlebars {
|
||||||
if let Some(ref git_repository_edit_url_template) =
|
if let Some(ref git_repository_edit_url_template) =
|
||||||
ctx.html_config.git_repository_edit_url_template
|
ctx.html_config.git_repository_edit_url_template
|
||||||
{
|
{
|
||||||
let full_path = "src/".to_owned() + path.to_str().unwrap();
|
let full_path = "src/".to_owned()
|
||||||
|
+ ch.source_path
|
||||||
|
.clone()
|
||||||
|
.unwrap_or_default()
|
||||||
|
.to_str()
|
||||||
|
.unwrap_or_default();
|
||||||
let edit_url = git_repository_edit_url_template.replace("{path}", &full_path);
|
let edit_url = git_repository_edit_url_template.replace("{path}", &full_path);
|
||||||
ctx.data
|
ctx.data
|
||||||
.insert("git_repository_edit_url".to_owned(), json!(edit_url));
|
.insert("git_repository_edit_url".to_owned(), json!(edit_url));
|
||||||
|
|
Loading…
Reference in New Issue