advanced search by pet type fit :)

This commit is contained in:
Emi Matchu 2014-04-05 18:48:20 -05:00
parent e5771e6f1d
commit 44ff466a64
6 changed files with 38 additions and 24 deletions

View file

@ -1160,8 +1160,8 @@ View.Search = function (wardrobe) {
nc: $('#advanced-search-nc').val(), nc: $('#advanced-search-nc').val(),
occupies: $('#advanced-search-occupies').val(), occupies: $('#advanced-search-occupies').val(),
restricts: $('#advanced-search-restricts').val(), restricts: $('#advanced-search-restricts').val(),
species: $('#advanced-search-species').is(':checked') ? fits: $('#advanced-search-autofilter').is(':checked') ?
wardrobe.outfits.getPetType().species_id : null, wardrobe.outfits.getPetType().id : null,
owns: $('#advanced-search-owns').is(':checked'), owns: $('#advanced-search-owns').is(':checked'),
wants: $('#advanced-search-wants').is(':checked') wants: $('#advanced-search-wants').is(':checked')
}; };
@ -1318,7 +1318,7 @@ View.Search = function (wardrobe) {
var petType = wardrobe.outfits.getPetType(); var petType = wardrobe.outfits.getPetType();
var speciesName = attrs.species[petType.species_id].name.toLowerCase(); var speciesName = attrs.species[petType.species_id].name.toLowerCase();
var colorName = attrs.color[petType.color_id].unfunny_name.toLowerCase(); var colorName = attrs.color[petType.color_id].unfunny_name.toLowerCase();
return 'fits:' + speciesName + '-' + colorName; return 'fits:' + colorName + '-' + speciesName;
} }
function addAutofilter(query) { function addAutofilter(query) {
@ -1328,15 +1328,19 @@ View.Search = function (wardrobe) {
return query; return query;
} }
var autofilterLabels = $('label[for=preview-search-autofilter],' +
'label[for=advanced-search-autofilter]');
var autofilterSpeciesFields = autofilterLabels.find('.species');
var autofilterColorFields = autofilterLabels.find('.color');
function updatePetAttributes() { function updatePetAttributes() {
if (attrs !== null) { if (attrs !== null) {
var petType = wardrobe.outfits.getPetType(); var petType = wardrobe.outfits.getPetType();
var speciesName = attrs.species[petType.species_id].name; var speciesName = attrs.species[petType.species_id].name;
$('label[for=advanced-search-species] span').text(speciesName); autofilterSpeciesFields.text(speciesName);
$('label[for=preview-search-autofilter] .species').text(speciesName);
var colorName = attrs.color[petType.color_id].name; var colorName = attrs.color[petType.color_id].name;
$('label[for=preview-search-autofilter] .color').text(colorName); autofilterColorFields.text(colorName);
} }
} }

View file

@ -1330,15 +1330,15 @@ function Wardrobe() {
if (query.restricts) if (query.restricts)
filters.push({key: "restricted_zone_set_name", value: query.restricts, filters.push({key: "restricted_zone_set_name", value: query.restricts,
is_positive: true}); is_positive: true});
if (query.species) if (query.fits)
filters.push({key: "species_support_id", value: query.species, filters.push({key: "fits_pet_type", value: query.fits,
is_positive: true}); is_positive: true});
if (query.owns) if (query.owns)
filters.push({key: "user_closet_hanger_ownership", value: true, filters.push({key: "user_closet_hanger_ownership", value: true,
is_positive: true}); is_positive: true});
if (query.wants) if (query.wants)
filters.push({key: "user_closet_hanger_ownership", value: false, filters.push({key: "user_closet_hanger_ownership", value: false,
is_positive: true}); is_positive: true});
return filters; return filters;
} }

View file

@ -69,10 +69,10 @@ _user_closet_hanger_ownerships:
_negative_user_closet_hanger_ownerships: _negative_user_closet_hanger_ownerships:
*user_closet_hangers_ownership_partial *user_closet_hangers_ownership_partial
_body_ids: _fits_pet_types:
*body_id_partial *body_id_partial
_negative_body_ids: _negative_fits_pet_types:
*body_id_partial *body_id_partial
item_search: item_search:
@ -88,13 +88,13 @@ item_search:
- <<_occupied_zone_ids= ~>> - <<_occupied_zone_ids= ~>>
- <<_restricted_zone_ids= ~>> - <<_restricted_zone_ids= ~>>
- <<_user_closet_hanger_ownerships= ~>> - <<_user_closet_hanger_ownerships= ~>>
- <<_body_ids= ~>> - <<_fits_pet_types= ~>>
must_not: must_not:
- <<_negative_names= ~>> - <<_negative_names= ~>>
- <<_negative_species_support_ids= ~>> - <<_negative_species_support_ids= ~>>
- <<_negative_occupied_zone_ids= ~>> - <<_negative_occupied_zone_ids= ~>>
- <<_negative_restricted_zone_ids= ~>> - <<_negative_restricted_zone_ids= ~>>
- <<_negative_user_closet_hanger_ownerships= ~>> - <<_negative_user_closet_hanger_ownerships= ~>>
- <<_negative_body_ids= ~>> - <<_negative_fits_pet_types= ~>>
sort: sort:
- name.<<locale>>.untouched - name.<<locale>>.untouched

