public-health-ch/publichealth/home/templatetags/navigation.py

89 lines
3 KiB
Python
Raw Normal View History

2017-03-03 17:13:31 +00:00
# -*- coding: utf-8 -*-
from django import template
from django.utils import translation
register = template.Library()
2018-06-28 13:58:20 +00:00
@register.simple_tag()
def language_cur():
return translation.get_language()
2017-03-03 17:13:31 +00:00
# Language switcher
2017-03-07 21:36:33 +00:00
@register.inclusion_tag('tags/language.html', takes_context=True)
2017-03-03 17:13:31 +00:00
def language_switcher(context):
2017-05-03 22:07:07 +00:00
url = '/$lang$'
if 'page' in context:
2018-05-25 14:59:56 +00:00
urlparts = context['page'].get_url_parts()
if urlparts is not None:
s, r, page_url_relative_to_site_root = urlparts
url = page_url_relative_to_site_root.split('/')
if len(url) > 0 and len(url[1]) == 2:
url[1] = '$lang$'
url = '/'.join(url)
else:
url = '/$lang$'
language_array = [
{ 'code': 'de', 'title': 'De', 'url': url.replace('$lang$','de') },
2019-08-12 14:11:17 +00:00
{ 'code': 'fr', 'title': 'Fr', 'url': url.replace('$lang$','fr') },
{ 'code': 'en', 'title': 'En', 'url': url.replace('$lang$','en') }
2018-05-25 14:59:56 +00:00
]
2017-03-03 17:13:31 +00:00
return {
2018-05-25 14:59:56 +00:00
'languages': language_array,
2017-03-03 17:13:31 +00:00
'currentlangcode': translation.get_language(),
'request': context['request'],
}
2017-03-08 21:33:40 +00:00
2019-06-14 20:02:15 +00:00
@register.simple_tag(takes_context=True)
2017-03-08 21:33:40 +00:00
def get_site_root(context):
# NB this returns a core.Page, not the implementation-specific model used
# so object-comparison to self will return false as objects would differ
return context['request'].site.root_page
def has_menu_children(page):
return page.get_children().live().in_menu().exists()
# Retrieves the top menu items
@register.inclusion_tag('tags/top_menu.html', takes_context=True)
def top_menu(context, parent, calling_page=None):
2017-03-09 10:07:06 +00:00
menuitems = parent.get_children().live().in_menu().specific()
2017-03-08 21:33:40 +00:00
for menuitem in menuitems:
menuitem.show_dropdown = has_menu_children(menuitem)
menuitem.active = (calling_page.url.startswith(menuitem.url)
if calling_page else False)
2017-07-03 15:49:40 +00:00
try:
2017-07-03 15:47:56 +00:00
menuitem.title = menuitem.trans_title
2017-07-03 15:49:40 +00:00
except AttributeError:
pass
2017-03-08 21:33:40 +00:00
return {
'calling_page': calling_page,
'menuitems': menuitems,
'request': context['request'],
}
2017-03-14 09:54:47 +00:00
def menuitems_children(parent):
2017-03-09 10:07:06 +00:00
menuitems_children = parent.get_children().live().in_menu().specific()
for menuitem in menuitems_children:
2017-07-03 15:49:40 +00:00
try:
2017-07-03 15:47:56 +00:00
menuitem.title = menuitem.trans_title
2017-07-03 15:49:40 +00:00
except AttributeError:
pass
2017-03-14 09:54:47 +00:00
return menuitems_children
# Retrieves the children of the top menu items for the drop downs
@register.inclusion_tag('tags/top_menu_children.html', takes_context=True)
def top_menu_children(context, parent):
2017-03-08 21:33:40 +00:00
return {
'parent': parent,
2017-03-14 09:54:47 +00:00
'menuitems_children': menuitems_children(parent),
2017-03-08 21:33:40 +00:00
'request': context['request'],
}
2017-03-08 21:41:29 +00:00
# Retrieves the footer menu items
@register.inclusion_tag('tags/footer_menu.html', takes_context=True)
def footer_menu(context, parent, calling_page=None):
return {
'calling_page': calling_page,
2017-03-14 09:54:47 +00:00
'menuitems': menuitems_children(parent),
2017-03-08 21:41:29 +00:00
'request': context['request'],
2017-04-19 16:52:30 +00:00
}