Skip to content
This repository has been archived by the owner on Mar 15, 2018. It is now read-only.

Commit

Permalink
fix search within personas/collections (bug 617038)
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeff Balogh committed Dec 10, 2010
1 parent 470b3a1 commit b58283e
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 33 deletions.
19 changes: 3 additions & 16 deletions apps/browse/views.py
Expand Up @@ -119,14 +119,10 @@ def language_tools(request, category=None):
addons = (Addon.objects.public()
.filter(appsupport__app=request.APP.id, type__in=types,
target_locale__isnull=False).exclude(target_locale=''))

locales = _get_locales(addons)

search_cat = '%s,0' % amo.ADDON_DICT

return jingo.render(request, 'browse/language_tools.html',
{'locales': locales, 'addons': addons,
'search_cat': search_cat})
'search_cat': '%s,0' % amo.ADDON_DICT})


def themes(request, category=None):
Expand All @@ -145,17 +141,13 @@ def themes(request, category=None):

count = addons.with_index(addons='type_status_inactive_idx').count()
themes = amo.utils.paginate(request, addons, count=count)

# Pre-selected category for search form
search_cat = '%s,0' % amo.ADDON_THEME

return jingo.render(request, 'browse/themes.html',
{'categories': categories,
'themes': themes, 'category': category,
'sorting': filter.field,
'sort_opts': filter.opts,
'unreviewed': unreviewed,
'search_cat': search_cat})
'search_cat': '%s,0' % amo.ADDON_THEME})


def extensions(request, category=None):
Expand All @@ -175,9 +167,7 @@ def extensions(request, category=None):

count = addons.with_index(addons='type_status_inactive_idx').count()
addons = amo.utils.paginate(request, addons, count=count)

search_cat = '%s,%s' % (TYPE, category.id if category else 0)

return jingo.render(request, 'browse/extensions.html',
{'category': category, 'addons': addons,
'unreviewed': unreviewed,
Expand Down Expand Up @@ -208,12 +198,9 @@ def category_landing(request, category):
.filter(categories__id=category.id))
filter = CategoryLandingFilter(request, base, category,
key='browse', default='featured')

search_cat = '%s,%s' % (category.type, category.id)

return jingo.render(request, 'browse/category_landing.html',
{'category': category, 'filter': filter,
'search_cat': search_cat})
'search_cat': '%s,%s' % (category.type, category.id)})


def creatured(request, category):
Expand Down
12 changes: 6 additions & 6 deletions apps/devhub/templates/devhub/search.html
@@ -1,10 +1,10 @@
{% set search_form = SearchForm(request) %}
{% set search_form = SimpleSearchForm(request, None) %}
<form action="{{ remora_url('/developers/search') }}" method="get">
<span class="wrap">
<input type="text" name="q"
<span class="wrap">
<input type="text" name="q" required
class="text {% if not search_form.q.data %}placeholder{% endif %}"
value="{{ search_form.q.data or '' }}" required="required"
value="{{ search_form.q.data or '' }}"
placeholder="{{ _('Search developer documentation') }}">
</span> {# search-query #}
<input type="image" class="submit go-button" src="{{ settings.MEDIA_URL }}img/zamboni/global/btn-search.png" title="{{ _('Search') }}" alt="{{ _('Search') }}" />
</form>
<input type="image" class="submit go-button" src="{{ settings.MEDIA_URL }}img/zamboni/global/btn-search.png" title="{{ _('Search') }}">
</form>
24 changes: 22 additions & 2 deletions apps/search/forms.py
Expand Up @@ -88,13 +88,33 @@ def get_search_groups(app):
return top_level[:1] + sub + top_level[1:], top_level


SEARCH_CHOICES = (
('all', _lazy('search for add-ons')),
('collections', _lazy('search for collections')),
('personas', _lazy('search for personas')))


class SimpleSearchForm(forms.Form):
"""Powers the search box on every page."""
q = forms.CharField(required=False)
cat = forms.CharField(required=False, widget=forms.HiddenInput)
choices = dict(SEARCH_CHOICES)

def clean_cat(self):
self.data = dict(self.data.items())
return self.data.setdefault('cat', 'all')

def placeholder(self):
val = self.clean_cat()
return self.choices.get(val, self.choices['all'])


def SearchForm(request):

current_app = request.APP or amo.FIREFOX
search_groups, top_level = get_search_groups(current_app)

class _SearchForm(forms.Form):
q = forms.CharField(required=False)
class _SearchForm(SimpleSearchForm):

cat = forms.ChoiceField(choices=search_groups, required=False)

Expand Down
7 changes: 5 additions & 2 deletions apps/search/helpers.py
Expand Up @@ -8,8 +8,11 @@


@jingo.register.function
def SearchForm(request):
return forms.SearchForm(request)
def SimpleSearchForm(request, search_cat):
data = request.GET
if search_cat and 'cat' not in request.GET:
data = dict(request.GET, cat=search_cat)
return forms.SimpleSearchForm(data)


@jingo.register.function
Expand Down
24 changes: 24 additions & 0 deletions apps/search/tests/test_views.py
Expand Up @@ -294,3 +294,27 @@ def test_persona_results(self):
url = reverse('tags.detail', args=('donkeybuttrhino',))
r = self.client.get(url, follow=True)
eq_(len(r.context['pager'].object_list), 1)


class TestSearchboxTarget(test_utils.TestCase):
# Check that we search within addons/personas/collections as appropriate.

def check(self, url, placeholder, cat):
doc = pq(self.client.get(url).content)('.header-search form')
eq_(doc('input[name=q]').attr('placeholder'), placeholder)
eq_(doc('input[name=cat]').val(), cat)

def test_addons_is_default(self):
self.check(reverse('home'), 'search for add-ons', 'all')

def test_themes(self):
self.check(reverse('browse.themes'), 'search for add-ons',
'%s,0' % amo.ADDON_THEME)

def test_collections(self):
self.check(reverse('collections.list'), 'search for collections',
'collections')

def test_personas(self):
self.check(reverse('browse.personas'), 'search for personas',
'personas')
15 changes: 8 additions & 7 deletions templates/search.html
@@ -1,10 +1,11 @@
{% set search_form = SearchForm(request) %}
<form action="{{ url('search.search') }}" method="get">
{% set search_form = SimpleSearchForm(request, search_cat) %}
<form action="{{ url('search.search') }}">
<span class="wrap">
<input type="text" name="q"
<input type="text" name="q" required
class="text {% if not search_form.q.data %}placeholder{% endif %}"
placeholder="{{ _('search for add-ons') }}"
value="{{ search_form.q.data or '' }}" required="required">
placeholder="{{ search_form.placeholder() }}"
value="{{ search_form.q.data or '' }}">
{{ search_form.cat|safe }}
</span>
<input type="image" class="submit" src="{{ settings.MEDIA_URL }}img/zamboni/global/btn-search.png" title="{{ _('Search') }}" alt="{{ _('Search') }}" />
</form>
<input type="image" class="submit" src="{{ settings.MEDIA_URL }}img/zamboni/global/btn-search.png" title="{{ _('Search') }}">
</form>

0 comments on commit b58283e

Please sign in to comment.