Skip to content

Commit 4cbb851

Browse files
committedDec 5, 2016
Added basic page range navigation.
1 parent eb1ebfb commit 4cbb851

File tree

4 files changed

+62
-14
lines changed

4 files changed

+62
-14
lines changed
 

‎nikola/conf.py.in

+5
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,11 @@ IMAGE_FOLDERS = {'images': 'images'}
700700
# for the full URL with the page number of the main page to the normal (shorter) main
701701
# page URL.
702702
# INDEXES_PRETTY_PAGE_URL = False
703+
#
704+
# If the following is true, a page range navigation will be inserted to indices.
705+
# Please note that this will undo the effect of INDEXES_STATIC, as all index pages
706+
# must be recreated whenever the number of pages changes.
707+
# SHOW_INDEX_PAGE_NAVIGATION = False
703708

704709
# Color scheme to be used for code blocks. If your theme provides
705710
# "assets/css/code.css" this is ignored.

‎nikola/data/themes/base-jinja/templates/index.tmpl

+19
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,30 @@
1010
{% endif %}
1111
{% endblock %}
1212

13+
{% block page_navigation %}
14+
<div class="page-navigation">
15+
{% for i, link in enumerate(page_links) %}
16+
{% if abs(i - current_page) <= 3 or i == 0 or i == page_links|length - 1 %}
17+
{% if i == current_page %}
18+
<span class="current-page">{{ i+1 }}</span>
19+
{% else %}
20+
<a href="{{ page_links[i] }}">{{ i+1 }}</a>
21+
{% endif %}
22+
{% elif i == current_page - 4 or i == current_page + 4 %}
23+
<span class="ellipsis">&#x22EF;</span>
24+
{% endif %}
25+
{% endfor %}
26+
</div>
27+
{% endblock %}
28+
1329
{% block content %}
1430
{% block content_header %}{% endblock %}
1531
{% if 'main_index' in pagekind %}
1632
{{ front_index_header }}
1733
{% endif %}
34+
{% if page_links %}
35+
{{ page_navigation() }}
36+
{% endif %}
1837
<div class="postindex">
1938
{% for post in posts %}
2039
<article class="h-entry post-{{ post.meta('type') }}">

‎nikola/data/themes/base/templates/index.tmpl

+19
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,30 @@
1010
% endif
1111
</%block>
1212

13+
<%block name="page_navigation">
14+
<div class="page-navigation">
15+
% for i, link in enumerate(page_links):
16+
% if abs(i - current_page) <= 3 or i == 0 or i == len(page_links) - 1:
17+
% if i == current_page:
18+
<span class="current-page">${i+1}</span>
19+
% else:
20+
<a href="${page_links[i]}">${i+1}</a>
21+
% endif
22+
% elif i == current_page - 4 or i == current_page + 4:
23+
<span class="ellipsis">&#x22EF;</span>
24+
% endif
25+
% endfor
26+
</div>
27+
</%block>
28+
1329
<%block name="content">
1430
<%block name="content_header"></%block>
1531
% if 'main_index' in pagekind:
1632
${front_index_header}
1733
% endif
34+
% if page_links:
35+
${page_navigation()}
36+
% endif
1837
<div class="postindex">
1938
% for post in posts:
2039
<article class="h-entry post-${post.meta('type')}">

‎nikola/nikola.py

