Jacky Zhao
2022-01-03 4e639979f8175b0a639ba2e25bbd8fa550d728bf
layouts/partials/search.html
@@ -89,8 +89,7 @@
        }
    })
    const scrapedContent = {{$.Site.Data.contentIndex}}
    for (const [key, value] of Object.entries(scrapedContent)) {
    for (const [key, value] of Object.entries(content)) {
        contentIndex.add({
            id: key,
            title: value.title,
@@ -151,8 +150,8 @@
    const fetch = id => ({
        id,
        url: id,
        title: scrapedContent[id].title,
        content: scrapedContent[id].content
        title: content[id].title,
        content: content[id].content
    })
    const source = document.getElementById('search-bar')
@@ -177,16 +176,23 @@
                limit: 5,
            }
        ]).then(searchResults => {
        const titleIds = [...searchResults.filter(x => x.field === 'title')?.[0].result] ?? []
        const contentIds = [...searchResults.filter(x => x.field === 'content')?.[0].result] ?? []
        const allIds = [...titleIds, ...contentIds]
        const finalResults = allIds.map(fetch)
            const getByField = field => {
                const results = searchResults.filter(x => x.field === field)
                if (results.length === 0) {
                    return []
                } else {
                    return [...results[0].result]
                }
            }
            const allIds = new Set([...getByField('title'), ...getByField('content')])
            const finalResults = [...allIds].map(fetch)
            // display
            if (finalResults.length === 0) {
                results.innerHTML = `<div class="result-card">
                    <p>No results.</p>
                </div>`
                results.innerHTML = `<button class="result-card">
                    <h3>No results.</h3>
                    <p>Try another search term?</p>
                </button>`
            } else {
                results.innerHTML = finalResults
                    .map(result => resultToHTML({
@@ -246,4 +252,4 @@
        })
    })
</script>
</script>