summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2010-03-08 20:55:31 -0600
committerDan McGee <dan@archlinux.org>2010-05-14 17:06:37 -0500
commita8271351182eea8f4dfebd167997139fa4129f76 (patch)
tree4917aecb23ad36c83f8d50420cfba59378ef79cc
parent3fcd5ab50a97555f434431c759c3dc2418b7992a (diff)
downloadarchweb-a8271351182eea8f4dfebd167997139fa4129f76.tar.gz
archweb-a8271351182eea8f4dfebd167997139fa4129f76.zip
WIP on search stuffenhanced-search
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--packages/utils.py15
-rw-r--r--packages/views.py12
-rw-r--r--templates/packages/results.html4
-rw-r--r--templates/packages/search.html68
-rw-r--r--urls.py2
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 %}
diff --git a/urls.py b/urls.py
index ecdc31e9..dd4eefca 100644
--- a/urls.py
+++ b/urls.py
@@ -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'),