diff --git a/public/src/app.js b/public/src/app.js index 5a160e6759..e1805386e7 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -477,14 +477,16 @@ app.cacheBuster = null; }); } - app.enableTopicSearch = function (options, searchQuery) { - var quickSearchResults = options.resultEl; - var inputEl = options.inputEl; + app.enableTopicSearch = function (options) { + var quickSearchResults = options.searchElements.resultEl; + var inputEl = options.searchElements.inputEl; var searchTimeoutId = 0; var oldValue = inputEl.val(); inputEl.on('blur', function () { setTimeout(function () { - quickSearchResults.addClass('hidden'); + if (!inputEl.is(':focus')) { + quickSearchResults.addClass('hidden'); + } }, 200); }); inputEl.on('focus', function () { @@ -512,16 +514,16 @@ app.cacheBuster = null; return quickSearchResults.addClass('hidden'); } require(['search'], function (search) { - searchQuery = searchQuery || { in: 'titles' }; - searchQuery.term = inputEl.val(); - search.quick(searchQuery, options); + options.searchOptions = options.searchOptions || { in: 'titles' }; + options.searchOptions.term = inputEl.val(); + search.quick(options); }); }, 250); }); }; - app.handleSearch = function (options) { - options = options || { in: 'titles' }; + app.handleSearch = function (searchOptions) { + searchOptions = searchOptions || { in: 'titles' }; var searchButton = $('#search-button'); var searchFields = $('#search-fields'); var searchInput = $('#search-fields input'); @@ -537,10 +539,15 @@ app.cacheBuster = null; searchInput.off('blur').on('blur', dismissSearch); searchInput.off('focus'); - app.enableTopicSearch({ + var searchElements = { inputEl: searchInput, resultEl: quickSearchContainer, - }, options); + }; + + app.enableTopicSearch({ + searchOptions: searchOptions, + searchElements: searchElements, + }); function dismissSearch() { searchFields.addClass('hidden'); @@ -567,7 +574,10 @@ app.cacheBuster = null; require(['search'], function (search) { var data = search.getSearchPreferences(); data.term = input.val(); - $(window).trigger('action:search.submit', { data: data }); + $(window).trigger('action:search.submit', { + data: data, + searchElements: searchElements, + }); search.query(data, function () { input.val(''); }); diff --git a/public/src/client/topic/merge.js b/public/src/client/topic/merge.js index 228d318f1b..c04ddb0219 100644 --- a/public/src/client/topic/merge.js +++ b/public/src/client/topic/merge.js @@ -31,10 +31,13 @@ define('forum/topic/merge', function () { }); app.enableTopicSearch({ - inputEl: modal.find('.topic-search-input'), - resultEl: modal.find('.quick-search-container'), - }, { - in: 'titles', + searchElements: { + inputEl: modal.find('.topic-search-input'), + resultEl: modal.find('.quick-search-container'), + }, + searchOptions: { + in: 'titles', + }, }); modal.on('click', '[data-tid]', function () { if ($(this).attr('data-tid')) { diff --git a/public/src/modules/search.js b/public/src/modules/search.js index 3b89d5dad9..9e1365eca0 100644 --- a/public/src/modules/search.js +++ b/public/src/modules/search.js @@ -33,26 +33,29 @@ define('search', ['navigator', 'translator', 'storage'], function (nav, translat }); }; - Search.quick = function (query, options, callback) { + Search.quick = function (options, callback) { callback = callback || function () {}; - var template = options.template || 'partials/quick-search-results'; - $(window).trigger('action:search.quick.start', { data: query }); - query.searchOnly = 1; - Search.api(query, function (data) { + $(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 options.resultEl.addClass('hidden').find('#quick-search-results-container').html(''); + 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(template, data, function (html) { + app.parseAndTranslate('partials/quick-search-results', data, function (html) { if (html.length) { html.find('.timeago').timeago(); - options.resultEl.removeClass('hidden').find('#quick-search-results-container').html(html); + resultEl.removeClass('hidden').find('.quick-search-results-container').html(html); } else { - options.resultEl.addClass('hidden').find('#quick-search-results-container').html(''); + resultEl.addClass('hidden').find('.quick-search-results-container').html(''); } - $(window).trigger('action:search.quick.complete', { data: data }); + $(window).trigger('action:search.quick.complete', { + data: data, + options: options, + }); callback(); }); });