diff --git a/public/src/app.js b/public/src/app.js index e1805386e7..2ec5de1985 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -478,22 +478,43 @@ app.cacheBuster = null; } app.enableTopicSearch = function (options) { + /* eslint-disable-next-line */ + var searchOptions = Object.assign({ in: 'titles' }, options.searchOptions); var quickSearchResults = options.searchElements.resultEl; var inputEl = options.searchElements.inputEl; var searchTimeoutId = 0; var oldValue = inputEl.val(); - inputEl.on('blur', function () { - setTimeout(function () { - if (!inputEl.is(':focus')) { - quickSearchResults.addClass('hidden'); - } - }, 200); - }); - inputEl.on('focus', function () { - if (inputEl.val() && quickSearchResults.find('#quick-search-results').children().length) { - quickSearchResults.removeClass('hidden'); - } - }); + + function doSearch() { + require(['search'], function (search) { + /* eslint-disable-next-line */ + options.searchOptions = Object.assign({}, searchOptions); + options.searchOptions.term = inputEl.val(); + $(window).trigger('action:search.quick.start', options); + options.searchOptions.searchOnly = 1; + search.api(options.searchOptions, function (data) { + var resultEl = options.searchElements.resultEl; + if (options.hideOnNoMatches && !data.posts.length) { + return resultEl.addClass('hidden').find('.quick-search-results-container').html(''); + } + data.posts.forEach(function (p) { + p.snippet = utils.escapeHTML($('
' + p.content + '
').text().slice(0, 80) + '...'); + }); + app.parseAndTranslate('partials/quick-search-results', data, function (html) { + if (html.length) { + html.find('.timeago').timeago(); + } + resultEl.toggleClass('hidden', !html.length) + .find('.quick-search-results-container') + .html(html.length ? html : ''); + $(window).trigger('action:search.quick.complete', { + data: data, + options: options, + }); + }); + }); + }); + } inputEl.off('keyup').on('keyup', function () { if (searchTimeoutId) { @@ -513,13 +534,27 @@ app.cacheBuster = null; if (!inputEl.is(':focus')) { return quickSearchResults.addClass('hidden'); } - require(['search'], function (search) { - options.searchOptions = options.searchOptions || { in: 'titles' }; - options.searchOptions.term = inputEl.val(); - search.quick(options); - }); + doSearch(); }, 250); }); + + inputEl.on('blur', function () { + setTimeout(function () { + if (!inputEl.is(':focus')) { + quickSearchResults.addClass('hidden'); + } + }, 200); + }); + + inputEl.on('focus', function () { + if (inputEl.val() && quickSearchResults.find('#quick-search-results').children().length) { + quickSearchResults.removeClass('hidden'); + } + }); + + inputEl.off('refresh').on('refresh', function () { + doSearch(); + }); }; app.handleSearch = function (searchOptions) { @@ -575,7 +610,7 @@ app.cacheBuster = null; var data = search.getSearchPreferences(); data.term = input.val(); $(window).trigger('action:search.submit', { - data: data, + searchOptions: data, searchElements: searchElements, }); search.query(data, function () { diff --git a/public/src/modules/search.js b/public/src/modules/search.js index 9e1365eca0..bba0115956 100644 --- a/public/src/modules/search.js +++ b/public/src/modules/search.js @@ -33,34 +33,6 @@ define('search', ['navigator', 'translator', 'storage'], function (nav, translat }); }; - Search.quick = function (options, callback) { - callback = callback || function () {}; - $(window).trigger('action:search.quick.start', options); - options.searchOptions.searchOnly = 1; - Search.api(options.searchOptions, function (data) { - var resultEl = options.searchElements.resultEl; - if (options.hideOnNoMatches && !data.posts.length) { - return resultEl.addClass('hidden').find('.quick-search-results-container').html(''); - } - data.posts.forEach(function (p) { - p.snippet = utils.escapeHTML($('
' + p.content + '
').text().slice(0, 80) + '...'); - }); - app.parseAndTranslate('partials/quick-search-results', data, function (html) { - if (html.length) { - html.find('.timeago').timeago(); - resultEl.removeClass('hidden').find('.quick-search-results-container').html(html); - } else { - resultEl.addClass('hidden').find('.quick-search-results-container').html(''); - } - $(window).trigger('action:search.quick.complete', { - data: data, - options: options, - }); - callback(); - }); - }); - }; - function createQueryString(data) { var searchIn = data.in || 'titlesposts'; var postedBy = data.by || '';