From 05a176b1b556dc78ca3bf819a4bd0d073bc23cad Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Thu, 12 Feb 2026 16:54:09 -0400 Subject: search, client: handle singles --- src/common-util/search-shape.js | 1 + .../dependencies/generateSearchSidebarBox.js | 3 ++ src/search-select.js | 9 ++++++ src/static/js/client/sidebar-search.js | 32 ++++++++++++++++++---- src/strings-default.yaml | 1 + 5 files changed, 41 insertions(+), 5 deletions(-) (limited to 'src') 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})" -- cgit 1.3.0-6-gf8a5