add index page

This commit is contained in:
Aravinth Manivannan 2021-10-31 23:26:15 +05:30
parent 6ea970e7a6
commit c23943a796
Signed by: realaravinth
GPG Key ID: AD9F0F08E855ED88
3 changed files with 94 additions and 29 deletions

View File

@ -24,14 +24,14 @@ use crate::AppData;
pub mod routes {
pub struct Proxy {
pub update: &'static str,
pub index: &'static str,
pub page: &'static str,
}
impl Proxy {
pub const fn new() -> Self {
Self {
update: "/api/v1/update",
index: "/",
page: "/{username}/{post}",
}
}
@ -104,12 +104,21 @@ impl StringUtils for str {
struct GetPost;
#[derive(TemplateOnce)]
#[template(path = "index.html")]
#[template(path = "post.html")]
pub struct Post {
pub data: get_post::GetPostPost,
pub id: String,
}
const INDEX: &str = include_str!("../templates/index.html");
#[my_codegen::get(path = "crate::V1_API_ROUTES.proxy.index")]
async fn index() -> impl Responder {
HttpResponse::Ok()
.content_type("text/html; charset=utf-8")
.body(INDEX)
}
#[my_codegen::get(path = "crate::V1_API_ROUTES.proxy.page")]
async fn page(path: web::Path<(String, String)>, data: AppData) -> impl Responder {
let post_id = path.1.split("-").last();
@ -140,6 +149,7 @@ async fn page(path: web::Path<(String, String)>, data: AppData) -> impl Responde
pub fn services(cfg: &mut web::ServiceConfig) {
cfg.service(page);
cfg.service(index);
}
#[cfg(test)]
@ -156,6 +166,7 @@ mod tests {
"/@ftrain/big-data-small-effort-b62607a43a8c",
"/geekculture/rest-api-best-practices-decouple-long-running-tasks-from-http-request-processing-9fab2921ace8",
"/illumination/5-bugs-that-turned-into-features-e9a0e972a4e7",
"/"
];
for uri in urls.iter() {

View File

@ -3,35 +3,52 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><.= data.title .></title>
<title>LibMedium</title>
</head>
<body>
<main class="container">
<h1><.= data.title .></h1>
<. use chrono::{TimeZone, Utc}; .>
<. let dt = Utc.timestamp_millis(data.created_at); .>
<p class="meta">
<a href="https://medium.com/u/<.= data.creator.id .>" rel="noreferrer">
<.= data.creator.name .></a
>
on <.= dt.format("%b %e, %Y").to_string() .>
</p>
<article>
<. let paragraphs = data.content.body_model.paragraphs; .>
<. for (pindex, p) in paragraphs.iter().enumerate() {.>
<. if pindex == 1 && p.type_ == "H3" {.>
<. continue; .>
<.}.>
<. if p.type_ == "IMG" {.>
<. include!("./img.html"); .>
<.} else if p.type_ == "P" {.>
<. include!("./p.html"); .>
<.}.>
<.}.>
</article>
</main>
<main>
<div class="center">
<h1>LibMedium</h1>
<p>A free and privacy-respecting medium proxy</p>
<p>
<a
href="https://libmedium.batsense.net/@tylerneely/fear-and-loathing-in-lock-free-programming-7158b1cdd50c"
>Demo Article</a
>
| <a href="https://github.com/realaravinth/libmedium">Source Code</a>
</p>
</div>
</main>
</body>
<style>
<. include!("./main.css"); .>
* {
padding: 0;
margin: 0;
}
body {
width: 100%;
min-height: 100vh;
display: block;
}
main {
display: flex;
flex-direction: column;
align-items: center;
width: 80%;
height: 100vh;
margin: auto;
justify-content: space-between;
}
.center {
margin: auto;
display: flex;
flex-direction: column;
align-items: center;
}
h1 {
font-size: 3rem;
}
</style>
</html>

37
templates/post.html Normal file
View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><.= data.title .></title>
</head>
<body>
<main class="container">
<h1><.= data.title .></h1>
<. use chrono::{TimeZone, Utc}; .>
<. let dt = Utc.timestamp_millis(data.created_at); .>
<p class="meta">
<a href="https://medium.com/u/<.= data.creator.id .>" rel="noreferrer">
<.= data.creator.name .></a
>
on <.= dt.format("%b %e, %Y").to_string() .>
</p>
<article>
<. let paragraphs = data.content.body_model.paragraphs; .>
<. for (pindex, p) in paragraphs.iter().enumerate() {.>
<. if pindex == 1 && p.type_ == "H3" {.>
<. continue; .>
<.}.>
<. if p.type_ == "IMG" {.>
<. include!("./img.html"); .>
<.} else if p.type_ == "P" {.>
<. include!("./p.html"); .>
<.}.>
<.}.>
</article>
</main>
</body>
<style>
<. include!("./main.css"); .>
</style>
</html>