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,
+ });
+ });
+ }
});
}