Author: jacob
Date: 2008-09-01 23:09:40 -0500 (Mon, 01 Sep 2008)
New Revision: 8844
Added:
djangoproject.com/djangodocs/forms.py
djangoproject.com/djangodocs/templates/docs/search.html
djangoproject.com/djangodocs/templates/docs/search_form.html
djangoproject.com/djangodocs/templatetags/
djangoproject.com/djangodocs/templatetags/__init__.py
djangoproject.com/djangodocs/templatetags/docs.py
Modified:
djangoproject.com/djangodocs/settings.py
djangoproject.com/djangodocs/templates/docs/doc.html
djangoproject.com/djangodocs/urls.py
djangoproject.com/djangodocs/views.py
Log:
[djangoproject.com] Fixed #8723: added search, via a Google coop search. Thanks
to frasern for figuring this out and providing detailed instructions.
Added: djangoproject.com/djangodocs/forms.py
===================================================================
--- djangoproject.com/djangodocs/forms.py (rev 0)
+++ djangoproject.com/djangodocs/forms.py 2008-09-02 04:09:40 UTC (rev
8844)
@@ -0,0 +1,13 @@
+from django import newforms as forms
+
+AS_Q_CHOICES = (
+ ('more:dev_docs', 'Latest'),
+ ('more:1.0_docs', '1.0'),
+ ('more:0.96_docs', '0.96'),
+ ('more:all_docs', 'All'),
+)
+
+class SearchForm(forms.Form):
+ q = forms.CharField(widget=forms.TextInput({'class': 'query'}))
+ as_q = forms.ChoiceField(choices=AS_Q_CHOICES, widget=forms.RadioSelect,
initial='more:dev_docs')
+
\ No newline at end of file
Modified: djangoproject.com/djangodocs/settings.py
===================================================================
--- djangoproject.com/djangodocs/settings.py 2008-09-02 03:40:42 UTC (rev
8843)
+++ djangoproject.com/djangodocs/settings.py 2008-09-02 04:09:40 UTC (rev
8844)
@@ -1,8 +1,9 @@
from django_website.settings import *
PREPEND_WWW = False
-INSTALLED_APPS = []
+INSTALLED_APPS = ['djangodocs']
TEMPLATE_DIRS = [os.path.join(os.path.dirname(__file__), "templates")] +
TEMPLATE_DIRS
+TEMPLATE_CONTEXT_PROCESSORS = ['django.core.context_processors.request']
ROOT_URLCONF = 'djangodocs.urls'
CACHE_MIDDLEWARE_KEY_PREFIX = 'djangodocs'
Modified: djangoproject.com/djangodocs/templates/docs/doc.html
===================================================================
--- djangoproject.com/djangodocs/templates/docs/doc.html 2008-09-02
03:40:42 UTC (rev 8843)
+++ djangoproject.com/djangodocs/templates/docs/doc.html 2008-09-02
04:09:40 UTC (rev 8844)
@@ -4,10 +4,36 @@
{% block extrahead %}
{{ block.super }}
+ <style type="text/css" media="screen">
+ #docs-search {
+ color: #000;
+ float: right;
+ }
+ #docs-search form {
+ font-size: 92%;
+ margin: 0;
+ padding: 1em 1em 0;
+ white-space: nowrap;
+ }
+ form.search ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ }
+ form.search li {
+ display: inline;
+ padding-right: 1em;
+ }
+ form.search .query {
+ width: 18em;
+ }
+ </style>
<link rel="stylesheet"
href="http://media.djangoproject.com/css/pygments.css" type="text/css" />
{% endblock %}
-{% block billboard %}<h2><a href="{{ home }}">Django documentation</a></h2>{%
endblock %}
+{% block billboard %}
+ <h2><a href="{{ home }}">Django documentation</a></h2>
+{% endblock %}
{% block content %}
@@ -39,6 +65,12 @@
{% endblock %}
{% endblock %}
+ {% block search %}
+ <h2>Search</h2>
+ {% load docs %}
+ {% search_form %}
+ {% endblock %}
+
{% block browse-wrapper %}
<h2>Browse</h2>
<ul>
@@ -73,6 +105,8 @@
</ul>
{% endblock %}
- <h3>Last update:</h3>
- <div>{{ update_date|date:"F j, Y, P" }} (<a
href="http://www.timeanddate.com/worldclock/city.html?n=64">CDT</a>)</div>
+ {% block last-update-wrapper %}
+ <h3>Last update:</h3>
+ <div>{{ update_date|date:"F j, Y, P" }} (<a
href="http://www.timeanddate.com/worldclock/city.html?n=64">CDT</a>)</div>
+ {% endblock %}
{% endblock %}
Added: djangoproject.com/djangodocs/templates/docs/search.html
===================================================================
--- djangoproject.com/djangodocs/templates/docs/search.html
(rev 0)
+++ djangoproject.com/djangodocs/templates/docs/search.html 2008-09-02
04:09:40 UTC (rev 8844)
@@ -0,0 +1,46 @@
+{% extends "docs/doc.html" %}
+
+{% load docs %}
+
+{% block title %}Search | Django Docuemtation{% endblock %}
+
+{% block extrahead %}
+ {{ block.super }}
+ <style type="text/css" media="screen">
+ #cse-search-results iframe {
+ width: 100%;
+ }
+ </style>
+{% endblock %}
+
+{% block toc-wrapper %}{% endblock %}
+
+{% block breadcrumbs-wrapper %}{% endblock %}
+
+{% block last-update-wrapper %}{% endblock %}
+
+{% block body %}
+ {% if query %}
+ <h1>Search Results</h1>
+ <div id="cse-search-results">
+ <div id="cse-search-results-js-required">
+ The Django Documentation search uses a Google Custom Search, which
+ requires Javascript. If your results don't appear here shortly, please
+ <a href="http://www.google.com/cse?{{ query_string|escape }}">view the
results on Google's site</a>.
+ </div>
+ </div>
+ <script type="text/javascript">
+ var googleSearchMessage =
document.getElementById("cse-search-results-js-required");
+ googleSearchMessage.parentNode.removeChild(googleSearchMessage);
+
+ var googleSearchIframeName = "cse-search-results";
+ var googleSearchFormName = "cse-search-box";
+ var googleSearchDomain = "www.google.com";
+ var googleSearchPath = "/cse";
+ </script>
+ <script type="text/javascript"
src="http://www.google.com/afsonline/show_afs_search.js"></script>
+ {% else %}
+ <h1>Search</h1>
+ {% search_form "search_page" %}
+ {% endif %}
+{% endblock %}
Added: djangoproject.com/djangodocs/templates/docs/search_form.html
===================================================================
--- djangoproject.com/djangodocs/templates/docs/search_form.html
(rev 0)
+++ djangoproject.com/djangodocs/templates/docs/search_form.html
2008-09-02 04:09:40 UTC (rev 8844)
@@ -0,0 +1,12 @@
+<form action="{{ action|escape }}" id="{{ search_form_id|escape }}"
class="search">
+ <div>
+ <input type="hidden" name="cx" value="009763561546736975936:e88ek0eurf4" />
+ <input type="hidden" name="cof" value="FORID:11" />
+ <input type="hidden" name="ie" value="UTF-8" />
+ <input type="hidden" name="hl" value="{{ lang|escape }}" />
+ {{ form.q }}
+ <input type="submit" name="sa" class="submit" value="Search" />
+ {{ form.as_q }}
+ </div>
+</form>
+<script type="text/javascript"
src="http://www.google.com/coop/cse/brand?form={{ search_form_id|escape
}}&lang={{ lang|escape }}"></script>
\ No newline at end of file
Added: djangoproject.com/djangodocs/templatetags/__init__.py
===================================================================
Added: djangoproject.com/djangodocs/templatetags/docs.py
===================================================================
--- djangoproject.com/djangodocs/templatetags/docs.py
(rev 0)
+++ djangoproject.com/djangodocs/templatetags/docs.py 2008-09-02 04:09:40 UTC
(rev 8844)
@@ -0,0 +1,16 @@
+from django.template import Library
+
+from djangodocs.forms import SearchForm
+
+
+register = Library()
+
[EMAIL PROTECTED]('docs/search_form.html', takes_context=True)
+def search_form(context, search_form_id='search'):
+ request = context['request']
+ auto_id = 'id_%s_%%s' % search_form_id
+ return {
+ 'form': SearchForm(initial=request.GET, auto_id=auto_id),
+ 'search_form_id': search_form_id,
+ 'action': context['search'],
+ }
\ No newline at end of file
Modified: djangoproject.com/djangodocs/urls.py
===================================================================
--- djangoproject.com/djangodocs/urls.py 2008-09-02 03:40:42 UTC (rev
8843)
+++ djangoproject.com/djangodocs/urls.py 2008-09-02 04:09:40 UTC (rev
8844)
@@ -11,8 +11,8 @@
djangodocs.views.language,
),
url(
- r'^(?P<lang>[a-z-]+)/(?P<version>[\w.-]+)/(?P<url>[\w./-]*)$',
- djangodocs.views.document,
+ r'^(?P<lang>[a-z-]+)/(?P<version>[\w.-]+)/search/$',
+ djangodocs.views.search,
),
url(
r'^(?P<lang>[a-z-]+)/(?P<version>[\w.-]+)/_images/(?P<path>.*)$',
@@ -22,4 +22,8 @@
r'^(?P<lang>[a-z-]+)/(?P<version>[\w.-]+)/_source/(?P<path>.*)$',
djangodocs.views.source,
),
+ url(
+ r'^(?P<lang>[a-z-]+)/(?P<version>[\w.-]+)/(?P<url>[\w./-]*)$',
+ djangodocs.views.document,
+ ),
)
Modified: djangoproject.com/djangodocs/views.py
===================================================================
--- djangoproject.com/djangodocs/views.py 2008-09-02 03:40:42 UTC (rev
8843)
+++ djangoproject.com/djangodocs/views.py 2008-09-02 04:09:40 UTC (rev
8844)
@@ -5,6 +5,7 @@
from django.core import urlresolvers
from django.http import HttpResponseRedirect, Http404
from django.shortcuts import render_to_response
+from django.template import RequestContext
from unipath import FSPath as Path
def index(request):
@@ -26,7 +27,7 @@
)
def document(request, lang, version, url):
- if lang != 'en' or version != 'dev' or url == "search/": raise Http404()
+ if lang != 'en' or version != 'dev': raise Http404()
docroot = Path(settings.DOCS_PICKLE_ROOT)
@@ -44,12 +45,13 @@
'docs/%s.html' % '-'.join([b for b in bits if b]),
'docs/doc.html'
]
- return render_to_response(template_names, {
- 'doc': pickle.load(open(doc)),
- 'env': pickle.load(open(docroot.child('globalcontext.pickle'))),
+ return render_to_response(template_names, RequestContext(request, {
+ 'doc': pickle.load(open(doc, 'rb')),
+ 'env': pickle.load(open(docroot.child('globalcontext.pickle'), 'rb')),
'update_date':
datetime.datetime.fromtimestamp(docroot.child('last_build').mtime()),
'home': urlresolvers.reverse(document, kwargs={'lang':lang,
'version':version, 'url':''}),
- })
+ 'search': urlresolvers.reverse(search, kwargs={'lang':lang,
'version':version}),
+ }))
def images(request, lang, version, path):
if lang != 'en' or version != 'dev': raise Http404()
@@ -65,4 +67,23 @@
request,
document_root = Path(settings.DOCS_PICKLE_ROOT).child('_sources'),
path = path,
- )
\ No newline at end of file
+ )
+
+def search(request, lang, version):
+ if lang != 'en' or version != 'dev': raise Http404()
+
+ docroot = Path(settings.DOCS_PICKLE_ROOT)
+
+ # Remove the 'cof' GET variable from the query string so that the page
+ # linked to by the Javascript fallback doesn't think its inside an iframe.
+ mutable_get = request.GET.copy()
+ if 'cof' in mutable_get:
+ del mutable_get['cof']
+
+ return render_to_response('docs/search.html', RequestContext(request, {
+ 'query': request.GET.get('q'),
+ 'query_string': mutable_get.urlencode(),
+ 'env': pickle.load(open(docroot.child('globalcontext.pickle'), 'rb')),
+ 'home': urlresolvers.reverse(document, kwargs={'lang':lang,
'version':version, 'url':''}),
+ 'search': urlresolvers.reverse(search, kwargs={'lang':lang,
'version':version}),
+ }))
\ No newline at end of file
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---