From 12af89cb5d418cc63587a454ed1d461da26fd36a Mon Sep 17 00:00:00 2001 From: Jonathan DeMasi Date: Sun, 8 Mar 2020 15:12:01 -0600 Subject: navigation working --- home/templates/home/tags/top_menu.html | 24 +++++++++++ home/templatetags/navigation_tags.py | 73 ++++++++++++++++++++++++++++++++++ jthanio/templates/base.html | 1 - jthanio/templates/navigation.html | 30 +++----------- jthanio/templatetags/custom_tags.py | 0 5 files changed, 102 insertions(+), 26 deletions(-) create mode 100644 home/templates/home/tags/top_menu.html create mode 100644 home/templatetags/navigation_tags.py delete mode 100644 jthanio/templatetags/custom_tags.py diff --git a/home/templates/home/tags/top_menu.html b/home/templates/home/tags/top_menu.html new file mode 100644 index 0000000..3a228ed --- /dev/null +++ b/home/templates/home/tags/top_menu.html @@ -0,0 +1,24 @@ +{% load navigation_tags wagtailcore_tags %} +{% get_site_root as site_root %} + + \ No newline at end of file diff --git a/home/templatetags/navigation_tags.py b/home/templatetags/navigation_tags.py new file mode 100644 index 0000000..447be3b --- /dev/null +++ b/home/templatetags/navigation_tags.py @@ -0,0 +1,73 @@ +from django import template + +from wagtail.core.models import Page + +register = template.Library() +# https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/ + + +@register.simple_tag(takes_context=True) +def get_site_root(context): + # This returns a core.Page. The main menu needs to have the site.root_page + # defined else will return an object attribute error ('str' object has no + # attribute 'get_children') + return context['request'].site.root_page + + +def has_menu_children(page): + # This is used by the top_menu property + # get_children is a Treebeard API thing + # https://tabo.pe/projects/django-treebeard/docs/4.0.1/api.html + return page.get_children().live().in_menu().exists() + + +def has_children(page): + # Generically allow index pages to list their children + return page.get_children().live().exists() + + +def is_active(page, current_page): + # To give us active state on main navigation + return (current_page.url_path.startswith(page.url_path) if current_page else False) + + +# Retrieves the top menu items - the immediate children of the parent page +# The has_menu_children method is necessary because the Foundation menu requires +# a dropdown class to be applied to a parent +@register.inclusion_tag('home/tags/top_menu.html', takes_context=True) +def top_menu(context, parent, calling_page=None): + menuitems = parent.get_children().live().in_menu() + for menuitem in menuitems: + menuitem.show_dropdown = has_menu_children(menuitem) + # We don't directly check if calling_page is None since the template + # engine can pass an empty string to calling_page + # if the variable passed as calling_page does not exist. + menuitem.active = (calling_page.url_path.startswith(menuitem.url_path) + if calling_page else False) + return { + 'calling_page': calling_page, + 'menuitems': menuitems, + # required by the pageurl tag that we want to use within this template + 'request': context['request'], + } + + +# Retrieves the children of the top menu items for the drop downs +@register.inclusion_tag('home/tags/top_menu_children.html', takes_context=True) +def top_menu_children(context, parent, calling_page=None): + menuitems_children = parent.get_children() + menuitems_children = menuitems_children.live().in_menu() + for menuitem in menuitems_children: + menuitem.has_dropdown = has_menu_children(menuitem) + # We don't directly check if calling_page is None since the template + # engine can pass an empty string to calling_page + # if the variable passed as calling_page does not exist. + menuitem.active = (calling_page.url_path.startswith(menuitem.url_path) + if calling_page else False) + menuitem.children = menuitem.get_children().live().in_menu() + return { + 'parent': parent, + 'menuitems_children': menuitems_children, + # required by the pageurl tag that we want to use within this template + 'request': context['request'], + } diff --git a/jthanio/templates/base.html b/jthanio/templates/base.html index f288bf3..694f86c 100644 --- a/jthanio/templates/base.html +++ b/jthanio/templates/base.html @@ -1,5 +1,4 @@ {% load static wagtailuserbar %} - diff --git a/jthanio/templates/navigation.html b/jthanio/templates/navigation.html index 54756a2..0b6026d 100644 --- a/jthanio/templates/navigation.html +++ b/jthanio/templates/navigation.html @@ -1,25 +1,5 @@ - \ No newline at end of file +{% load navigation_tags %} +{% block menu %} + {% get_site_root as site_root %} + {% top_menu parent=site_root calling_page=self %} +{% endblock %} diff --git a/jthanio/templatetags/custom_tags.py b/jthanio/templatetags/custom_tags.py deleted file mode 100644 index e69de29..0000000 -- cgit v1.2.3