save/clear search preferences

v1.18.x
Barış Soner Uşaklı 10 years ago
parent 9b45109349
commit be92f07ab9

@ -32,5 +32,9 @@
"username": "Username", "username": "Username",
"category": "Category", "category": "Category",
"descending": "In descending order", "descending": "In descending order",
"ascending": "In ascending order" "ascending": "In ascending order",
"save-preferences": "Save preferences",
"clear-preferences": "Clear preferences",
"search-preferences-saved": "Search preferences saved",
"search-preferences-cleared": "Search preferences cleared"
} }

@ -12,7 +12,7 @@ define('forum/search', ['search'], function(searchModule) {
var searchIn = $('#advanced-search #search-in'); var searchIn = $('#advanced-search #search-in');
fillOutFormFromQueryParams(); fillOutForm();
searchIn.on('change', function() { searchIn.on('change', function() {
updateFormItemVisiblity(searchIn.val()); updateFormItemVisiblity(searchIn.val());
@ -22,38 +22,49 @@ define('forum/search', ['search'], function(searchModule) {
$('#advanced-search').off('submit').on('submit', function(e) { $('#advanced-search').off('submit').on('submit', function(e) {
e.preventDefault(); e.preventDefault();
var $this = $(this);
var input = $this.find('#search-input'); var input = $(this).find('#search-input');
var searchData = { var searchData = getSearchData();
term: input.val(), searchData.term = input.val();
in: $this.find('#search-in').val(),
by: $this.find('#posted-by-user').val(),
categories: $this.find('#posted-in-categories').val(),
searchChildren: $this.find('#search-children').is(':checked'),
replies: $this.find('#reply-count').val(),
repliesFilter: $this.find('#reply-count-filter').val(),
timeFilter: $this.find('#post-time-filter').val(),
timeRange: $this.find('#post-time-range').val(),
sortBy: $this.find('#post-sort-by').val(),
sortDirection: $this.find('#post-sort-direction').val()
};
searchModule.query(searchData, function() { searchModule.query(searchData, function() {
input.val(''); input.val('');
}); });
}); });
handleSavePreferences();
enableAutoComplete(); enableAutoComplete();
}; };
function getSearchData() {
var form = $('#advanced-search');
var searchData = {
in: form.find('#search-in').val(),
by: form.find('#posted-by-user').val(),
categories: form.find('#posted-in-categories').val(),
searchChildren: form.find('#search-children').is(':checked'),
replies: form.find('#reply-count').val(),
repliesFilter: form.find('#reply-count-filter').val(),
timeFilter: form.find('#post-time-filter').val(),
timeRange: form.find('#post-time-range').val(),
sortBy: form.find('#post-sort-by').val(),
sortDirection: form.find('#post-sort-direction').val()
};
return searchData;
}
function updateFormItemVisiblity(searchIn) { function updateFormItemVisiblity(searchIn) {
var hide = searchIn.indexOf('posts') === -1 && searchIn.indexOf('titles') === -1; var hide = searchIn.indexOf('posts') === -1 && searchIn.indexOf('titles') === -1;
$('.post-search-item').toggleClass('hide', hide); $('.post-search-item').toggleClass('hide', hide);
} }
function fillOutFormFromQueryParams() { function fillOutForm() {
var params = utils.params(); var params = utils.params();
var searchData = getSearchPreferences();
params = utils.merge(searchData, params);
if (params) { if (params) {
if (params.in) { if (params.in) {
$('#search-in').val(params.in); $('#search-in').val(params.in);
@ -110,6 +121,27 @@ define('forum/search', ['search'], function(searchModule) {
}); });
} }
function handleSavePreferences() {
$('#save-preferences').on('click', function() {
localStorage.setItem('search-preferences', JSON.stringify(getSearchData()));
app.alertSuccess('[[search:search-preferences-saved]]');
return false;
});
$('#clear-preferences').on('click', function() {
localStorage.removeItem('search-preferences');
app.alertSuccess('[[search:search-preferences-cleared]]');
return false;
});
}
function getSearchPreferences() {
try {
return JSON.parse(localStorage.getItem('search-preferences'));
} catch(e) {
return {};
}
}
function enableAutoComplete() { function enableAutoComplete() {
var input = $('#posted-by-user'); var input = $('#posted-by-user');

Loading…
Cancel
Save