cake-order-tracker/server/templates/layout.templ
bronkuu 5a5372b831 templates, handlers, CSS, JS: special cakes UI, HTMX nav, dashboard overhaul
Special cakes UI: overlay drawer, basket integration, catalogue tag
filter, form parsing, JS save/edit/remove.
HTMX navigation: MainContent component, nav links with hx-get,
handlers return partial on HX-Request.
Dashboard: metrics grid, CakeBreakdown, OrderRow with status select,
CakeCounts/OrderCounts, torty filter, tort badge, results-pane.
Collapsible sidebar: toggle button, localStorage, CSS transitions.
Location field: dropdown replaced with pill toggle.
Inline style cleanup: moved to CSS classes (tag-grid, grow, icon.sm,
header-actions, toggle-group, success-icon, etc.).
Dead CSS removal: pagination, status-chip, badge-pill, login-page.
Helpers: exported CakeTitle/OrderTitle, added tagNames, tagIDsComma,
orderItemsDesc, specialCakeDetail, removed unused helpers.
2026-06-15 18:50:21 +02:00

82 lines
2.3 KiB
Text

package templates
templ Layout(title string, header, main templ.Component) {
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>{ title } — Zamówienia ciast</title>
<link rel="stylesheet" href="/static/fonts/inter.css"/>
<link rel="stylesheet" href="/static/fonts/material.css"/>
<link rel="stylesheet" href="/static/style.css"/>
<script src="/static/htmx2.04.js" defer></script>
<script src="/static/order.js"></script>
</head>
<body>
<aside class="sidebar">
@Nav()
</aside>
<main id="main">
<header class="topnav">
<h1>{ title }</h1>
@header
</header>
<div class="main-content">
@main
</div>
</main>
<script>
function filterOrders(input) {
var q = input.value.toLowerCase();
var table = input.closest('.card').querySelector('.data-table');
if (!table) return;
var rows = table.querySelectorAll('tbody tr');
for (var i = 0; i < rows.length; i++) {
var id = rows[i].children[0].textContent.toLowerCase();
var customer = rows[i].children[1].textContent.toLowerCase();
rows[i].style.display = id.includes(q) || customer.includes(q) ? '' : 'none';
}
}
(function() {
function setActiveLink() {
var path = window.location.pathname;
var links = document.querySelectorAll('.link');
for (var i = 0; i < links.length; i++) {
links[i].classList.toggle('active', links[i].getAttribute('href') === path);
}
}
function setSidebarState() {
var collapsed = localStorage.getItem('sidebarCollapsed') === 'true';
document.body.classList.toggle('sidebar-collapsed', collapsed);
}
setActiveLink();
setSidebarState();
document.addEventListener('htmx:afterSettle', setActiveLink);
})();
function toggleSidebar() {
var collapsed = document.body.classList.toggle('sidebar-collapsed');
localStorage.setItem('sidebarCollapsed', collapsed);
}
</script>
</body>
</html>
}
templ MainContent(title string, header, main templ.Component) {
<main id="main">
<title hx-swap-oob="true">{ title } — Zamówienia ciast</title>
<header class="topnav">
<h1>{ title }</h1>
@header
</header>
<div class="main-content">
@main
</div>
</main>
}