lemoncurry/lemoncurry/templatetags/lemoncurry_tags.py

113 lines
2.7 KiB
Python
Raw Normal View History

2017-10-22 18:37:24 -04:00
from django import template
from django.conf import settings
from django.contrib.sites.models import Site
2017-10-24 00:01:17 -04:00
from django.urls import reverse
from ..utils import load_package_json, origin, uri
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()
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
if isinstance(url, str):
url = (url, ())
self.url = reverse(url[0], args=url[1])
2017-10-24 00:01:17 -04:00
2017-10-22 19:35:29 -04:00
@register.simple_tag
def get_package_json():
return load_package_json()
2017-10-22 19:35:29 -04:00
@register.simple_tag
2017-10-26 00:57:44 -04:00
def request_origin(request):
return origin(request)
2017-10-26 00:57:44 -04:00
@register.simple_tag
def request_uri(request):
return uri(request)
2017-10-26 00:57:44 -04:00
2017-10-22 18:37:24 -04:00
@register.simple_tag
def site_name():
return Site.objects.get_current().name
2017-10-24 00:01:17 -04:00
2023-08-10 02:52:37 -04:00
@register.inclusion_tag("lemoncurry/tags/nav.html")
def nav_left(request):
2023-08-10 02:52:37 -04:00
items = (
MenuItem(label=k.plural, icon=k.icon, url=("entries:index", (k,)))
for k in kinds.all
)
return {"items": items, "request": request}
2017-10-24 00:01:17 -04:00
2023-08-10 02:52:37 -04:00
@register.inclusion_tag("lemoncurry/tags/nav.html")
2017-10-24 00:01:17 -04:00
def nav_right(request):
if request.user.is_authenticated:
2017-10-24 00:01:17 -04:00
items = (
2023-08-10 02:52:37 -04:00
MenuItem(label="admin", icon="fas fa-cog", url="admin:index"),
MenuItem(
label="log out", icon="fas fa-sign-out-alt", url="lemonauth:logout"
),
2017-10-24 00:01:17 -04:00
)
else:
items = (
2023-08-10 02:52:37 -04:00
MenuItem(label="log in", icon="fas fa-sign-in-alt", url="lemonauth:login"),
2017-10-24 00:01:17 -04:00
)
2023-08-10 02:52:37 -04:00
return {"items": items, "request": request}
2023-08-10 02:52:37 -04:00
@register.inclusion_tag("lemoncurry/tags/breadcrumbs.html", takes_context=True)
def nav_crumbs(context, route):
crumbs = breadcrumbs.find(route)
current = crumbs.pop()
2023-08-10 02:52:37 -04:00
item_list_element = [
{
"@type": "ListItem",
"position": i + 1,
"item": {
"@id": context["origin"] + crumb.url,
"@type": "WebPage",
"name": crumb.label,
},
}
2023-08-10 02:52:37 -04:00
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"),
},
}
2023-08-10 02:52:37 -04:00
)
breadcrumb_list = {
2023-08-10 02:52:37 -04:00
"@context": "http://schema.org",
"@type": "BreadcrumbList",
"itemListElement": item_list_element,
}
return {
2023-08-10 02:52:37 -04:00
"breadcrumb_list": breadcrumb_list,
"crumbs": crumbs,
"current": current,
"title": context.get("title"),
}
@register.simple_tag
def get_push_hub():
return settings.PUSH_HUB