mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
refactor: move search functions from app.js to search module
deprecate: app.handleSearch, use search.init(options) instead app.enableTopicSearch, use search.enableQuickSearch(options) instead app.prepareSearch, use search.showAndFocusInput() instead
This commit is contained in:
@@ -75,10 +75,6 @@ app.cacheBuster = null;
|
|||||||
app.load = function () {
|
app.load = function () {
|
||||||
handleStatusChange();
|
handleStatusChange();
|
||||||
|
|
||||||
if (config.searchEnabled) {
|
|
||||||
app.handleSearch();
|
|
||||||
}
|
|
||||||
|
|
||||||
$('body').on('click', '#new_topic', function (e) {
|
$('body').on('click', '#new_topic', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
app.newTopic();
|
app.newTopic();
|
||||||
@@ -103,17 +99,19 @@ app.cacheBuster = null;
|
|||||||
'forum/pagination',
|
'forum/pagination',
|
||||||
'translator',
|
'translator',
|
||||||
'messages',
|
'messages',
|
||||||
|
'search',
|
||||||
'forum/unread',
|
'forum/unread',
|
||||||
'forum/header/notifications',
|
'forum/header/notifications',
|
||||||
'forum/header/chat',
|
'forum/header/chat',
|
||||||
'timeago/jquery.timeago',
|
'timeago/jquery.timeago',
|
||||||
], function (taskbar, helpers, pagination, translator, messages, unread, notifications, chat) {
|
], function (taskbar, helpers, pagination, translator, messages, search, unread, notifications, chat) {
|
||||||
notifications.prepareDOM();
|
notifications.prepareDOM();
|
||||||
chat.prepareDOM();
|
chat.prepareDOM();
|
||||||
translator.prepareDOM();
|
translator.prepareDOM();
|
||||||
taskbar.init();
|
taskbar.init();
|
||||||
helpers.register();
|
helpers.register();
|
||||||
pagination.init();
|
pagination.init();
|
||||||
|
search.init();
|
||||||
|
|
||||||
if (app.user.uid > 0) {
|
if (app.user.uid > 0) {
|
||||||
unread.initUnreadTopics();
|
unread.initUnreadTopics();
|
||||||
@@ -404,218 +402,24 @@ app.cacheBuster = null;
|
|||||||
}
|
}
|
||||||
|
|
||||||
app.enableTopicSearch = function (options) {
|
app.enableTopicSearch = function (options) {
|
||||||
if (!config.searchEnabled || !app.user.privileges['search:content']) {
|
console.warn('[deprecated] app.enableTopicSearch is deprecated, please use search.enableQuickSearch(options)');
|
||||||
return;
|
require(['search'], function (search) {
|
||||||
}
|
search.enableQuickSearch(options);
|
||||||
/* eslint-disable-next-line */
|
|
||||||
const searchOptions = Object.assign({ in: config.searchDefaultInQuick || 'titles' }, options.searchOptions);
|
|
||||||
const quickSearchResults = options.searchElements.resultEl;
|
|
||||||
const inputEl = options.searchElements.inputEl;
|
|
||||||
let oldValue = inputEl.val();
|
|
||||||
const filterCategoryEl = quickSearchResults.find('.filter-category');
|
|
||||||
|
|
||||||
function updateCategoryFilterName() {
|
|
||||||
if (ajaxify.data.template.category) {
|
|
||||||
require(['translator'], function (translator) {
|
|
||||||
translator.translate('[[search:search-in-category, ' + ajaxify.data.name + ']]', function (translated) {
|
|
||||||
const name = $('<div></div>').html(translated).text();
|
|
||||||
filterCategoryEl.find('.name').text(name);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
filterCategoryEl.toggleClass('hidden', !ajaxify.data.template.category);
|
|
||||||
}
|
|
||||||
|
|
||||||
function doSearch() {
|
|
||||||
require(['search'], function (search) {
|
|
||||||
/* eslint-disable-next-line */
|
|
||||||
options.searchOptions = Object.assign({}, searchOptions);
|
|
||||||
options.searchOptions.term = inputEl.val();
|
|
||||||
updateCategoryFilterName();
|
|
||||||
|
|
||||||
if (ajaxify.data.template.category) {
|
|
||||||
if (filterCategoryEl.find('input[type="checkbox"]').is(':checked')) {
|
|
||||||
options.searchOptions.categories = [ajaxify.data.cid];
|
|
||||||
options.searchOptions.searchChildren = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
quickSearchResults.removeClass('hidden').find('.quick-search-results-container').html('');
|
|
||||||
quickSearchResults.find('.loading-indicator').removeClass('hidden');
|
|
||||||
hooks.fire('action:search.quick.start', options);
|
|
||||||
options.searchOptions.searchOnly = 1;
|
|
||||||
search.api(options.searchOptions, function (data) {
|
|
||||||
quickSearchResults.find('.loading-indicator').addClass('hidden');
|
|
||||||
if (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 ? '...' : ''));
|
|
||||||
});
|
|
||||||
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,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
quickSearchResults.find('.filter-category input[type="checkbox"]').on('change', function () {
|
|
||||||
inputEl.focus();
|
|
||||||
doSearch();
|
|
||||||
});
|
|
||||||
|
|
||||||
inputEl.off('keyup').on('keyup', utils.debounce(function () {
|
|
||||||
if (inputEl.val().length < 3) {
|
|
||||||
quickSearchResults.addClass('hidden');
|
|
||||||
oldValue = inputEl.val();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (inputEl.val() === oldValue) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
oldValue = inputEl.val();
|
|
||||||
if (!inputEl.is(':focus')) {
|
|
||||||
return quickSearchResults.addClass('hidden');
|
|
||||||
}
|
|
||||||
doSearch();
|
|
||||||
}, 500));
|
|
||||||
|
|
||||||
let mousedownOnResults = false;
|
|
||||||
quickSearchResults.on('mousedown', function () {
|
|
||||||
$(window).one('mouseup', function () {
|
|
||||||
quickSearchResults.addClass('hidden');
|
|
||||||
});
|
|
||||||
mousedownOnResults = true;
|
|
||||||
});
|
|
||||||
inputEl.on('blur', function () {
|
|
||||||
if (!inputEl.is(':focus') && !mousedownOnResults && !quickSearchResults.hasClass('hidden')) {
|
|
||||||
quickSearchResults.addClass('hidden');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let ajaxified = false;
|
|
||||||
require(['hooks'], function (hooks) {
|
|
||||||
hooks.on('action:ajaxify.end', function () {
|
|
||||||
if (!ajaxify.isCold()) {
|
|
||||||
ajaxified = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
inputEl.on('focus', function () {
|
|
||||||
mousedownOnResults = false;
|
|
||||||
const query = inputEl.val();
|
|
||||||
oldValue = query;
|
|
||||||
if (query && quickSearchResults.find('#quick-search-results').children().length) {
|
|
||||||
updateCategoryFilterName();
|
|
||||||
if (ajaxified) {
|
|
||||||
doSearch();
|
|
||||||
ajaxified = false;
|
|
||||||
} else {
|
|
||||||
quickSearchResults.removeClass('hidden');
|
|
||||||
}
|
|
||||||
inputEl[0].setSelectionRange(
|
|
||||||
query.startsWith('in:topic') ? query.indexOf(' ') + 1 : 0,
|
|
||||||
query.length
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
inputEl.off('refresh').on('refresh', function () {
|
|
||||||
doSearch();
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
app.handleSearch = function (searchOptions) {
|
app.handleSearch = function (searchOptions) {
|
||||||
searchOptions = searchOptions || { in: config.searchDefaultInQuick || 'titles' };
|
console.warn('[deprecated] app.handleSearch is deprecated, please use search.init(options)');
|
||||||
const searchButton = $('#search-button');
|
require(['search'], function (search) {
|
||||||
const searchFields = $('#search-fields');
|
search.init(searchOptions);
|
||||||
const searchInput = $('#search-fields input');
|
|
||||||
const quickSearchContainer = $('#quick-search-container');
|
|
||||||
|
|
||||||
$('#search-form .advanced-search-link').off('mousedown').on('mousedown', function () {
|
|
||||||
ajaxify.go('/search');
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#search-form').off('submit').on('submit', function () {
|
|
||||||
searchInput.blur();
|
|
||||||
});
|
|
||||||
searchInput.off('blur').on('blur', dismissSearch);
|
|
||||||
searchInput.off('focus');
|
|
||||||
|
|
||||||
const searchElements = {
|
|
||||||
inputEl: searchInput,
|
|
||||||
resultEl: quickSearchContainer,
|
|
||||||
};
|
|
||||||
|
|
||||||
app.enableTopicSearch({
|
|
||||||
searchOptions: searchOptions,
|
|
||||||
searchElements: searchElements,
|
|
||||||
});
|
|
||||||
|
|
||||||
function dismissSearch() {
|
|
||||||
setTimeout(function () {
|
|
||||||
if (!searchInput.is(':focus')) {
|
|
||||||
searchFields.addClass('hidden');
|
|
||||||
searchButton.removeClass('hidden');
|
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
}
|
|
||||||
|
|
||||||
searchButton.off('click').on('click', function (e) {
|
|
||||||
if (!config.loggedIn && !app.user.privileges['search:content']) {
|
|
||||||
app.alert({
|
|
||||||
message: '[[error:search-requires-login]]',
|
|
||||||
timeout: 3000,
|
|
||||||
});
|
|
||||||
ajaxify.go('login');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
e.stopPropagation();
|
|
||||||
|
|
||||||
app.prepareSearch();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#search-form').off('submit').on('submit', function () {
|
|
||||||
const input = $(this).find('input');
|
|
||||||
require(['search'], function (search) {
|
|
||||||
const data = search.getSearchPreferences();
|
|
||||||
data.term = input.val();
|
|
||||||
hooks.fire('action:search.submit', {
|
|
||||||
searchOptions: data,
|
|
||||||
searchElements: searchElements,
|
|
||||||
});
|
|
||||||
search.query(data, function () {
|
|
||||||
input.val('');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
app.prepareSearch = function () {
|
app.prepareSearch = function () {
|
||||||
$('#search-fields').removeClass('hidden');
|
console.warn('[deprecated] app.prepareSearch is deprecated, please use search.showAndFocusInput()');
|
||||||
$('#search-button').addClass('hidden');
|
require(['search'], function (search) {
|
||||||
$('#search-fields input').focus();
|
search.showAndFocusInput();
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function handleStatusChange() {
|
function handleStatusChange() {
|
||||||
|
|||||||
@@ -69,12 +69,12 @@ define('forum/topic', [
|
|||||||
|
|
||||||
function handleTopicSearch() {
|
function handleTopicSearch() {
|
||||||
if (config.topicSearchEnabled) {
|
if (config.topicSearchEnabled) {
|
||||||
require(['mousetrap'], function (mousetrap) {
|
require(['mousetrap', 'search'], function (mousetrap, search) {
|
||||||
mousetrap.bind(['command+f', 'ctrl+f'], function (e) {
|
mousetrap.bind(['command+f', 'ctrl+f'], function (e) {
|
||||||
if (ajaxify.data.template.topic) {
|
if (ajaxify.data.template.topic) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$('#search-fields input').val('in:topic-' + ajaxify.data.tid + ' ');
|
$('#search-fields input').val('in:topic-' + ajaxify.data.tid + ' ');
|
||||||
app.prepareSearch();
|
search.showAndFocusInput();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
define('forum/topic/merge', function () {
|
define('forum/topic/merge', ['search'], function (search) {
|
||||||
const Merge = {};
|
const Merge = {};
|
||||||
let modal;
|
let modal;
|
||||||
let mergeBtn;
|
let mergeBtn;
|
||||||
@@ -30,7 +30,7 @@ define('forum/topic/merge', function () {
|
|||||||
mergeTopics(mergeBtn);
|
mergeTopics(mergeBtn);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.enableTopicSearch({
|
search.enableQuickSearch({
|
||||||
searchElements: {
|
searchElements: {
|
||||||
inputEl: modal.find('.topic-search-input'),
|
inputEl: modal.find('.topic-search-input'),
|
||||||
resultEl: modal.find('.quick-search-container'),
|
resultEl: modal.find('.quick-search-container'),
|
||||||
|
|||||||
@@ -1,11 +1,219 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
define('search', ['translator', 'storage', 'hooks'], function (translator, storage, hooks) {
|
||||||
define('search', ['navigator', 'translator', 'storage', 'hooks'], function (nav, translator, storage, hooks) {
|
|
||||||
const Search = {
|
const Search = {
|
||||||
current: {},
|
current: {},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Search.init = function (searchOptions) {
|
||||||
|
if (!config.searchEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
searchOptions = searchOptions || { in: config.searchDefaultInQuick || 'titles' };
|
||||||
|
const searchButton = $('#search-button');
|
||||||
|
const searchFields = $('#search-fields');
|
||||||
|
const searchInput = $('#search-fields input');
|
||||||
|
const quickSearchContainer = $('#quick-search-container');
|
||||||
|
|
||||||
|
$('#search-form .advanced-search-link').off('mousedown').on('mousedown', function () {
|
||||||
|
ajaxify.go('/search');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#search-form').off('submit').on('submit', function () {
|
||||||
|
searchInput.blur();
|
||||||
|
});
|
||||||
|
searchInput.off('blur').on('blur', function dismissSearch() {
|
||||||
|
setTimeout(function () {
|
||||||
|
if (!searchInput.is(':focus')) {
|
||||||
|
searchFields.addClass('hidden');
|
||||||
|
searchButton.removeClass('hidden');
|
||||||
|
}
|
||||||
|
}, 200);
|
||||||
|
});
|
||||||
|
searchInput.off('focus');
|
||||||
|
|
||||||
|
const searchElements = {
|
||||||
|
inputEl: searchInput,
|
||||||
|
resultEl: quickSearchContainer,
|
||||||
|
};
|
||||||
|
|
||||||
|
Search.enableQuickSearch({
|
||||||
|
searchOptions: searchOptions,
|
||||||
|
searchElements: searchElements,
|
||||||
|
});
|
||||||
|
|
||||||
|
searchButton.off('click').on('click', function (e) {
|
||||||
|
if (!config.loggedIn && !app.user.privileges['search:content']) {
|
||||||
|
app.alert({
|
||||||
|
message: '[[error:search-requires-login]]',
|
||||||
|
timeout: 3000,
|
||||||
|
});
|
||||||
|
ajaxify.go('login');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
e.stopPropagation();
|
||||||
|
|
||||||
|
Search.showAndFocusInput();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#search-form').off('submit').on('submit', function () {
|
||||||
|
const input = $(this).find('input');
|
||||||
|
const data = Search.getSearchPreferences();
|
||||||
|
data.term = input.val();
|
||||||
|
hooks.fire('action:search.submit', {
|
||||||
|
searchOptions: data,
|
||||||
|
searchElements: searchElements,
|
||||||
|
});
|
||||||
|
Search.query(data, function () {
|
||||||
|
input.val('');
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Search.enableQuickSearch = function (options) {
|
||||||
|
if (!config.searchEnabled || !app.user.privileges['search:content']) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const searchOptions = Object.assign({ in: config.searchDefaultInQuick || 'titles' }, options.searchOptions);
|
||||||
|
const quickSearchResults = options.searchElements.resultEl;
|
||||||
|
const inputEl = options.searchElements.inputEl;
|
||||||
|
let oldValue = inputEl.val();
|
||||||
|
const filterCategoryEl = quickSearchResults.find('.filter-category');
|
||||||
|
|
||||||
|
function updateCategoryFilterName() {
|
||||||
|
if (ajaxify.data.template.category) {
|
||||||
|
translator.translate('[[search:search-in-category, ' + ajaxify.data.name + ']]', function (translated) {
|
||||||
|
const name = $('<div></div>').html(translated).text();
|
||||||
|
filterCategoryEl.find('.name').text(name);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
filterCategoryEl.toggleClass('hidden', !ajaxify.data.template.category);
|
||||||
|
}
|
||||||
|
|
||||||
|
function doSearch() {
|
||||||
|
options.searchOptions = Object.assign({}, searchOptions);
|
||||||
|
options.searchOptions.term = inputEl.val();
|
||||||
|
updateCategoryFilterName();
|
||||||
|
|
||||||
|
if (ajaxify.data.template.category) {
|
||||||
|
if (filterCategoryEl.find('input[type="checkbox"]').is(':checked')) {
|
||||||
|
options.searchOptions.categories = [ajaxify.data.cid];
|
||||||
|
options.searchOptions.searchChildren = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
quickSearchResults.removeClass('hidden').find('.quick-search-results-container').html('');
|
||||||
|
quickSearchResults.find('.loading-indicator').removeClass('hidden');
|
||||||
|
hooks.fire('action:search.quick.start', options);
|
||||||
|
options.searchOptions.searchOnly = 1;
|
||||||
|
Search.api(options.searchOptions, function (data) {
|
||||||
|
quickSearchResults.find('.loading-indicator').addClass('hidden');
|
||||||
|
if (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 ? '...' : ''));
|
||||||
|
});
|
||||||
|
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,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
quickSearchResults.find('.filter-category input[type="checkbox"]').on('change', function () {
|
||||||
|
inputEl.focus();
|
||||||
|
doSearch();
|
||||||
|
});
|
||||||
|
|
||||||
|
inputEl.off('keyup').on('keyup', utils.debounce(function () {
|
||||||
|
if (inputEl.val().length < 3) {
|
||||||
|
quickSearchResults.addClass('hidden');
|
||||||
|
oldValue = inputEl.val();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (inputEl.val() === oldValue) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
oldValue = inputEl.val();
|
||||||
|
if (!inputEl.is(':focus')) {
|
||||||
|
return quickSearchResults.addClass('hidden');
|
||||||
|
}
|
||||||
|
doSearch();
|
||||||
|
}, 500));
|
||||||
|
|
||||||
|
let mousedownOnResults = false;
|
||||||
|
quickSearchResults.on('mousedown', function () {
|
||||||
|
$(window).one('mouseup', function () {
|
||||||
|
quickSearchResults.addClass('hidden');
|
||||||
|
});
|
||||||
|
mousedownOnResults = true;
|
||||||
|
});
|
||||||
|
inputEl.on('blur', function () {
|
||||||
|
if (!inputEl.is(':focus') && !mousedownOnResults && !quickSearchResults.hasClass('hidden')) {
|
||||||
|
quickSearchResults.addClass('hidden');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let ajaxified = false;
|
||||||
|
hooks.on('action:ajaxify.end', function () {
|
||||||
|
if (!ajaxify.isCold()) {
|
||||||
|
ajaxified = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
inputEl.on('focus', function () {
|
||||||
|
mousedownOnResults = false;
|
||||||
|
const query = inputEl.val();
|
||||||
|
oldValue = query;
|
||||||
|
if (query && quickSearchResults.find('#quick-search-results').children().length) {
|
||||||
|
updateCategoryFilterName();
|
||||||
|
if (ajaxified) {
|
||||||
|
doSearch();
|
||||||
|
ajaxified = false;
|
||||||
|
} else {
|
||||||
|
quickSearchResults.removeClass('hidden');
|
||||||
|
}
|
||||||
|
inputEl[0].setSelectionRange(
|
||||||
|
query.startsWith('in:topic') ? query.indexOf(' ') + 1 : 0,
|
||||||
|
query.length
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
inputEl.off('refresh').on('refresh', function () {
|
||||||
|
doSearch();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Search.showAndFocusInput = function () {
|
||||||
|
$('#search-fields').removeClass('hidden');
|
||||||
|
$('#search-button').addClass('hidden');
|
||||||
|
$('#search-fields input').focus();
|
||||||
|
};
|
||||||
|
|
||||||
Search.query = function (data, callback) {
|
Search.query = function (data, callback) {
|
||||||
callback = callback || function () {};
|
callback = callback || function () {};
|
||||||
ajaxify.go('search?' + createQueryString(data));
|
ajaxify.go('search?' + createQueryString(data));
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ JS.scripts = {
|
|||||||
'public/src/modules/storage.js',
|
'public/src/modules/storage.js',
|
||||||
'public/src/modules/handleBack.js',
|
'public/src/modules/handleBack.js',
|
||||||
'public/src/modules/messages.js',
|
'public/src/modules/messages.js',
|
||||||
|
'public/src/modules/search.js',
|
||||||
],
|
],
|
||||||
|
|
||||||
admin: [
|
admin: [
|
||||||
|
|||||||
Reference in New Issue
Block a user