<meta name="author" content="IPFire.org - IPFire Development Team" />
<meta name="keywords" content="Linux, Firewall, IPFire, Security, IPCop, Open Source, Free, ARM, VPN, Proxy, IDS, IPS" />
- <meta name="description" content="{{ _("IPFire is a free firewall distribution based on Linux.") }}" />
+
+ <link rel="icon" sizes="192x192" href="{{ static_url("img/apple-touch-icon-192x192-precomposed.png") }}">
+ {% for res in ("72x72", "76x76", "120x120", "144x144", "152x152", "180x180") %}
+ <link rel="apple-touch-icon-precomposed" sizes="{{ res }}" href="{{ static_url("img/apple-touch-icon-%s-precomposed.png" % res )}}">
+ {% end %}
+ <link rel="apple-touch-icon-precomposed" href="{{ static_url("img/apple-touch-icon-60x60-precomposed.png") }}">
<!-- styling stuff -->
<link rel="stylesheet" type="text/css" href="{{ static_url("main.css") }}" />
{% block head %}{% end block %}
</head>
- <body id="page-top">
- <nav class="navbar navbar-dark navbar-expand-lg mb-4">
+ <body class="is-flex is-flex-direction-column">
+ <nav class="navbar" role="navigation" aria-label="main navigation">
<div class="container">
- <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar"
- aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
- <span class="fas fa-bars"></span>
- </button>
-
- <a class="navbar-brand mx-auto" href="/">
- <strong>IPFire</strong> {% block subtitle %}{% end block %}
- </a>
+ <div class="navbar-brand is-size-4">
+ {% if request.path.startswith("/location") %}
+ <a class="navbar-item" href="/location">
+ {% module IPFireLogo("Location") %}
+ </a>
+ {% else %}
+ <a class="navbar-item" href="/">
+ {% if request.path.startswith("/fireinfo") %}
+ {% module IPFireLogo("Fireinfo") %}
+ {% elif hostname.startswith("nopaste.") %}
+ {% module IPFireLogo("NoPaste") %}
+ {% else %}
+ {% module IPFireLogo() %}
+ {% end %}
+ </a>
+ {% end %}
- <div class="collapse navbar-collapse" id="navbar">
- {% block menu %}
- {% module Menu() %}
- {% end block %}
+ <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbarMainMenu">
+ <span aria-hidden="true"></span>
+ <span aria-hidden="true"></span>
+ <span aria-hidden="true"></span>
+ </a>
</div>
+ <div class="navbar-menu" id="navbarMainMenu">
+ {% block menu %}
+ {% if hostname.startswith("www.") or hostname.startswith("dev.") %}
+ <div class="navbar-end">
+ {# Show a search bar for blog #}
+ {% if request.path.startswith("/blog") %}
+ {# Navigation for Blog Authors #}
+ {% if current_user and current_user.is_blog_author() %}
+ <a class="navbar-item is-tab {% if request.path == "/blog/drafts" %}is-active{% end %}" href="/blog/drafts">
+ {{ _("My Drafts") }}
+ </a>
+ {% end %}
- <a class="btn btn-primary btn-donate ml-2 d-none d-sm-block" href="/donate">
- <span class="fas fa-heart"></span> {{ _("Donate") }}
- </a>
- </div>
- </nav>
+ <div class="navbar-item">
+ <form action="/blog" method="GET">
+ <div class="field">
+ <div class="control has-icons-left">
+ <input class="input" type="text"
+ name="q" {% if q %}value="{{ q }}"{% end %}
+ placeholder="{{ _("Search Blog...") }}">
+ <span class="icon is-small is-left">
+ <i class="fas fa-search"></i>
+ </span>
+ </div>
+ </div>
+ </form>
+ </div>
+ {# Show a search bar for docs #}
+ {% elif request.path.startswith("/docs") %}
+ <div class="navbar-item">
+ <form action="/docs/search" method="GET">
+ <div class="field">
+ <div class="control has-icons-left">
+ <input class="input" type="text"
+ name="q" {% if q %}value="{{ q }}"{% end %}
+ placeholder="{{ _("Search Documentation...") }}">
+ <span class="icon is-small is-left">
+ <i class="fas fa-search"></i>
+ </span>
+ </div>
+ </div>
+ </form>
+ </div>
+ {% end %}
- {% block container %}
- <div class="container">
- {% block body %}{% end block %}
- {% block content %}{% end block %}
- </div>
- {% end block %}
+ {# Location #}
+ {% if request.path.startswith("/location") %}
+ <a class="navbar-item is-tab
+ {% if request.path.startswith("/location/how-to-use") %}is-active{% end %}"
+ href="/location/how-to-use">
+ {{ _("How To Use?") }}
+ </a>
- {% block footer %}
- <footer class="footer">
- {% if hostname in ("www.ipfire.org", "blog.ipfire.org", "dev.ipfire.org") %}
- <div class="container pb-3">
- <div class="row mb-6">
- <div class="col-6 col-sm-5 offset-sm-2 col-md-3 offset-md-0 col-lg-2 mb-5">
- <h4>{{ _("About") }}</h4>
-
- <ul class="list-unstyled">
- <li>
- <a href="https://www.ipfire.org/about">{{ _("About IPFire") }}</a>
- </li>
- <li>
- <a href="https://downloads.ipfire.org">{{ _("Download") }}</a>
- </li>
- <li>
- <a href="https://blog.ipfire.org">{{ _("Blog") }}</a>
- </li>
- <li>
- <a href="https://www.ipfire.org/legal">{{ _("Legal") }}</a>
- </li>
- </ul>
- </div>
+ <a class="navbar-item is-tab
+ {% if request.path == "/location/install" %}is-active{% end %}"
+ href="/location/install">
+ {{ _("Install") }}
+ </a>
- <div class="col-6 col-sm-5 col-md-3 col-lg-2 mb-5">
- <h4>{{ _("Support") }}</h4>
-
- <ul class="list-unstyled">
- <li>
- <a href="https://www.ipfire.org/get-support#professional">{{ _("Professional Support") }}</a>
- </li>
- <li>
- <a href="https://wiki.ipfire.org">{{ _("Documentation") }}</a>
- </li>
- </ul>
- </div>
+ <a class="navbar-item is-tab
+ {% if request.path == "/location/report-a-problem" %}is-active{% end %}"
+ href="/location/report-a-problem">
+ {{ _("Report A Problem") }}
+ </a>
- <div class="col-6 col-sm-5 offset-sm-2 col-md-3 offset-md-0 col-lg-2 mb-5">
- <h4>{{ _("Community") }}</h4>
+ {# Main #}
+ {% else %}
+ <a class="navbar-item is-tab {% if request.path == "/about" %}is-active{% end %}" href="/about">{{ _("About") }}</a>
- <ul class="list-unstyled">
- <li>
- <a href="https://forum.ipfire.org">{{ _("Forum") }}</a>
- </li>
- </ul>
- </div>
+ <a class="navbar-item is-tab {% if request.path.startswith("/docs") %}is-active{% end %}" href="/docs">{{ _("Documentation") }}</a>
- <div class="col-6 col-sm-5 col-md-3 col-lg-2 mb-6">
- <h4>{{ _("Development") }}</h4>
+ <a class="navbar-item is-tab {% if request.path.startswith("/download") %}is-active{% end %}" href="/download">{{ _("Download") }}</a>
- <ul class="list-unstyled">
- <li>
- <a href="https://wiki.ipfire.org/devel/start">{{ _("Development") }}</a>
- </li>
- </ul>
- </div>
+ <a class="navbar-item is-tab {% if request.path.startswith("/blog") %}is-active{% end %}" href="/blog">{{ _("Blog") }}</a>
- <div class="col-sm-8 offset-sm-2 col-md-12 offset-md-0 col-lg-4 pt-md-6 pt-lg-1 text-center">
- <a class="btn btn-primary btn-lg" href="//www.ipfire.org/donate">
- <span class="fas fa-heart"></span> {{ _("Donate") }}
- </a>
+ <a class="navbar-item is-tab {% if request.path == "/help" %}is-active{% end %}" href="/help">{{ _("Help") }}</a>
+ {% end %}
+
+ <div class="navbar-item">
+ <a class="button is-lwl has-text-weight-bold is-uppercase"
+ href="https://store.lightningwirelabs.com/?utm_source={{ hostname }}&utm_medium=navigation">
+ {{ _("Buy") }}
+ </a>
+ </div>
- <div class="btn-toolbar justify-content-around col-md-6 offset-md-3">
- <a class="btn btn-lg" href="https://blog.ipfire.org/feed.xml">
- <span class="fas fa-rss"></span>
+ <div class="navbar-item">
+ <a class="button is-primary has-text-weight-bold is-uppercase"
+ href="/donate">
+ {{ _("Donate") }}
</a>
+ </div>
+
+ {% if current_user %}
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link is-arrowless" href="/users/{{ current_user.uid }}">
+ <figure class="image">
+ <img class="is-rounded" style="width: auto" src="{{ current_user.avatar_url(128) }}">
+ </figure>
+ </a>
+
+ <div class="navbar-dropdown">
+ <a class="navbar-item" href="/users/{{ current_user.uid }}/passwd">
+ {{ _("Change Password") }}
+ </a>
+
+ <hr class="navbar-divider">
- <a class="btn btn-lg" href="https://twitter.com/ipfire">
- <span class="fab fa-twitter"></span>
+ <a class="navbar-item" href="/logout">
+ {{ _("Logout")}}
+ </a>
+ </div>
+ </div>
+ {% else %}
+ <a class="navbar-item is-tab" href="/login?next={{ request.path }}">
+ <i class="fas fa-right-to-bracket" title="{{ _("Login") }}"></i>
</a>
+ {% end %}
+ </div>
+ {% elif request.path.startswith("/fireinfo") %}
+ <div class="navbar-end">
+ {% if current_user and current_user.is_staff() %}
+ <a class="navbar-item is-tab {% if request.path.startswith("/admin") %}is-active{% end %}" href="/admin">
+ {{ _("Admin") }}
+ </a>
+ {% end %}
+
+ <a class="navbar-item is-tab {% if request.path.startswith("/vendors") %}is-active{% end %}" href="/vendors">
+ {{ _("Vendors") }}
+ </a>
+ </div>
+ {% elif hostname.startswith("nopaste.") %}
+ <div class="navbar-end">
+ <a class="navbar-item is-tab {% if request.path == "/" %}is-active{% end %}" href="/">
+ {{ _("Paste") }}
+ </a>
- <a class="btn btn-lg" href="https://www.facebook.com/IPFire.org">
- <span class="fab fa-facebook"></span>
+ <a class="navbar-item is-tab {% if request.path == "/upload" %}is-active{% end %}" href="/upload">
+ {{ _("Upload") }}
+ </a>
+ </div>
+ {% end %}
+ {% end block %}
+ </div>
+ </div>
+ </nav>
+
+ <div class="is-flex-grow-1 is-flex-shrink-0">
+ {% block container %}
+ <div class="container">
+ {% block content %}{% end block %}
+ </div>
+ {% end block %}
+ </div>
+
+ {% block footer %}
+ <footer class="footer is-flex-shrink-0">
+ <div class="container">
+ {% if request.path == "/docs" %}
+ <div class="level">
+ <div class="level-left">
+ <div class="level-item">
+ <a href="/docs/recent-changes">
+ {{ _("Recent Changes") }}
</a>
+ </div>
- <a class="btn btn-lg" href="https://youtube.com/user/ipfireproject">
- <span class="fab fa-youtube"></span>
+ {% if current_user %}
+ <div class="level-item">
+ <a href="/docs/watchlist">
+ {{ _("My Watchlist") }}
+ </a>
+ </div>
+ {% end %}
+
+ <div class="level-item">
+ <a href="/docs/tree">
+ {{ _("Tree") }}
</a>
</div>
</div>
</div>
- </div>
- {% end %}
-
- <div class="copyright">
- <div class="container d-flex justify-content-between">
- © {{ year }} - {{ _("IPFire is free software written by the IPFire Project") }}
-
- {% if not current_user and hostname in ("blog.ipfire.org") %}
- <a href="/login">{{ _("Login") }}</a>
- {% elif current_user %}
- <span>
- {{ _("You are currently logged in as %s") % current_user.name }}
- <a href="/logout">{{ _("Logout") }}</a>
- </span>
- {% end %}
+ {% end %}
+
+ <div class="level">
+ <div class="level-left">
+ <div class="level-item">
+ <div class="level is-mobile">
+ <div class="level-item">
+ {{ year }} © IPFire.org
+ </div>
+
+ <div class="level-item">
+ <a href="/legal">{{ _("Legal") }}</a>
+ </div>
+
+ {% if current_user and current_user.is_admin() %}
+ <div class="level-item">
+ <a href="/analytics">{{ _("Analytics") }}</a>
+ </div>
+ {% end %}
+
+ <div class="level-item">
+ <a href="/sitemap">{{ _("Sitemap") }}</a>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="level-right">
+ <div class="level-item">
+ <div class="level is-mobile">
+ <div class="level-item">
+ <a href="https://social.ipfire.org/@news" title="{{ _("Mastodon") }}">
+ <i class="fa-brands fa-mastodon px-2"></i>
+ </a>
+ </div>
+ <div class="level-item">
+ <a href="https://x.com/ipfire" title="{{ _("X") }}">
+ <i class="fa-brands fa-x-twitter px-2"></i>
+ </a>
+ </div>
+ <div class="level-item">
+ <a href="https://linkedin.com/company/ipfire" title="{{ _("LinkedIn") }}">
+ <i class="fa-brands fa-linkedin-in px-2"></i>
+ </a>
+ </div>
+ <div class="level-item">
+ <a href="https://www.facebook.com/IPFire.org/" title="{{ _("Facebook") }}">
+ <i class="fa-brands fa-facebook-f px-2"></i>
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
</div>
</div>
</footer>
{% end block %}
- <script src="{{ static_url("js/jquery-3.3.1.min.js") }}"></script>
- <script src="{{ static_url("js/popper.min.js") }}"></script>
- <script src="{{ static_url("js/bootstrap.min.js") }}"></script>
+ <script src="{{ static_url("js/jquery-3.6.0.min.js") }}"></script>
<script src="{{ static_url("js/site.js") }}"></script>
{% block javascript %}{% end block %}
</body>