Solidified AJAX API.
authorStephen Burrows <stephen.r.burrows@gmail.com>
Wed, 2 Mar 2011 21:16:22 +0000 (16:16 -0500)
committerStephen Burrows <stephen.r.burrows@gmail.com>
Wed, 2 Mar 2011 21:16:22 +0000 (16:16 -0500)
contrib/sobol/models.py
contrib/sobol/search.py
contrib/sobol/templates/search/googlesearch.html

index e5852d7..b653c09 100644 (file)
@@ -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.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
 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('',
                )
                if self.enable_ajax_api:
                        urlpatterns += patterns('',
-                               url(r'^(?P<slug>[\w-]+)', self.ajax_api_view, name='ajax_api_view')
+                               url(r'^(?P<slug>[\w-]+)$', self.ajax_api_view, name='ajax_api_view')
                        )
                return urlpatterns
        
                        )
                return urlpatterns
        
@@ -196,6 +196,10 @@ class SearchView(MultiView):
                                        context.update({
                                                'searches': search_instances
                                        })
                                        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()
                
                else:
                        form = SearchForm()
                
@@ -214,8 +218,7 @@ class SearchView(MultiView):
                        raise Http404
                
                search_instance = self.get_search_instance(slug, search_string)
                        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
                return response
\ No newline at end of file
index cce3ec6..36c2b5d 100644 (file)
@@ -69,6 +69,9 @@ class SearchRegistry(object):
        
        def __getitem__(self, key):
                return self._registry[key]
        
        def __getitem__(self, key):
                return self._registry[key]
+       
+       def __iter__(self):
+               return self._registry.__iter__()
 
 
 registry = SearchRegistry()
 
 
 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_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)
        
        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 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()
                })
                        '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):
                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
        
                        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 {}
        
        def get_result_extra_context(self, result):
                return {}
        
index 2938214..1b22388 100644 (file)
@@ -1,4 +1,4 @@
 <article>
 <article>
-       <h1><a href="?{{ url }}">{{ title|safe }}</a></h1>
+       <h1><a href="{{ url }}">{{ title|safe }}</a></h1>
        <p>{{ content|safe }}</p>
 </article>
\ No newline at end of file
        <p>{{ content|safe }}</p>
 </article>
\ No newline at end of file