From 9cae578ef70f07818006f8b845db12c9066341f8 Mon Sep 17 00:00:00 2001 From: Matchu Date: Wed, 2 Apr 2014 20:05:18 -0500 Subject: [PATCH] basic advanced search behavior; only name supported right now --- app/assets/javascripts/outfits/edit.js | 34 +++++++++++++++++++++++--- app/assets/javascripts/wardrobe.js | 17 ++++++++++--- app/views/outfits/edit.html.haml | 4 +-- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/outfits/edit.js b/app/assets/javascripts/outfits/edit.js index 6670e1d6..9b999a5a 100644 --- a/app/assets/javascripts/outfits/edit.js +++ b/app/assets/javascripts/outfits/edit.js @@ -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); }); diff --git a/app/assets/javascripts/wardrobe.js b/app/assets/javascripts/wardrobe.js index 85c6955a..c87187ba 100644 --- a/app/assets/javascripts/wardrobe.js +++ b/app/assets/javascripts/wardrobe.js @@ -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); } diff --git a/app/views/outfits/edit.html.haml b/app/views/outfits/edit.html.haml index 6beb9190..db4c2d55 100644 --- a/app/views/outfits/edit.html.haml +++ b/app/views/outfits/edit.html.haml @@ -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