147 lines
4.2 KiB
HTML
147 lines
4.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>{% block title %}Document Processor{% endblock %}</title>
|
|
<link rel="stylesheet" href="/static/app.css?v=154">
|
|
<link rel="stylesheet" href="/static/app-shell.css?v=66">
|
|
</head>
|
|
<body>
|
|
<button id="mobile-nav-toggle" class="mobile-nav-toggle" type="button" aria-label="Toggle navigation">
|
|
<span></span><span></span><span></span>
|
|
</button>
|
|
<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 mobileNavToggle = document.getElementById("mobile-nav-toggle");
|
|
const appShell = document.querySelector(".app-shell");
|
|
if (appShell) {
|
|
const toggleNav = () => appShell.classList.toggle("nav-open");
|
|
|
|
if (menuToggle) {
|
|
menuToggle.addEventListener("click", toggleNav);
|
|
menuToggle.addEventListener("keydown", (e) => {
|
|
if (e.key === "Enter" || e.key === " ") {
|
|
e.preventDefault();
|
|
toggleNav();
|
|
}
|
|
});
|
|
}
|
|
|
|
if (mobileNavToggle) {
|
|
mobileNavToggle.addEventListener("click", toggleNav);
|
|
}
|
|
}
|
|
|
|
const modeButtons = document.querySelectorAll("[data-detail-mode]");
|
|
if (modeButtons.length) {
|
|
const body = document.body;
|
|
const key = "documentDetailMobileMode";
|
|
const saved = localStorage.getItem(key) || "split";
|
|
|
|
const applyMode = (mode) => {
|
|
body.classList.remove("detail-mode-split", "detail-mode-preview", "detail-mode-review");
|
|
body.classList.add("detail-mode-" + mode);
|
|
modeButtons.forEach((btn) => {
|
|
btn.classList.toggle("active", btn.dataset.detailMode === mode);
|
|
});
|
|
localStorage.setItem(key, mode);
|
|
};
|
|
|
|
applyMode(saved);
|
|
|
|
modeButtons.forEach((btn) => {
|
|
btn.addEventListener("click", () => applyMode(btn.dataset.detailMode));
|
|
});
|
|
}
|
|
|
|
|
|
const tabButtons = document.querySelectorAll("[data-tab]");
|
|
const tabPanels = document.querySelectorAll("[data-panel]");
|
|
|
|
if (tabButtons.length && tabPanels.length) {
|
|
const activateTab = (tabName) => {
|
|
tabButtons.forEach((btn) => {
|
|
btn.classList.toggle("active", btn.dataset.tab === tabName);
|
|
});
|
|
|
|
tabPanels.forEach((panel) => {
|
|
panel.classList.toggle("active", panel.dataset.panel === tabName);
|
|
});
|
|
};
|
|
|
|
const initialActive =
|
|
document.querySelector(".tab-button.active")?.dataset.tab ||
|
|
"ocr-review";
|
|
|
|
activateTab(initialActive);
|
|
|
|
tabButtons.forEach((btn) => {
|
|
btn.addEventListener("click", () => activateTab(btn.dataset.tab));
|
|
});
|
|
}
|
|
|
|
});
|
|
</script>
|
|
|
|
<script>
|
|
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
const tabButtons = document.querySelectorAll(".right-pane-tabs [data-tab]");
|
|
const tabPanels = document.querySelectorAll(".tab-panel[data-panel]");
|
|
if (!(tabButtons.length && tabPanels.length)) return;
|
|
|
|
const tabKey = "documentDetailActiveTab";
|
|
|
|
const applyTab = (tabName) => {
|
|
tabButtons.forEach((btn) => {
|
|
btn.classList.toggle("active", btn.dataset.tab === tabName);
|
|
});
|
|
tabPanels.forEach((panel) => {
|
|
panel.classList.toggle("active", panel.dataset.panel === tabName);
|
|
});
|
|
localStorage.setItem(tabKey, tabName);
|
|
};
|
|
|
|
const url = new URL(window.location.href);
|
|
const urlTab = url.searchParams.get("tab");
|
|
const savedTab = localStorage.getItem(tabKey);
|
|
const defaultTab =
|
|
urlTab ||
|
|
savedTab ||
|
|
document.querySelector(".right-pane-tabs .tab-button.active")?.dataset.tab ||
|
|
tabButtons[0]?.dataset.tab;
|
|
|
|
if (defaultTab) {
|
|
applyTab(defaultTab);
|
|
}
|
|
|
|
tabButtons.forEach((btn) => {
|
|
btn.addEventListener("click", () => {
|
|
const nextTab = btn.dataset.tab;
|
|
applyTab(nextTab);
|
|
const nextUrl = new URL(window.location.href);
|
|
nextUrl.searchParams.set("tab", nextTab);
|
|
window.history.replaceState({}, "", nextUrl.toString());
|
|
});
|
|
});
|
|
});
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|