aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--locale/en.ini3
-rw-r--r--server/src/ui/node.rs40
-rw-r--r--ui/src/components/node_list.rs6
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 } }
}}