2017-10-22 19:35:29 -04:00
|
|
|
import json
|
|
|
|
from os.path import join
|
2017-10-22 22:08:11 -04:00
|
|
|
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
|
|
|
|
2017-10-24 09:25:41 -04:00
|
|
|
from .. import breadcrumbs
|
2017-10-24 21:01:52 -04:00
|
|
|
from entries import kinds
|
2017-10-24 09:25:41 -04:00
|
|
|
|
2017-10-22 18:37:24 -04:00
|
|
|
register = template.Library()
|
2017-10-22 22:08:11 -04:00
|
|
|
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():
|
2017-10-22 22:08:11 -04:00
|
|
|
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:
|
2017-10-22 22:08:11 -04:00
|
|
|
cache.package_json = json.load(f)
|
|
|
|
return cache.package_json
|
2017-10-22 19:35:29 -04:00
|
|
|
|
|
|
|
|
2017-10-24 18:25:35 -04:00
|
|
|
@register.simple_tag
|
2017-10-26 00:57:44 -04:00
|
|
|
def request_origin(request):
|
|
|
|
return '{scheme}://{host}'.format(
|
2017-10-24 18:25:35 -04:00
|
|
|
scheme=request.scheme,
|
|
|
|
host=request.META['HTTP_HOST'],
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2017-10-26 00:57:44 -04:00
|
|
|
@register.simple_tag
|
|
|
|
def request_uri(request):
|
|
|
|
return request_origin(request) + request.path
|
|
|
|
|
|
|
|
|
2017-10-22 18:37:24 -04:00
|
|
|
@register.simple_tag
|
|
|
|
def site_name():
|
2017-10-22 18:43:26 -04:00
|
|
|
return settings.LEMONCURRY_SITE_NAME
|
2017-10-24 00:01:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
@register.inclusion_tag('lemoncurry/tags/nav.html')
|
2017-10-24 09:40:38 -04:00
|
|
|
def nav_left(request):
|
2017-10-24 21:01:52 -04:00
|
|
|
items = (MenuItem(
|
|
|
|
label=k.plural,
|
|
|
|
icon=k.icon,
|
|
|
|
url='entries:'+k.plural+'_index'
|
|
|
|
) for k in kinds.all)
|
2017-10-24 09:40:38 -04:00
|
|
|
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'),
|
2017-10-24 08:50:57 -04:00
|
|
|
MenuItem(label='log out', icon='fa fa-sign-out', url='lemonauth:logout'),
|
2017-10-24 00:01:17 -04:00
|
|
|
)
|
|
|
|
else:
|
|
|
|
items = (
|
2017-10-24 08:50:57 -04:00
|
|
|
MenuItem(label='log in', icon='fa fa-sign-in', url='lemonauth:login'),
|
2017-10-24 00:01:17 -04:00
|
|
|
)
|
2017-10-24 09:40:38 -04:00
|
|
|
return {'items': items, 'request': request}
|
2017-10-24 09:25:41 -04:00
|
|
|
|
|
|
|
|
2017-10-26 18:35:56 -04:00
|
|
|
@register.inclusion_tag('lemoncurry/tags/breadcrumbs.html', takes_context=True)
|
|
|
|
def nav_crumbs(context, route):
|
2017-10-24 09:25:41 -04:00
|
|
|
crumbs = breadcrumbs.find(route)
|
|
|
|
current = crumbs.pop()
|
2017-10-26 18:35:56 -04:00
|
|
|
|
|
|
|
item_list_element = [{
|
|
|
|
'@type': 'ListItem',
|
|
|
|
'position': i + 1,
|
|
|
|
'item': {
|
|
|
|
'@id': context['origin'] + reverse(crumb['route']),
|
|
|
|
'@type': 'WebPage',
|
|
|
|
'name': crumb['label']
|
|
|
|
}
|
|
|
|
} for i, crumb in enumerate(crumbs)]
|
|
|
|
item_list_element.append({
|
|
|
|
'@type': 'ListItem',
|
|
|
|
'position': len(item_list_element) + 1,
|
|
|
|
'item': {
|
|
|
|
'id': context['uri'],
|
|
|
|
'@type': 'WebPage',
|
|
|
|
'name': current['label'] or context.get('title'),
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
breadcrumb_list = {
|
|
|
|
'@context': 'http://schema.org',
|
|
|
|
'@type': 'BreadcrumbList',
|
|
|
|
'itemListElement': item_list_element
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
'breadcrumb_list': breadcrumb_list,
|
|
|
|
'crumbs': crumbs,
|
|
|
|
'current': current,
|
2017-10-26 18:52:03 -04:00
|
|
|
'title': context.get('title'),
|
2017-10-26 18:35:56 -04:00
|
|
|
}
|