feat: category quick search on world page, theme version updates, #13255

This commit is contained in:
Julian Lam
2025-04-07 15:14:39 -04:00
parent dabcefafd4
commit 1790951659
2 changed files with 64 additions and 27 deletions

View File

@@ -1,6 +1,6 @@
'use strict'; '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 = {}; const World = {};
World.init = function () { World.init = function () {
@@ -12,6 +12,21 @@ define('forum/world', ['topicList', 'sort', 'hooks', 'alerts', 'api', 'bootbox']
handleIgnoreWatch(-1); handleIgnoreWatch(-1);
handleHelp(); 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:topics.loaded', { topics: ajaxify.data.topics });
hooks.fire('action:category.loaded', { cid: ajaxify.data.cid }); hooks.fire('action:category.loaded', { cid: ajaxify.data.cid });
}; };

View File

@@ -132,34 +132,56 @@ define('search', [
options.searchOptions.searchOnly = 1; options.searchOptions.searchOnly = 1;
Search.api(options.searchOptions, function (data) { Search.api(options.searchOptions, function (data) {
quickSearchResults.find('.loading-indicator').addClass('hidden'); quickSearchResults.find('.loading-indicator').addClass('hidden');
if (!data.posts || (options.hideOnNoMatches && !data.posts.length)) {
return quickSearchResults.addClass('hidden').find('.quick-search-results-container').html(''); if (options.searchOptions.in === 'categories') {
} if (!data.categories || (options.hideOnNoMatches && !data.categories.length)) {
data.posts.forEach(function (p) { return quickSearchResults.addClass('hidden').find('.quick-search-results-container').html('');
const text = $('<div>' + p.content + '</div>').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') data.dropdown = { maxWidth: '400px', maxHeight: '500px', ...options.dropdown };
.html(html.length ? html : ''); app.parseAndTranslate('partials/quick-category-search-results', data, (html) => {
const highlightEls = quickSearchResults.find( if (html.length) {
'.quick-search-results .quick-search-title, .quick-search-results .snippet' html.find('.timeago').timeago();
); }
Search.highlightMatches(options.searchOptions.term, highlightEls); quickSearchResults.toggleClass('hidden', !html.length || !inputEl.is(':focus'))
hooks.fire('action:search.quick.complete', { .find('.quick-search-results-container')
data: data, .html(html.length ? html : '');
options: options,
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 = $('<div>' + p.content + '</div>').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,
});
});
}
}); });
} }