Include a self-link for the blog.
This commit is contained in:
		
							parent
							
								
									3ac7826d2c
								
							
						
					
					
						commit
						11bfb6836f
					
				| @ -31,8 +31,14 @@ pub(crate) fn convert_blog_post_page_to_render_context<D: AsRef<Path>, F: AsRef< | ||||
|         "blog_post.js", | ||||
|     )?]; | ||||
|     let global_settings = GlobalSettings::new(page.title.clone(), css_files, js_files); | ||||
|     let link_to_blog_post = get_web_path( | ||||
|         config, | ||||
|         output_directory, | ||||
|         output_file, | ||||
|         output_file.strip_prefix(output_directory)?, | ||||
|     )?; | ||||
| 
 | ||||
|     let ret = RenderBlogPostPage::new(global_settings, page.title.clone()); | ||||
|     let ret = RenderBlogPostPage::new(global_settings, page.title.clone(), Some(link_to_blog_post)); | ||||
|     Ok(ret) | ||||
| } | ||||
| 
 | ||||
| @ -46,13 +52,15 @@ fn get_web_path<D: AsRef<Path>, F: AsRef<Path>, P: AsRef<Path>>( | ||||
|     if config.use_relative_paths() { | ||||
|         let output_directory = output_directory.as_ref(); | ||||
|         let containing_file = containing_file.as_ref(); | ||||
|         let containing_file_relative_to_output_directory = | ||||
|             containing_file.strip_prefix(output_directory)?; | ||||
|         // Subtracting 1 from the depth to "remove" the file name.
 | ||||
|         let depth_from_web_root = containing_file | ||||
|             .strip_prefix(output_directory)? | ||||
|         let depth_from_web_root = containing_file_relative_to_output_directory | ||||
|             .components() | ||||
|             .count() | ||||
|             - 1; | ||||
|         let prefix = "../".repeat(depth_from_web_root); | ||||
|         // TODO: It should be possible to strip some of the "../" components based on whether the path_from_web_root goes down the same path as the containing file.
 | ||||
|         let final_path = PathBuf::from(prefix).join(path_from_web_root); | ||||
|         let final_string = final_path | ||||
|             .as_path() | ||||
| @ -73,3 +81,29 @@ fn get_web_path<D: AsRef<Path>, F: AsRef<Path>, P: AsRef<Path>>( | ||||
|         Ok(final_string) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[allow(dead_code)] | ||||
| fn count_shared_steps<A: AsRef<Path>, B: AsRef<Path>>(left: A, right: B) -> usize { | ||||
|     let left = left.as_ref(); | ||||
|     let right = right.as_ref(); | ||||
|     left.components() | ||||
|         .zip(right.components()) | ||||
|         .position(|(l, r)| l != r) | ||||
|         .unwrap_or_else(|| left.components().count()) | ||||
| } | ||||
| 
 | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
|     use super::*; | ||||
| 
 | ||||
|     #[test] | ||||
|     fn test_count_shared_steps() { | ||||
|         assert_eq!(count_shared_steps("", ""), 0); | ||||
|         assert_eq!(count_shared_steps("foo.txt", "foo.txt"), 1); | ||||
|         assert_eq!(count_shared_steps("cat/foo.txt", "dog/foo.txt"), 0); | ||||
|         assert_eq!( | ||||
|             count_shared_steps("foo/bar/baz/lorem.txt", "foo/bar/ipsum/dolar.txt"), | ||||
|             2 | ||||
|         ); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -31,16 +31,20 @@ pub(crate) struct RenderBlogPostPage { | ||||
| 
 | ||||
|     /// The title that will be shown visibly on the page.
 | ||||
|     title: Option<String>, | ||||
| 
 | ||||
|     self_link: Option<String>, | ||||
| } | ||||
| 
 | ||||
| impl RenderBlogPostPage { | ||||
|     pub(crate) fn new( | ||||
|         global_settings: GlobalSettings, | ||||
|         title: Option<String>, | ||||
|         self_link: Option<String>, | ||||
|     ) -> RenderBlogPostPage { | ||||
|         RenderBlogPostPage { | ||||
|             global_settings, | ||||
|             title, | ||||
|             self_link, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander