(function () { function getQueryVariable (variable) { const query = window.location.search.substring(1) const vars = query.split('&') for (let i = 0; i < vars.length; i++) { const pair = vars[i].split('=') if (pair[0] === variable) { return decodeURIComponent(pair[1].replace(/\+/g, '%20')).trim() } } } function getPreview (query, content, previewLength) { previewLength = previewLength || (content.length * 2) const parts = query.split(' ') let match = content.toLowerCase().indexOf(query.toLowerCase()) let matchLength = query.length let preview // Find a relevant location in content for (let i = 0; i < parts.length; i++) { if (match >= 0) { break } match = content.toLowerCase().indexOf(parts[i].toLowerCase()) matchLength = parts[i].length } // Create preview if (match >= 0) { const start = match - (previewLength / 2) const end = start > 0 ? match + matchLength + (previewLength / 2) : previewLength preview = content.substring(start, end).trim() if (start > 0) { preview = '...' + preview } if (end < content.length) { preview = preview + '...' } // Highlight query parts preview = preview.replace(new RegExp('(' + parts.join('|') + ')', 'gi'), '$1') } else { // Use start of content if no match found preview = content.substring(0, previewLength).trim() + (content.length > previewLength ? '...' : '') } return preview } function displaySearchResults (results, query) { const searchResultsEl = document.getElementById('search-results') const searchProcessEl = document.getElementById('search-process') if (results.length) { let resultsHTML = '' results.forEach(function (result) { const item = window.data[result.ref] if (item.title) { const contentPreview = getPreview(query, item.content, 170) const titlePreview = getPreview(query, item.title) resultsHTML += "
' + contentPreview + '