Files
vapor-po/Sources/App/Views/Main.swift

76 lines
1.4 KiB
Swift

import Elementary
import ElementaryHTMX
struct MainPage<Inner: HTML>: SendableHTMLDocument where Inner: Sendable {
var title: String { "Purchase Orders" }
var lang: String { "en" }
let inner: Inner
let displayNav: Bool
let routeHeader: RouteHeaderView
init(
displayNav: Bool = false,
route: ViewRoute,
_ inner: () -> Inner
) {
self.displayNav = displayNav
self.routeHeader = .init(route: route)
self.inner = inner()
}
var head: some HTML {
meta(.charset(.utf8))
script(.src("https://unpkg.com/htmx.org@2.0.4")) {}
script(.src("/js/main.js")) {}
link(.rel(.stylesheet), .href("/css/main.css"))
}
var body: some HTML {
header(.class("header")) {
Logo()
if displayNav {
Navbar()
}
}
routeHeader
inner
}
}
struct RouteHeaderView: HTML {
let title: String
let description: String
init(title: String, description: String) {
self.title = title
self.description = description
}
init(route: ViewRoute) {
self.init(title: route.title, description: route.description)
}
var content: some HTML {
div(.class("container"), .style("padding: 20px 20px;")) {
h1 { title }
br()
p(.class("secondary")) { i { description } }
br()
}
}
}
struct Logo: HTML, Sendable {
var content: some HTML {
div(.id("logo")) {
"HHE - Purchase Orders"
}
}
}
protocol SendableHTMLDocument: HTMLDocument, Sendable {}