@@ -1,3 +1,8 @@ | |||||
Version 0.8.7a5 | |||||
============================================================ | |||||
* Make sorter's prev/next links circular. (Issue #208) | |||||
Version 0.8.7a4 | Version 0.8.7a4 | ||||
============================================================ | ============================================================ | ||||
@@ -1,4 +1,4 @@ | |||||
Version 0.8.7a4 | |||||
Version 0.8.7a5 | |||||
A brand new **hyde** | A brand new **hyde** | ||||
==================== | ==================== | ||||
@@ -529,10 +529,23 @@ class SorterPlugin(Plugin): | |||||
walker = getattr(self.site.content, | walker = getattr(self.site.content, | ||||
sort_method_name, | sort_method_name, | ||||
self.site.content.walk_resources) | self.site.content.walk_resources) | ||||
first, last = None, None | |||||
for prev, next in pairwalk(walker()): | for prev, next in pairwalk(walker()): | ||||
if not first: | |||||
first = prev | |||||
last = next | |||||
setattr(prev, next_att, next) | setattr(prev, next_att, next) | ||||
setattr(next, prev_att, prev) | setattr(next, prev_att, prev) | ||||
try: | |||||
circular = settings.circular | |||||
except AttributeError: | |||||
circular = False | |||||
if circular and first: | |||||
setattr(first, prev_att, last) | |||||
setattr(last, next_att, first) | |||||
# | # | ||||
# Grouping | # Grouping | ||||
@@ -198,6 +198,43 @@ class TestSorter(object): | |||||
assert hasattr(p_mc, 'next_by_kind2') | assert hasattr(p_mc, 'next_by_kind2') | ||||
assert not p_mc.next_by_kind2 | assert not p_mc.next_by_kind2 | ||||
def test_prev_next_looped(self): | |||||
s = Site(TEST_SITE) | |||||
cfg = """ | |||||
plugins: | |||||
- hyde.ext.meta.SorterPlugin | |||||
sorter: | |||||
kind2: | |||||
circular: true | |||||
filters: | |||||
source_file.kind: html | |||||
attr: | |||||
- name | |||||
""" | |||||
s.config = Config(TEST_SITE, config_dict=yaml.load(cfg)) | |||||
s.load() | |||||
SorterPlugin(s).begin_site() | |||||
p_404 = s.content.resource_from_relative_path('404.html') | |||||
p_about = s.content.resource_from_relative_path('about.html') | |||||
p_mc = s.content.resource_from_relative_path( | |||||
'blog/2010/december/merry-christmas.html') | |||||
assert hasattr(p_404, 'prev_by_kind2') | |||||
assert p_404.prev_by_kind2 == p_mc | |||||
assert hasattr(p_404, 'next_by_kind2') | |||||
assert p_404.next_by_kind2 == p_about | |||||
assert hasattr(p_about, 'prev_by_kind2') | |||||
assert p_about.prev_by_kind2 == p_404 | |||||
assert hasattr(p_about, 'next_by_kind2') | |||||
assert p_about.next_by_kind2 == p_mc | |||||
assert hasattr(p_mc, 'prev_by_kind2') | |||||
assert p_mc.prev_by_kind2 == p_about | |||||
assert hasattr(p_mc, 'next_by_kind2') | |||||
assert p_mc.next_by_kind2 == p_404 | |||||
def test_prev_next_reversed(self): | def test_prev_next_reversed(self): | ||||
s = Site(TEST_SITE) | s = Site(TEST_SITE) | ||||
cfg = """ | cfg = """ | ||||
@@ -2,4 +2,4 @@ | |||||
""" | """ | ||||
Handles hyde version. | Handles hyde version. | ||||
""" | """ | ||||
__version__ = '0.8.7a4' | |||||
__version__ = '0.8.7a5' |