From 0b96068803b81ea79baaea11b1b29450596c019c Mon Sep 17 00:00:00 2001 From: Dusty Phillips Date: Tue, 7 Oct 2008 13:15:59 -0400 Subject: replace package search with a nonfunctional newform --- media/arch.css | 29 ++++++++++- packages/templatetags/package_extras.py | 4 ++ packages/views.py | 66 +++++++++++++++++++++++- templates/forms/td_input.html | 5 ++ templates/packages/search.html | 89 +++++++++------------------------ templates/packages/signoffs.html | 2 +- urls.py | 1 - 7 files changed, 126 insertions(+), 70 deletions(-) create mode 100644 templates/forms/td_input.html diff --git a/media/arch.css b/media/arch.css index f1419fc..335e56b 100644 --- a/media/arch.css +++ b/media/arch.css @@ -129,7 +129,7 @@ body { div.listing { padding-right: 10px; } -.error { +.error, .errorlist { color: #dd0000; font-size: small; } @@ -390,3 +390,30 @@ textarea.vLargeTextField { background-color: #eee4cb; } +/* override some calendar attributes copied from */ +/* CALENDARS & CLOCKS */ +.calendarbox, .clockbox { margin:5px auto; font-size:11px; width:16em; text-align:center; background:white; position:relative; } +.clockbox { width:9em; } +.calendar { margin:0; padding: 0; } +.calendar table { margin:0; padding:0; border-collapse:collapse; background:white; width:99%; } +.calendar caption, .calendarbox h2 { margin: 0; font-size:11px; text-align:center; border-top:none; } +.calendar th { font-size:10px; color:#666; padding:2px 3px; text-align:center; background:#e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x; border-bottom:1px solid #ddd; } +.calendar td { font-size:11px; text-align: center; padding: 0; border-top:1px solid #eee; border-bottom:none; } +.calendar td.selected a { background: #C9DBED; } +.calendar td.nonday { background:#efefef; } +.calendar td.today a { background:#ffc; } +.calendar td a, .timelist a { display: block; font-weight:bold; padding:4px; text-decoration: none; color:#444; } +.calendar td a:hover, .timelist a:hover { background: #5b80b2; color:white; } +.calendar td a:active, .timelist a:active { background: #036; color:white; } +.calendarnav { font-size:10px; text-align: center; color:#ccc; margin:0; padding:1px 3px; } +.calendarnav a:link, #calendarnav a:visited, #calendarnav a:hover { color: #999; } +.calendar-shortcuts { background:white; font-size:10px; line-height:11px; border-top:1px solid #eee; padding:3px 0 4px; color:#ccc; } +.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { display:block; position:absolute; font-weight:bold; font-size:12px; background:#C9DBED url(../img/admin/default-bg.gif) bottom left repeat-x; padding:1px 4px 2px 4px; color:white; } +.calendarnav-previous:hover, .calendarnav-next:hover { background:#036; } +.calendarnav-previous { top:0; left:0; } +.calendarnav-next { top:0; right:0; } +.calendar-cancel { margin:0 !important; padding:0; font-size:10px; background:#e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x; border-top:1px solid #ddd; } +.calendar-cancel a { padding:2px; color:#999; } +ul.timelist, .timelist li { list-style-type:none; margin:0; padding:0; } +.timelist a { padding:2px; } + diff --git a/packages/templatetags/package_extras.py b/packages/templatetags/package_extras.py index 5a92565..5644583 100644 --- a/packages/templatetags/package_extras.py +++ b/packages/templatetags/package_extras.py @@ -30,6 +30,10 @@ def do_buildsortqs(parser, token): def space2br(value): return value.replace(' ', '
') +@register.inclusion_tag('forms/td_input.html') +def td_input(form_element): + return {'form_element': form_element} + @register.inclusion_tag('errors.html') def print_errors(errors): errs = [] diff --git a/packages/views.py b/packages/views.py index 09d76b3..4a3db85 100644 --- a/packages/views.py +++ b/packages/views.py @@ -1,6 +1,15 @@ +from django import forms +from itertools import chain +from django.shortcuts import render_to_response +from django.template import RequestContext from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 +from django.forms.util import flatatt from django.contrib.auth.models import User +from django.utils.safestring import mark_safe +from django.utils.encoding import force_unicode +from django.utils.html import escape, conditional_escape +from django.contrib.admin.widgets import AdminDateWidget from datetime import datetime from archweb_dev.main.utils import render_response from archweb_dev.main.models import Package, PackageFile @@ -44,8 +53,61 @@ def details(request, pkgid=0, name='', repo='', arch=''): return render_response(request, 'packages/details.html', {'pkg': pkg}) -# @TODO: replace search form with a newform -def search(request, query=''): +class EmptySelectWidget(forms.widgets.Select): + '''Like any select box but allows you to use a custom string for the + 'empty' field.''' + def __init__(self, empty_string="All", attrs=None, choices=()): + self.empty_string = empty_string + super(EmptySelectWidget, self).__init__(attrs, choices) + + def render(self, name, value, attrs=None, choices=()): + if value is None: value = '' + final_attrs = self.build_attrs(attrs, name=name) + output = [u'' % flatatt(final_attrs)] + # Normalize to string. + str_value = force_unicode(value) + for option_value, option_label in chain(self.choices, choices): + if option_value == '': + option_label = self.empty_string + option_value = force_unicode(option_value) + selected_html = ( + option_value == str_value) and u' selected="selected"' or '' + output.append(u'' % ( + escape(option_value), selected_html, + conditional_escape(force_unicode(option_label)))) + output.append(u'') + return mark_safe(u'\n'.join(output)) + +class PackageSearchForm(forms.Form): + repo = forms.ModelChoiceField(Repo.objects.all(), + widget=EmptySelectWidget, required=False) + arch = forms.ModelChoiceField(Arch.objects.all(), + widget=EmptySelectWidget, required=False) + keywords = forms.CharField(required=False) + maintainer = forms.ModelChoiceField(User.objects.all(), + widget=EmptySelectWidget, required=False) + last_update = forms.DateField(required=False, widget=AdminDateWidget()) + limit = forms.ChoiceField(choices=[ + ('50', '50'), + ('100', '100'), + ('250', '250'), + ('All', 'All')], required=False) + +def search(request): + if request.GET: + form = PackageSearchForm(data=request.GET) + if form.is_valid(): + pass + else: + form = PackageSearchForm() + + page_dict = {'search_form': form} + return render_to_response('packages/search.html', + RequestContext(request, page_dict)) + + + + # OLD IMPLEMENTATION BELOW HERE if request.GET.has_key('q'): # take the q GET var over the one passed on the URL query = request.GET['q'].strip() diff --git a/templates/forms/td_input.html b/templates/forms/td_input.html new file mode 100644 index 0000000..38ff5a1 --- /dev/null +++ b/templates/forms/td_input.html @@ -0,0 +1,5 @@ + + {{form_element.errors}} + {{form_element}} + {{form_element.help_text}} + diff --git a/templates/packages/search.html b/templates/packages/search.html index f671c3a..a181801 100644 --- a/templates/packages/search.html +++ b/templates/packages/search.html @@ -1,76 +1,35 @@ -{% load package_extras %} {% extends "base.html" %} +{% load package_extras %} {% block title %}Arch Linux - Package Search{% endblock %} {% block head %} - - + + +{{search_form.media}} {% endblock %} {% block content %}

Search Criteria

- {% if errors %} - {% print_errors errors %} - {% endif %} -
-
- - - - - - - - - - - -
ArchRepositoryKeywordsMaintainerLast UpdatePer Page
- - - - - - - - - - - - - -
+ + + + + + + + + + + + {% td_input search_form.arch %} + {% td_input search_form.repo %} + {% td_input search_form.keywords %} + {% td_input search_form.maintainer%} + {% td_input search_form.last_update %} + {% td_input search_form.limit %} + +
ArchRepositoryKeywordsMaintainerLast UpdatePer Page
+


diff --git a/templates/packages/signoffs.html b/templates/packages/signoffs.html index 55d534d..7db2927 100644 --- a/templates/packages/signoffs.html +++ b/templates/packages/signoffs.html @@ -1,5 +1,5 @@ -{% load package_extras %} {% extends "base.html" %} +{% load package_extras %} {% block title %}Arch Linux - Package Signoffs{% endblock %} {% block head %} diff --git a/urls.py b/urls.py index 6d345db..55b9a37 100644 --- a/urls.py +++ b/urls.py @@ -16,7 +16,6 @@ urlpatterns = patterns('', (r'^packages/signoff_package/(?P[A-z0-9]+)/(?P[A-z0-9\-+.]+)/$', 'archweb_dev.packages.views.signoff_package'), (r'^packages/search/$', 'archweb_dev.packages.views.search'), - (r'^packages/search/([A-z0-9]+)/$', 'archweb_dev.packages.views.search'), (r'^packages/update/$', 'archweb_dev.packages.views.update'), (r'^packages/(?P\d+)/$', 'archweb_dev.packages.views.details'), (r'^packages/(?P[A-z0-9]+)/$', 'archweb_dev.packages.views.details'), -- cgit v1.2.3-24-g4f1b