add command for creating a new page

This commit is contained in:
zyl 2024-11-08 19:20:25 -08:00
parent 0d9c48db40
commit b1a6e052e1
Signed by: zyl
SSH key fingerprint: SHA256:uxxbSXbdroP/OnKBGnEDk5q7EKB2razvstC/KmzdXXs
4 changed files with 53 additions and 4 deletions

View file

@ -7,7 +7,7 @@ use url::Url;
use webdog::{
frontmatter::FrontMatter,
resource::{ResourceBuilderConfig, ResourceMetadata},
Site, SiteConfig,
PageMetadata, Site, SiteConfig,
};
/// The default project to use when creating a new one, embedded into the binary.
@ -58,6 +58,11 @@ enum Commands {
#[clap(subcommand)]
command: ResourceCommands,
},
/// For dealing with standard site pages.
Page {
#[clap(subcommand)]
command: PageCommands,
},
/// Creates a new resource of the given type.
New {
/// The type of resource to create.
@ -91,6 +96,20 @@ enum ResourceCommands {
},
}
#[derive(Debug, Subcommand)]
enum PageCommands {
/// Creates a new standard page.
New {
/// The page's ID.
id: String,
/// The page's title.
title: Option<String>,
/// The page's base template if using one other than the default.
#[arg(long)]
template: Option<String>,
},
}
fn main() -> eyre::Result<()> {
#[cfg(feature = "color-eyre")]
color_eyre::install()?;
@ -218,6 +237,36 @@ fn main() -> eyre::Result<()> {
Ok(())
}
},
Commands::Page { command } => match command {
PageCommands::New {
id,
title,
template,
} => {
let page_path = cli
.site_path
.join(webdog::PAGES_PATH)
.join(&id)
.with_extension("md");
if page_path.exists() {
eprintln!("page already exists!");
return Ok(());
}
let fm = FrontMatter {
content: "new page :)".to_string(),
data: Some(PageMetadata {
title,
template,
..Default::default()
}),
};
std::fs::write(&page_path, fm.format()?)?;
println!("Page created! Edit at {:?}.", page_path);
Ok(())
}
},
Commands::New {
resource_type,
id,