From ba3509a38cb788133cfd868eaa1dd496d05872d2 Mon Sep 17 00:00:00 2001
From: weru <fromweru@gmail.com>
Date: Fri, 24 Feb 2023 13:53:40 +0000
Subject: [PATCH] refactor script
---
assets/js/search.js | 55 ++++++++++++++++++++++++++++---------------------------
1 files changed, 28 insertions(+), 27 deletions(-)
diff --git a/assets/js/search.js b/assets/js/search.js
index a30ae0a..af0dc0c 100644
--- a/assets/js/search.js
+++ b/assets/js/search.js
@@ -1,3 +1,6 @@
+const search_result_class = 'search_result';
+const empty_string = '';
+
function initializeSearch(index) {
let search_keys = ['title', 'id', 'link', 'body', 'section'];
search_keys = search_keys.concat(other_searchable_fields);
@@ -22,10 +25,10 @@
return min_query_length;
}
- function searchResults(results=[], query="", passive = false) {
+ function searchResults(results=[], query=empty_string, passive = false) {
let results_fragment = new DocumentFragment();
let show_results = elem('.search_results');
- if(passive) {
+ if(passive || search_page_element) {
show_results = search_page_element;
}
emptyEl(show_results);
@@ -55,7 +58,7 @@
results.forEach(function(result){
let item = createEl('a');
item.href = `${result.link}?query=${query}`;
- item.className = 'search_result';
+ item.className = search_result_class;
item.style.order = result.score;
if(passive) {
pushClass(item, 'passive');
@@ -75,15 +78,19 @@
});
}
- if(query_len >= required_query_len) {
- if (!results.length) {
- show_results.innerHTML = `<span class="search_result">${no_matches_found}</span>`;
+ if(show_results) {
+ let results_title_contents = empty_string;
+ if(query_len >= required_query_len) {
+ results_title_contents = !results.length ?
+ `<span class='${search_result_class}'>${no_matches_found}</span>` : empty_string;
+ } else {
+ results_title_contents = `<label for="find" class='${search_result_class}'>${ query_len > 1 ? short_search_query : type_to_search }</label>`
}
- } else {
- show_results.innerHTML = `<label for="find" class="search_result">${ query_len > 1 ? short_search_query : type_to_search }</label>`
- }
- show_results.appendChild(results_fragment);
+ show_results.innerHTML = results_title_contents;
+
+ show_results.appendChild(results_fragment);
+ }
}
function search(search_term, scope = null, passive = false) {
@@ -105,7 +112,7 @@
passive ? searchResults(raw_results, search_term, true) : searchResults(raw_results, search_term);
} else {
- passive ? searchResults([], "", true) : searchResults();
+ passive ? searchResults([], empty_string, true) : searchResults();
}
}
@@ -123,7 +130,7 @@
search_field.addEventListener('search', function(){
const search_term = search_field.value.trim().toLowerCase();
if(search_term.length) {
- const scope_parameter = search_scope ? `&scope=${search_scope}` : '';
+ const scope_parameter = search_scope ? `&scope=${search_scope}` : empty_string;
window.location.href = new URL(`search/?query=${search_term}${ scope_parameter }`, root_url).href;
}
});
@@ -133,7 +140,7 @@
function findQuery(query = 'query') {
const url_params = new URLSearchParams(window.location.search);
- return url_params.has(query) ? url_params.get(query) : "";
+ return url_params.has(query) ? url_params.get(query) : empty_string;
}
function passiveSearch() {
@@ -156,22 +163,16 @@
}
function hasSearchResults() {
- const search_results = elem('.results');
- if(search_results) {
- const body = search_results.innerHTML.length;
- return [search_results, body];
- }
- return false
+ const results = elem('.results');
+ return results ? [results, results.innerHTML.length] : false;
}
function clearSearchResults() {
- let search_results = hasSearchResults();
- if(search_results) {
- search_results = search_results[0];
- search_results.innerHTML = "";
- // clear search field
- const search_field = elem(search_field_class);
- search_field.value = "";
+ let results = hasSearchResults();
+ if(results) {
+ results = results[0];
+ results.innerHTML = empty_string;
+ elem(search_field_class).value = empty_string;
}
}
@@ -198,7 +199,7 @@
window.addEventListener('load', function() {
const page_language = document.documentElement.lang;
- const search_index = `${ page_language === 'en' ? '': page_language}/index.json`;
+ const search_index = `${ page_language === 'en' ? empty_string : page_language}/index.json`;
fetch(new URL(search_index, root_url).href)
.then(response => response.json())
.then(function(search_data) {
--
Gitblit v1.10.0