feat: quick search

v1.18.x
Barış Soner Uşaklı 6 years ago
parent 4518198786
commit c01d43e01d

@ -43,5 +43,6 @@
"clear-preferences": "Clear preferences",
"search-preferences-saved": "Search preferences saved",
"search-preferences-cleared": "Search preferences cleared",
"show-results-as": "Show results as"
"show-results-as": "Show results as",
"see-more-results": "See more results"
}

@ -568,6 +568,7 @@ app.cacheBuster = null;
var searchButton = $('#search-button');
var searchFields = $('#search-fields');
var searchInput = $('#search-fields input');
var quickSearchResults = $('#quick-search-results');
$('#search-form .advanced-search-link').on('mousedown', function () {
ajaxify.go('/search');
@ -575,10 +576,47 @@ app.cacheBuster = null;
$('#search-form').on('submit', dismissSearch);
searchInput.on('blur', dismissSearch);
searchInput.on('focus', function () {
if (searchInput.val() && quickSearchResults.children().length) {
quickSearchResults.removeClass('hidden').show();
}
});
var searchTimeoutId = 0;
searchInput.on('keyup', function () {
if (searchTimeoutId) {
clearTimeout(searchTimeoutId);
searchTimeoutId = 0;
}
if (searchInput.val().length < 3) {
return;
}
searchTimeoutId = setTimeout(function () {
require(['search'], function (search) {
var data = search.getSearchPreferences();
data.term = searchInput.val();
data.in = 'titles';
data.searchOnly = 1;
search.api(data, function (data) {
if (!data.matchCount) {
return;
}
app.parseAndTranslate('partials/quick-search-results', data, function (html) {
quickSearchResults.html(html).removeClass('hidden').show();
});
});
});
}, 400);
});
function dismissSearch() {
searchFields.addClass('hidden');
searchButton.removeClass('hidden');
setTimeout(function () {
quickSearchResults.addClass('hidden');
}, 100);
}
searchButton.on('click', function (e) {

@ -23,6 +23,16 @@ define('search', ['navigator', 'translator', 'storage'], function (nav, translat
}
};
Search.api = function (data, callback) {
var apiURL = '/api/search?' + createQueryString(data);
data.searchOnly = undefined;
var searchURL = '/search?' + createQueryString(data);
$.get(apiURL, function (result) {
result.url = searchURL;
callback(result);
});
};
function createQueryString(data) {
var searchIn = data.in || 'titlesposts';
var postedBy = data.by || '';
@ -76,6 +86,10 @@ define('search', ['navigator', 'translator', 'storage'], function (nav, translat
query.showAs = data.showAs;
}
if (data.searchOnly) {
query.searchOnly = data.searchOnly;
}
$(window).trigger('action:search.createQueryString', {
query: query,
data: data,

@ -67,6 +67,7 @@ searchController.search = function (req, res, next) {
var searchData = results.search;
searchData.pagination = pagination.create(page, searchData.pageCount, req.query);
searchData.multiplePages = searchData.pageCount > 1;
searchData.search_query = validator.escape(String(req.query.term || ''));
searchData.term = req.query.term;

Loading…
Cancel
Save