89 lines
3.0 KiB
Python
89 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
from django import template
|
|
from django.utils import translation
|
|
|
|
register = template.Library()
|
|
|
|
@register.simple_tag()
|
|
def language_cur():
|
|
return translation.get_language()
|
|
|
|
# Language switcher
|
|
@register.inclusion_tag('tags/language.html', takes_context=True)
|
|
def language_switcher(context):
|
|
url = '/$lang$'
|
|
if 'page' in context:
|
|
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') },
|
|
{ 'code': 'fr', 'title': 'Fr', 'url': url.replace('$lang$','fr') },
|
|
{ 'code': 'en', 'title': 'En', 'url': url.replace('$lang$','en') }
|
|
]
|
|
return {
|
|
'languages': language_array,
|
|
'currentlangcode': translation.get_language(),
|
|
'request': context['request'],
|
|
}
|
|
|
|
@register.simple_tag(takes_context=True)
|
|
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):
|
|
menuitems = parent.get_children().live().in_menu().specific()
|
|
for menuitem in menuitems:
|
|
menuitem.show_dropdown = has_menu_children(menuitem)
|
|
menuitem.active = (calling_page.url.startswith(menuitem.url)
|
|
if calling_page else False)
|
|
try:
|
|
menuitem.title = menuitem.trans_title
|
|
except AttributeError:
|
|
pass
|
|
return {
|
|
'calling_page': calling_page,
|
|
'menuitems': menuitems,
|
|
'request': context['request'],
|
|
}
|
|
|
|
def menuitems_children(parent):
|
|
menuitems_children = parent.get_children().live().in_menu().specific()
|
|
for menuitem in menuitems_children:
|
|
try:
|
|
menuitem.title = menuitem.trans_title
|
|
except AttributeError:
|
|
pass
|
|
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):
|
|
return {
|
|
'parent': parent,
|
|
'menuitems_children': menuitems_children(parent),
|
|
'request': context['request'],
|
|
}
|
|
|
|
# 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,
|
|
'menuitems': menuitems_children(parent),
|
|
'request': context['request'],
|
|
}
|