« get me outta code hell

search, client: handle singles - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2026-02-12 16:54:09 -0400
committer(quasar) nebula <qznebula@protonmail.com>2026-02-12 16:58:12 -0400
commit05a176b1b556dc78ca3bf819a4bd0d073bc23cad (patch)
tree5a97fe8b3b532f699b90d166a0959d5bf6a15023 /src
parentafe80f393d1569ba22f03941e808a66ddcd69e77 (diff)
search, client: handle singles
Diffstat (limited to 'src')
-rw-r--r--src/common-util/search-shape.js1
-rw-r--r--src/content/dependencies/generateSearchSidebarBox.js3
-rw-r--r--src/search-select.js9
-rw-r--r--src/static/js/client/sidebar-search.js32
-rw-r--r--src/strings-default.yaml1
5 files changed, 41 insertions, 5 deletions
diff --git a/src/common-util/search-shape.js b/src/common-util/search-shape.js
index e0819ed6..dada5003 100644
--- a/src/common-util/search-shape.js
+++ b/src/common-util/search-shape.js
@@ -9,6 +9,7 @@
 const baselineStore = [
   'primaryName',
   'disambiguator',
+  'classification',
   'artwork',
   'color',
 ];
diff --git a/src/content/dependencies/generateSearchSidebarBox.js b/src/content/dependencies/generateSearchSidebarBox.js
index 0d760773..493f08ef 100644
--- a/src/content/dependencies/generateSearchSidebarBox.js
+++ b/src/content/dependencies/generateSearchSidebarBox.js
@@ -56,6 +56,9 @@ export default {
             html.tag('template', {class: 'wiki-search-group-result-kind-string'},
               language.$(capsule, 'group')),
 
+            html.tag('template', {class: 'wiki-search-single-result-kind-string'},
+              language.$(capsule, 'single')),
+
             html.tag('template', {class: 'wiki-search-tag-result-kind-string'},
               language.$(capsule, 'artTag')),
           ]),
diff --git a/src/search-select.js b/src/search-select.js
index 4470c463..a7dcf81a 100644
--- a/src/search-select.js
+++ b/src/search-select.js
@@ -200,6 +200,15 @@ function genericProcess(thing, opts) {
    : thing.isFlash ? thing.act.name
       : null);
 
+  fields.classification =
+    (thing.isAlbum ? thing.style
+   : thing.isTrack ?
+      (thing.album.style === 'single' &&
+       thing === thing.album.tracks[0]
+        ? 'single'
+        : 'track')
+      : null);
+
   fields.disambiguator =
     fields.parentName;
 
diff --git a/src/static/js/client/sidebar-search.js b/src/static/js/client/sidebar-search.js
index d63b9708..18ee6dfa 100644
--- a/src/static/js/client/sidebar-search.js
+++ b/src/static/js/client/sidebar-search.js
@@ -74,6 +74,7 @@ export const info = {
   albumResultKindString: null,
   artistResultKindString: null,
   groupResultKindString: null,
+  singleResultKindString: null,
   tagResultKindString: null,
 
   groupResultDisambiguatorString: null,
@@ -207,6 +208,9 @@ export function getPageReferences() {
   info.groupResultKindString =
     findString('group-result-kind');
 
+  info.singleResultKindString =
+    findString('single-result-kind');
+
   info.tagResultKindString =
     findString('tag-result-kind');
 
@@ -879,10 +883,26 @@ function fillResultElements(results, {
 } = {}) {
   const tidiedResults = tidyResults(results);
 
-  const filteredResults =
-    (filterType
-      ? tidiedResults.filter(result => result.referenceType === filterType)
-      : tidiedResults);
+  let filteredResults = tidiedResults;
+
+  if (filterType) {
+    filteredResults = filteredResults
+      .filter(result => result.referenceType === filterType);
+  }
+
+  if (!filterType) {
+    filteredResults = filteredResults
+      .filter(result => {
+        if (result.referenceType !== 'track') return true;
+        if (result.data.classification !== 'single') return true;
+        return !filteredResults.find(otherResult => {
+          if (otherResult.referenceType !== 'album') return false;
+          return otherResult.name === result.parentName;
+        });
+      });
+  }
+
+  filteredResults = filteredResults
 
   while (info.results.firstChild) {
     info.results.firstChild.remove();
@@ -992,7 +1012,9 @@ function generateSidebarSearchResult(result, results) {
         openAlbum(result.directory);
 
       preparedSlots.kindString =
-        info.albumResultKindString;
+        (result.data.classification === 'single'
+          ? info.singleResultKindString
+          : info.albumResultKindString);
 
       break;
     }
diff --git a/src/strings-default.yaml b/src/strings-default.yaml
index bafc7e0a..b1862dcd 100644
--- a/src/strings-default.yaml
+++ b/src/strings-default.yaml
@@ -840,6 +840,7 @@ misc:
       artTag: "(art tag)"
       artist: "(artist)"
       group: "(group)"
+      single: "(single)"
 
     resultDisambiguator:
       group: "({DISAMBIGUATOR})"