more localized files + add documentation
All checks were successful
PR Check / lint-and-format (pull_request) Successful in 11m59s
All checks were successful
PR Check / lint-and-format (pull_request) Successful in 11m59s
This commit is contained in:
parent
1ac2bbd0f0
commit
c7682bd55f
6 changed files with 51 additions and 29 deletions
|
@ -145,6 +145,8 @@ Markdown file
|
|||
|
||||
Markdown file is stored in `/app/data/index.md`
|
||||
|
||||
> For french clients, `/app/data/index-fr.md` will be read instead.
|
||||
|
||||
```
|
||||
---
|
||||
name: Option<String>
|
||||
|
@ -188,6 +190,8 @@ Post content
|
|||
|
||||
The file is stored at `/app/data/blog/about.md`.
|
||||
|
||||
> For french clients, `/app/data/blog/about-fr.md` will be read instead.
|
||||
|
||||
## Projects
|
||||
|
||||
Markdown files are stored in `/app/data/projects/apps/`
|
||||
|
@ -214,6 +218,8 @@ files in `archive` subdirectory of `apps`.
|
|||
|
||||
The file is stored at `/app/data/projects/about.md`.
|
||||
|
||||
> For french clients, `/app/data/projects/about-fr.md` will be read instead.
|
||||
|
||||
## Contacts
|
||||
|
||||
Markdown files are stored in `/app/data/contacts/`
|
||||
|
@ -254,6 +260,8 @@ For example, `socials` contact files are stored in `/app/data/contacts/socials/`
|
|||
|
||||
The file is stored at `/app/data/contacts/about.md`.
|
||||
|
||||
> For french clients, `/app/data/contacts/about-fr.md` will be read instead.
|
||||
|
||||
## Courses
|
||||
|
||||
Markdown files are stored in `/app/data/cours/`
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
use actix_web::{get, http::header::ContentType, routes, web, HttpResponse, Responder};
|
||||
use cached::proc_macro::once;
|
||||
use actix_web::{
|
||||
get, http::header::ContentType, routes, web, HttpRequest, HttpResponse, Responder,
|
||||
};
|
||||
use cached::proc_macro::cached;
|
||||
use ramhorns::Content;
|
||||
|
||||
use crate::{
|
||||
|
@ -8,14 +10,17 @@ use crate::{
|
|||
utils::{
|
||||
markdown::{File, FilePath},
|
||||
metadata::MType,
|
||||
misc::{make_kw, read_file, Html},
|
||||
misc::{lang, make_kw, read_file_fallback, Html, Lang},
|
||||
routes::blog::{build_rss, get_post, get_posts, Post, BLOG_DIR, MIME_TYPE_RSS, POST_DIR},
|
||||
},
|
||||
};
|
||||
|
||||
#[get("/blog")]
|
||||
pub async fn index(config: web::Data<Config>) -> impl Responder {
|
||||
Html(build_index(config.get_ref().to_owned()))
|
||||
pub async fn index(req: HttpRequest, config: web::Data<Config>) -> impl Responder {
|
||||
Html(build_index(
|
||||
config.get_ref().to_owned(),
|
||||
lang(req.headers()),
|
||||
))
|
||||
}
|
||||
|
||||
#[derive(Content, Debug)]
|
||||
|
@ -26,19 +31,19 @@ struct BlogIndexTemplate {
|
|||
no_posts: bool,
|
||||
}
|
||||
|
||||
#[once(time = 60)]
|
||||
fn build_index(config: Config) -> String {
|
||||
#[cached(time = 60)]
|
||||
fn build_index(config: Config, lang: Lang) -> String {
|
||||
let blog_dir = format!("{}/{}", config.locations.data_dir, BLOG_DIR);
|
||||
let mut posts = get_posts(&format!("{blog_dir}/{POST_DIR}"));
|
||||
|
||||
// Get about
|
||||
let about: Option<File> = read_file(
|
||||
let about = read_file_fallback(
|
||||
FilePath {
|
||||
base: blog_dir,
|
||||
path: "about.md".to_owned(),
|
||||
},
|
||||
MType::Generic,
|
||||
None,
|
||||
lang,
|
||||
);
|
||||
|
||||
// Sort from newest to oldest
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use actix_web::{get, routes, web, HttpRequest, Responder};
|
||||
use cached::proc_macro::once;
|
||||
use cached::proc_macro::cached;
|
||||
use ramhorns::Content;
|
||||
|
||||
use crate::{
|
||||
|
@ -8,7 +8,7 @@ use crate::{
|
|||
utils::{
|
||||
markdown::{File, FilePath},
|
||||
metadata::MType,
|
||||
misc::{make_kw, read_file, Html},
|
||||
misc::{lang, make_kw, read_file_fallback, Html, Lang},
|
||||
routes::contact::{find_links, read, remove_paragraphs},
|
||||
},
|
||||
};
|
||||
|
@ -28,8 +28,8 @@ pub fn pages(cfg: &mut web::ServiceConfig) {
|
|||
}
|
||||
|
||||
#[get("")]
|
||||
async fn page(config: web::Data<Config>) -> impl Responder {
|
||||
Html(build_page(config.get_ref().to_owned()))
|
||||
async fn page(req: HttpRequest, config: web::Data<Config>) -> impl Responder {
|
||||
Html(build_page(config.get_ref().to_owned(), lang(req.headers())))
|
||||
}
|
||||
|
||||
#[routes]
|
||||
|
@ -78,19 +78,19 @@ struct NetworksTemplate {
|
|||
others: Vec<File>,
|
||||
}
|
||||
|
||||
#[once(time = 60)]
|
||||
fn build_page(config: Config) -> String {
|
||||
#[cached(time = 60)]
|
||||
fn build_page(config: Config, lang: Lang) -> String {
|
||||
let contacts_dir = format!("{}/{}", config.locations.data_dir, CONTACT_DIR);
|
||||
let ext = ".md";
|
||||
|
||||
// Get about
|
||||
let about = read_file(
|
||||
let about = read_file_fallback(
|
||||
FilePath {
|
||||
base: contacts_dir.clone(),
|
||||
path: "about.md".to_owned(),
|
||||
},
|
||||
MType::Generic,
|
||||
None,
|
||||
lang,
|
||||
);
|
||||
|
||||
let mut socials = read(&FilePath {
|
||||
|
|
|
@ -8,7 +8,7 @@ use crate::{
|
|||
utils::{
|
||||
markdown::{File, FilePath},
|
||||
metadata::MType,
|
||||
misc::{lang, make_kw, read_file, Html, Lang},
|
||||
misc::{lang, make_kw, read_file, read_file_fallback, Html, Lang},
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -36,14 +36,14 @@ struct StyleAvatar {
|
|||
|
||||
#[cached(time = 60)]
|
||||
fn build_page(config: Config, lang: Lang) -> String {
|
||||
let (fp, t) = (
|
||||
let mut file = read_file_fallback(
|
||||
FilePath {
|
||||
base: config.locations.data_dir.clone(),
|
||||
path: "index.md".to_owned(),
|
||||
},
|
||||
MType::Index,
|
||||
lang,
|
||||
);
|
||||
let mut file = read_file(fp.clone(), t, Some(lang)).or(read_file(fp, t, None));
|
||||
|
||||
// Default values
|
||||
let mut name = config.fc.fullname.clone().unwrap_or_default();
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use actix_web::{get, web, Responder};
|
||||
use cached::proc_macro::once;
|
||||
use actix_web::{get, web, HttpRequest, Responder};
|
||||
use cached::proc_macro::cached;
|
||||
use glob::glob;
|
||||
use ramhorns::Content;
|
||||
|
||||
|
@ -9,13 +9,13 @@ use crate::{
|
|||
utils::{
|
||||
markdown::{File, FilePath},
|
||||
metadata::MType,
|
||||
misc::{make_kw, read_file, Html},
|
||||
misc::{lang, make_kw, read_file, read_file_fallback, Html, Lang},
|
||||
},
|
||||
};
|
||||
|
||||
#[get("/portfolio")]
|
||||
pub async fn page(config: web::Data<Config>) -> impl Responder {
|
||||
Html(build_page(config.get_ref().to_owned()))
|
||||
pub async fn page(req: HttpRequest, config: web::Data<Config>) -> impl Responder {
|
||||
Html(build_page(config.get_ref().to_owned(), lang(req.headers())))
|
||||
}
|
||||
|
||||
#[derive(Content, Debug)]
|
||||
|
@ -29,8 +29,8 @@ struct PortfolioTemplate<'a> {
|
|||
err_msg: &'a str,
|
||||
}
|
||||
|
||||
#[once(time = 60)]
|
||||
fn build_page(config: Config) -> String {
|
||||
#[cached(time = 60)]
|
||||
fn build_page(config: Config, lang: Lang) -> String {
|
||||
let projects_dir = format!("{}/projects", config.locations.data_dir);
|
||||
let apps_dir = FilePath {
|
||||
base: format!("{projects_dir}/apps"),
|
||||
|
@ -39,13 +39,13 @@ fn build_page(config: Config) -> String {
|
|||
let ext = ".md";
|
||||
|
||||
// Get about
|
||||
let about = read_file(
|
||||
let about = read_file_fallback(
|
||||
FilePath {
|
||||
base: projects_dir,
|
||||
path: "about.md".to_owned(),
|
||||
},
|
||||
MType::Generic,
|
||||
None,
|
||||
lang,
|
||||
);
|
||||
|
||||
// Get apps
|
||||
|
|
|
@ -58,6 +58,15 @@ impl Responder for Html {
|
|||
}
|
||||
}
|
||||
|
||||
/// Read a file localized, fallback to default file if localized file isn't found
|
||||
pub fn read_file_fallback(filename: FilePath, expected_file: MType, lang: Lang) -> Option<File> {
|
||||
read_file(filename.clone(), expected_file, Some(lang)).or(read_file(
|
||||
filename,
|
||||
expected_file,
|
||||
None,
|
||||
))
|
||||
}
|
||||
|
||||
/// Read a file
|
||||
pub fn read_file(filename: FilePath, expected_file: MType, lang: Option<Lang>) -> Option<File> {
|
||||
reader(filename, expected_file, lang.unwrap_or(Lang::English))
|
||||
|
|
Loading…
Reference in a new issue