lemoncurry/lemoncurry/templatetags/lemoncurry_tags.py

75 lines
1.9 KiB
Python
Raw Normal View History

2017-10-22 19:35:29 -04:00
import json
from os.path import join
from types import SimpleNamespace
2017-10-22 19:35:29 -04:00
2017-10-22 18:37:24 -04:00
from django import template
from django.conf import settings
2017-10-24 00:01:17 -04:00
from django.urls import reverse
2017-10-22 18:37:24 -04:00
from .. import breadcrumbs
from entries import kinds
2017-10-22 18:37:24 -04:00
register = template.Library()
cache = SimpleNamespace(package_json=None)
2017-10-22 18:37:24 -04:00
2017-10-22 19:35:29 -04:00
2017-10-24 00:01:17 -04:00
class MenuItem:
def __init__(self, label, icon, url):
self.label = label
self.icon = icon
self.url = reverse(url)
2017-10-22 19:35:29 -04:00
@register.simple_tag
def get_package_json():
if cache.package_json:
return cache.package_json
2017-10-22 19:35:29 -04:00
with open(join(settings.BASE_DIR, 'package.json')) as f:
cache.package_json = json.load(f)
return cache.package_json
2017-10-22 19:35:29 -04:00
@register.simple_tag
def request_uri(request):
return '{scheme}://{host}{path}'.format(
scheme=request.scheme,
host=request.META['HTTP_HOST'],
path=request.path
)
2017-10-22 18:37:24 -04:00
@register.simple_tag
def site_name():
return settings.LEMONCURRY_SITE_NAME
2017-10-24 00:01:17 -04:00
@register.inclusion_tag('lemoncurry/tags/nav.html')
def nav_left(request):
items = (MenuItem(
label=k.plural,
icon=k.icon,
url='entries:'+k.plural+'_index'
) for k in kinds.all)
return {'items': items, 'request': request}
2017-10-24 00:01:17 -04:00
@register.inclusion_tag('lemoncurry/tags/nav.html')
def nav_right(request):
if request.user.is_authenticated():
items = (
MenuItem(label='admin', icon='fa fa-gear', url='admin:index'),
MenuItem(label='log out', icon='fa fa-sign-out', url='lemonauth:logout'),
2017-10-24 00:01:17 -04:00
)
else:
items = (
MenuItem(label='log in', icon='fa fa-sign-in', url='lemonauth:login'),
2017-10-24 00:01:17 -04:00
)
return {'items': items, 'request': request}
@register.inclusion_tag('lemoncurry/tags/breadcrumbs.html')
def nav_crumbs(route, title):
crumbs = breadcrumbs.find(route)
current = crumbs.pop()
return {'crumbs': crumbs, 'current': current, 'title': title}