From: Harris Lapiroff Date: Wed, 2 Mar 2011 19:59:25 +0000 (-0500) Subject: Merge remote branch 'melinath/master' X-Git-Tag: philo-0.9~17^2~4^2 X-Git-Url: http://git.ithinksw.org/philo.git/commitdiff_plain/b8668727caf6da1e8425fd32334a4ec5919ce4a2?hp=-c Merge remote branch 'melinath/master' --- b8668727caf6da1e8425fd32334a4ec5919ce4a2 diff --combined contrib/shipherd/templatetags/shipherd.py index 317fffb,c416e4e..83e98a2 --- a/contrib/shipherd/templatetags/shipherd.py +++ b/contrib/shipherd/templatetags/shipherd.py @@@ -19,22 -19,9 +19,22 @@@ class RecurseNavigationNode(RecurseTree def _render_node(self, context, item, request): bits = [] context.push() - for child in item.get_children(): + + # loosely based on django.template.defaulttags.ForNode.render + children = item.get_children() + parentloop = context['navloop'] + loop_dict = context['navloop'] = {'parentloop':parentloop} + len_items = len(children) + for i, child in enumerate(children): context['item'] = child + loop_dict['counter0'] = i + loop_dict['counter'] = i + 1 + loop_dict['revcounter'] = len_items - i + loop_dict['revcounter0'] = len_items - i - 1 + loop_dict['first'] = (i == 0) + loop_dict['last'] = (i == len_items - 1) bits.append(self._render_node(context, child, request)) + context['navloop'] = context['navloop']['parentloop'] context['item'] = item context['children'] = mark_safe(u''.join(bits)) context['active'] = item.is_active(request) @@@ -52,25 -39,11 +52,25 @@@ instance = self.instance_var.resolve(context) try: - navigation = instance.navigation[self.key] + items = instance.navigation[self.key] except: return settings.TEMPLATE_STRING_IF_INVALID - bits = [self._render_node(context, item, request) for item in navigation] + bits = [] + + # loosely based on django.template.defaulttags.ForNode.render + # This is a repetition of the stuff that happens above. We should eliminate that somehow. + loop_dict = context['navloop'] = {'parentloop':{}} + len_items = len(items) + for i, item in enumerate(items): + loop_dict['counter0'] = i + loop_dict['counter'] = i + 1 + loop_dict['revcounter'] = len_items - i + loop_dict['revcounter0'] = len_items - i - 1 + loop_dict['first'] = (i == 0) + loop_dict['last'] = (i == len_items - 1) + bits.append(self._render_node(context, item, request)) + return ''.join(bits) @@@ -78,18 -51,17 +78,19 @@@ def recursenavigation(parser, token): """ Based on django-mptt's recursetree templatetag. In addition to {{ item }} and {{ children }}, - sets {{ active }} and {{ active_descendants }} in the context. + sets {{ active }}, {{ active_descendants }}, {{ navloop.counter }}, {{ navloop.counter0 }}, + {{ navloop.revcounter }}, {{ navloop.revcounter0 }}, {{ navloop.first }}, {{ navloop.last }}, + and {{ navloop.parentloop }} in the context. - Note that the tag takes one variable, which is a Node instance. + Note that the tag takes two variables: a Node instance and the key of the navigation to + be recursed. Usage: