add support for pictures
This commit is contained in:
parent
fb143b03c8
commit
e974dd9839
|
@ -251,6 +251,8 @@ pub fn generate(paths: &Paths<'_>) -> anyhow::Result<Treehouse> {
|
||||||
let mut config = Config::load(paths.config_file)?;
|
let mut config = Config::load(paths.config_file)?;
|
||||||
config.site = std::env::var("TREEHOUSE_SITE").unwrap_or(config.site);
|
config.site = std::env::var("TREEHOUSE_SITE").unwrap_or(config.site);
|
||||||
config.autopopulate_emoji(&paths.static_dir.join("emoji"))?;
|
config.autopopulate_emoji(&paths.static_dir.join("emoji"))?;
|
||||||
|
config.autopopulate_pics(&paths.static_dir.join("pic"))?;
|
||||||
|
dbg!(&config.pics);
|
||||||
|
|
||||||
info!("cleaning target directory");
|
info!("cleaning target directory");
|
||||||
let _ = std::fs::remove_dir_all(paths.target_dir);
|
let _ = std::fs::remove_dir_all(paths.target_dir);
|
||||||
|
|
|
@ -36,6 +36,9 @@ pub enum Command {
|
||||||
#[clap(flatten)]
|
#[clap(flatten)]
|
||||||
serve: ServeArgs,
|
serve: ServeArgs,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// Generates a new ulid and prints it to stdout.
|
||||||
|
Ulid,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Args)]
|
#[derive(Args)]
|
||||||
|
|
|
@ -22,6 +22,12 @@ pub struct Config {
|
||||||
/// On top of this, emojis are autodiscovered by walking the `static/emoji` directory.
|
/// On top of this, emojis are autodiscovered by walking the `static/emoji` directory.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub emoji: HashMap<String, String>,
|
pub emoji: HashMap<String, String>,
|
||||||
|
|
||||||
|
/// Overrides for pic filenames. Useful for setting up aliases.
|
||||||
|
///
|
||||||
|
/// On top of this, pics are autodiscovered by walking the `static/pic` directory.
|
||||||
|
/// Only the part before the first dash is treated as the pic's id.
|
||||||
|
pub pics: HashMap<String, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
|
@ -56,4 +62,41 @@ impl Config {
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn is_pic_file(path: &Path) -> bool {
|
||||||
|
path.extension() == Some(OsStr::new("png"))
|
||||||
|
|| path.extension() == Some(OsStr::new("svg"))
|
||||||
|
|| path.extension() == Some(OsStr::new("jpg"))
|
||||||
|
|| path.extension() == Some(OsStr::new("jpeg"))
|
||||||
|
|| path.extension() == Some(OsStr::new("webp"))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn autopopulate_pics(&mut self, dir: &Path) -> anyhow::Result<()> {
|
||||||
|
for file in WalkDir::new(dir) {
|
||||||
|
let entry = file?;
|
||||||
|
if entry.file_type().is_file() && Self::is_pic_file(entry.path()) {
|
||||||
|
if let Some(pic_name) = entry.path().file_stem() {
|
||||||
|
let pic_name = pic_name.to_string_lossy();
|
||||||
|
|
||||||
|
let pic_id = pic_name
|
||||||
|
.split_once('-')
|
||||||
|
.map(|(before_dash, _after_dash)| before_dash)
|
||||||
|
.unwrap_or(&pic_name);
|
||||||
|
|
||||||
|
if !self.pics.contains_key(pic_id) {
|
||||||
|
self.pics.insert(
|
||||||
|
pic_id.to_owned(),
|
||||||
|
entry
|
||||||
|
.path()
|
||||||
|
.strip_prefix(dir)
|
||||||
|
.unwrap_or(entry.path())
|
||||||
|
.to_string_lossy()
|
||||||
|
.into_owned(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,6 +103,9 @@ pub fn branch_to_html(
|
||||||
"".into(),
|
"".into(),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
|
"pic" => config.pics.get(linked).map(|filename| {
|
||||||
|
(format!("/static/pic/{}", &filename).into(), "".into())
|
||||||
|
}),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -46,6 +46,14 @@ async fn fallible_main() -> anyhow::Result<()> {
|
||||||
|
|
||||||
Command::Fix(fix_args) => fix_file_cli(fix_args)?,
|
Command::Fix(fix_args) => fix_file_cli(fix_args)?,
|
||||||
Command::FixAll(fix_args) => fix_all_cli(fix_args, &paths)?,
|
Command::FixAll(fix_args) => fix_all_cli(fix_args, &paths)?,
|
||||||
|
|
||||||
|
Command::Ulid => {
|
||||||
|
let mut rng = rand::thread_rng();
|
||||||
|
let ulid = ulid::Generator::new()
|
||||||
|
.generate_with_source(&mut rng)
|
||||||
|
.expect("failed to generate ulid");
|
||||||
|
println!("{ulid}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -22,3 +22,5 @@ description = "a place on the Internet I like to call home"
|
||||||
"article/function_coloring" = "https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/"
|
"article/function_coloring" = "https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/"
|
||||||
|
|
||||||
[emoji]
|
[emoji]
|
||||||
|
|
||||||
|
[pics]
|
||||||
|
|
Loading…
Reference in a new issue