feat: Adds footer with copyright info.

This commit is contained in:
2026-01-14 19:02:10 -05:00
parent 658ea9f12e
commit 9b5b891744
6 changed files with 102 additions and 40 deletions

View File

@@ -6457,6 +6457,9 @@
.min-h-full { .min-h-full {
min-height: 100%; min-height: 100%;
} }
.min-h-screen {
min-height: 100vh;
}
.btn-wide { .btn-wide {
@layer daisyui.l1.l2 { @layer daisyui.l1.l2 {
width: 100%; width: 100%;
@@ -6594,6 +6597,9 @@
.min-w-\[220px\] { .min-w-\[220px\] {
min-width: 220px; min-width: 220px;
} }
.min-w-full {
min-width: 100%;
}
.flex-1 { .flex-1 {
flex: 1; flex: 1;
} }
@@ -7164,6 +7170,10 @@
border-style: var(--tw-border-style); border-style: var(--tw-border-style);
border-width: 1px; border-width: 1px;
} }
.border-t {
border-top-style: var(--tw-border-style);
border-top-width: 1px;
}
.border-b { .border-b {
border-bottom-style: var(--tw-border-style); border-bottom-style: var(--tw-border-style);
border-bottom-width: 1px; border-bottom-width: 1px;
@@ -7281,6 +7291,9 @@
border-color: currentColor; border-color: currentColor;
} }
} }
.border-base-100 {
border-color: var(--color-base-100);
}
.border-error { .border-error {
border-color: var(--color-error); border-color: var(--color-error);
} }
@@ -7441,6 +7454,9 @@
.bg-base-100 { .bg-base-100 {
background-color: var(--color-base-100); background-color: var(--color-base-100);
} }
.bg-base-200 {
background-color: var(--color-base-200);
}
.bg-base-300 { .bg-base-300 {
background-color: var(--color-base-300); background-color: var(--color-base-300);
} }
@@ -9481,6 +9497,16 @@
color: var(--color-white); color: var(--color-white);
} }
} }
.sm\:footer-horizontal {
@media (width >= 40rem) {
@layer daisyui.l1.l2 {
grid-auto-flow: column;
&.footer-center {
grid-auto-flow: row dense;
}
}
}
}
.md\:grid-cols-2 { .md\:grid-cols-2 {
@media (width >= 48rem) { @media (width >= 48rem) {
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));

View File

@@ -86,7 +86,7 @@ extension ViewController.Request {
let inner = await inner() let inner = await inner()
let theme = await self.theme let theme = await self.theme
return MainPage(theme: theme) { return MainPage(displayFooter: displayFooter, theme: theme) {
inner inner
} }
} }
@@ -98,6 +98,15 @@ extension ViewController.Request {
return try? await database.userProfile.fetch(user.id)?.theme return try? await database.userProfile.fetch(user.id)?.theme
} }
} }
var displayFooter: Bool {
switch route {
case .login, .signup:
return false
default:
return true
}
}
} }
extension SiteRoute.View.ProjectRoute { extension SiteRoute.View.ProjectRoute {

View File

@@ -26,7 +26,9 @@ struct DuctSizingView: HTML, Sendable {
} }
Row { Row {
h2(.class("text-2xl font-bold")) { "Trunk Sizes" } h2(.class("text-2xl font-bold")) {
"Trunk / Runout Sizes"
}
PlusButton() PlusButton()
.attributes( .attributes(

View File

@@ -1,5 +1,6 @@
import Elementary import Elementary
import ElementaryHTMX import ElementaryHTMX
import Foundation
import ManualDCore import ManualDCore
import Styleguide import Styleguide
@@ -10,11 +11,14 @@ public struct MainPage<Inner: HTML>: SendableHTMLDocument where Inner: Sendable
let inner: Inner let inner: Inner
let theme: Theme? let theme: Theme?
let displayFooter: Bool
init( init(
displayFooter: Bool = true,
theme: Theme? = nil, theme: Theme? = nil,
_ inner: () -> Inner _ inner: () -> Inner
) { ) {
self.displayFooter = displayFooter
self.theme = theme self.theme = theme
self.inner = inner() self.inner = inner()
} }
@@ -25,6 +29,12 @@ public struct MainPage<Inner: HTML>: SendableHTMLDocument where Inner: Sendable
""" """
} }
private var keywords: String {
"""
duct, hvac, duct-design, duct design, manual-d, manual d, design
"""
}
public var head: some HTML { public var head: some HTML {
meta(.charset(.utf8)) meta(.charset(.utf8))
meta(.name(.viewport), .content("width=device-width, initial-scale=1.0")) meta(.name(.viewport), .content("width=device-width, initial-scale=1.0"))
@@ -38,6 +48,7 @@ public struct MainPage<Inner: HTML>: SendableHTMLDocument where Inner: Sendable
meta(.content("summary_large_image"), .name("twitter:card")) meta(.content("summary_large_image"), .name("twitter:card"))
meta(.content("1536"), .name("og:image:width")) meta(.content("1536"), .name("og:image:width"))
meta(.content("1024"), .name("og:image:height")) meta(.content("1024"), .name("og:image:height"))
meta(.content(keywords), .name(.keywords))
script(.src("https://unpkg.com/htmx.org@2.0.8")) {} script(.src("https://unpkg.com/htmx.org@2.0.8")) {}
script(.src("/js/main.js")) {} script(.src("/js/main.js")) {}
link(.rel(.stylesheet), .href("/css/output.css")) link(.rel(.stylesheet), .href("/css/output.css"))
@@ -70,10 +81,27 @@ public struct MainPage<Inner: HTML>: SendableHTMLDocument where Inner: Sendable
} }
public var body: some HTML { public var body: some HTML {
div(.class("h-screen w-full")) { div(.class("flex flex-col min-h-screen min-w-full")) {
div(.class("overflow-auto")) { main(.class("overflow-auto grow")) {
inner inner
} }
if displayFooter {
footer(
.class(
"""
footer sm:footer-horizontal footer-center
bg-base-300 text-base-content p-4
"""
)
) {
aside {
p {
"Copyright © \(Date().description.prefix(4)) - All rights reserved by Michael Housh"
}
}
}
}
} }
.attributes(.data("theme", value: theme?.rawValue ?? "default"), when: theme != nil) .attributes(.data("theme", value: theme?.rawValue ?? "default"), when: theme != nil)
} }

View File

@@ -82,7 +82,6 @@ extension ProjectView {
ul(.class("w-full")) { ul(.class("w-full")) {
li(.class("flex w-full")) { li(.class("flex w-full")) {
row( row(
title: "Project", title: "Project",

View File

@@ -72,7 +72,6 @@ struct RoomsView: HTML, Sendable {
SHRForm(projectID: projectID, sensibleHeatRatio: sensibleHeatRatio) SHRForm(projectID: projectID, sensibleHeatRatio: sensibleHeatRatio)
div(.class("overflow-x-auto")) {
table(.class("table table-zebra text-lg"), .id("roomsTable")) { table(.class("table table-zebra text-lg"), .id("roomsTable")) {
thead { thead {
tr(.class("text-lg font-bold")) { tr(.class("text-lg font-bold")) {
@@ -117,7 +116,6 @@ struct RoomsView: HTML, Sendable {
} }
} }
} }
}
RoomForm(dismiss: true, projectID: projectID, room: nil) RoomForm(dismiss: true, projectID: projectID, room: nil)
} }
} }