quote chronological cursor scroll, icon

This commit is contained in:
2026-04-08 03:01:52 +02:00
parent d56fcc3f4c
commit f2eab97c15
4 changed files with 50 additions and 11 deletions

View File

@@ -5,20 +5,31 @@ use axum::{
use maud::{PreEscaped, html};
use crate::{
database,
error::CompositeError,
users::{User, auth::UserAuthenticate},
web::{components::nav::nav, icons, pages::base},
quotes::Quote,
users::{
User,
auth::{UserAuthRequired, UserAuthenticate},
},
web::{
components::{nav::nav, quote::quote},
icons,
pages::base,
},
};
pub mod add;
pub async fn page(req: Request) -> Result<Response, CompositeError> {
let u = User::authenticate(req.headers())?;
let u = User::authenticate(req.headers())?.required()?;
let conn = database::conn()?;
let quotes = Quote::get_chronological_cursorscroll(&conn, None, 20)?;
Ok(base(
"Quotes | Mnemosyne",
html!(
(nav(u.as_ref(), req.uri().path()))
(nav(Some(&u), req.uri().path()))
div class="max-w-4xl mx-auto px-2" {
div class="my-4 flex justify-between" {
@@ -26,16 +37,24 @@ pub async fn page(req: Request) -> Result<Response, CompositeError> {
span class="text-neutral-500" {(PreEscaped(icons::SCROLL_TEXT))}
span class="text-2xl font-semibold font-lora" {"Quotes"}
}
@if let Some(_) = u {
a href="/quotes/add" class="group border rounded flex items-center gap-1 px-2 border-neutral-200/25 hover:border-neutral-200/45 bg-neutral-400/5 hover:bg-neutral-400/10" {
span class="text-neutral-300 group-hover:text-neutral-200" {(PreEscaped(icons::PLUS))}
span class="text-neutral-300 group-hover:text-neutral-200" {"Add quote"}
}
a href="/quotes/add" class="group border rounded flex items-center gap-1 px-2 border-neutral-200/25 hover:border-neutral-200/45 bg-neutral-400/5 hover:bg-neutral-400/10" {
span class="text-neutral-300 group-hover:text-neutral-200" {(PreEscaped(icons::PLUS))}
span class="text-neutral-300 group-hover:text-neutral-200" {"Add quote"}
}
}
input class="border w-full border-neutral-200/25 hover:border-neutral-200/45 bg-neutral-950/50 p-2 rounded"
placeholder="Search for quotes...";
div class="text-center p-4" {"Search not yet implemented."}
placeholder="Search not yet implemented.";
div class="my-2 w-full" {
p class="ml-auto w-fit text-neutral-500 text-sm flex items-center" {
span class="scale-[.6]" {(PreEscaped(icons::CALENDAR_ARROW_DOWN))}
"Chronological"
}
}
div class="flex flex-col gap-4" {
@for q in quotes {
(quote(&q))
}
}
}
),
)