diff options
| -rw-r--r-- | locale/en.ini | 3 | ||||
| -rw-r--r-- | server/src/ui/node.rs | 40 | ||||
| -rw-r--r-- | ui/src/components/node_list.rs | 6 |
3 files changed, 44 insertions, 5 deletions
diff --git a/locale/en.ini b/locale/en.ini index a11f161..fdcd207 100644 --- a/locale/en.ini +++ b/locale/en.ini @@ -51,7 +51,8 @@ node.watchlist.set=Add to Watchlist node.watchlist.unset=Remove from Watchlist node.update_rating=Update Rating node.chapters=Chapters -node.people=Cast & Crew +node.credits=Cast & Crew +node.credited=Featured node.tags=Tags node.similar=Similar Media node.external_ids=External Identifiers diff --git a/server/src/ui/node.rs b/server/src/ui/node.rs index 0f39213..853a96b 100644 --- a/server/src/ui/node.rs +++ b/server/src/ui/node.rs @@ -32,6 +32,7 @@ pub fn r_node(ri: RequestInfo<'_>, slug: &str) -> MyResult<UiResponse> { page.push(VIEW_NODE_PAGE, nku); c_children(&mut page, txn, row, &nku)?; c_credits(&mut page, txn, &nku)?; + c_credited(&mut page, txn, row)?; page_out = page.finish(); } @@ -108,7 +109,7 @@ fn c_credits( ) -> Result<()> { let mut list = ObjectBufferBuilder::default(); list.push(NODELIST_DISPLAYSTYLE, NLSTYLE_INLINE); - list.push(NODELIST_TITLE, "node.people"); + list.push(NODELIST_TITLE, "node.credits"); if !nku.get(NKU_NODE).unwrap_or_default().has(NO_CREDIT.0) { return Ok(()); @@ -129,3 +130,40 @@ fn c_credits( page.push(VIEW_NODE_LIST, list.finish().as_object()); Ok(()) } + +fn c_credited(page: &mut ObjectBufferBuilder, txn: &mut dyn Transaction, row: u64) -> Result<()> { + let children_rows = txn + .query(Query { + sort: Sort::Value(ValueSort { + multi: MultiBehaviour::First, + offset: None, + order: SortOrder::Ascending, + path: Path(vec![NO_TITLE.0]), + }), + filter: Filter::All(vec![ + Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), + Filter::Match(Path(vec![NO_CREDIT.0, CR_NODE.0]), row.into()), + ]), + })? + .collect::<Result<Vec<_>>>()?; + + if children_rows.is_empty() { + return Ok(()); + } + + let mut list = ObjectBufferBuilder::default(); + list.push(NODELIST_DISPLAYSTYLE, NLSTYLE_GRID); + list.push(NODELIST_TITLE, "node.credited"); + + for (row, _) in children_rows { + list.push( + NODELIST_ITEM, + Object::EMPTY + .insert(NKU_NODE, txn.get(row)?.unwrap().as_object()) + .as_object(), + ); + } + + page.push(VIEW_NODE_LIST, list.finish().as_object()); + Ok(()) +} diff --git a/ui/src/components/node_list.rs b/ui/src/components/node_list.rs index 564d3be..d1d16fb 100644 --- a/ui/src/components/node_list.rs +++ b/ui/src/components/node_list.rs @@ -14,15 +14,15 @@ use jellyui_locale::tr; markup::define! { NodeList<'a>(ri: &'a RenderInfo<'a>, nl: Object<'a>) { @let ds = nl.get(NODELIST_DISPLAYSTYLE).unwrap_or(NLSTYLE_GRID); + @if let Some(title) = nl.get(NODELIST_TITLE) { + h2 { @tr(ri.lang, title) } + } @if ds == NLSTYLE_GRID { ul.nl.grid { @for nku in nl.iter(NODELIST_ITEM) { li { @NodeCard { ri, nku } } }} } @if ds == NLSTYLE_INLINE { - @if let Some(title) = nl.get(NODELIST_TITLE) { - h2 { @tr(ri.lang, title) } - } ul.nl.inline { @for nku in nl.iter(NODELIST_ITEM) { li { @NodeCard { ri, nku } } }} |