mirror of
				https://github.com/kevinveenbirkenbach/homepage.veen.world.git
				synced 2025-11-04 09:27:58 +00:00 
			
		
		
		
	Optimized menu
This commit is contained in:
		@@ -58,13 +58,5 @@ def reload_config_in_dev():
 | 
			
		||||
def index():
 | 
			
		||||
    return render_template("pages/index.html.j2", cards=config_data.get("cards", []), networks=config_data.get("networks", []), company=config_data["company"], navigation=config_data["navigation"])
 | 
			
		||||
 | 
			
		||||
@app.route('/imprint')
 | 
			
		||||
def imprint():
 | 
			
		||||
    return render_template('pages/imprint.html.j2')
 | 
			
		||||
 | 
			
		||||
@app.route('/agb')
 | 
			
		||||
def agb():
 | 
			
		||||
    return render_template('pages/agb.html.j2')
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    app.run(debug=(FLASK_ENV == "development"), host="0.0.0.0", port=5000)
 | 
			
		||||
@@ -186,8 +186,7 @@
 | 
			
		||||
                        "name": "Nature",
 | 
			
		||||
                        "description": "Explore my nature logs",
 | 
			
		||||
                        "icon_class": "fa-solid fa-tree",
 | 
			
		||||
                        "href": "https://s.veen.world/naturejournal",
 | 
			
		||||
                        "subitems": []
 | 
			
		||||
                        "href": "https://s.veen.world/naturejournal"
 | 
			
		||||
                        }
 | 
			
		||||
                    ]
 | 
			
		||||
                    }
 | 
			
		||||
