forked from mozilla/kitsune
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'bug-549014' into development
- Loading branch information
Showing
7 changed files
with
200 additions
and
80 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
{% extends "common/base.html" %} | ||
{% set title = _("Search") %} | ||
{% set styles = ('css/search.css',) %} | ||
|
||
{% block content %} | ||
<div id="basic-search" class="search-refine"> | ||
<form role="search" method="get" action="search"> | ||
<input type="hidden" value="{% if w %}{{ w }}{% else %}3{% endif %}" name="w"> | ||
<input type="hidden" value="{{ locale }}" name="locale"> | ||
<input type="text" class="search-query search-refine-query" value="{{ q }}" name="q"> | ||
<input type="submit" class="search-refine-submit btn-large" value="{% print _("Search") %}"> | ||
</form> | ||
</div> | ||
|
||
<div class="search-count"> | ||
{% print _("About {num_results} search results for {q} in {lang_name}")|f(num_results=num_results, q=q, lang_name='English') %} | ||
</div> | ||
|
||
<div class="search-results"> | ||
|
||
{{ pages|paginator }} | ||
|
||
|
||
{% for doc in results %} | ||
<div class="oneresult"> | ||
<a class="searchresultlink" href="{{ doc.get_url() }}">{{ doc.name }}</a> | ||
<p> | ||
<a class="blacklink" href="{{ doc.get_url() }}"> | ||
{{ doc.search_summary }} | ||
... | ||
</a> | ||
</p> | ||
</div> | ||
<div class="oneresulthr"></div> | ||
{% endfor %} | ||
|
||
|
||
{{ pages|paginator }} | ||
|
||
</div> | ||
|
||
<p>Can't find what you're looking for? <a href="/kb/Ask+a+question">Ask a support question instead!</a></p> | ||
{% endblock %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
import cgi | ||
import urllib | ||
import urlparse | ||
|
||
import jinja2 | ||
|
||
from jingo import register, env | ||
|
||
|
||
@register.filter | ||
def paginator(pager): | ||
return Paginator(pager).render() | ||
|
||
|
||
@register.filter | ||
def urlparams(url_, hash=None, **query): | ||
""" | ||
Add a fragment and/or query paramaters to a URL. | ||
New query params will be appended to exising parameters, except duplicate | ||
names, which will be replaced. | ||
""" | ||
url = urlparse.urlparse(url_) | ||
fragment = hash if hash is not None else url.fragment | ||
|
||
query_dict = dict(cgi.parse_qsl(url.query)) if url.query else {} | ||
query_dict.update((k, v) for k, v in query.items() if v is not None) | ||
|
||
query_string = urllib.urlencode(query_dict.items()) | ||
new = urlparse.ParseResult(url.scheme, url.netloc, url.path, url.params, | ||
query_string, fragment) | ||
return jinja2.Markup(new.geturl()) | ||
|
||
|
||
class Paginator(object): | ||
|
||
def __init__(self, pager): | ||
self.pager = pager | ||
|
||
self.max = 10 | ||
self.span = (self.max - 1) / 2 | ||
|
||
self.page = pager.number | ||
self.num_pages = pager.paginator.num_pages | ||
self.count = pager.paginator.count | ||
|
||
pager.page_range = self.range() | ||
pager.dotted_upper = self.count not in pager.page_range | ||
pager.dotted_lower = 1 not in pager.page_range | ||
|
||
def range(self): | ||
"""Return a list of page numbers to show in the paginator.""" | ||
page, total, span = self.page, self.num_pages, self.span | ||
if total < self.max: | ||
lower, upper = 0, total | ||
elif page < span + 1: | ||
lower, upper = 0, span * 2 | ||
elif page > total - span: | ||
lower, upper = total - span * 2, total | ||
else: | ||
lower, upper = page - span, page + span - 1 | ||
return range(max(lower + 1, 1), min(total, upper) + 1) | ||
|
||
def render(self): | ||
c = {'pager': self.pager, 'num_pages': self.num_pages, | ||
'count': self.count} | ||
t = env.get_template('layout/paginator.html').render(**c) | ||
return jinja2.Markup(t) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import functools | ||
import urllib | ||
|
||
from django.core import paginator | ||
|
||
|
||
def paginate(request, queryset, per_page=20): | ||
"""Get a Paginator, abstracting some common paging actions.""" | ||
p = paginator.Paginator(queryset, per_page) | ||
|
||
# Get the page from the request, make sure it's an int. | ||
try: | ||
page = int(request.GET.get('page', 1)) | ||
except ValueError: | ||
page = 1 | ||
|
||
# Get a page of results, or the first page if there's a problem. | ||
try: | ||
paginated = p.page(page) | ||
except (paginator.EmptyPage, paginator.InvalidPage): | ||
paginated = p.page(1) | ||
|
||
base = request.build_absolute_uri(request.path) | ||
paginated.url = u'%s?%s' % (base, urllib.urlencode(request.GET.items())) | ||
return paginated |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
{% if num_pages > 1 %} | ||
<ol class="pagination"> | ||
{% if pager.has_previous() %} | ||
<li rel="prev"> | ||
<a href="{{ pager.url|urlparams(page=pager.previous_page_number()) }}"> | ||
{{ _('‹ Previous') }} | ||
</a> | ||
</li> | ||
{% endif %} | ||
{% if pager.dotted_lower %} | ||
<li><a href="{{ pager.url|urlparams(page=1) }}">{{ 1 }}</a></li> | ||
<li class="skip">…</li> | ||
{% endif %} | ||
{% for x in pager.page_range %} | ||
<li {{ x|class_selected(pager.number) }}> | ||
<a href="{{ pager.url|urlparams(page=x) }}">{{ x }}</a> | ||
</li> | ||
{% endfor %} | ||
{% if pager.dotted_upper %} | ||
<li class="skip">…</li> | ||
<li><a href="{{ pager.url|urlparams(page=num_pages) }}">{{ num_pages }}</a></li> | ||
{% endif %} | ||
{% if pager.has_next() %} | ||
<li rel="next"> | ||
<a href="{{ pager.url|urlparams(page=pager.next_page_number()) }}"> | ||
{{ _('Next ›') }} | ||
</a> | ||
</li> | ||
{% endif %} | ||
</ol> | ||
<div class="num-results"> | ||
{% trans begin=pager.start_index(), end=pager.end_index() %} | ||
Results <strong>{{ begin }}</strong>–<strong>{{ end }}</strong> | ||
of {{ count }} | ||
{% endtrans %} | ||
</div> | ||
{% endif %} | ||
|
||
|
This file was deleted.
Oops, something went wrong.