diff --git a/public/src/client/world.js b/public/src/client/world.js index 34a7c86d0f..46cde7b32d 100644 --- a/public/src/client/world.js +++ b/public/src/client/world.js @@ -1,6 +1,6 @@ 'use strict'; -define('forum/world', ['topicList', 'sort', 'hooks', 'alerts', 'api', 'bootbox'], function (topicList, sort, hooks, alerts, api, bootbox) { +define('forum/world', ['topicList', 'search', 'sort', 'hooks', 'alerts', 'api', 'bootbox'], function (topicList, search, sort, hooks, alerts, api, bootbox) { const World = {}; World.init = function () { @@ -12,6 +12,21 @@ define('forum/world', ['topicList', 'sort', 'hooks', 'alerts', 'api', 'bootbox'] handleIgnoreWatch(-1); handleHelp(); + search.enableQuickSearch({ + searchElements: { + inputEl: $('[component="category-search"]'), + resultEl: $('.world .quick-search-container'), + }, + searchOptions: { + in: 'categories', + }, + dropdown: { + maxWidth: '400px', + maxHeight: '350px', + }, + hideOnNoMatches: false, + }); + hooks.fire('action:topics.loaded', { topics: ajaxify.data.topics }); hooks.fire('action:category.loaded', { cid: ajaxify.data.cid }); }; diff --git a/public/src/modules/search.js b/public/src/modules/search.js index ad823ae17e..0c8a6d4f72 100644 --- a/public/src/modules/search.js +++ b/public/src/modules/search.js @@ -132,34 +132,56 @@ define('search', [ options.searchOptions.searchOnly = 1; Search.api(options.searchOptions, function (data) { quickSearchResults.find('.loading-indicator').addClass('hidden'); - if (!data.posts || (options.hideOnNoMatches && !data.posts.length)) { - return quickSearchResults.addClass('hidden').find('.quick-search-results-container').html(''); - } - data.posts.forEach(function (p) { - const text = $('
' + p.content + '
').text(); - const query = inputEl.val().toLowerCase().replace(/^in:topic-\d+/, ''); - const start = Math.max(0, text.toLowerCase().indexOf(query) - 40); - p.snippet = utils.escapeHTML((start > 0 ? '...' : '') + - text.slice(start, start + 80) + - (text.length - start > 80 ? '...' : '')); - }); - data.dropdown = { maxWidth: '400px', maxHeight: '500px', ...options.dropdown }; - app.parseAndTranslate('partials/quick-search-results', data, function (html) { - if (html.length) { - html.find('.timeago').timeago(); + + if (options.searchOptions.in === 'categories') { + if (!data.categories || (options.hideOnNoMatches && !data.categories.length)) { + return quickSearchResults.addClass('hidden').find('.quick-search-results-container').html(''); } - quickSearchResults.toggleClass('hidden', !html.length || !inputEl.is(':focus')) - .find('.quick-search-results-container') - .html(html.length ? html : ''); - const highlightEls = quickSearchResults.find( - '.quick-search-results .quick-search-title, .quick-search-results .snippet' - ); - Search.highlightMatches(options.searchOptions.term, highlightEls); - hooks.fire('action:search.quick.complete', { - data: data, - options: options, + + data.dropdown = { maxWidth: '400px', maxHeight: '500px', ...options.dropdown }; + app.parseAndTranslate('partials/quick-category-search-results', data, (html) => { + if (html.length) { + html.find('.timeago').timeago(); + } + quickSearchResults.toggleClass('hidden', !html.length || !inputEl.is(':focus')) + .find('.quick-search-results-container') + .html(html.length ? html : ''); + + hooks.fire('action:search.quick.complete', { + data: data, + options: options, + }); }); - }); + } else { + if (!data.posts || (options.hideOnNoMatches && !data.posts.length)) { + return quickSearchResults.addClass('hidden').find('.quick-search-results-container').html(''); + } + data.posts.forEach(function (p) { + const text = $('
' + p.content + '
').text(); + const query = inputEl.val().toLowerCase().replace(/^in:topic-\d+/, ''); + const start = Math.max(0, text.toLowerCase().indexOf(query) - 40); + p.snippet = utils.escapeHTML((start > 0 ? '...' : '') + + text.slice(start, start + 80) + + (text.length - start > 80 ? '...' : '')); + }); + data.dropdown = { maxWidth: '400px', maxHeight: '500px', ...options.dropdown }; + app.parseAndTranslate('partials/quick-search-results', data, function (html) { + if (html.length) { + html.find('.timeago').timeago(); + } + quickSearchResults.toggleClass('hidden', !html.length || !inputEl.is(':focus')) + .find('.quick-search-results-container') + .html(html.length ? html : ''); + const highlightEls = quickSearchResults.find( + '.quick-search-results .quick-search-title, .quick-search-results .snippet' + ); + Search.highlightMatches(options.searchOptions.term, highlightEls); + hooks.fire('action:search.quick.complete', { + data: data, + options: options, + }); + }); + } }); }