diff options
author | Dan McGee <dan@archlinux.org> | 2010-03-08 20:55:31 -0600 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2010-05-14 17:06:37 -0500 |
commit | a8271351182eea8f4dfebd167997139fa4129f76 (patch) | |
tree | 4917aecb23ad36c83f8d50420cfba59378ef79cc | |
parent | 3fcd5ab50a97555f434431c759c3dc2418b7992a (diff) | |
download | archweb-a8271351182eea8f4dfebd167997139fa4129f76.tar.gz archweb-a8271351182eea8f4dfebd167997139fa4129f76.zip |
WIP on search stuffenhanced-search
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | packages/utils.py | 15 | ||||
-rw-r--r-- | packages/views.py | 12 | ||||
-rw-r--r-- | templates/packages/results.html | 4 | ||||
-rw-r--r-- | templates/packages/search.html | 68 | ||||
-rw-r--r-- | urls.py | 2 |
5 files changed, 96 insertions, 5 deletions
diff --git a/packages/utils.py b/packages/utils.py new file mode 100644 index 00000000..0bb673d9 --- /dev/null +++ b/packages/utils.py @@ -0,0 +1,15 @@ +def parse_query(q): + ret = {'q': ''} + if not q: + return ret + for piece in q.split(' '): + parts = piece.partition(':') + if parts[1]: + ret[parts[0]] = parts[2] + else: + if ret['q'] != '': + ret['q'] += ' ' + ret['q'] += parts[0] + return ret + +# vim: set ts=4 sw=4 et: diff --git a/packages/views.py b/packages/views.py index 7f636c9d..afdfe6f4 100644 --- a/packages/views.py +++ b/packages/views.py @@ -88,10 +88,14 @@ def getmaintainer(request, name, repo, arch): return HttpResponse(str('\n'.join(names)), mimetype='text/plain') class PackageSearchForm(forms.Form): + q = forms.CharField(required=False) + keywords = forms.CharField(required=False) + name = forms.CharField(required=False) + desc = forms.CharField(required=False) repo = forms.ChoiceField(required=False) arch = forms.ChoiceField(required=False) - q = forms.CharField(required=False) maintainer = forms.ChoiceField(required=False) + license = forms.CharField(required=False) last_update = forms.DateField(required=False, widget=AdminDateWidget()) flagged = forms.ChoiceField( choices=[('', 'All')] + make_choice(['Flagged', 'Not Flagged']), @@ -129,6 +133,12 @@ class PackageSearchForm(forms.Form): ('', 'All'), ('orphan', 'Orphan')] + make_choice( [m.username for m in User.objects.order_by('username')]) +def advsearch(request): + form = PackageSearchForm() + page_dict = { 'search_form': form } + template = 'packages/search.html' + return render_to_response(template, RequestContext(request, page_dict)) + def search(request, page=None): current_query = '?' limit=50 diff --git a/templates/packages/results.html b/templates/packages/results.html index eca651d9..7560296b 100644 --- a/templates/packages/results.html +++ b/templates/packages/results.html @@ -1,8 +1,6 @@ {% extends "base.html" %} {% load package_extras %} -{% block title %}Arch Linux - Package Search{% endblock %} -{% block head %} -{% endblock %} +{% block title %}Arch Linux - Search Results{% endblock %} {% block content %} <div id="search"> diff --git a/templates/packages/search.html b/templates/packages/search.html new file mode 100644 index 00000000..23e2d8f2 --- /dev/null +++ b/templates/packages/search.html @@ -0,0 +1,68 @@ +{% extends "base.html" %} +{% load package_extras %} +{% block title %}Arch Linux - Package Search{% endblock %} +{% block head %} +<link rel="stylesheet" type="text/css" href="/media/admin_media/css/widgets.css" /> +<script type="text/javascript" src="/jsi18n/"></script> +<script type="text/javascript" src="/media/admin_media/js/core.js"></script> +{{search_form.media}} +{% endblock %} + +{% block content %} + <div class="greybox"> + <form method="get" action="/packages/"> + <input type="hidden" name="sort" value='{{sort}}' /> + <h3>Find packages that have:</h3> + <table> + <tr> + <td><span>Keywords</span></td> + {% td_input search_form.keywords %} + </tr> + <tr> + <td><span>Name</span></td> + {% td_input search_form.name %} + </tr> + <tr> + <td><span>Description</span></td> + {% td_input search_form.desc %} + </tr> + <tr> + <td><span>Architecture</span></td> + {% td_input search_form.arch %} + </tr> + <tr> + <td><span>Repository</span></td> + {% td_input search_form.repo %} + </tr> + <tr> + <td><span>Maintainer</span></td> + {% td_input search_form.maintainer %} + </tr> + <tr> + <td><span>License</span></td> + {% td_input search_form.license %} + </tr> + <tr> + <td><span>Last Update</span></td> + {% td_input search_form.last_update %} + </tr> + <tr> + <td><span>Flagged</span></td> + {% td_input search_form.flagged %} + </tr> + <tr> + <td><span>Per Page</span></td> + {% td_input search_form.limit %} + </tr> + <tr> + <td><span>Your Full Search</span></td> + <td><input type="text" name="q" id="builtsearch"/></td> + </tr> + <tr> + <td></td> + <td><input type="submit" value="Advanced Search" /></td> + </tr> + </table> + </form> + </div> +{% endblock %} @@ -35,7 +35,7 @@ urlpatterns = patterns('', # Preference is for the packages/ url below, but search is kept # because other projects link to it - (r'^packages/search/$', 'packages.views.search'), + (r'^packages/search/$', 'packages.views.advsearch'), (r'^packages/search/(?P<page>\d+)/$', 'packages.views.search'), (r'^packages/$', 'packages.views.search'), (r'^packages/(?P<page>\d+)/$', 'packages.views.search'), |