|
@@ -185,6 +185,7 @@ impl Page { |
|
|
|
|
|
|
|
|
page.path = path; |
|
|
page.path = path; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if !page.path.ends_with('/') { |
|
|
if !page.path.ends_with('/') { |
|
|
page.path = format!("{}/", page.path); |
|
|
page.path = format!("{}/", page.path); |
|
|
} |
|
|
} |
|
@@ -233,7 +234,7 @@ impl Page { |
|
|
page.assets = assets; |
|
|
page.assets = assets; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
page.serialized_assets = page.serialize_assets(); |
|
|
|
|
|
|
|
|
page.serialized_assets = page.serialize_assets(&base_path); |
|
|
} else { |
|
|
} else { |
|
|
page.assets = vec![]; |
|
|
page.assets = vec![]; |
|
|
} |
|
|
} |
|
@@ -287,12 +288,21 @@ impl Page { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// Creates a vectors of asset URLs. |
|
|
/// Creates a vectors of asset URLs. |
|
|
fn serialize_assets(&self) -> Vec<String> { |
|
|
|
|
|
|
|
|
fn serialize_assets(&self, base_path: &PathBuf) -> Vec<String> { |
|
|
self.assets |
|
|
self.assets |
|
|
.iter() |
|
|
.iter() |
|
|
.filter_map(|asset| asset.file_name()) |
|
|
.filter_map(|asset| asset.file_name()) |
|
|
.filter_map(|filename| filename.to_str()) |
|
|
.filter_map(|filename| filename.to_str()) |
|
|
.map(|filename| self.path.clone() + filename) |
|
|
|
|
|
|
|
|
.map(|filename| { |
|
|
|
|
|
let mut path = self.file.path.clone(); |
|
|
|
|
|
// Popping the index.md from the path since file.parent would be one level too high |
|
|
|
|
|
// for our need here |
|
|
|
|
|
path.pop(); |
|
|
|
|
|
path.push(filename); |
|
|
|
|
|
path = path.strip_prefix(&base_path.join("content")).expect("Should be able to stripe prefix").to_path_buf(); |
|
|
|
|
|
path |
|
|
|
|
|
}) |
|
|
|
|
|
.map(|path| path.to_string_lossy().to_string()) |
|
|
.collect() |
|
|
.collect() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -507,7 +517,7 @@ Hello world |
|
|
let res = Page::from_file( |
|
|
let res = Page::from_file( |
|
|
nested_path.join("index.md").as_path(), |
|
|
nested_path.join("index.md").as_path(), |
|
|
&Config::default(), |
|
|
&Config::default(), |
|
|
&PathBuf::new(), |
|
|
|
|
|
|
|
|
&path.to_path_buf(), |
|
|
); |
|
|
); |
|
|
assert!(res.is_ok()); |
|
|
assert!(res.is_ok()); |
|
|
let page = res.unwrap(); |
|
|
let page = res.unwrap(); |
|
@@ -534,7 +544,7 @@ Hello world |
|
|
let res = Page::from_file( |
|
|
let res = Page::from_file( |
|
|
nested_path.join("index.md").as_path(), |
|
|
nested_path.join("index.md").as_path(), |
|
|
&Config::default(), |
|
|
&Config::default(), |
|
|
&PathBuf::new(), |
|
|
|
|
|
|
|
|
&path.to_path_buf(), |
|
|
); |
|
|
); |
|
|
assert!(res.is_ok()); |
|
|
assert!(res.is_ok()); |
|
|
let page = res.unwrap(); |
|
|
let page = res.unwrap(); |
|
@@ -544,6 +554,35 @@ Hello world |
|
|
assert_eq!(page.permalink, "http://a-website.com/posts/hey/"); |
|
|
assert_eq!(page.permalink, "http://a-website.com/posts/hey/"); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// https://github.com/getzola/zola/issues/674 |
|
|
|
|
|
#[test] |
|
|
|
|
|
fn page_with_assets_uses_filepath_for_assets() { |
|
|
|
|
|
let tmp_dir = tempdir().expect("create temp dir"); |
|
|
|
|
|
let path = tmp_dir.path(); |
|
|
|
|
|
create_dir(&path.join("content")).expect("create content temp dir"); |
|
|
|
|
|
create_dir(&path.join("content").join("posts")).expect("create posts temp dir"); |
|
|
|
|
|
let nested_path = path.join("content").join("posts").join("with_assets"); |
|
|
|
|
|
create_dir(&nested_path).expect("create nested temp dir"); |
|
|
|
|
|
let mut f = File::create(nested_path.join("index.md")).unwrap(); |
|
|
|
|
|
f.write_all(b"+++\n+++\n").unwrap(); |
|
|
|
|
|
File::create(nested_path.join("example.js")).unwrap(); |
|
|
|
|
|
File::create(nested_path.join("graph.jpg")).unwrap(); |
|
|
|
|
|
File::create(nested_path.join("fail.png")).unwrap(); |
|
|
|
|
|
|
|
|
|
|
|
let res = Page::from_file( |
|
|
|
|
|
nested_path.join("index.md").as_path(), |
|
|
|
|
|
&Config::default(), |
|
|
|
|
|
&path.to_path_buf(), |
|
|
|
|
|
); |
|
|
|
|
|
assert!(res.is_ok()); |
|
|
|
|
|
let page = res.unwrap(); |
|
|
|
|
|
assert_eq!(page.file.parent, path.join("content").join("posts")); |
|
|
|
|
|
assert_eq!(page.assets.len(), 3); |
|
|
|
|
|
assert_eq!(page.serialized_assets.len(), 3); |
|
|
|
|
|
assert_eq!(page.serialized_assets[0], "posts/with_assets/graph.jpg"); |
|
|
|
|
|
assert_eq!(page.permalink, "http://a-website.com/posts/with-assets/"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// https://github.com/getzola/zola/issues/607 |
|
|
// https://github.com/getzola/zola/issues/607 |
|
|
#[test] |
|
|
#[test] |
|
|
fn page_with_assets_and_date_in_folder_name() { |
|
|
fn page_with_assets_and_date_in_folder_name() { |
|
@@ -562,7 +601,7 @@ Hello world |
|
|
let res = Page::from_file( |
|
|
let res = Page::from_file( |
|
|
nested_path.join("index.md").as_path(), |
|
|
nested_path.join("index.md").as_path(), |
|
|
&Config::default(), |
|
|
&Config::default(), |
|
|
&PathBuf::new(), |
|
|
|
|
|
|
|
|
&path.to_path_buf(), |
|
|
); |
|
|
); |
|
|
assert!(res.is_ok()); |
|
|
assert!(res.is_ok()); |
|
|
let page = res.unwrap(); |
|
|
let page = res.unwrap(); |
|
@@ -592,7 +631,7 @@ Hello world |
|
|
let mut config = Config::default(); |
|
|
let mut config = Config::default(); |
|
|
config.ignored_content_globset = Some(gsb.build().unwrap()); |
|
|
config.ignored_content_globset = Some(gsb.build().unwrap()); |
|
|
|
|
|
|
|
|
let res = Page::from_file(nested_path.join("index.md").as_path(), &config, &PathBuf::new()); |
|
|
|
|
|
|
|
|
let res = Page::from_file(nested_path.join("index.md").as_path(), &config, &path.to_path_buf()); |
|
|
|
|
|
|
|
|
assert!(res.is_ok()); |
|
|
assert!(res.is_ok()); |
|
|
let page = res.unwrap(); |
|
|
let page = res.unwrap(); |
|
|