From cb9d1c6694cfadbcce274648eaee7fffe8bd42db Mon Sep 17 00:00:00 2001
From: weru <fromweru@gmail.com>
Date: Sun, 06 Dec 2020 16:32:23 +0000
Subject: [PATCH] refine search helpers
---
assets/js/search.js | 66 +++++++++++++++++++-------------
1 files changed, 39 insertions(+), 27 deletions(-)
diff --git a/assets/js/search.js b/assets/js/search.js
index ac0dc8a..fcd9020 100644
--- a/assets/js/search.js
+++ b/assets/js/search.js
@@ -23,19 +23,20 @@
const index = new Fuse(idx, searchOptions);
-function searchResults(results=[], query="") {
+function searchResults(results=[], query="", passive = false) {
let resultsFragment = new DocumentFragment();
let showResults = elem('.search_results');
- if(searchPageElement) {
+ if(passive) {
showResults = searchPageElement;
}
emptyEl(showResults);
+
if(results.length) {
let resultsTitle = createEl('h3');
resultsTitle.className = 'search_title';
- resultsTitle.innerText = 'Quick Links';
- if(searchPageElement) {
- resultsTitle.innerText = 'Search Results';
+ resultsTitle.innerText = quickLinks;
+ if(passive) {
+ resultsTitle.innerText = searchResultsLabel;
}
resultsFragment.appendChild(resultsTitle);
results.slice(0,4).forEach(function(result){
@@ -43,7 +44,7 @@
item.href = `${result.link}?query=${query}`;
item.className = 'search_result';
item.style.order = result.score;
- if(searchPageElement) {
+ if(passive) {
pushClass(item, 'passive');
let itemTitle = createEl('h3');
itemTitle.textContent = result.title;
@@ -60,15 +61,13 @@
resultsFragment.appendChild(item);
});
} else {
- showResults.innerHTML = (query.length >= 3) ? `<span class="search_result">No Results</span>` : "";
+ showResults.innerHTML = (query.length > 1) ? `<span class="search_result">${noMatchesFound}</span>` : `<h3><label for="find" class="search_result">${typeToSearch}</label></h3>`;
}
showResults.appendChild(resultsFragment);
}
-function search(searchTerm) {
- // check if searchTerm can be cast as float
- const isFloat = parseFloat(searchTerm);
- const minimumSearchTermLength = isFloat ? 2 : 3;
+function search(searchTerm, passive = false) {
+ const minimumSearchTermLength = 2;
if(searchTerm.length >= minimumSearchTermLength) {
let rawResults = index.search(searchTerm);
rawResults = rawResults.map(function(result){
@@ -77,9 +76,11 @@
resultItem.score = (parseFloat(score) * 50).toFixed(0);
return resultItem;
});
- searchResults(rawResults, searchTerm);
+
+ passive ? searchResults(rawResults, searchTerm, true) : searchResults(rawResults, searchTerm);
+
} else {
- searchResults();
+ passive ? searchResults([], "", true) : searchResults();
}
}
@@ -91,10 +92,15 @@
const searchTerm = searchField.value.trim().toLowerCase();
search(searchTerm);
});
- searchField.addEventListener('search', function(){
- const searchTerm = searchField.value.trim().toLowerCase();
- window.location.href = `${parentURL}/search/?query=${searchTerm}`;
- });
+
+ if(!searchPageElement) {
+ searchField.addEventListener('search', function(){
+ const searchTerm = searchField.value.trim().toLowerCase();
+ if(searchTerm.length > 1) {
+ window.location.href = `${parentURL}/search/?query=${searchTerm}`;
+ }
+ });
+ }
}
}
@@ -102,18 +108,26 @@
const urlParams = new URLSearchParams(window.location.search);
if(urlParams.has(query)){
let c = urlParams.get(query);
- // window.find(c);
- cc = `${c.charAt(0).toUpperCase()}${c.substring(1,c.length)}`;
- // window.find(cc);
- return [c, cc];
+ return c;
}
- return ["",""];
+ return "";
}
function passiveSearch() {
if(searchPageElement) {
- const searchTerm = findQuery()[0];
- search(searchTerm);
+ const searchTerm = findQuery();
+ search(searchTerm, true);
+
+ // search actively after search page has loaded
+ const searchField = elem('.search_field');
+
+ if(searchField) {
+ searchField.addEventListener('input', function() {
+ const searchTerm = searchField.value.trim().toLowerCase();
+ search(searchTerm, true);
+ wrapText(searchTerm, main);
+ });
+ }
}
}
@@ -126,7 +140,5 @@
searchPageElement ? false : liveSearch();
passiveSearch();
- const searchQuery = findQuery();
- wrapText(searchQuery[0],main);
- wrapText(searchQuery[1],main);
+ wrapText(findQuery(), main);
});
\ No newline at end of file
--
Gitblit v1.10.0