basic advanced search behavior; only name supported right now
This commit is contained in:
parent
3f4f0eb06e
commit
9cae578ef7
3 changed files with 46 additions and 9 deletions
|
@ -1088,7 +1088,8 @@ View.Search = function (wardrobe) {
|
|||
PER_PAGE: 21,
|
||||
TEMPLATE: $('#pagination-template')
|
||||
}, object_width = 112, last_request,
|
||||
current_query = "";
|
||||
current_query = "",
|
||||
advanced_form = $('#preview-search-advanced');
|
||||
|
||||
PAGINATION.EL = $(PAGINATION.EL_ID);
|
||||
|
||||
|
@ -1135,6 +1136,24 @@ View.Search = function (wardrobe) {
|
|||
loadPage(1);
|
||||
});
|
||||
|
||||
advanced_form.submit(function(e) {
|
||||
e.preventDefault();
|
||||
current_query = {
|
||||
name: {
|
||||
require: $('#advanced-search-name-require').val(),
|
||||
exclude: $('#advanced-search-name-exclude').val()
|
||||
},
|
||||
nc: $('#advanced-search-nc').val(),
|
||||
occupies: $('#advanced-search-occupies').val(),
|
||||
restricts: $('#advanced-search-restricts').val(),
|
||||
species: $('#advanced-search-species').val(),
|
||||
owns: $('#advanced-search-owns').val(),
|
||||
wants: $('#advanced-search-wants').val()
|
||||
};
|
||||
wrapper.removeClass('advanced');
|
||||
loadPage(1);
|
||||
});
|
||||
|
||||
clear_el.click(function (e) {
|
||||
e.preventDefault();
|
||||
input_el.val('');
|
||||
|
@ -1160,14 +1179,21 @@ View.Search = function (wardrobe) {
|
|||
fit();
|
||||
});
|
||||
|
||||
function updateQuery(query) {
|
||||
current_query = query || '';
|
||||
var human_query = typeof query === 'string' ? query : '';
|
||||
input_el.val(human_query);
|
||||
no_results_span.text(human_query);
|
||||
}
|
||||
|
||||
wardrobe.search.bind('updateQuery', updateQuery);
|
||||
|
||||
wardrobe.search.bind('updateRequest', function (request) {
|
||||
last_request = request;
|
||||
error_el.hide('fast');
|
||||
help_el.hide();
|
||||
no_results_el.hide();
|
||||
current_query = request.query || '';
|
||||
input_el.val(current_query);
|
||||
no_results_span.text(current_query);
|
||||
updateQuery(request.query);
|
||||
clear_el.toggle(!!request.query);
|
||||
});
|
||||
|
||||
|
|
|
@ -216,11 +216,21 @@ function Wardrobe() {
|
|||
|
||||
Item.PER_PAGE = 21;
|
||||
|
||||
function queryToFilters(query) {
|
||||
if (typeof query === "string") return query;
|
||||
var filters = [];
|
||||
if (query.name.require)
|
||||
filters.push({key: "name", value: query.name.require, is_positive: true});
|
||||
if (query.name.exclude)
|
||||
filters.push({key: "name", value: query.name.exclude, is_positive: false});
|
||||
return filters;
|
||||
}
|
||||
|
||||
Item.loadByQuery = function (query, offset, success, error) {
|
||||
var page = Math.round(offset / Item.PER_PAGE) + 1;
|
||||
$.ajax({
|
||||
url: '/items.json',
|
||||
data: {q: query, per_page: Item.PER_PAGE, page: page},
|
||||
data: {q: queryToFilters(query), per_page: Item.PER_PAGE, page: page},
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
var items = [], item, item_data;
|
||||
|
@ -231,7 +241,7 @@ function Wardrobe() {
|
|||
item.update(item_data);
|
||||
items.push(item);
|
||||
}
|
||||
success(items, data.total_pages, page);
|
||||
success(items, data.total_pages, page, data.query);
|
||||
} else if(data.error) {
|
||||
error(data.error);
|
||||
}
|
||||
|
@ -1319,8 +1329,9 @@ function Wardrobe() {
|
|||
|
||||
this.request = {};
|
||||
|
||||
function itemsOnLoad(items, total_pages, page) {
|
||||
function itemsOnLoad(items, total_pages, page, query) {
|
||||
search.events.trigger('updateItems', items);
|
||||
search.events.trigger('updateQuery', query);
|
||||
search.events.trigger('updatePagination', page, total_pages);
|
||||
}
|
||||
|
||||
|
|
|
@ -136,12 +136,12 @@
|
|||
%label{for: 'advanced-search-occupies'} Occupies
|
||||
-# TODO: populate
|
||||
%select{id: 'advanced-search-occupies'}
|
||||
%option any zone
|
||||
%option{value: ''} any zone
|
||||
%li.select
|
||||
%label{for: 'advanced-search-restricts'} Restricts
|
||||
-# TODO: populate
|
||||
%select{id: 'advanced-search-restricts'}
|
||||
%option any or no zones
|
||||
%option{value: ''} any or no zones
|
||||
%div
|
||||
%ul
|
||||
%li.checkbox
|
||||
|
|
Loading…
Reference in a new issue