1
"""Breadcrumb module for Zinnia templatetags"""
3
from datetime import datetime
5
from django.core.urlresolvers import reverse
6
from django.utils.translation import ugettext as _
10
"""Part of the Breadcrumbs"""
11
def __init__(self, name, url=None):
16
def year_crumb(creation_date):
17
"""Crumb for a year"""
18
year = creation_date.strftime('%Y')
19
return Crumb(year, reverse('zinnia_entry_archive_year',
23
def month_crumb(creation_date):
24
"""Crumb for a month"""
25
year = creation_date.strftime('%Y')
26
month = creation_date.strftime('%m')
27
month_text = creation_date.strftime('%b').capitalize()
28
return Crumb(month_text, reverse('zinnia_entry_archive_month',
32
def day_crumb(creation_date):
34
year = creation_date.strftime('%Y')
35
month = creation_date.strftime('%m')
36
day = creation_date.strftime('%d')
37
return Crumb(day, reverse('zinnia_entry_archive_day',
38
args=[year, month, day]))
41
ZINNIA_ROOT_URL = lambda: reverse('zinnia_entry_archive_index')
43
MODEL_BREADCRUMBS = {'Tag': lambda x: [Crumb(_('Tags'),
44
reverse('zinnia_tag_list')),
46
'Author': lambda x: [Crumb(_('Authors'),
47
reverse('zinnia_author_list')),
49
'Category': lambda x: [Crumb(_('Categories'),
50
reverse('zinnia_category_list'))] + \
52
anc.get_absolute_url())
53
for anc in x.get_ancestors()] + \
55
'Entry': lambda x: [year_crumb(x.creation_date),
56
month_crumb(x.creation_date),
57
day_crumb(x.creation_date),
60
DATE_REGEXP = re.compile(
61
r'.*(?P<year>\d{4})/(?P<month>\d{2})?/(?P<day>\d{2})?.*')
64
def retrieve_breadcrumbs(path, model_instance, root_name=''):
65
"""Build a semi-hardcoded breadcrumbs
66
based of the model's url handled by Zinnia"""
70
breadcrumbs.append(Crumb(root_name, ZINNIA_ROOT_URL()))
72
if model_instance is not None:
73
key = model_instance.__class__.__name__
74
if key in MODEL_BREADCRUMBS:
75
breadcrumbs.extend(MODEL_BREADCRUMBS[key](model_instance))
78
date_match = DATE_REGEXP.match(path)
80
date_dict = date_match.groupdict()
82
int(date_dict['year']),
83
date_dict.get('month') is not None and \
84
int(date_dict.get('month')) or 1,
85
date_dict.get('day') is not None and \
86
int(date_dict.get('day')) or 1)
88
date_breadcrumbs = [year_crumb(path_date)]
89
if date_dict['month']:
90
date_breadcrumbs.append(month_crumb(path_date))
92
date_breadcrumbs.append(day_crumb(path_date))
93
breadcrumbs.extend(date_breadcrumbs)
97
url_components = [comp for comp in
98
path.replace(ZINNIA_ROOT_URL(), '').split('/') if comp]
99
if len(url_components):
100
breadcrumbs.append(Crumb(_(url_components[-1].capitalize())))