Commit 0df9cd6eb6a448102b15a1b19a1fb372aeadbd66
1 parent
d7c967cc
Exists in
master
and in
34 other branches
Load menu from plugins settings dir
Signed-off-by: Alexandre Barbosa <alexandreab@live.com> Signed-off-by: Gustavo Jaruga <darksshades@gmail.com> Signed-off-by: Sergio Oliveira <sergio@tracy.com.br>
Showing
5 changed files
with
55 additions
and
22 deletions
Show diff stats
colab/plugins/templates/plugins/menu_template.html
1 | 1 | {% for title, links in menu_links.items %} |
2 | 2 | {% if links|length == 1 %} |
3 | - {% for text, link in links %} | |
3 | + {% for colab_url in links %} | |
4 | 4 | <li> |
5 | - <a href="{{ link }}">{{ title }}</a> | |
5 | + <a href="{{ colab_url.url }}">{{ title }}</a> | |
6 | 6 | </li> |
7 | 7 | {% endfor %} |
8 | 8 | {% else %} |
9 | 9 | <li class="dropdown"> |
10 | 10 | <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ title }} <b class="caret"></b></a> |
11 | 11 | <ul class="dropdown-menu"> |
12 | - {% for text, link in links %} | |
13 | - <li><a href="{{ link }}">{{ text }}</a></li> | |
12 | + {% for colab_url in links %} | |
13 | + <li><a href="{{ colab_url.url }}">{{ colab_url.display }}</a></li> | |
14 | 14 | {% endfor %} |
15 | 15 | </ul> |
16 | 16 | </li> | ... | ... |
colab/plugins/templatetags/plugins.py
... | ... | @@ -3,18 +3,22 @@ from collections import OrderedDict |
3 | 3 | from django import template |
4 | 4 | from django.core.cache import cache |
5 | 5 | from django.template.loader import render_to_string |
6 | -from django.utils.translation import ugettext_lazy as _ | |
6 | +from django.utils.translation import get_language | |
7 | 7 | |
8 | 8 | register = template.Library() |
9 | 9 | |
10 | 10 | |
11 | 11 | @register.simple_tag(takes_context=True) |
12 | 12 | def plugins_menu(context): |
13 | + | |
13 | 14 | if context['user'].is_authenticated(): |
14 | 15 | cache_key = 'colab-proxy-menu-authenticated' |
15 | 16 | else: |
16 | 17 | cache_key = 'colab-proxy-menu-anonymous' |
17 | 18 | |
19 | + lang = get_language() | |
20 | + cache_key += '-{}'.format(lang) | |
21 | + | |
18 | 22 | menu_from_cache = cache.get(cache_key) |
19 | 23 | |
20 | 24 | if menu_from_cache: |
... | ... | @@ -23,25 +27,25 @@ def plugins_menu(context): |
23 | 27 | menu_links = OrderedDict() |
24 | 28 | proxied_apps = context.get('proxy', {}) |
25 | 29 | |
30 | + # TODO: change name from proxied_apps to something with plugins =) | |
26 | 31 | for app_name, app in proxied_apps.items(): |
27 | - if not app.get('menu'): | |
32 | + if not app.get('menu_urls'): | |
28 | 33 | continue |
29 | 34 | |
30 | - menu = app.get('menu') | |
31 | - title = menu.get('title', app_name) | |
32 | - links = menu.get('links', tuple()) | |
33 | - if context['user'].is_active: | |
34 | - links += menu.get('auth_links', tuple()) | |
35 | - | |
36 | - if not links: | |
37 | - continue | |
35 | + menu = app.get('menu_urls') | |
36 | + title = app.get('menu_title', app_name) | |
38 | 37 | |
39 | 38 | if title not in menu_links: |
40 | - menu_links[_(title)] = [] | |
39 | + menu_links[title] = [] | |
40 | + | |
41 | + for colab_url in menu: | |
42 | + if not context['user'].is_active and colab_url.auth: | |
43 | + continue | |
44 | + | |
45 | + menu_links[title].append(colab_url) | |
41 | 46 | |
42 | - for text, link in links: | |
43 | - url = link | |
44 | - menu_links[_(title)].append((_(text), url)) | |
47 | + if not menu_links[title]: | |
48 | + del menu_links[title] | |
45 | 49 | |
46 | 50 | menu = render_to_string('plugins/menu_template.html', |
47 | 51 | {'menu_links': menu_links}) | ... | ... |
colab/plugins/urls.py
... | ... | @@ -14,8 +14,8 @@ for app_name, app in settings.COLAB_APPS.items(): |
14 | 14 | urls = app.get('urls') |
15 | 15 | if not urls.get('include'): |
16 | 16 | raise ImproperlyConfigured(undef_url_include_msg) |
17 | - print urls['include'] | |
18 | 17 | urlpatterns += patterns('', |
19 | 18 | url(urls.get('prefix', r''), include(urls['include'], |
20 | 19 | namespace=urls.get('namespace'))), |
21 | - ) | |
22 | 20 | \ No newline at end of file |
21 | + ) | |
22 | + | ... | ... |
... | ... | @@ -0,0 +1,25 @@ |
1 | +from django.core.urlresolvers import reverse_lazy | |
2 | + | |
3 | + | |
4 | +class ColabUrl(object): | |
5 | + def __init__(self, display, url, auth): | |
6 | + self.display = display | |
7 | + self.url = url | |
8 | + self.auth = auth | |
9 | + | |
10 | + | |
11 | +def colab_url_factory(namespace): | |
12 | + | |
13 | + def url(display, viewname, namespace=namespace, args=tuple(), | |
14 | + kwargs={}, auth=False): | |
15 | + | |
16 | + if namespace: | |
17 | + rev_viewname = ':'.join((namespace, viewname)) | |
18 | + else: | |
19 | + rev_viewname = viewname | |
20 | + | |
21 | + url = reverse_lazy(rev_viewname, args=args, kwargs=kwargs) | |
22 | + | |
23 | + return ColabUrl(display, url, auth) | |
24 | + | |
25 | + return url | ... | ... |
colab/utils/conf.py
... | ... | @@ -140,8 +140,9 @@ def load_colab_apps(): |
140 | 140 | if file_name.endswith('.py'): |
141 | 141 | file_module = file_name.split('.')[0] |
142 | 142 | py_settings_d = _load_py_file(file_module, plugins_dir) |
143 | - fields = ['urls', 'menu', 'upstream', 'middlewares', | |
144 | - 'dependencies', 'context_processors'] | |
143 | + fields = ['verbose_name', 'upstream', 'urls', | |
144 | + 'menu_urls', 'middlewares', 'dependencies', | |
145 | + 'context_processors'] | |
145 | 146 | |
146 | 147 | app_name = py_settings_d.get('name') |
147 | 148 | if not app_name: |
... | ... | @@ -149,6 +150,9 @@ def load_colab_apps(): |
149 | 150 | continue |
150 | 151 | |
151 | 152 | COLAB_APPS[app_name] = {} |
153 | + COLAB_APPS[app_name]['menu_title'] = \ | |
154 | + py_settings_d.get('menu_title') | |
155 | + | |
152 | 156 | for key in fields: |
153 | 157 | value = py_settings_d.get(key) |
154 | 158 | if value: | ... | ... |