« get me outta code hell

content, client: "no results" message - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/static/js
diff options
context:
space:
mode:
author(quasar) nebula <qznebula@protonmail.com>2024-05-06 17:23:36 -0300
committer(quasar) nebula <qznebula@protonmail.com>2024-05-31 12:11:50 -0300
commitc760d9400cf02e830c33749eed3894165b760432 (patch)
tree88a76ae9fc771d51a876399d1f0710d4b847a9ca /src/static/js
parentd03045c466da83f96d079eb2552f25984d7c3364 (diff)
content, client: "no results" message
Diffstat (limited to 'src/static/js')
-rw-r--r--src/static/js/client.js22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/static/js/client.js b/src/static/js/client.js
index d8828ad2..1b98137a 100644
--- a/src/static/js/client.js
+++ b/src/static/js/client.js
@@ -154,6 +154,14 @@ function cssProp(el, ...args) {
   }
 }
 
+function templateContent(el) {
+  if (el?.nodeName !== 'TEMPLATE') {
+    throw new Error(`Expected a <template> element`);
+  }
+
+  return el.content.cloneNode(true);
+}
+
 // Curry-style, so multiple points can more conveniently be tested at once.
 function pointIsOverAnyOf(elements) {
   return (clientX, clientY) => {
@@ -3571,6 +3579,8 @@ const sidebarSearchInfo = initInfo('sidebarSearchInfo', {
   resultsContainer: null,
   results: null,
 
+  noResultsString: null,
+
   state: {
     stoppedTypingTimeout: null,
   },
@@ -3591,7 +3601,10 @@ function getSidebarSearchReferences() {
     document.querySelector('.wiki-search-sidebar-box');
 
   info.searchInput =
-    document.querySelector('.wiki-search-input');
+    info.searchBox.querySelector('.wiki-search-input');
+
+  info.noResultsString =
+    info.searchBox.querySelector('.wiki-search-no-results-string');
 }
 
 function mutateSidebarSearchContent() {
@@ -3712,6 +3725,13 @@ function showSidebarSearchResults(results) {
 
   cssProp(info.resultsContainer, 'display', 'block');
 
+  if (empty(flatResults)) {
+    const p = document.createElement('p');
+    p.classList.add('wiki-search-no-results');
+    p.appendChild(templateContent(info.noResultsString));
+    info.results.appendChild(p);
+  }
+
   for (const result of flatResults) {
     const el = generateSidebarSearchResult(result);
     if (!el) continue;