mirror of
https://codeberg.org/demostf/frontend.git
synced 2026-06-03 18:24:12 +02:00
reuse demolist
This commit is contained in:
parent
15f38a6872
commit
7bbaa70481
3 changed files with 22 additions and 22 deletions
|
|
@ -1,14 +1,14 @@
|
||||||
use crate::data::demo::ListDemo;
|
use crate::data::demo::ListDemo;
|
||||||
use maud::{html, Markup, Render};
|
use maud::{html, Markup, Render};
|
||||||
|
|
||||||
pub struct DemoList {
|
pub struct DemoList<'a> {
|
||||||
pub demos: Vec<ListDemo>,
|
pub demos: &'a [ListDemo],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Render for DemoList {
|
impl Render for DemoList<'_> {
|
||||||
fn render(&self) -> Markup {
|
fn render(&self) -> Markup {
|
||||||
html! {
|
html! {
|
||||||
@for demo in &self.demos {
|
@for demo in self.demos {
|
||||||
tr {
|
tr {
|
||||||
td .title {
|
td .title {
|
||||||
a href = (demo.url()) { (demo.server) " - " (demo.red) " vs " (demo.blu) }
|
a href = (demo.url()) { (demo.server) " - " (demo.red) " vs " (demo.blu) }
|
||||||
|
|
|
||||||
|
|
@ -147,11 +147,11 @@ async fn index(
|
||||||
) -> Result<Markup> {
|
) -> Result<Markup> {
|
||||||
let filter = filter.map(|filter| filter.0).unwrap_or_default();
|
let filter = filter.map(|filter| filter.0).unwrap_or_default();
|
||||||
let demos = ListDemo::list(&app.connection, filter).await?;
|
let demos = ListDemo::list(&app.connection, filter).await?;
|
||||||
let maps = map_list(&app.connection).await?.collect();
|
let maps: Vec<_> = map_list(&app.connection).await?.collect();
|
||||||
Ok(render(
|
Ok(render(
|
||||||
Index {
|
Index {
|
||||||
demos,
|
demos: &demos,
|
||||||
maps,
|
maps: &maps,
|
||||||
api: &app.api,
|
api: &app.api,
|
||||||
},
|
},
|
||||||
session,
|
session,
|
||||||
|
|
@ -283,7 +283,7 @@ async fn upload(State(app): State<Arc<App>>, session: SessionData) -> impl IntoR
|
||||||
async fn demo_list(State(app): State<Arc<App>>, filter: Option<Query<Filter>>) -> Result<Markup> {
|
async fn demo_list(State(app): State<Arc<App>>, filter: Option<Query<Filter>>) -> Result<Markup> {
|
||||||
let filter = filter.map(|filter| filter.0).unwrap_or_default();
|
let filter = filter.map(|filter| filter.0).unwrap_or_default();
|
||||||
let demos = ListDemo::list(&app.connection, filter).await?;
|
let demos = ListDemo::list(&app.connection, filter).await?;
|
||||||
Ok(DemoList { demos }.render())
|
Ok(DemoList { demos: &demos }.render())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handler_404() -> impl IntoResponse {
|
async fn handler_404() -> impl IntoResponse {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
use crate::data::demo::ListDemo;
|
use crate::data::demo::ListDemo;
|
||||||
|
use crate::fragments::demo_list::DemoList;
|
||||||
use crate::pages::Page;
|
use crate::pages::Page;
|
||||||
use demostf_build::Asset;
|
use demostf_build::Asset;
|
||||||
use maud::{html, Markup, Render};
|
use maud::{html, Markup, Render};
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
|
||||||
pub struct Index<'a> {
|
pub struct Index<'a> {
|
||||||
pub demos: Vec<ListDemo>,
|
pub demos: &'a [ListDemo],
|
||||||
pub maps: Vec<String>,
|
pub maps: &'a [String],
|
||||||
pub api: &'a str,
|
pub api: &'a str,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -14,6 +15,15 @@ pub struct Index<'a> {
|
||||||
#[asset(source = "script/demo_list.js", url = "/demo_list.js")]
|
#[asset(source = "script/demo_list.js", url = "/demo_list.js")]
|
||||||
pub struct DemoListScript;
|
pub struct DemoListScript;
|
||||||
|
|
||||||
|
impl<'a> Index<'a> {
|
||||||
|
fn map_list(&self) -> impl Render + 'a {
|
||||||
|
MapList(&self.maps)
|
||||||
|
}
|
||||||
|
fn demo_list(&self) -> impl Render + 'a {
|
||||||
|
DemoList { demos: self.demos }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Page for Index<'_> {
|
impl Page for Index<'_> {
|
||||||
fn title(&self) -> Cow<'static, str> {
|
fn title(&self) -> Cow<'static, str> {
|
||||||
"Demos - demos.tf".into()
|
"Demos - demos.tf".into()
|
||||||
|
|
@ -23,7 +33,7 @@ impl Page for Index<'_> {
|
||||||
let script = DemoListScript::url();
|
let script = DemoListScript::url();
|
||||||
html! {
|
html! {
|
||||||
h1 { "Demos" }
|
h1 { "Demos" }
|
||||||
#filter-bar data-maps = (MapList(&self.maps)) data-api-base = (self.api) {}
|
#filter-bar data-maps = (self.map_list()) data-api-base = (self.api) {}
|
||||||
table.demolist {
|
table.demolist {
|
||||||
thead {
|
thead {
|
||||||
tr {
|
tr {
|
||||||
|
|
@ -35,17 +45,7 @@ impl Page for Index<'_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tbody {
|
tbody {
|
||||||
@for demo in &self.demos {
|
(self.demo_list())
|
||||||
tr {
|
|
||||||
td .title {
|
|
||||||
a href = (demo.url()) { (demo.server) " - " (demo.red) " vs " (demo.blu) }
|
|
||||||
}
|
|
||||||
td .format { (demo.format()) }
|
|
||||||
td .map { (demo.map) }
|
|
||||||
td .duration { (demo.duration()) }
|
|
||||||
td .date title = (demo.date()) { (demo.relative_date()) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
script defer src = (script) type = "text/javascript" {}
|
script defer src = (script) type = "text/javascript" {}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue