Browse Source

Added prev / next for groups

main
Lakshmi Vyasarajan 14 years ago
parent
commit
742339ddab
5 changed files with 45 additions and 10 deletions
  1. +14
    -2
      hyde/ext/plugins/grouper.py
  2. +0
    -0
      hyde/ext/plugins/linker.py
  3. +2
    -7
      hyde/ext/plugins/sorter.py
  4. +22
    -0
      hyde/tests/ext/test_grouper.py
  5. +7
    -1
      hyde/util.py

+ 14
- 2
hyde/ext/plugins/grouper.py View File

@@ -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)
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)

+ 0
- 0
hyde/ext/plugins/linker.py View File


+ 2
- 7
hyde/ext/plugins/sorter.py View File

@@ -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


+ 22
- 0
hyde/tests/ext/test_grouper.py View File

@@ -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() %}


+ 7
- 1
hyde/util.py View File

@@ -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)
setattr(obj, method_name, m)
def pairwalk(iterable):
a, b = tee(iterable)
next(b, None)
return izip(a, b)

Loading…
Cancel
Save