basic advanced search behavior; only name supported right now

This commit is contained in:
Emi Matchu 2014-04-02 20:05:18 -05:00
parent 3f4f0eb06e
commit 9cae578ef7
3 changed files with 46 additions and 9 deletions

View file

@ -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);
}); });

View file

@ -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);
} }

View file

@ -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