From 2f2ffc00257e914933af3b0fd04de89d6da7f7d8 Mon Sep 17 00:00:00 2001
From: weru <fromweru@gmail.com>
Date: Mon, 13 Jun 2022 15:31:19 +0000
Subject: [PATCH] update search function

---
 assets/js/search.js |   40 +++++++++++++++++++++++++++++-----------
 1 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/assets/js/search.js b/assets/js/search.js
index 89990b6..9dde9b0 100644
--- a/assets/js/search.js
+++ b/assets/js/search.js
@@ -1,5 +1,5 @@
 function initializeSearch(index) {
-  const searchKeys = ['title', 'link', 'body', 'id'];
+  const searchKeys = ['title', 'link', 'body', 'id', 'section', 'tags'];
 
   const searchPageElement = elem('#searchpage');
 
@@ -36,15 +36,21 @@
       let resultsTitle = createEl('h3');
       resultsTitle.className = 'search_title';
       resultsTitle.innerText = quickLinks;
+
+      let goBackButton = createEl('button');
+      goBackButton.textContent = 'Go Back';
+      goBackButton.className = goBackClass;
       if(passive) {
         resultsTitle.innerText = searchResultsLabel;
       }
-      resultsFragment.appendChild(resultsTitle);
       if(!searchPageElement) {
         results = results.slice(0,8);
       } else {
+        resultsFragment.appendChild(goBackButton);
         results = results.slice(0,12);
       }
+      resultsFragment.appendChild(resultsTitle);
+
       results.forEach(function(result){
         let item = createEl('a');
         item.href = `${result.link}?query=${query}`;
@@ -59,7 +65,7 @@
           let itemDescription = createEl('p');
           // position of first search term instance
           let queryInstance = result.body.indexOf(query);
-          itemDescription.textContent = `... ${result.body.substring(queryInstance, queryInstance + 200)} ...`;
+          itemDescription.textContent = `${result.body.substring(queryInstance, queryInstance + 200)}`;
           item.appendChild(itemDescription);
         } else {
           item.textContent = result.title;
@@ -79,15 +85,21 @@
     showResults.appendChild(resultsFragment);
   }
 
-  function search(searchTerm, passive = false) {
+  function search(searchTerm, scope = null, passive = false) {
     if(searchTerm.length) {
       let rawResults = index.search(searchTerm);
       rawResults = rawResults.map(function(result){
         const score = result.score;
         const resultItem = result.item;
         resultItem.score = (parseFloat(score) * 50).toFixed(0);
-        return resultItem;
-      });
+        return resultItem ;
+      })
+
+      if(scope) {
+        rawResults = rawResults.filter(resultItem => {
+          return resultItem.section == scope;
+        });
+      }
 
       passive ? searchResults(rawResults, searchTerm, true) : searchResults(rawResults, searchTerm);
 
@@ -100,16 +112,19 @@
     const searchField = elem(searchFieldClass);
 
     if (searchField) {
+      const searchScope = searchField.dataset.scope;
       searchField.addEventListener('input', function() {
         const searchTerm = searchField.value.trim().toLowerCase();
-        search(searchTerm);
+        search(searchTerm, searchScope);
+        // console.log(searchTerm);
       });
 
       if(!searchPageElement) {
         searchField.addEventListener('search', function(){
           const searchTerm = searchField.value.trim().toLowerCase();
           if(searchTerm.length)  {
-            window.location.href = new URL(`search/?query=${searchTerm}`, rootURL).href;
+            const scopeParameter = searchScope ? `&scope=${searchScope}` : '';
+            window.location.href = new URL(`search/?query=${searchTerm}${ scopeParameter }`, rootURL).href;
           }
         });
       }
@@ -128,11 +143,12 @@
   function passiveSearch() {
     if(searchPageElement) {
       const searchTerm = findQuery();
-      search(searchTerm, true);
-
+      const searchScope = findQuery('scope');
       // search actively after search page has loaded
       const searchField = elem(searchFieldClass);
 
+      search(searchTerm, searchScope, true);
+
       if(searchField) {
         searchField.addEventListener('input', function() {
           const searchTerm = searchField.value.trim().toLowerCase();
@@ -193,7 +209,9 @@
 }
 
 window.addEventListener('load', function() {
-  fetch(new URL("index.json", rootURL).href)
+  const pageLanguage = document.documentElement.lang;
+  const searchIndex = `${ pageLanguage === 'en' ? '': pageLanguage}/index.json`;
+  fetch(new URL(searchIndex, rootURL).href)
   .then(response => response.json())
   .then(function(data) {
     data = data.length ? data : [];

--
Gitblit v1.10.0