From: Stephen Burrows Date: Wed, 2 Mar 2011 21:16:22 +0000 (-0500) Subject: Solidified AJAX API. X-Git-Tag: philo-0.9~16^2~15^2 X-Git-Url: http://git.ithinksw.org/philo.git/commitdiff_plain/c9295747198ef8b64612408539b48aca329cff79 Solidified AJAX API. --- diff --git a/contrib/sobol/models.py b/contrib/sobol/models.py index e5852d7..b653c09 100644 --- a/contrib/sobol/models.py +++ b/contrib/sobol/models.py @@ -2,7 +2,7 @@ from django.conf.urls.defaults import patterns, url from django.contrib import messages from django.core.exceptions import ValidationError from django.db import models -from django.http import HttpResponseRedirect, Http404 +from django.http import HttpResponseRedirect, Http404, HttpResponse from django.utils import simplejson as json from django.utils.datastructures import SortedDict from philo.contrib.sobol import registry @@ -148,7 +148,7 @@ class SearchView(MultiView): ) if self.enable_ajax_api: urlpatterns += patterns('', - url(r'^(?P[\w-]+)', self.ajax_api_view, name='ajax_api_view') + url(r'^(?P[\w-]+)$', self.ajax_api_view, name='ajax_api_view') ) return urlpatterns @@ -196,6 +196,10 @@ class SearchView(MultiView): context.update({ 'searches': search_instances }) + else: + context.update({ + 'searches': [{'verbose_name': verbose_name, 'url': self.reverse('ajax_api_view', kwargs={'slug': slug}, node=request.node)} for slug, verbose_name in registry.iterchoices()] + }) else: form = SearchForm() @@ -214,8 +218,7 @@ class SearchView(MultiView): raise Http404 search_instance = self.get_search_instance(slug, search_string) - response = json.dumps({ - 'results': search_instance.results, - 'template': search_instance.get_template() - }) + response = HttpResponse(json.dumps({ + 'results': [result.get_context() for result in search_instance.results], + })) return response \ No newline at end of file diff --git a/contrib/sobol/search.py b/contrib/sobol/search.py index cce3ec6..36c2b5d 100644 --- a/contrib/sobol/search.py +++ b/contrib/sobol/search.py @@ -69,6 +69,9 @@ class SearchRegistry(object): def __getitem__(self, key): return self._registry[key] + + def __iter__(self): + return self._registry.__iter__() registry = SearchRegistry() @@ -90,7 +93,7 @@ class Result(object): return self.search.get_result_title(self.result) def get_url(self): - return self.search.get_result_querydict(self.result).urlencode() + return "?%s" % self.search.get_result_querydict(self.result).urlencode() def get_template(self): return self.search.get_result_template(self.result) @@ -98,13 +101,17 @@ class Result(object): def get_extra_context(self): return self.search.get_result_extra_context(self.result) - def render(self): - t = self.get_template() - c = Context(self.get_extra_context()) - c.update({ + def get_context(self): + context = self.get_extra_context() + context.update({ 'title': self.get_title(), 'url': self.get_url() }) + return context + + def render(self): + t = self.get_template() + c = Context(self.get_context()) return t.render(c) def __unicode__(self): @@ -211,9 +218,6 @@ class BaseSearch(object): self._result_template = Template(DEFAULT_RESULT_TEMPLATE_STRING) return self._result_template - def get_ajax_result_template(self, result): - return getattr(self, 'ajax_result_template', DEFAULT_RESULT_TEMPLATE_STRING) - def get_result_extra_context(self, result): return {} diff --git a/contrib/sobol/templates/search/googlesearch.html b/contrib/sobol/templates/search/googlesearch.html index 2938214..1b22388 100644 --- a/contrib/sobol/templates/search/googlesearch.html +++ b/contrib/sobol/templates/search/googlesearch.html @@ -1,4 +1,4 @@ \ No newline at end of file