document-processor/app/templates/base.html

65 lines
2.2 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}Document Processor{% endblock %}</title>
<link rel="stylesheet" href="/static/app.css?v=26">
<link rel="stylesheet" href="/static/app-shell.css?v=26">
</head>
<body>
<div class="app-shell">
{% include "partials/sidebar.html" %}
{% include "partials/header.html" %}
<main class="main">
<div class="main-content">
{% block content %}{% endblock %}
</div>
</main>
</div>
<script>
document.addEventListener("DOMContentLoaded", () => {
const menuToggle = document.getElementById("menu-toggle");
const appShell = document.querySelector(".app-shell");
if (menuToggle && appShell) {
const toggleNav = () => appShell.classList.toggle("nav-open");
menuToggle.addEventListener("click", toggleNav);
menuToggle.addEventListener("keydown", (e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
toggleNav();
}
});
}
const tabButtons = document.querySelectorAll("[data-tab]");
const tabPanels = document.querySelectorAll("[data-panel]");
if (tabButtons.length && tabPanels.length) {
const activateTab = (target) => {
tabButtons.forEach((btn) => {
btn.classList.toggle("active", btn.getAttribute("data-tab") === target);
});
tabPanels.forEach((panel) => {
panel.classList.toggle("active", panel.getAttribute("data-panel") === target);
});
};
tabButtons.forEach((btn) => {
btn.addEventListener("click", () => {
const target = btn.getAttribute("data-tab");
activateTab(target);
const url = new URL(window.location.href);
url.searchParams.set("tab", target);
window.history.replaceState({}, "", url.toString());
});
});
}
});
</script>
</body>
</html>