add "Docs" section in menu
[mygpo.git] / mygpo / web / templatetags / menu.py
blobaa5b6a451a3a05bf2df0754eea901b02afe1a132
1 from django import template
2 from django.utils.safestring import mark_safe
3 from django.utils.translation import ugettext
4 from django.utils.translation import ugettext_lazy as _
8 register = template.Library()
10 HIDDEN_URIS = (
11 '/login/',
12 '/register/',
13 '/podcast/',
14 '/device/',
15 '/user/subscriptions/',
16 '/publisher/podcast/',
17 '/share/me',
20 MENU_STRUCTURE = (
21 ('', (
22 ('/', _('Home')),
23 ('/login/', _('Login')),
24 ('/register/', _('Register')),
25 ('', _('Docs')),
26 ('/contribute/', _('Contribute')),
27 ('/developer/', _('Development')),
28 ('/privacy/', _('Privacy Policy')),
29 ('/online-help', _('Help')),
30 )),
31 (_('Discover'), (
32 ('/directory/', _('Directory')),
33 ('/podcast/', _('Podcast')),
34 ('/search/', _('Search')),
35 ('/missing/', _('Missing Podcast')),
36 ('/lists/', _('Podcast Lists')),
37 ('/user/subscriptions/', _('User subscriptions')),
38 ('/suggestions/', _('Suggestions')),
39 ('', _('Features')),
40 ('/directory/+flattr', _('Flattr')),
41 ('/directory/+license', _('License')),
42 ('', _('Toplists')),
43 ('/toplist/', _('Podcasts')),
44 ('/toplist/episodes', _('Episodes')),
45 )),
46 (_('Subscriptions'), (
47 ('/subscriptions/', _('Subscriptions')),
48 ('/favorites/', _('Favorite Episodes')),
49 ('/tags/', _('My Tags')),
50 ('/devices/', _('Devices')),
51 ('/device/', _('Device')),
52 ('/history/', _('History')),
53 )),
54 (_('Community'), (
55 ('/share/', _('Overview')),
56 ('/share/favorites', _('Favorite Episodes')),
57 ('/share/me', _('My Userpage')),
58 ('/user/subscriptions/', _('Subscriptions')),
59 ('/share/lists/', _('Podcast Lists')),
60 )),
61 (_('Settings'), (
62 ('/account/', _('Account')),
63 ('/account/privacy', _('Privacy')),
64 )),
65 (_('Publish'), (
66 ('/publisher/', _('Home')),
67 ('/publisher/advertise', _('Advertise')),
68 ('/publisher/link/', _('Link to gpodder.net')),
69 ('/publisher/podcast/', _('Podcast')),
70 )),
73 @register.filter
74 def main_menu(selected):
75 found_section = False
76 links = []
77 for label, items in MENU_STRUCTURE[1:]:
78 uris = [uri for uri, caption in items]
79 if selected in uris:
80 found_section = True
81 links.append((items[0][0], label, uris))
83 items = []
84 for uri, caption, subpages in links:
85 if selected in subpages or ('/' in subpages and not found_section):
86 items.append('<li class="active"><a href="%s">%s</a></li>' % \
87 (uri, ugettext(caption)))
88 else:
89 items.append('<li><a href="%s">%s</a></li>' % (uri, ugettext(caption)))
91 s = '\n'.join(items)
92 return mark_safe(s)
94 def get_section_items(selected):
95 for label, items in MENU_STRUCTURE:
96 if selected in (uri for uri, caption in items):
97 return items
99 # If we arrive here, we cannot find the page items, so return a faked one
100 return list(MENU_STRUCTURE[0][1]) + [
101 (selected, selected),
104 @register.filter
105 def section_menu(selected, title=None):
107 items = []
108 for uri, caption in get_section_items(selected):
109 if uri == selected:
110 if title is not None:
111 if len(title) > 35:
112 title = title[:33] + '...'
113 caption = title
114 if uri in HIDDEN_URIS:
115 items.append('<li class="active">%s</li>' % ugettext(caption))
116 elif uri == '':
117 items.append('<li class="nav-header">%s</li>' % ugettext(caption))
118 else:
119 items.append('<li class="active"><a href="%s">%s</a></li>' % \
120 (uri, ugettext(caption)))
121 else:
122 if uri in HIDDEN_URIS:
123 continue
125 if not uri:
126 items.append('<li class="nav-header">%s</li>' % ugettext(caption))
127 else:
128 items.append('<li><a href="%s">%s</a></li>' % (uri, ugettext(caption)))
130 s = '\n'.join(items)
131 return mark_safe(s)