github.com/shyftnetwork/go-empyrean@v1.8.3-0.20191127201940-fbfca9338f04/shyft_documentation/source/javascripts/app/_search.js (about) 1 //= require ../lib/_lunr 2 //= require ../lib/_jquery 3 //= require ../lib/_jquery.highlight 4 ;(function () { 5 'use strict'; 6 7 var content, searchResults; 8 var highlightOpts = { element: 'span', className: 'search-highlight' }; 9 var searchDelay = 0; 10 var timeoutHandle = 0; 11 12 var index = new lunr.Index(); 13 14 index.ref('id'); 15 index.field('title', { boost: 10 }); 16 index.field('body'); 17 index.pipeline.add(lunr.trimmer, lunr.stopWordFilter); 18 19 $(populate); 20 $(bind); 21 22 function populate() { 23 $('h1, h2').each(function() { 24 var title = $(this); 25 var body = title.nextUntil('h1, h2'); 26 index.add({ 27 id: title.prop('id'), 28 title: title.text(), 29 body: body.text() 30 }); 31 }); 32 33 determineSearchDelay(); 34 } 35 function determineSearchDelay() { 36 if(index.tokenStore.length>5000) { 37 searchDelay = 300; 38 } 39 } 40 41 function bind() { 42 content = $('.content'); 43 searchResults = $('.search-results'); 44 45 $('#input-search').on('keyup',function(e) { 46 var wait = function() { 47 return function(executingFunction, waitTime){ 48 clearTimeout(timeoutHandle); 49 timeoutHandle = setTimeout(executingFunction, waitTime); 50 }; 51 }(); 52 wait(function(){ 53 search(e); 54 }, searchDelay ); 55 }); 56 } 57 58 function search(event) { 59 60 var searchInput = $('#input-search')[0]; 61 62 unhighlight(); 63 searchResults.addClass('visible'); 64 65 // ESC clears the field 66 if (event.keyCode === 27) searchInput.value = ''; 67 68 if (searchInput.value) { 69 var results = index.search(searchInput.value).filter(function(r) { 70 return r.score > 0.0001; 71 }); 72 73 if (results.length) { 74 searchResults.empty(); 75 $.each(results, function (index, result) { 76 var elem = document.getElementById(result.ref); 77 searchResults.append("<li><a href='#" + result.ref + "'>" + $(elem).text() + "</a></li>"); 78 }); 79 highlight.call(searchInput); 80 } else { 81 searchResults.html('<li></li>'); 82 $('.search-results li').text('No Results Found for "' + searchInput.value + '"'); 83 } 84 } else { 85 unhighlight(); 86 searchResults.removeClass('visible'); 87 } 88 } 89 90 function highlight() { 91 if (this.value) content.highlight(this.value, highlightOpts); 92 } 93 94 function unhighlight() { 95 content.unhighlight(highlightOpts); 96 } 97 })(); 98