add page to manually add missing podcasts
[mygpo.git] / mygpo / web / templatetags / menu.py
blob37bbd243e8f3c5ce216cd05c20dcda3e300d2adf
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 ('/contribute/', _('Contribute')),
26 ('/developer/', _('Development')),
27 ('/privacy/', _('Privacy Policy')),
28 ('/online-help', _('Help')),
29 )),
30 (_('Discover'), (
31 ('/directory/', _('Directory')),
32 ('/podcast/', _('Podcast')),
33 ('/search/', _('Search')),
34 ('/missing/', _('Missing Podcast')),
35 ('/lists/', _('Podcast Lists')),
36 ('/user/subscriptions/', _('User subscriptions')),
37 ('/suggestions/', _('Suggestions')),
38 ('', _('Toplists')),
39 ('/toplist/', _('Podcasts')),
40 ('/toplist/episodes', _('Episodes')),
41 )),
42 (_('Subscriptions'), (
43 ('/subscriptions/', _('Subscriptions')),
44 ('/favorites/', _('Favorite Episodes')),
45 ('/tags/', _('My Tags')),
46 ('/devices/', _('Devices')),
47 ('/device/', _('Device')),
48 ('/history/', _('History')),
49 )),
50 (_('Community'), (
51 ('/share/', _('Overview')),
52 ('/share/favorites', _('Favorite Episodes')),
53 ('/share/me', _('My Userpage')),
54 ('/user/subscriptions/', _('Subscriptions')),
55 ('/share/lists/', _('Podcast Lists')),
56 )),
57 (_('Settings'), (
58 ('/account/', _('Account')),
59 ('/account/privacy', _('Privacy')),
60 )),
61 (_('Publish'), (
62 ('/publisher/', _('Home')),
63 ('/publisher/advertise', _('Advertise')),
64 ('/publisher/link/', _('Link to gpodder.net')),
65 ('/publisher/podcast/', _('Podcast')),
66 )),
69 @register.filter
70 def main_menu(selected):
71 found_section = False
72 links = []
73 for label, items in MENU_STRUCTURE[1:]:
74 uris = [uri for uri, caption in items]
75 if selected in uris:
76 found_section = True
77 links.append((items[0][0], label, uris))
79 items = []
80 for uri, caption, subpages in links:
81 if selected in subpages or ('/' in subpages and not found_section):
82 items.append('<li class="active"><a href="%s">%s</a></li>' % \
83 (uri, ugettext(caption)))
84 else:
85 items.append('<li><a href="%s">%s</a></li>' % (uri, ugettext(caption)))
87 s = '\n'.join(items)
88 return mark_safe(s)
90 def get_section_items(selected):
91 for label, items in MENU_STRUCTURE:
92 if selected in (uri for uri, caption in items):
93 return items
95 # If we arrive here, we cannot find the page items, so return a faked one
96 return list(MENU_STRUCTURE[0][1]) + [
97 (selected, selected),
100 @register.filter
101 def section_menu(selected, title=None):
103 items = []
104 for uri, caption in get_section_items(selected):
105 if uri == selected:
106 if title is not None:
107 if len(title) > 35:
108 title = title[:33] + '...'
109 caption = title
110 if uri in HIDDEN_URIS:
111 items.append('<li class="active">%s</li>' % ugettext(caption))
112 elif uri == '':
113 items.append('<li class="nav-header">%s</li>' % ugettext(caption))
114 else:
115 items.append('<li class="active"><a href="%s">%s</a></li>' % \
116 (uri, ugettext(caption)))
117 else:
118 if uri in HIDDEN_URIS:
119 continue
121 if not uri:
122 items.append('<li class="nav-header">%s</li>' % ugettext(caption))
123 else:
124 items.append('<li><a href="%s">%s</a></li>' % (uri, ugettext(caption)))
126 s = '\n'.join(items)
127 return mark_safe(s)