// Blocs Search V2.0
(function()
{
if (!siteRelativeURLPath) // Global Variable Not Available
{
var scriptUrl = new URL(document.currentScript.src);
var parentDirectory = scriptUrl.pathname.substring(0, scriptUrl.pathname.lastIndexOf("/js/")+1);
siteRelativeURLPath = scriptUrl.origin + parentDirectory;
}
var dataPath = siteRelativeURLPath+'js/site-search-data.json?'+Math.random();
fetch(dataPath)
.then(response => response.json())
.then(data => {
blocsSearchSearchData = data;
});
var searchField = document.querySelector('[data-blocs-search="true"]');
if (searchField)
{
searchField.addEventListener('keyup', function(event) {filterSearchResults(searchField);});
}
})();
// Filter Search Results
function filterSearchResults(searchFieldElement)
{
var searchQuery = searchFieldElement.value;
document.querySelector('.blocs-search-results').innerHTML = '';
if (searchQuery.length > 0) // Has Search value
{
searchFieldElement.parentElement.classList.remove('hide-search-results');
var filteredArray = [];
for (var i = 0; i < blocsSearchSearchData.length; i++) {
var linkObj = blocsSearchSearchData[i];
var linkTitle = linkObj["title"];
var targetSearchData = linkTitle + ', ' + linkObj["keywords"];
if (targetSearchData.toLowerCase().indexOf(searchQuery.toLowerCase()) != -1 && linkTitle != document.title) // Found Match
{
if (filteredArray.indexOf(linkObj) == -1) // Not in filtered array
{
filteredArray.push(linkObj);
}
}
}
var titleColorClass = 'text-dark';
var infoColorClass = 'text-muted';
if (searchFieldElement.parentElement.classList.contains('dark-results-theme')) // Dark Results Theme
{
titleColorClass = 'text-white';
infoColorClass = 'text-secondary';
}
if (filteredArray.length > 0) // Has Results
{
for (var i = 0; i < filteredArray.length; i++) // Loop Matches
{
var matchedItem = filteredArray[i];
var pageURL = matchedItem.url;
var description = matchedItem.description;
if (!pageURL.startsWith("http"))
{
pageURL = siteRelativeURLPath + pageURL;
}
if (typeof description == 'undefined')
{
description = '';
}
document.querySelector('.blocs-search-results').insertAdjacentHTML('beforeend', '' + matchedItem.title + '
'+description+'');
}
}
else
{
var noResultsText = document.querySelector('[data-blocs-search="true"]').getAttribute('data-no-results');
document.querySelector('.blocs-search-results').insertAdjacentHTML('beforeend', '' + noResultsText + '');
}
document.querySelector('.blocs-search-results').classList.add('show'); // Show Results Dropdown
}
else // No Results
{
document.querySelector('.blocs-search-results').classList.remove('show'); // Hide Results Dropdown
searchFieldElement.parentElement.classList.add('hide-search-results');
}
}
// Globar Vars
var siteRelativeURLPath;
var blocsSearchSearchData;