/************************************************* * Academic * https://github.com/gcushen/hugo-academic * * In-built Fuse based search algorithm. **************************************************/ /* --------------------------------------------------------------------------- * Configuration. * --------------------------------------------------------------------------- */ // Configure Fuse. let fuseOptions = { shouldSort: true, includeMatches: true, tokenize: true, threshold: search_config.threshold, // Set to ~0.3 for parsing diacritics and CJK languages. location: 0, distance: 100, maxPatternLength: 32, minMatchCharLength: search_config.minLength, // Set to 1 for parsing CJK languages. keys: [ {name:'title', weight:0.99}, /* 1.0 doesn't work o_O */ {name:'summary', weight:0.6}, {name:'authors', weight:0.5}, {name:'content', weight:0.2}, {name:'tags', weight:0.5}, {name:'categories', weight:0.5} ] }; // Configure summary. let summaryLength = 60; /* --------------------------------------------------------------------------- * Functions. * --------------------------------------------------------------------------- */ // Get query from URI. function getSearchQuery(name) { return decodeURIComponent((location.search.split(name + '=')[1] || '').split('&')[0]).replace(/\+/g, ' '); } // Set query in URI without reloading the page. function updateURL(url) { if (history.replaceState) { window.history.replaceState({path:url}, '', url); } } // Pre-process new search query. function initSearch(force, fuse) { let query = $("#search-query").val(); // If query deleted, clear results. if ( query.length < 1) { $('#search-hits').empty(); } // Check for timer event (enter key not pressed) and query less than minimum length required. if (!force && query.length < fuseOptions.minMatchCharLength) return; // Do search. $('#search-hits').empty(); searchAcademic(query, fuse); let newURL = window.location.protocol + "//" + window.location.host + window.location.pathname + '?q=' + encodeURIComponent(query) + window.location.hash; updateURL(newURL); } // Perform search. function searchAcademic(query, fuse) { let results = fuse.search(query); // console.log({"results": results}); if (results.length > 0) { $('#search-hits').append('