fix posts index page, minor tweaks
This commit is contained in:
parent
93f734bdf0
commit
81993fe829
3 changed files with 13 additions and 27 deletions
|
@ -18,6 +18,7 @@ anyway here's a new todo list:
|
||||||
- [x] docker from-scratch image (it's small!)
|
- [x] docker from-scratch image (it's small!)
|
||||||
- [x] opentelemetry (metrics, traces)
|
- [x] opentelemetry (metrics, traces)
|
||||||
- [ ] opentelemetry logs? (don't know if I'm gonna need it? can probably just make the collector grab them from the docker logs?)
|
- [ ] opentelemetry logs? (don't know if I'm gonna need it? can probably just make the collector grab them from the docker logs?)
|
||||||
|
- [ ] sections (currently the posts page is hardcoded, should be able to turn any page-subfolder into its own section)
|
||||||
- [ ] file-watching (rebuild pages when they're changed, not only on startup)
|
- [ ] file-watching (rebuild pages when they're changed, not only on startup)
|
||||||
- [ ] ~~sass/less compilation~~ (don't think I need it, will skip for now)
|
- [ ] ~~sass/less compilation~~ (don't think I need it, will skip for now)
|
||||||
- [ ] fancy css (but nothing too fancy, I like it [Simple And Clean](https://youtu.be/0nKizH5TV_g?t=42))
|
- [ ] fancy css (but nothing too fancy, I like it [Simple And Clean](https://youtu.be/0nKizH5TV_g?t=42))
|
||||||
|
|
|
@ -13,7 +13,7 @@ use axum::{
|
||||||
use serde_derive::Serialize;
|
use serde_derive::Serialize;
|
||||||
use tower::ServiceExt;
|
use tower::ServiceExt;
|
||||||
use tower_http::services::ServeDir;
|
use tower_http::services::ServeDir;
|
||||||
use tracing::{debug, instrument};
|
use tracing::instrument;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
page::{render_page, Page},
|
page::{render_page, Page},
|
||||||
|
@ -61,6 +61,7 @@ async fn index(
|
||||||
let mut c = tera::Context::new();
|
let mut c = tera::Context::new();
|
||||||
c.insert("page", &ctx);
|
c.insert("page", &ctx);
|
||||||
c.insert("posts", &posts);
|
c.insert("posts", &posts);
|
||||||
|
c.insert("site_title", &state.settings.title);
|
||||||
c.insert("base_url", &state.base_url.to_string());
|
c.insert("base_url", &state.base_url.to_string());
|
||||||
|
|
||||||
let res = state.tera.render("section_index.html", &c)?;
|
let res = state.tera.render("section_index.html", &c)?;
|
||||||
|
@ -95,7 +96,7 @@ async fn view(
|
||||||
return Ok(Redirect::permanent(p).into_response());
|
return Ok(Redirect::permanent(p).into_response());
|
||||||
}
|
}
|
||||||
|
|
||||||
// No alias, check if there's an easy redirect
|
// No alias, check if we can do a simple redirect
|
||||||
if !uri.path().ends_with('/') {
|
if !uri.path().ends_with('/') {
|
||||||
let p = format!("{}/", uri.path());
|
let p = format!("{}/", uri.path());
|
||||||
if state.pages.contains_key(&p) {
|
if state.pages.contains_key(&p) {
|
||||||
|
@ -103,9 +104,7 @@ async fn view(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("page not found for '{uri}', fallback to static files");
|
// no page, check if there's a static file to serve from here
|
||||||
|
|
||||||
// TODO: I don't like how we create a new oneshot for every 404 request, but I don't know if there's a better way
|
|
||||||
return get_static_file("pages", uri).await;
|
return get_static_file("pages", uri).await;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -115,12 +114,10 @@ async fn view(
|
||||||
|
|
||||||
// Check if they have the current page cached
|
// Check if they have the current page cached
|
||||||
if let Some(etag) = headers.get(header::IF_NONE_MATCH) {
|
if let Some(etag) = headers.get(header::IF_NONE_MATCH) {
|
||||||
if let Ok(etag) = etag.to_str() {
|
if etag.to_str().ok() == Some(post.etag.as_str()) {
|
||||||
if etag == post.etag {
|
|
||||||
return Ok(StatusCode::NOT_MODIFIED.into_response());
|
return Ok(StatusCode::NOT_MODIFIED.into_response());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if method == http::method::Method::HEAD {
|
if method == http::method::Method::HEAD {
|
||||||
return Ok((
|
return Ok((
|
||||||
|
@ -167,34 +164,20 @@ pub async fn feed(
|
||||||
posts.reverse();
|
posts.reverse();
|
||||||
posts.truncate(10);
|
posts.truncate(10);
|
||||||
|
|
||||||
|
let last_modified =
|
||||||
|
last_changed.map_or_else(|| state.startup_time.to_rfc2822(), |d| d.to_rfc2822());
|
||||||
|
|
||||||
Ok((
|
Ok((
|
||||||
StatusCode::OK,
|
StatusCode::OK,
|
||||||
[
|
[
|
||||||
(header::CONTENT_TYPE, "application/atom+xml"),
|
(header::CONTENT_TYPE, "application/atom+xml"),
|
||||||
(
|
(header::LAST_MODIFIED, &last_modified),
|
||||||
header::LAST_MODIFIED,
|
|
||||||
&last_changed.map_or_else(|| state.startup_time.to_rfc2822(), |d| d.to_rfc2822()),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
crate::feed::render_atom_feed(&state)?,
|
crate::feed::render_atom_feed(&state)?,
|
||||||
)
|
)
|
||||||
.into_response())
|
.into_response())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(skip(state))]
|
|
||||||
pub async fn redirect(
|
|
||||||
uri: OriginalUri,
|
|
||||||
State(state): State<Arc<AppState>>,
|
|
||||||
) -> Result<Redirect, WebsiteError> {
|
|
||||||
let path = uri.path();
|
|
||||||
let p = format!("{path}/");
|
|
||||||
if state.pages.contains_key(&p) {
|
|
||||||
Ok(Redirect::permanent(&format!("{path}/")))
|
|
||||||
} else {
|
|
||||||
Err(WebsiteError::NotFound)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn get_static_file(base_dir: &str, uri: Uri) -> Result<Response, WebsiteError> {
|
async fn get_static_file(base_dir: &str, uri: Uri) -> Result<Response, WebsiteError> {
|
||||||
let req = Request::builder().uri(uri).body(Body::empty()).unwrap();
|
let req = Request::builder().uri(uri).body(Body::empty()).unwrap();
|
||||||
|
|
||||||
|
|
|
@ -4,12 +4,14 @@
|
||||||
<p>I occasionally write some stuff, it's quite rare but it does happen believe it or not.</p>
|
<p>I occasionally write some stuff, it's quite rare but it does happen believe it or not.</p>
|
||||||
<ul>
|
<ul>
|
||||||
{% for post in posts -%}
|
{% for post in posts -%}
|
||||||
|
{% if post.title -%}
|
||||||
<li><a href="{{base_url | trim_end_matches(pat='/') | safe}}{{post.absolute_path | safe}}">{% if post.date -%}
|
<li><a href="{{base_url | trim_end_matches(pat='/') | safe}}{{post.absolute_path | safe}}">{% if post.date -%}
|
||||||
<time datetime="{{ post.date }}">{{ post.date | date(format="%F") }}</time> – {{ post.title -}}
|
<time datetime="{{ post.date }}">{{ post.date | date(format="%F") }}</time> – {{ post.title -}}
|
||||||
{% else -%}
|
{% else -%}
|
||||||
{{ post.title -}}
|
{{ post.title -}}
|
||||||
{% endif -%}
|
{% endif -%}
|
||||||
</a></li>
|
</a></li>
|
||||||
|
{%- endif %}
|
||||||
{% endfor -%}
|
{% endfor -%}
|
||||||
</ul>
|
</ul>
|
||||||
{% endblock main -%}
|
{% endblock main -%}
|
||||||
|
|
Loading…
Reference in a new issue