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,
|
PER_PAGE: 21,
|
||||||
TEMPLATE: $('#pagination-template')
|
TEMPLATE: $('#pagination-template')
|
||||||
}, object_width = 112, last_request,
|
}, object_width = 112, last_request,
|
||||||
current_query = "";
|
current_query = "",
|
||||||
|
advanced_form = $('#preview-search-advanced');
|
||||||
|
|
||||||
PAGINATION.EL = $(PAGINATION.EL_ID);
|
PAGINATION.EL = $(PAGINATION.EL_ID);
|
||||||
|
|
||||||
|
@ -1135,6 +1136,24 @@ View.Search = function (wardrobe) {
|
||||||
loadPage(1);
|
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) {
|
clear_el.click(function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
input_el.val('');
|
input_el.val('');
|
||||||
|
@ -1160,14 +1179,21 @@ View.Search = function (wardrobe) {
|
||||||
fit();
|
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) {
|
wardrobe.search.bind('updateRequest', function (request) {
|
||||||
last_request = request;
|
last_request = request;
|
||||||
error_el.hide('fast');
|
error_el.hide('fast');
|
||||||
help_el.hide();
|
help_el.hide();
|
||||||
no_results_el.hide();
|
no_results_el.hide();
|
||||||
current_query = request.query || '';
|
updateQuery(request.query);
|
||||||
input_el.val(current_query);
|
|
||||||
no_results_span.text(current_query);
|
|
||||||
clear_el.toggle(!!request.query);
|
clear_el.toggle(!!request.query);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -216,11 +216,21 @@ function Wardrobe() {
|
||||||
|
|
||||||
Item.PER_PAGE = 21;
|
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) {
|
Item.loadByQuery = function (query, offset, success, error) {
|
||||||
var page = Math.round(offset / Item.PER_PAGE) + 1;
|
var page = Math.round(offset / Item.PER_PAGE) + 1;
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: '/items.json',
|
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',
|
dataType: 'json',
|
||||||
success: function (data) {
|
success: function (data) {
|
||||||
var items = [], item, item_data;
|
var items = [], item, item_data;
|
||||||
|
@ -231,7 +241,7 @@ function Wardrobe() {
|
||||||
item.update(item_data);
|
item.update(item_data);
|
||||||
items.push(item);
|
items.push(item);
|
||||||
}
|
}
|
||||||
success(items, data.total_pages, page);
|
success(items, data.total_pages, page, data.query);
|
||||||
} else if(data.error) {
|
} else if(data.error) {
|
||||||
error(data.error);
|
error(data.error);
|
||||||
}
|
}
|
||||||
|
@ -1319,8 +1329,9 @@ function Wardrobe() {
|
||||||
|
|
||||||
this.request = {};
|
this.request = {};
|
||||||
|
|
||||||
function itemsOnLoad(items, total_pages, page) {
|
function itemsOnLoad(items, total_pages, page, query) {
|
||||||
search.events.trigger('updateItems', items);
|
search.events.trigger('updateItems', items);
|
||||||
|
search.events.trigger('updateQuery', query);
|
||||||
search.events.trigger('updatePagination', page, total_pages);
|
search.events.trigger('updatePagination', page, total_pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -136,12 +136,12 @@
|
||||||
%label{for: 'advanced-search-occupies'} Occupies
|
%label{for: 'advanced-search-occupies'} Occupies
|
||||||
-# TODO: populate
|
-# TODO: populate
|
||||||
%select{id: 'advanced-search-occupies'}
|
%select{id: 'advanced-search-occupies'}
|
||||||
%option any zone
|
%option{value: ''} any zone
|
||||||
%li.select
|
%li.select
|
||||||
%label{for: 'advanced-search-restricts'} Restricts
|
%label{for: 'advanced-search-restricts'} Restricts
|
||||||
-# TODO: populate
|
-# TODO: populate
|
||||||
%select{id: 'advanced-search-restricts'}
|
%select{id: 'advanced-search-restricts'}
|
||||||
%option any or no zones
|
%option{value: ''} any or no zones
|
||||||
%div
|
%div
|
||||||
%ul
|
%ul
|
||||||
%li.checkbox
|
%li.checkbox
|
||||||
|
|
Loading…
Reference in a new issue