diff --git a/hyde/ext/plugins/grouper.py b/hyde/ext/plugins/grouper.py index d2e0b04..0fff353 100644 --- a/hyde/ext/plugins/grouper.py +++ b/hyde/ext/plugins/grouper.py @@ -7,7 +7,7 @@ import re from hyde.model import Expando from hyde.plugin import Plugin from hyde.site import Node, Resource -from hyde.util import add_method +from hyde.util import add_method, pairwalk from collections import namedtuple from functools import partial @@ -148,6 +148,18 @@ class GrouperPlugin(Plugin): return if not hasattr(self.site, 'grouper'): self.site.grouper = {} + for name, grouping in self.site.config.grouper.__dict__.items(): grouping.name = name - self.site.grouper[name] = Group(grouping) \ No newline at end of file + prev_att = 'prev_in_%s' % name + next_att = 'next_in_%s' % name + setattr(Resource, prev_att, None) + setattr(Resource, next_att, None) + self.site.grouper[name] = Group(grouping) + walker = Group.walk_resources( + self.site.content, self.site.grouper[name]) + + for prev, next in pairwalk(walker): + print ("%s => %s" % (prev.name, next.name)) + setattr(next, prev_att, prev) + setattr(prev, next_att, next) \ No newline at end of file diff --git a/hyde/ext/plugins/linker.py b/hyde/ext/plugins/linker.py deleted file mode 100644 index e69de29..0000000 diff --git a/hyde/ext/plugins/sorter.py b/hyde/ext/plugins/sorter.py index da08271..05ad99b 100644 --- a/hyde/ext/plugins/sorter.py +++ b/hyde/ext/plugins/sorter.py @@ -7,17 +7,12 @@ import re from hyde.model import Expando from hyde.plugin import Plugin from hyde.site import Node, Resource -from hyde.util import add_method +from hyde.util import add_method, pairwalk +from itertools import ifilter from functools import partial -from itertools import ifilter, izip, tee, product from operator import attrgetter -def pairwalk(iterable): - a, b = tee(iterable) - next(b, None) - return izip(a, b) - def filter_method(item, settings=None): """ Returns true if all the filters in the diff --git a/hyde/tests/ext/test_grouper.py b/hyde/tests/ext/test_grouper.py index f155bd0..94e1426 100644 --- a/hyde/tests/ext/test_grouper.py +++ b/hyde/tests/ext/test_grouper.py @@ -129,6 +129,28 @@ class TestGrouperSingleLevel(object): plugin_resources = [resource.name for resource in self.s.content.walk_resources_grouped_by_plugins()] assert plugin_resources == self.plugins + def test_prev_next(self): + + resources = [] + for page in self.all: + resources.append(self.s.content.resource_from_relative_path('blog/' + page)) + + index = 0 + for res in resources: + if index < 4: + assert res.next_in_section.name == self.all[index + 1] + else: + assert not res.next_in_section + index += 1 + + index = 0 + for res in resources: + if index: + assert res.prev_in_section.name == self.all[index - 1] + else: + assert not res.prev_in_section + index += 1 + def test_nav_with_grouper(self): text =""" {% for group, resources in site.content.walk_section_groups() %} diff --git a/hyde/util.py b/hyde/util.py index 5c7268e..71f0f9b 100644 --- a/hyde/util.py +++ b/hyde/util.py @@ -3,6 +3,7 @@ Module for python 2.6 compatibility. """ import logging import sys +from itertools import ifilter, izip, tee try: from logging import NullHandler @@ -94,4 +95,9 @@ def make_method(method_name, method_): def add_method(obj, method_name, method_, *args, **kwargs): from functools import partial m = make_method(method_name, partial(method_, *args, **kwargs)) - setattr(obj, method_name, m) \ No newline at end of file + setattr(obj, method_name, m) + +def pairwalk(iterable): + a, b = tee(iterable) + next(b, None) + return izip(a, b) \ No newline at end of file