diff --git a/assets/js/offline-search.js b/assets/js/offline-search.js deleted file mode 100644 index abd64fef8dc3b..0000000000000 --- a/assets/js/offline-search.js +++ /dev/null @@ -1,198 +0,0 @@ -// etcd-docsy full file override: we're not tracking changes to the docsy file of the same name. - -// Adapted from code by Matt Walters https://www.mattwalters.net/posts/hugo-and-lunr/ - -(function ($) { - 'use strict'; - - $(document).ready(function () { - const $searchInput = $('.td-search-input'); - - // - // Options for popover - // - - $searchInput.data('html', true); - $searchInput.data('placement', 'bottom'); - $searchInput.data( - 'template', - '' - ); - - // - // Register handler - // - - $searchInput.on('change', (event) => { - render($(event.target)); - - // Hide keyboard on mobile browser - $searchInput.blur(); - }); - - // Prevent reloading page by enter key on sidebar search. - $searchInput.closest('form').on('submit', () => { - return false; - }); - - // - // Lunr - // - - let idx = null; // Lunr index - const resultDetails = new Map(); // Will hold the data for the search results (titles and summaries) - - // Set up for an Ajax call to request the JSON data file that is created by Hugo's build process - $.ajax($searchInput.data('offline-search-index-json-src')).then( - (data) => { - idx = lunr(function () { - this.ref('ref'); - - // If you added more searchable fields to the search index, list them here. - // Here you can specify searchable fields to the search index - e.g. individual toxonomies for you project - // With "boost" you can add weighting for specific (default weighting without boost: 1) - this.field('title', { boost: 5 }); - this.field('categories', { boost: 3 }); - this.field('tags', { boost: 3 }); - // this.field('projects', { boost: 3 }); // example for an individual toxonomy called projects - this.field('description', { boost: 2 }); - this.field('body'); - - data.forEach((doc) => { - this.add(doc); - - resultDetails.set(doc.ref, { - title: doc.title, - excerpt: doc.excerpt, - }); - }); - }); - - $searchInput.trigger('change'); - } - ); - - const render = ($targetSearchInput) => { - // Dispose the previous result - $targetSearchInput.popover('dispose'); - - // - // Search - // - - if (idx === null) { - return; - } - - const searchQuery = $targetSearchInput.val(); - if (searchQuery === '') { - return; - } - - const results = idx - .query((q) => { - const tokens = lunr.tokenizer(searchQuery.toLowerCase()); - tokens.forEach((token) => { - const queryString = token.toString(); - q.term(queryString, { - boost: 100, - }); - q.term(queryString, { - wildcard: - lunr.Query.wildcard.LEADING | - lunr.Query.wildcard.TRAILING, - boost: 10, - }); - q.term(queryString, { - editDistance: 2, - }); - }); - }) - .slice( - 0, - $targetSearchInput.data('offline-search-max-results') - ); - - // - // Make result html - // - - const $html = $('
'); - - $html.append( - $('
') - .css({ - display: 'flex', - justifyContent: 'space-between', - marginBottom: '1em', - }) - .append( - $('') - .text('Search results\xa0') // \xa0 is the Non-breakable space char ( ) - .css({ fontWeight: 'bold' }) - ) - .append( - $('') - .addClass('fas fa-times search-result-close-button') - .css({ - cursor: 'pointer', - }) - ) - ); - - const $searchResultBody = $('
').css({ - maxHeight: `calc(100vh - ${ - $targetSearchInput.offset().top - - $(window).scrollTop() + - 180 - }px)`, - overflowY: 'auto', - }); - $html.append($searchResultBody); - - if (results.length === 0) { - $searchResultBody.append( - $('

').text(`No results found for query "${searchQuery}"`) - ); - } else { - results.forEach((r) => { - const doc = resultDetails.get(r.ref); - const href = - $searchInput.data('offline-search-base-href') + - r.ref.replace(/^\//, ''); - - const $entry = $('

').addClass('mt-4'); - - $entry.append( - $('').addClass('d-block text-muted').text(r.ref) - ); - - $entry.append( - $('') - .addClass('d-block') - .css({ - fontSize: '1.2rem', - }) - .attr('href', href) - .text(doc.title) - ); - - $entry.append($('

').text(doc.excerpt)); - - $searchResultBody.append($entry); - }); - } - - $targetSearchInput.on('shown.bs.popover', () => { - $('.search-result-close-button').on('click', () => { - $targetSearchInput.val(''); - $targetSearchInput.trigger('change'); - }); - }); - - $targetSearchInput - .data('content', $html[0].outerHTML) - .popover('show'); - }; - }); -})(jQuery); diff --git a/assets/scss/_styles_project.scss b/assets/scss/_styles_project.scss index c378dfe3f46f7..a8704a16d1b18 100644 --- a/assets/scss/_styles_project.scss +++ b/assets/scss/_styles_project.scss @@ -221,3 +221,7 @@ .card-title { .fab::before, .fas::before { margin-right: .5rem; } } + +.search-result-close-button { + float: right; +}