+19-14
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,7 @@ def __init__(self, **config):
554554
'SASS_OPTIONS': [],
555555
'SEARCH_FORM': '',
556556
'SHOW_BLOG_TITLE': True,
557+
'SHOW_INDEX_PAGE_NAVIGATION': False,
557558
'SHOW_SOURCELINK': True,
558559
'SHOW_UNTRANSLATED_POSTS': True,
559560
'SLUG_AUTHOR_PATH': True,
@@ -2360,6 +2361,7 @@ def generic_index_renderer(self, lang, posts, indexes_title, template_name, cont
23602361
kw['generate_atom'] = self.config["GENERATE_ATOM"]
23612362
kw['feed_links_append_query'] = self.config["FEED_LINKS_APPEND_QUERY"]
23622363
kw['currentfeed'] = None
2364+
kw['show_index_page_navigation'] = self.config['SHOW_INDEX_PAGE_NAVIGATION']
23632365

23642366
# Split in smaller lists
23652367
lists = []
@@ -2374,11 +2376,16 @@ def generic_index_renderer(self, lang, posts, indexes_title, template_name, cont
23742376
lists.append(posts[:kw["index_display_post_count"]])
23752377
posts = posts[kw["index_display_post_count"]:]
23762378
num_pages = len(lists)
2379+
displayed_page_numbers = [utils.get_displayed_page_number(i, num_pages, self) for i in range(max(num_pages, 1))]
2380+
page_links = [page_link(i, displayed_page_numbers[i], num_pages, False) for i in range(max(num_pages, 1))]
2381+
if kw['show_index_page_navigation']:
2382+
map = {page_number - 1: link for page_number, link in zip(displayed_page_numbers, page_links)}
2383+
page_links_context = [map[i] for i in range(num_pages)]
23772384
for i, post_list in enumerate(lists):
23782385
context = context_source.copy()
23792386
if 'pagekind' not in context:
23802387
context['pagekind'] = ['index']
2381-
ipages_i = utils.get_displayed_page_number(i, num_pages, self)
2388+
ipages_i = displayed_page_numbers[i]
23822389
if kw["indexes_pages"]:
23832390
indexes_pages = kw["indexes_pages"] % ipages_i
23842391
else:
@@ -2414,20 +2421,18 @@ def generic_index_renderer(self, lang, posts, indexes_title, template_name, cont
24142421
if i < num_pages - 1:
24152422
nextlink = i + 1
24162423
if prevlink is not None:
2417-
context["prevlink"] = page_link(prevlink,
2418-
utils.get_displayed_page_number(prevlink, num_pages, self),
2419-
num_pages, False)
2420-
context["prevfeedlink"] = page_link(prevlink,
2421-
utils.get_displayed_page_number(prevlink, num_pages, self),
2424+
context["prevlink"] = page_links[prevlink]
2425+
context["prevfeedlink"] = page_link(prevlink, displayed_page_numbers[prevlink],
24222426
num_pages, False, extension=".atom")
24232427
if nextlink is not None:
2424-
context["nextlink"] = page_link(nextlink,
2425-
utils.get_displayed_page_number(nextlink, num_pages, self),
2426-
num_pages, False)
2427-
context["nextfeedlink"] = page_link(nextlink,
2428-
utils.get_displayed_page_number(nextlink, num_pages, self),
2428+
context["nextlink"] = page_links[nextlink]
2429+
context["nextfeedlink"] = page_link(nextlink, displayed_page_numbers[nextlink],
24292430
num_pages, False, extension=".atom")
2430-
context["permalink"] = page_link(i, ipages_i, num_pages, False)
2431+
context['show_index_page_navigation'] = kw['show_index_page_navigation']
2432+
if kw['show_index_page_navigation']:
2433+
context['page_links'] = page_links_context
2434+
context['current_page'] = ipages_i - 1
2435+
context["permalink"] = page_links[i]
24312436
output_name = os.path.join(kw['output_folder'], page_path(i, ipages_i, num_pages, False))
24322437
task = self.generic_post_list_renderer(
24332438
lang,
@@ -2471,8 +2476,8 @@ def generic_index_renderer(self, lang, posts, indexes_title, template_name, cont
24712476

24722477
if kw["indexes_pages_main"] and kw['indexes_prety_page_url'](lang):
24732478
# create redirection
2474-
output_name = os.path.join(kw['output_folder'], page_path(0, utils.get_displayed_page_number(0, num_pages, self), num_pages, True))
2475-
link = page_link(0, utils.get_displayed_page_number(0, num_pages, self), num_pages, False)
2479+
output_name = os.path.join(kw['output_folder'], page_path(0, displayed_page_numbers[0], num_pages, True))
2480+
link = page_links[0]
24762481
yield utils.apply_filters({
24772482
'basename': basename,
24782483
'name': output_name,

0 commit comments

Comments
 (0)
Please sign in to comment.