/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ use super::{ error::MyError, layout::{trs, DynLayoutPage, LayoutPage}, node::NodeCard, sort::{filter_and_sort_nodes, NodeFilterSort, NodeFilterSortForm, SortOrder, SortProperty}, }; use crate::{ api::AcceptJson, database::Database, locale::AcceptLanguage, logic::session::Session, uri, }; use jellybase::locale::tr; use jellycommon::{api::ApiItemsResponse, Visibility}; use rocket::{get, serde::json::Json, Either, State}; /// This function is a stub and only useful for use in the uri! macro. #[get("/items")] pub fn r_all_items() {} #[get("/items?&")] pub fn r_all_items_filter( sess: Session, db: &State, aj: AcceptJson, page: Option, filter: NodeFilterSort, lang: AcceptLanguage, ) -> Result, Json>, MyError> { let AcceptLanguage(lang) = lang; let data = all_items()?; Ok(if *aj { Either::Right(Json(data)) } else { Either::Left(LayoutPage { title: "All Items".to_owned(), content: markup::new! { .page.dir { h1 { "All Items" } @NodeFilterSortForm { f: &filter, lang: &lang } ul.children { @for (node, udata) in &items[from..to] { li {@NodeCard { node, udata, lang: &lang }} }} p.pagecontrols { span.current { @tr(lang, "page.curr").replace("{cur}", &(page + 1).to_string()).replace("{max}", &max_page.to_string()) " " } @if page > 0 { a.prev[href=uri!(r_all_items_filter(Some(page - 1), filter.clone()))] { @trs(&lang, "page.prev") } " " } @if page + 1 < max_page { a.next[href=uri!(r_all_items_filter(Some(page + 1), filter.clone()))] { @trs(&lang, "page.next") } } } } }, ..Default::default() }) }) }