${createSearchResultBlurb(query, hit.content)}
`
)
.join('');
const searchResultListItems = document.querySelectorAll('#search-results-body article');
document.getElementById('results-count').innerHTML = searchResultListItems.length;
}
function createSearchResultBlurb(query, pageContent) {
// g: Global search
// m: Multi-line search
// i: Case-insensitive search
const searchQueryRegex = new RegExp(createQueryStringRegex(query), 'gmi');
const searchQueryHits = Array.from(
pageContent.matchAll(searchQueryRegex),
(m) => m.index
);
// Since the blurb is comprised of full sentences containing any search
// term, we need a way to identify where each sentence begins/ends. This
// regex will be used to produce a list of all sentences from the page
// content.
const SENTENCE_BOUNDARY_REGEX = /\b\.\s/gm;
const sentenceBoundaries = Array.from(
pageContent.matchAll(SENTENCE_BOUNDARY_REGEX),
(m) => m.index
);
let parsedSentence = '';
let searchResultText = '';
let lastEndOfSentence = 0;
for (const hitLocation of searchQueryHits) {
if (hitLocation > lastEndOfSentence) {
for (let i = 0; i < sentenceBoundaries.length; i++) {
if (sentenceBoundaries[i] > hitLocation) {
const startOfSentence = i > 0 ? sentenceBoundaries[i - 1] + 1 : 0;
const endOfSentence = sentenceBoundaries[i];
lastEndOfSentence = endOfSentence;
parsedSentence = pageContent.slice(startOfSentence, endOfSentence).trim();
searchResultText += `${parsedSentence} ... `;
break;
}
}
}
const searchResultWords = tokenize(searchResultText);
const pageBreakers = searchResultWords.filter((word) => word.length > 50);
if (pageBreakers.length > 0) {
searchResultText = fixPageBreakers(searchResultText, pageBreakers);
}
if (searchResultWords.length >= searchConfig.maxSummaryLength) break;
}
return ellipsize(searchResultText, searchConfig.maxSummaryLength).replace(
searchQueryRegex,
'