From e286950f78ce98a1971fd049535d5d1bb4bd8a73 Mon Sep 17 00:00:00 2001 From: Lorenzo Morandini Date: Sat, 4 Apr 2020 10:25:59 +0200 Subject: [PATCH] Basic horizontal menu implementation --- .../templates/admin/base_site.html | 26 ++++++ .../templates/admin_interface/css/menu.css | 86 +++++++++++++++++++ .../templatetags/admin_interface_tags.py | 14 +++ 3 files changed, 126 insertions(+) create mode 100644 admin_interface/templates/admin_interface/css/menu.css diff --git a/admin_interface/templates/admin/base_site.html b/admin_interface/templates/admin/base_site.html index a0b20bd..10efb7e 100644 --- a/admin_interface/templates/admin/base_site.html +++ b/admin_interface/templates/admin/base_site.html @@ -19,6 +19,7 @@ https://github.com/fabiocaccamo/django-admin-interface {% include "admin_interface/css/list-filter-dropdown.css" %} {% include "admin_interface/css/recent-actions.css" %} {% include "admin_interface/css/related-modal.css" %} +{% include "admin_interface/css/menu.css" %} {% include "admin_interface/css/jquery.ui.tabs.css" %} {% include "admin_interface/css/modeltranslation.css" %} {% include "admin_interface/css/sorl-thumbnail.css" %} @@ -70,3 +71,28 @@ https://github.com/fabiocaccamo/django-admin-interface {% endif %} {% if theme.env_visible_in_header %} - {% endif %}{{ block.super }}
{% endblock %} + +{% block nav-global %} +{% if not is_popup %} +{% get_admin_interface_menu as menu %} +{% if menu %} + +{% endif %} +{% endif %} +{% endblock %} diff --git a/admin_interface/templates/admin_interface/css/menu.css b/admin_interface/templates/admin_interface/css/menu.css new file mode 100644 index 0000000..04b0ece --- /dev/null +++ b/admin_interface/templates/admin_interface/css/menu.css @@ -0,0 +1,86 @@ +#menu { + flex: 1 1 100%; + overflow: hidden; + background-color: {{ theme.css_header_background_color }}; + margin-top: 10px; + width: 100%; + } + + #menu a { + float: left; + font-size: 14px; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; + background-color: {{ theme.css_module_background_color }}; + } + + #menu a:first-child { + border-radius: 4px 0 0 0; + } + + #menu .dropdown { + float: left; + overflow: hidden; + } + + #menu .dropdown:first-child { + border-radius: 4px 0 0 0; + } + + #menu .dropdown:last-child { + border-radius: 0 4px 0 0; + } + + #menu .dropdown .dropbtn { + font-size: 14px; + border: none; + outline: none; + color: {{ theme.css_module_text_color }}; + padding: 14px 16px; + font-family: inherit; + margin: 0; + background-color: {{ theme.css_module_background_color }}; + } + + #menu a:hover, .dropdown:hover .dropbtn { + background-color: {{ theme.css_generic_link_hover_color }}; + } + + #menu .dropdown-content { + display: none; + position: absolute; + background-color: {{ theme.css_generic_link_hover_color }}; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); + z-index: 1; + } + + #menu .dropdown-content a { + border-radius: unset; + float: none; + color: {{ theme.css_module_text_color }}; + padding: 12px 16px; + text-decoration: none; + display: block; + text-align: left; + } + + #menu .dropdown-content a:hover { + background-color: #ddd; + } + + #menu .dropdown:hover .dropdown-content { + display: block; + } + + .arrow-down { + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + + border-top: 5px solid white; + } + \ No newline at end of file diff --git a/admin_interface/templatetags/admin_interface_tags.py b/admin_interface/templatetags/admin_interface_tags.py index 13e0c0f..3ac491c 100644 --- a/admin_interface/templatetags/admin_interface_tags.py +++ b/admin_interface/templatetags/admin_interface_tags.py @@ -2,11 +2,14 @@ import django from django import template, VERSION +from django.apps import apps from django.conf import settings if django.VERSION < (1, 10): from django.core.urlresolvers import NoReverseMatch, reverse else: from django.urls import NoReverseMatch, reverse +from django.contrib import admin +from django.contrib.admin.sites import all_sites from django.utils import translation from admin_interface.cache import get_cached_active_theme, set_cached_active_theme @@ -78,3 +81,14 @@ def get_admin_interface_theme(context): @simple_tag(takes_context=False) def get_admin_interface_version(): return __version__ + + +@simple_tag(takes_context=True) +def get_admin_interface_menu(context): + request = context['request'] + if request.user and request.user.is_staff: + current_app = request.current_app if hasattr(request, 'current_app') else 'admin' # Fallback on default admin for WSGI requests from not-admin views + for admin_site in all_sites: + if admin_site.name == current_app: + return admin_site.get_app_list(request) + return []