@@ -197,9 +196,10 @@
 | 
			
		||||
        "footer":
 | 
			
		||||
        [
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Third Party Plattforms",
 | 
			
		||||
                "name": "External Accounts",
 | 
			
		||||
                "description" : "Me on other plattforms",
 | 
			
		||||
                "subitems:":[
 | 
			
		||||
                "icon_class" : "fa-solid fa-external-link-alt",
 | 
			
		||||
                "subitems":[
 | 
			
		||||
            {
 | 
			
		||||
            "name": "Meta",
 | 
			
		||||
            "description": "Social and developer networks",
 | 
			
		||||
@@ -219,6 +219,28 @@
 | 
			
		||||
                "icon_class": "fa-brands fa-facebook",
 | 
			
		||||
                "href": "https://www.facebook.com/kevinveenbirkenbach",
 | 
			
		||||
                "subitems": []
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Carreer Profiles",
 | 
			
		||||
                "icon_class": "fa-solid fa-user-tie",
 | 
			
		||||
                "subitems": [
 | 
			
		||||
                    {
 | 
			
		||||
                        "name": "XING",
 | 
			
		||||
                        "description": "Visit my XING profile",
 | 
			
		||||
                        "icon_class": "bi bi-building",
 | 
			
		||||
                        "href": "https://www.xing.com/profile/Kevin_VeenBirkenbach",
 | 
			
		||||
                        "subitems": []
 | 
			
		||||
                        },
 | 
			
		||||
                        {
 | 
			
		||||
                        "name": "LinkedIn",
 | 
			
		||||
                        "description": "Connect on LinkedIn",
 | 
			
		||||
                        "icon_class": "bi bi-linkedin",
 | 
			
		||||
                        "href": "https://www.linkedin.com/in/kevinveenbirkenbach",
 | 
			
		||||
                        "subitems": []
 | 
			
		||||
                        }
 | 
			
		||||
                    ]
 | 
			
		||||
                },
 | 
			
		||||
            {
 | 
			
		||||
                "name": "Duolingo",
 | 
			
		||||
@@ -233,14 +255,20 @@
 | 
			
		||||
                "icon_class": "fa-brands fa-spotify",
 | 
			
		||||
                "href": "https://open.spotify.com/user/31vebfzbjf3p7oualis76qfpr5ty",
 | 
			
		||||
                "subitems": []
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "Patreon",
 | 
			
		||||
                    "description": "Support me on Patreon",
 | 
			
		||||
                    "icon_class": "fa-brands fa-patreon",
 | 
			
		||||
                    "href": "https://patreon.com/kevinveenbirkenbach",
 | 
			
		||||
                    "subitems": []
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Community",
 | 
			
		||||
            "description": "My presence in the Fediverse",
 | 
			
		||||
            "icon_class": "fa-brands fa-mastodon",
 | 
			
		||||
            "href": null,
 | 
			
		||||
            "icon_class": "fa-solid fa-users",
 | 
			
		||||
            "subitems": [
 | 
			
		||||
                
 | 
			
		||||
                {
 | 
			
		||||
@@ -256,16 +284,8 @@
 | 
			
		||||
                    "icon_class": "fa-solid fa-envelope-open-text",
 | 
			
		||||
                    "href": "https://newsletter.veen.world/subscription/form",
 | 
			
		||||
                    "subitems": []
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                    "name": "Patreon",
 | 
			
		||||
                    "description": "Support me on Patreon",
 | 
			
		||||
                    "icon_class": "fa-brands fa-patreon",
 | 
			
		||||
                    "href": "https://patreon.com/kevinveenbirkenbach",
 | 
			
		||||
                    "subitems": []
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
            ]
 | 
			
		||||
            },
 | 
			
		||||
        {
 | 
			
		||||
@@ -347,26 +367,6 @@
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "name": "Carreer Profiles",
 | 
			
		||||
            "icon_class": "fa-solid fa-user-tie",
 | 
			
		||||
            "subitems": [
 | 
			
		||||
                {
 | 
			
		||||
                    "name": "XING",
 | 
			
		||||
                    "description": "Visit my XING profile",
 | 
			
		||||
                    "icon_class": "bi bi-building",
 | 
			
		||||
                    "href": "https://www.xing.com/profile/Kevin_VeenBirkenbach",
 | 
			
		||||
                    "subitems": []
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                    "name": "LinkedIn",
 | 
			
		||||
                    "description": "Connect on LinkedIn",
 | 
			
		||||
                    "icon_class": "bi bi-linkedin",
 | 
			
		||||
                    "href": "https://www.linkedin.com/in/kevinveenbirkenbach",
 | 
			
		||||
                    "subitems": []
 | 
			
		||||
                    }
 | 
			
		||||
                ]
 | 
			
		||||
            },
 | 
			
		||||
        {
 | 
			
		||||
        "name": "Contact",
 | 
			
		||||
        "description": "Get in touch",
 | 
			
		||||
 
 | 
			
		||||
@@ -66,18 +66,34 @@ h3.footer-title{
 | 
			
		||||
  padding: 0px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dropdown-menu {
 | 
			
		||||
  position: absolute !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dropdown-menu-footer {
 | 
			
		||||
  position: absolute !important;
 | 
			
		||||
  top: auto !important;
 | 
			
		||||
  bottom: 100%; /* Positioniert das Menü über dem Auslöser */
 | 
			
		||||
  transform: translateY(-10px); /* Optional: Sanfter Abstand */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dropdown-submenu {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  list-style: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dropdown-submenu > .dropdown-menu {
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 100%;
 | 
			
		||||
    margin-top: -0.5rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.navbar-nav {
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
/* Stellt sicher, dass Submenüs korrekt positioniert sind */
 | 
			
		||||
.dropdown-submenu {
 | 
			
		||||
  position: relative;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dropdown-submenu > .dropdown-menu {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  left: 100%; /* Positioniert das Submenü rechts vom Hauptmenü */
 | 
			
		||||
  margin-top: -1px;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
<!-- Template for Subitems -->
 | 
			
		||||
{% macro render_subitems(subitems) %}
 | 
			
		||||
    {% for subitem in subitems %}
 | 
			
		||||
        {% if subitems.subitems %}
 | 
			
		||||
        {% if subitem.subitems %}
 | 
			
		||||
            <li class="dropdown-submenu">
 | 
			
		||||
                <a class="dropdown-item dropdown-toggle" href="#" data-bs-toggle="tooltip" title="{{ subitem.description }}">
 | 
			
		||||
                    <i class="{{ subitem.icon_class }}"></i> {{ subitem.name }}
 | 
			
		||||
                </a>
 | 
			
		||||
                <ul class="dropdown-menu">
 | 
			
		||||
                <ul class="dropdown-submenu">
 | 
			
		||||
                    {{ render_subitems(subitem.subitems) }}
 | 
			
		||||
                </ul>
 | 
			
		||||
            </li>
 | 
			
		||||
@@ -48,10 +48,10 @@
 | 
			
		||||
                    {% else %}
 | 
			
		||||
                        <!-- Dropdown Menu -->
 | 
			
		||||
                        <li class="nav-item dropdown">
 | 
			
		||||
                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown{{ loop.index }}" role="button" data-bs-toggle="dropdown" data-bs-toggle="tooltip" title="{{ item.description }}" aria-expanded="false">
 | 
			
		||||
                                <i class="{{ item.icon_class }}"></i> {{ item.name }}
 | 
			
		||||
                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown{{ loop.index }}" role="button" data-bs-toggle="dropdown" data-bs-display="dynamic" data-popper-placement="top" title="{{ item.description }}" aria-expanded="false">
 | 
			
		||||
                                <i class="{{ item.icon_class }}" data-bs-toggle="tooltip"></i> {{ item.name }}
 | 
			
		||||
                            </a>
 | 
			
		||||
                            <ul class="dropdown-menu" aria-labelledby="navbarDropdown{{ loop.index }}">
 | 
			
		||||
                            <ul class="dropdown-menu dropdown-menu-{{menu_type}}" aria-labelledby="navbarDropdown{{ loop.index }}">
 | 
			
		||||
                                {{ render_subitems(item.subitems) }}
 | 
			
		||||
                            </ul>
 | 
			
		||||
                        </li>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user