88 lines
3.2 KiB
HTML
88 lines
3.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta http-equiv="encoding" charset="utf-8" />
|
|
{# Show the setup name, as set in the config file, as tab title. Don't escape HTML entities. #}
|
|
<title>{{ setupname|safe }}</title>
|
|
<link rel="stylesheet" href="/static/css/bootstrap.min.css" />
|
|
<link rel="stylesheet" href="/static/css/matemat.css"/>
|
|
<link rel="stylesheet" href="/static/css/theme.css"/>
|
|
<script src="/static/js/bootstrap.bundle.min.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<header class="navbar navbar-expand-lg navbar-dark bg-dark">
|
|
{% block header %}
|
|
|
|
<nav class="container-fluid">
|
|
<a class="navbar-brand" href="/">{{ setupname|safe }}</a>
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-collapse" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navbar-collapse">
|
|
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
|
<li class="nav-item"><a href="/" class="nav-link"></i>Home</a></li>
|
|
{# Show a link to the settings, if a user logged in via password (authlevel 2). #}
|
|
{% if authuser is defined and authlevel|default(0) > 1 %}
|
|
<li class="nav-item"><a href="/settings" class="nav-link">Settings</a></li>
|
|
{% if authuser.is_admin and authlevel|default(0) > 2 %}
|
|
<li class="nav-item"><a href="/admin" class="nav-link">Administration</a></li>
|
|
<li class="nav-item"><a href="/statistics" class="nav-link">Sales Statistics</a></li>
|
|
{% endif %}
|
|
{% endif %}
|
|
{# Login/Logout buttons #}
|
|
{% if authuser is defined %}
|
|
<li class="nav-item justify-content-end"><a href="/logout" class="nav-link">Logout</a></li>
|
|
{% else %}
|
|
<li class="nav-item justify-content-end"><a href="/login" class="nav-link">Login</a></li>
|
|
{% if signup|default(false) %}
|
|
<li class="nav-item justify-content-end"><a href="/signup" class="nav-link">Signup</a></li>
|
|
{% endif %}
|
|
{% endif %}
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
{% endblock %}
|
|
</header>
|
|
|
|
<main class="container-fluid pb-5 pt-3">
|
|
{% block notifications %}
|
|
{% for n in notifications | default([]) %}
|
|
<div class="alert {{ n.classes | join(' ') }}" role="alert">
|
|
{{ n.msg|safe }}
|
|
</div>
|
|
{% endfor %}
|
|
{% endblock %}
|
|
{% block main %}
|
|
{# Here be content. #}
|
|
{% endblock %}
|
|
</main>
|
|
|
|
<footer class="fixed-bottom p-3 bg-light">
|
|
{% block footer %}
|
|
<div class="text-muted">
|
|
{{ setupname|safe }} | Matemat {{ __version__ }}
|
|
</div>
|
|
{% endblock %}
|
|
</footer>
|
|
|
|
{% if barcodewebsocket %}
|
|
<script>
|
|
function connect() {
|
|
let socket = new WebSocket("{{ barcodewebsocket }}");
|
|
socket.onclose = () => { setTimeout(connect, 1000); };
|
|
socket.onmessage = function (e) {
|
|
// Focus this tab - requires https://git.kabelsalat.ch/ccc-basel/barcode-utils
|
|
if (typeof window.extension_tabfocus === "function") {
|
|
window.extension_tabfocus();
|
|
}
|
|
{% block barcodewebsocket %}{% endblock %}
|
|
};
|
|
}
|
|
window.addEventListener("load", () => { connect(); });
|
|
</script>
|
|
{% endif %}
|
|
</body>
|
|
</html>
|