Navigation Menu

Skip to content

Commit

Permalink
[djangoproject.com] Fixed #8723: added search, via a Google coop sear…
Browse files Browse the repository at this point in the history
…ch. Thanks to frasern for figuring this out and providing detailed instructions.

git-svn-id: http://code.djangoproject.com/svn/djangoproject.com@8844 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jacob committed Sep 2, 2008
1 parent 92bad69 commit 6ee18a6
Show file tree
Hide file tree
Showing 9 changed files with 159 additions and 12 deletions.
13 changes: 13 additions & 0 deletions djangodocs/forms.py
@@ -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')

3 changes: 2 additions & 1 deletion djangodocs/settings.py
@@ -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'

Expand Down
40 changes: 37 additions & 3 deletions djangodocs/templates/docs/doc.html
Expand Up @@ -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 %}

Expand Down Expand Up @@ -39,6 +65,12 @@ <h2>Contents</h2>
{% endblock %}
{% endblock %}

{% block search %}
<h2>Search</h2>
{% load docs %}
{% search_form %}
{% endblock %}

{% block browse-wrapper %}
<h2>Browse</h2>
<ul>
Expand Down Expand Up @@ -73,6 +105,8 @@ <h2>You are here:</h2>
</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 %}
46 changes: 46 additions & 0 deletions djangodocs/templates/docs/search.html
@@ -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 %}
12 changes: 12 additions & 0 deletions djangodocs/templates/docs/search_form.html
@@ -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>
Empty file.
16 changes: 16 additions & 0 deletions djangodocs/templatetags/docs.py
@@ -0,0 +1,16 @@
from django.template import Library

from djangodocs.forms import SearchForm


register = Library()

@register.inclusion_tag('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'],
}
8 changes: 6 additions & 2 deletions djangodocs/urls.py
Expand Up @@ -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>.*)$',
Expand All @@ -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,
),
)
33 changes: 27 additions & 6 deletions djangodocs/views.py
Expand Up @@ -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):
Expand All @@ -26,7 +27,7 @@ def language(request, lang):
)

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)

Expand All @@ -44,12 +45,13 @@ def document(request, lang, version, url):
'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()
Expand All @@ -65,4 +67,23 @@ def source(request, lang, version, path):
request,
document_root = Path(settings.DOCS_PICKLE_ROOT).child('_sources'),
path = path,
)
)

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}),
}))

0 comments on commit 6ee18a6

Please sign in to comment.