View file

@ -12,7 +12,7 @@ class Item
:restricted_zone_id => Fields::SetField, :restricted_zone_id => Fields::SetField,
:name => Fields::SetField, :name => Fields::SetField,
:user_closet_hanger_ownership => Fields::SetField, :user_closet_hanger_ownership => Fields::SetField,
:body_id => Fields::SetField :fits_pet_type => Fields::SetField
} }
FIELD_KEYS = FIELD_CLASSES.keys FIELD_KEYS = FIELD_CLASSES.keys
@ -95,11 +95,11 @@ class Item
end end
end end
[:_body_ids, :_negative_body_ids].each do |key| [:_fits_pet_types, :_negative_fits_pet_types].each do |key|
if final_flex_params[key] if final_flex_params[key]
final_flex_params[key].each do |entry| final_flex_params[key].each do |entry|
# These are pet types at first. Yikes, dem hax. # These are pet types at first. Yikes, dem hax.
entry[:body_id] = entry[:body_id].body_id entry[:body_id] = entry[:fits_pet_type].body_id
end end
end end
end end
@ -206,7 +206,7 @@ class Item
:occupied_zone_id => :zone, :occupied_zone_id => :zone,
:restricted_zone_id => :zone, :restricted_zone_id => :zone,
:user_closet_hanger_ownership => :ownership, :user_closet_hanger_ownership => :ownership,
:body_id => :pet_type :fits_pet_type => :pet_type
} }
TEXT_FILTER_EXPR = /([+-]?)(?:(\p{Word}+):)?(?:"([^"]+)"|(\S+))/ TEXT_FILTER_EXPR = /([+-]?)(?:(\p{Word}+):)?(?:"([^"]+)"|(\S+))/
@ -286,6 +286,13 @@ class Item
if key == :user_closet_hanger_ownership if key == :user_closet_hanger_ownership
value = (value == 'true') value = (value == 'true')
end end
if key == :fits_pet_type
begin
value = PetType.find(value)
rescue ActiveRecord::RecordNotFound
Item::Search.error 'not_found.pet_type_id', id: value
end
end
is_positive = filter_params[:is_positive] == 'true' is_positive = filter_params[:is_positive] == 'true'
Filter.new(key, value, is_positive) Filter.new(key, value, is_positive)
end end

View file

@ -146,10 +146,12 @@
%div %div
%ul %ul
%li.checkbox %li.checkbox
%input{type: 'checkbox', id: 'advanced-search-species'} %input{type: 'checkbox', id: 'advanced-search-autofilter',
%label{for: 'advanced-search-species'} checked: true}
= t '.search.advanced.species_html', %label{for: 'advanced-search-autofilter'}
species: content_tag('span', '') = t '.search.autofilter_html',
species: content_tag('span', '', {:class => 'species'}),
color: content_tag('span', '', {:class => 'color'})
%li.checkbox.must-log-in %li.checkbox.must-log-in
%input{type: 'checkbox', id: 'advanced-search-owns', disabled: true} %input{type: 'checkbox', id: 'advanced-search-owns', disabled: true}
%label{for: 'advanced-search-owns'}= t '.search.advanced.owns' %label{for: 'advanced-search-owns'}= t '.search.advanced.owns'

View file

@ -365,6 +365,7 @@ en:
user:wants? user:wants?
pet_type: We have no record of the %{name1} %{name2}. pet_type: We have no record of the %{name1} %{name2}.
It is spelled correctly? It is spelled correctly?
pet_type_id: We have no record of pet type %{id}. Weird.
not_logged_in: not_logged_in:
The "user" filters are only available if you're logged in. The "user" filters are only available if you're logged in.
flag_keywords: flag_keywords:
@ -379,7 +380,7 @@ en:
user_closet_hanger_ownership: user user_closet_hanger_ownership: user
user_owns: owns user_owns: owns
user_wants: wants user_wants: wants
body_id: fits fits_pet_type: fits
neopets_pages: neopets_pages:
create: create: