var searchTerm = null; summaryInclude=60; var fuseOptions = { shouldSort: true, includeMatches: true, threshold: 0.0, tokenize:true, location: 0, distance: 100, maxPatternLength: 32, minMatchCharLength: 1, keys: [ {name:"title",weight:0.8}, {name:"contents",weight:0.5}, {name:"tags",weight:0.3}, {name:"categories",weight:0.3} ] }; u('#searchTerm').on('change keyup', function() { // Set the search value on keyup for the input searchTerm = this.value; }) function showAlert(message){ u('#alert').removeClass("is-hidden") u('#alert').html(message) setTimeout(function () { u('#alert').addClass("is-hidden") }, 3000) } u('#searchButton').handle('click', function(e) { //use handle to automatically prevent default if(searchTerm){ u("#searchTerm").text(searchTerm); u('#searchButton').addClass("is-loading"); executeSearch(searchTerm); }else { showAlert("Search cannot be empty!") } }) function executeSearch(searchQuery){ fetch("/index.json").then(r => r.json()) .then(function(data) { var pages = data; var fuse = new Fuse(pages, fuseOptions); var result = fuse.search(searchQuery); if(result.length > 0){ u('#content').addClass("is-hidden"); //hiding our main content to display the results u('#searchResults').children(u('div')).empty(); // clean out any previous search results u('#searchButton').removeClass("is-loading") //change our button back u('#searchResults').removeClass("is-hidden") //show Result area populateResults(result); }else{ showAlert("No results found!") u('#searchButton').removeClass("is-loading"); u("#searchTerm").text(""); } }); } function populateResults(result){ //Object.keys(result).forEach(function(key,value){ Object.entries(result).forEach(entry => { const [key, value] = entry; var contents= value.item.contents; var snippet = ""; var snippetHighlights=[]; var tags =[]; if( fuseOptions.tokenize ){ snippetHighlights.push(searchTerm); }else{ value.matches.forEach(function(matchKey,mvalue){ if(mvalue.key == "tags" || mvalue.key == "categories" ){ snippetHighlights.push(mvalue.value); }else if(mvalue.key == "contents"){ start = mvalue.indices[0][0]-summaryInclude>0?mvalue.indices[0][0]-summaryInclude:0; end = mvalue.indices[0][1]+summaryInclude