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