diff --git a/assets/js/full-text-search.js b/assets/js/full-text-search.js index a8f7f23..108db10 100644 --- a/assets/js/full-text-search.js +++ b/assets/js/full-text-search.js @@ -56,6 +56,6 @@ } const allIds = new Set([...getByField("title"), ...getByField("content")]) const finalResults = [...allIds].map(formatForDisplay) - displayResults(finalResults, true) + displayResults(term, finalResults, true) }) })() diff --git a/assets/js/semantic-search.js b/assets/js/semantic-search.js index bfe102e..fca2851 100644 --- a/assets/js/semantic-search.js +++ b/assets/js/semantic-search.js @@ -24,7 +24,7 @@ async function searchContents(query) { }, body: JSON.stringify({ query: query, - limit: 8, + limit: 10, }), }) if (result.ok) { @@ -48,7 +48,7 @@ registerHandlers( debounce((e) => { let term = e.target.value if (term !== "") { - searchContents(term).then((results) => displayResults(results)) + searchContents(term).then((results) => displayResults(term, results)) } }), ) diff --git a/assets/js/util.js b/assets/js/util.js index 06db3c1..d17594a 100644 --- a/assets/js/util.js +++ b/assets/js/util.js @@ -115,9 +115,11 @@ const resultToHTML = ({ url, title, content }) => { } const redir = (id, term) => { - // SPA navigation + const shouldTrim = PRODUCTION && SEARCH_ENABLED + const baseURLPrefix = shouldTrim ? "" : BASE_URL.replace(/\/$/g, "") + const urlString = `${baseURLPrefix}${id}#:~:text=${encodeURIComponent(term)}/` window.Million.navigate( - new URL(`${BASE_URL.replace(/\/$/g, "")}${id}#:~:text=${encodeURIComponent(term)}/`), + new URL(urlString), ".singlePage", ) closeSearch() @@ -179,7 +181,7 @@ const registerHandlers = (onInputFn) => { }) } -const displayResults = (finalResults, extractHighlight = false) => { +const displayResults = (term, finalResults, extractHighlight = false) => { const results = document.getElementById("results-container") if (finalResults.length === 0) { results.innerHTML = `<button class="result-card"> @@ -189,16 +191,16 @@ const displayResults = (finalResults, extractHighlight = false) => { } else { results.innerHTML = finalResults .map((result) => { - if (extractHighlight) { - return resultToHTML({ - url: result.url, - title: highlight(result.title, term), - content: highlight(removeMarkdown(result.content), term) - }) - } else { - return resultToHTML(result) - } + if (extractHighlight) { + return resultToHTML({ + url: result.url, + title: highlight(result.title, term), + content: highlight(removeMarkdown(result.content), term) + }) + } else { + return resultToHTML(result) } + } ) .join("\n") const anchors = [...document.getElementsByClassName("result-card")] diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 59b228a..ba18b4c 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -79,6 +79,8 @@ "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify }} <script> + const SEARCH_ENABLED = {{.Site.Data.config.search.enableSemanticSearch}} + const PRODUCTION = {{ hugo.IsProduction }} const BASE_URL = {{.Site.BaseURL}} const fetchData = Promise.all([ fetch("{{ $linkIndex.Permalink }}")