113 lines
2.7 KiB
Python
113 lines
2.7 KiB
Python
from django import template
|
|
from django.conf import settings
|
|
from django.contrib.sites.models import Site
|
|
from django.urls import reverse
|
|
from ..utils import load_package_json, origin, uri
|
|
|
|
from .. import breadcrumbs
|
|
from entries import kinds
|
|
|
|
register = template.Library()
|
|
|
|
|
|
class MenuItem:
|
|
def __init__(self, label, icon, url):
|
|
self.label = label
|
|
self.icon = icon
|
|
if isinstance(url, str):
|
|
url = (url, ())
|
|
self.url = reverse(url[0], args=url[1])
|
|
|
|
|
|
@register.simple_tag
|
|
def get_package_json():
|
|
return load_package_json()
|
|
|
|
|
|
@register.simple_tag
|
|
def request_origin(request):
|
|
return origin(request)
|
|
|
|
|
|
@register.simple_tag
|
|
def request_uri(request):
|
|
return uri(request)
|
|
|
|
|
|
@register.simple_tag
|
|
def site_name():
|
|
return Site.objects.get_current().name
|
|
|
|
|
|
@register.inclusion_tag("lemoncurry/tags/nav.html")
|
|
def nav_left(request):
|
|
items = (
|
|
MenuItem(label=k.plural, icon=k.icon, url=("entries:index", (k,)))
|
|
for k in kinds.all
|
|
)
|
|
return {"items": items, "request": request}
|
|
|
|
|
|
@register.inclusion_tag("lemoncurry/tags/nav.html")
|
|
def nav_right(request):
|
|
if request.user.is_authenticated:
|
|
items = (
|
|
MenuItem(label="admin", icon="fas fa-cog", url="admin:index"),
|
|
MenuItem(
|
|
label="log out", icon="fas fa-sign-out-alt", url="lemonauth:logout"
|
|
),
|
|
)
|
|
else:
|
|
items = (
|
|
MenuItem(label="log in", icon="fas fa-sign-in-alt", url="lemonauth:login"),
|
|
)
|
|
return {"items": items, "request": request}
|
|
|
|
|
|
@register.inclusion_tag("lemoncurry/tags/breadcrumbs.html", takes_context=True)
|
|
def nav_crumbs(context, route):
|
|
crumbs = breadcrumbs.find(route)
|
|
current = crumbs.pop()
|
|
|
|
item_list_element = [
|
|
{
|
|
"@type": "ListItem",
|
|
"position": i + 1,
|
|
"item": {
|
|
"@id": context["origin"] + crumb.url,
|
|
"@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,
|
|
"title": context.get("title"),
|
|
}
|
|
|
|
|
|
@register.simple_tag
|
|
def get_push_hub():
|
|
return settings.PUSH_HUB
|