diff options
author | Dan McGee <dan@archlinux.org> | 2012-05-01 17:13:33 -0500 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2012-05-01 17:13:33 -0500 |
commit | b59e79f3878d59b83c6867eb5c6196f8f003dcd9 (patch) | |
tree | 5168439fa4620d6e5ec60ca03a0606a9a6ce4549 | |
parent | b06efbe343eb6cd5cafe4c121d53a538302f9156 (diff) |
Opensearch enhancements
* Add a 64x64 icon as indicated in the Opensearch specification.
* Add suggestions capability and a new view providing suggestions based
on package name starting with the typed value.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | packages/views/__init__.py | 18 | ||||
-rw-r--r-- | sitestatic/logos/icon-transparent-64x64.png | bin | 0 -> 1430 bytes | |||
-rw-r--r-- | templates/packages/opensearch.xml | 17 | ||||
-rw-r--r-- | urls.py | 2 |
4 files changed, 30 insertions, 7 deletions
diff --git a/packages/views/__init__.py b/packages/views/__init__.py index 6a9c5275..21d17470 100644 --- a/packages/views/__init__.py +++ b/packages/views/__init__.py @@ -7,7 +7,7 @@ from django.contrib.auth.models import User from django.http import HttpResponse, Http404 from django.shortcuts import get_object_or_404, redirect from django.utils import simplejson -from django.views.decorators.http import require_POST +from django.views.decorators.http import require_GET, require_POST from django.views.decorators.vary import vary_on_headers from django.views.generic.simple import direct_to_template @@ -24,6 +24,7 @@ from .search import search, search_json from .signoff import signoffs, signoff_package, signoff_options, signoffs_json +@require_GET def opensearch(request): if request.is_secure(): domain = "https://%s" % request.META['HTTP_HOST'] @@ -34,6 +35,21 @@ def opensearch(request): {'domain': domain}, mimetype='application/opensearchdescription+xml') + +@require_GET +def opensearch_suggest(request): + search_term = request.GET.get('q', '') + if search_term == '': + return HttpResponse('', mimetype='application/x-suggestions+json') + + names = Package.objects.filter( + pkgname__startswith=search_term).values_list( + 'pkgname', flat=True).order_by('pkgname').distinct()[:10] + results = [search_term, list(names)] + to_json = simplejson.dumps(results, ensure_ascii=False) + return HttpResponse(to_json, mimetype='application/x-suggestions+json') + + @permission_required('main.change_package') @require_POST def update(request): diff --git a/sitestatic/logos/icon-transparent-64x64.png b/sitestatic/logos/icon-transparent-64x64.png Binary files differnew file mode 100644 index 00000000..0318f183 --- /dev/null +++ b/sitestatic/logos/icon-transparent-64x64.png diff --git a/templates/packages/opensearch.xml b/templates/packages/opensearch.xml index 216be3e9..6c50d991 100644 --- a/templates/packages/opensearch.xml +++ b/templates/packages/opensearch.xml @@ -1,13 +1,18 @@ -<?xml version="1.0" encoding="UTF-8"?> +{% load static from staticfiles %}<?xml version="1.0" encoding="UTF-8"?> <OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> - <ShortName>Arch Linux Packages</ShortName> - <Description>Search the Arch Linux package repositories.</Description> + <ShortName>Arch Packages</ShortName> + <LongName>Arch Linux Package Repository Search</LongName> + <Description>Search the Arch Linux package repositories by keyword in package names and descriptions.</Description> <Tags>linux archlinux package software</Tags> - <Image height="16" width="16" type="image/x-icon">{{domain}}/static/favicon.ico</Image> + <Image height="16" width="16" type="image/x-icon">{{ domain }}{% static "favicon.ico" %}</Image> + <Image height="64" width="64" type="image/png">{{ domain }}{% static "logos/icon-transparent-64x64.png" %}</Image> <Language>en-us</Language> <InputEncoding>UTF-8</InputEncoding> <OutputEncoding>UTF-8</OutputEncoding> <Query role="example" searchTerms="initscripts"/> - <Url type="text/html" template="{{domain}}/packages/?q={searchTerms}"/> - <Url rel="self" type="application/opensearchdescription+xml" template="{{domain}}/opensearch/packages/"/> + <Url type="text/html" template="{{ domain }}/packages/?q={searchTerms}"/> + <Url rel="suggestions" type="application/x-suggestions+json" + template="{{ domain }}/opensearch/packages/suggest?q={searchTerms}"/> + <Url rel="self" type="application/opensearchdescription+xml" + template="{{ domain }}/opensearch/packages/"/> </OpenSearchDescription> @@ -91,6 +91,8 @@ urlpatterns += patterns('', (r'^visualize/', include('visualize.urls')), (r'^opensearch/packages/$', 'packages.views.opensearch', {}, 'opensearch-packages'), + (r'^opensearch/packages/suggest$', 'packages.views.opensearch_suggest', + {}, 'opensearch-packages-suggest'), (r'^todolists/$','todolists.views.public_list'), ) |