From 496a07cfe3769a63cefe05cf3fcbe1569cd8b2c1 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sat, 16 Jan 2021 15:20:13 +0100
Subject: [PATCH] Add support for (dynamic) menu item badges

---
 aleksis/core/static/style.scss                    |  5 ++---
 aleksis/core/templates/core/partials/sidenav.html | 14 +++++++++++++-
 aleksis/core/templatetags/data_helpers.py         | 11 +++++++++++
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/aleksis/core/static/style.scss b/aleksis/core/static/style.scss
index a7b292996..6455b554f 100644
--- a/aleksis/core/static/style.scss
+++ b/aleksis/core/static/style.scss
@@ -136,9 +136,8 @@ ul.sidenav li.logo > a:hover {
   background-color: lighten($primary-color, 5%);
 }
 
-li.active > a > .sidenav-badge {
-  background-color: whitesmoke !important;
-  color: $primary-color !important;
+.sidenav-badge {
+  min-width: 2rem!important;
 }
 
 .sidenav li.search {
diff --git a/aleksis/core/templates/core/partials/sidenav.html b/aleksis/core/templates/core/partials/sidenav.html
index 4c782285f..54df4fe73 100644
--- a/aleksis/core/templates/core/partials/sidenav.html
+++ b/aleksis/core/templates/core/partials/sidenav.html
@@ -1,6 +1,6 @@
 {# -*- engine:django -*- #}
 
-{% load menu_generator %}
+{% load menu_generator data_helpers %}
 
 {% get_menu "NAV_MENU_CORE" as core_menu %}
 
@@ -16,6 +16,10 @@
             <i class="material-icons">{{ item.icon }}</i>
           {% endif %}
           {{ item.name }}
+          {% build_badge item as badge %}
+          {% if badge %}
+            <span class="new badge sidenav-badge"> {{ badge }}</span>
+          {% endif %}
         </a>
       </li>
     {% endif %}
@@ -28,6 +32,10 @@
             <i class="material-icons">{{ item.icon }}</i>
           {% endif %}
           {{ item.name }}
+          {% build_badge item as badge %}
+          {% if badge %}
+            <span class="new badge sidenav-badge"> {{ badge }}</span>
+          {% endif %}
         </a>
         <div class="collapsible-body">
           <ul>
@@ -40,6 +48,10 @@
                     <i class="material-icons">{{ menu.icon }}</i>
                   {% endif %}
                   {{ menu.name }}
+                  {% build_badge item as badge %}
+                  {% if badge %}
+                    <span class="new badge sidenav-badge"> {{ badge }}</span>
+                  {% endif %}
                 </a>
               </li>
             {% endfor %}
diff --git a/aleksis/core/templatetags/data_helpers.py b/aleksis/core/templatetags/data_helpers.py
index ab2309f26..5e263ba37 100644
--- a/aleksis/core/templatetags/data_helpers.py
+++ b/aleksis/core/templatetags/data_helpers.py
@@ -51,3 +51,14 @@ def parse_json(value: Optional[str] = None) -> Union[dict, None]:
     if not value:
         return None
     return json.loads(value)
+
+
+@register.simple_tag(takes_context=True)
+def build_badge(context: dict, item: dict) -> Any:
+    """Get menu badge content from django-menu-generator dict."""
+    request = context["request"]
+    badge = item.get("badge")
+    if callable(badge):
+        return badge(request)
+    else:
+        return badge
-- 
GitLab