From b1aa6c5c3bfbf55ba80866da8807555cd5a06509 Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Sat, 5 Feb 2022 16:15:16 +0100
Subject: [PATCH] Remove account menu items from main sidenav

---
 aleksis/core/menus.py                 | 154 +++++++++++++-------------
 aleksis/core/templates/core/base.html |  45 +++++++-
 2 files changed, 117 insertions(+), 82 deletions(-)

diff --git a/aleksis/core/menus.py b/aleksis/core/menus.py
index 7938539c5..da2d10253 100644
--- a/aleksis/core/menus.py
+++ b/aleksis/core/menus.py
@@ -49,86 +49,6 @@ MENUS = {
                 ),
             ],
         },
-        {
-            "name": _("Account"),
-            "url": "#",
-            "icon": "person",
-            "root": True,
-            "validators": ["menu_generator.validators.is_authenticated"],
-            "submenu": [
-                {
-                    "name": _("Stop impersonation"),
-                    "url": "impersonate-stop",
-                    "icon": "stop",
-                    "validators": [
-                        "menu_generator.validators.is_authenticated",
-                        "aleksis.core.util.core_helpers.is_impersonate",
-                    ],
-                },
-                {
-                    "name": _("Logout"),
-                    "url": "logout",
-                    "icon": "exit_to_app",
-                    "validators": ["menu_generator.validators.is_authenticated"],
-                },
-                {
-                    "name": _("2FA"),
-                    "url": "two_factor:profile",
-                    "icon": "phonelink_lock",
-                    "validators": [
-                        "menu_generator.validators.is_authenticated",
-                    ],
-                },
-                {
-                    "name": _("Change password"),
-                    "url": "account_change_password",
-                    "icon": "lock",
-                    "validators": [
-                        "menu_generator.validators.is_authenticated",
-                        (
-                            "aleksis.core.util.predicates.permission_validator",
-                            "core.can_change_password",
-                        ),
-                    ],
-                },
-                {
-                    "name": _("Me"),
-                    "url": "person",
-                    "icon": "insert_emoticon",
-                    "validators": [
-                        "menu_generator.validators.is_authenticated",
-                        "aleksis.core.util.core_helpers.has_person",
-                    ],
-                },
-                {
-                    "name": _("Preferences"),
-                    "url": "preferences_person",
-                    "icon": "settings",
-                    "validators": [
-                        "menu_generator.validators.is_authenticated",
-                        "aleksis.core.util.core_helpers.has_person",
-                    ],
-                },
-                {
-                    "name": _("Third-party accounts"),
-                    "url": "socialaccount_connections",
-                    "icon": "public",
-                    "validators": [
-                        "menu_generator.validators.is_authenticated",
-                        "aleksis.core.util.core_helpers.has_person",
-                    ],
-                },
-                {
-                    "name": _("Authorized applications"),
-                    "url": "oauth2_provider:authorized-token-list",
-                    "icon": "touch_app",
-                    "validators": [
-                        "menu_generator.validators.is_authenticated",
-                        "aleksis.core.util.core_helpers.has_person",
-                    ],
-                },
-            ],
-        },
         {
             "name": _("Admin"),
             "url": "#",
@@ -329,4 +249,78 @@ MENUS = {
             ],
         },
     ],
+    "NAVBAR_ACCOUNT_MENU": [
+        {
+            "name": _("Stop impersonation"),
+            "url": "impersonate-stop",
+            "icon": "stop",
+            "validators": [
+                "menu_generator.validators.is_authenticated",
+                "aleksis.core.util.core_helpers.is_impersonate",
+            ],
+        },
+        {
+            "name": _("Account"),
+            "url": "person",
+            "icon": "person",
+            "validators": [
+                "menu_generator.validators.is_authenticated",
+                "aleksis.core.util.core_helpers.has_person",
+            ],
+        },
+        {
+            "name": _("Preferences"),
+            "url": "preferences_person",
+            "icon": "settings",
+            "validators": [
+                "menu_generator.validators.is_authenticated",
+                "aleksis.core.util.core_helpers.has_person",
+            ],
+        },
+        {
+            "name": _("2FA"),
+            "url": "two_factor:profile",
+            "icon": "phonelink_lock",
+            "validators": [
+                "menu_generator.validators.is_authenticated",
+            ],
+        },
+        {
+            "name": _("Change password"),
+            "url": "account_change_password",
+            "icon": "lock",
+            "validators": [
+                "menu_generator.validators.is_authenticated",
+                (
+                    "aleksis.core.util.predicates.permission_validator",
+                    "core.can_change_password",
+                ),
+            ],
+        },
+        {
+            "name": _("Third-party accounts"),
+            "url": "socialaccount_connections",
+            "icon": "public",
+            "validators": [
+                "menu_generator.validators.is_authenticated",
+                "aleksis.core.util.core_helpers.has_person",
+            ],
+        },
+        {
+            "name": _("Authorized applications"),
+            "url": "oauth2_provider:authorized-token-list",
+            "icon": "touch_app",
+            "validators": [
+                "menu_generator.validators.is_authenticated",
+                "aleksis.core.util.core_helpers.has_person",
+            ],
+        },
+        {
+            "divider": True,
+            "name": _("Logout"),
+            "url": "logout",
+            "icon": "exit_to_app",
+            "validators": ["menu_generator.validators.is_authenticated"],
+        },
+    ],
 }
diff --git a/aleksis/core/templates/core/base.html b/aleksis/core/templates/core/base.html
index 7fd4e38f8..bd9047a18 100644
--- a/aleksis/core/templates/core/base.html
+++ b/aleksis/core/templates/core/base.html
@@ -79,14 +79,55 @@
           <li>
             <a href="{% url 'logout' %}">{% trans "Logout" %} <i class="material-icons right">exit_to_app</i></a>
           </li>
-        {% endif %}
-      </ul>
+          <li>
+            <a href="#!" class="navbar-dropdown-trigger" data-target="account-dropdown">
+              {% if request.user.person %}
+                {% if request.user.person.avatar %}
+                  <div class="clip-circle">
+                    <img class="hundred-percent" src="{{ request.user.person.avatar.url }}"
+                         alt="{{ request.user.person.first_name }} {{ request.user.person.last_name }}"/>
+                  </div>
+
+                {% else %}
+
+                  <div class="clip-circle no-image">
+                    {{ request.user.person.initials }}
+                  </div>
+                {% endif %}
+              {% else %}
+                <div class="clip-circle no-image">
+                  {{ request.user.username|slice:":2" }}
+                </div>
+              {% endif %}
+            </a>
+          </li>
+        </ul>
+      {% else %}
+        <span class="nav-spacer"></span>
+      {% endif %}
     </div>
     <div class="nav-content">
       {% block nav_content %}{% endblock %}
     </div>
   </nav>
 
+{% get_menu "NAVBAR_ACCOUNT_MENU" as account_menu %}
+  <ul id="account-dropdown" class="dropdown-content">
+    {% for item in account_menu %}
+      {% if item.divider %}
+        <li class="divider"></li>
+      {% endif %}
+      <li>
+        <a href="{{ item.url }}">
+          {% if item.icon %}
+            <i class="material-icons">{{ item.icon }}</i>
+          {% endif %}
+          {{ item.name }}
+        </a>
+      </li>
+    {% endfor %}
+  </ul>
+
   <!-- Main nav (sidenav) -->
   {% if not no_menu %}
     <ul id="slide-out" class="sidenav sidenav-fixed">
-- 
GitLab