From 2a63948592e200f9772b73e044899eaba8b1ee76 Mon Sep 17 00:00:00 2001 From: eliat123 Date: Mon, 19 Jun 2017 09:15:59 +0300 Subject: [PATCH] Add configurable keypress delay before initiating search (#764) --- source/javascripts/app/_search.js | 35 +++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/source/javascripts/app/_search.js b/source/javascripts/app/_search.js index e373ac4..9ff4233 100644 --- a/source/javascripts/app/_search.js +++ b/source/javascripts/app/_search.js @@ -6,6 +6,8 @@ var content, searchResults; var highlightOpts = { element: 'span', className: 'search-highlight' }; + var searchDelay = 0; + var timeoutHandle = 0; var index = new lunr.Index(); @@ -27,24 +29,44 @@ body: body.text() }); }); + + determineSearchDelay(); + } + function determineSearchDelay() { + if(index.tokenStore.length>5000) { + searchDelay = 300; + } } function bind() { content = $('.content'); searchResults = $('.search-results'); - $('#input-search').on('keyup', search); + $('#input-search').on('keyup',function(e) { + var wait = function() { + return function(executingFunction, waitTime){ + clearTimeout(timeoutHandle); + timeoutHandle = setTimeout(executingFunction, waitTime); + }; + }(); + wait(function(){ + search(e); + }, searchDelay ); + }); } function search(event) { + + var searchInput = $('#input-search')[0]; + unhighlight(); searchResults.addClass('visible'); // ESC clears the field - if (event.keyCode === 27) this.value = ''; + if (event.keyCode === 27) searchInput.value = ''; - if (this.value) { - var results = index.search(this.value).filter(function(r) { + if (searchInput.value) { + var results = index.search(searchInput.value).filter(function(r) { return r.score > 0.0001; }); @@ -54,10 +76,10 @@ var elem = document.getElementById(result.ref); searchResults.append("
  • " + $(elem).text() + "
  • "); }); - highlight.call(this); + highlight.call(searchInput); } else { searchResults.html('
  • '); - $('.search-results li').text('No Results Found for "' + this.value + '"'); + $('.search-results li').text('No Results Found for "' + searchInput.value + '"'); } } else { unhighlight(); @@ -73,3 +95,4 @@ content.unhighlight(highlightOpts); } })(); +