Everywhere: Create basic test page
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
import Elementary
|
||||
|
||||
struct ErrorPage: HTML {
|
||||
var status: String
|
||||
var reason: String
|
||||
|
||||
// -------------------------------------
|
||||
|
||||
var content: some HTML {
|
||||
div {
|
||||
p { "Error "; strong { status }; "." }
|
||||
p { reason }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
import Elementary
|
||||
|
||||
struct IndexPage: HTML {
|
||||
var content: some HTML {
|
||||
h1 { "Welcome to Our Website" }
|
||||
p {
|
||||
"This is a basic Bootstrap page with a sticky navigation bar and content in the middle."
|
||||
}
|
||||
p { "The navigation bar will stay at the top of the page as you scroll down." }
|
||||
p {
|
||||
"""
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tincidunt arcu
|
||||
sit amet leo rutrum luctus. Sed metus mi, consectetur vitae dui at, sodales
|
||||
dignissim odio. Curabitur a nisi eros. Suspendisse semper ac justo non gravida.
|
||||
Vestibulum accumsan interdum varius. Morbi at diam luctus, mattis mi nec, mollis
|
||||
libero. Pellentesque habitant morbi tristique senectus et netus et malesuada
|
||||
fames ac turpis egestas. Integer congue, nisl in tempus ultricies, ligula est
|
||||
laoreet elit, sed elementum erat dui ac nisl. Aenean pulvinar arcu eget urna
|
||||
venenatis, at dictum arcu ultrices. Etiam hendrerit, purus vitae sagittis
|
||||
lobortis, nisi sapien vestibulum arcu, ut mattis arcu elit ut arcu. Nulla vitae
|
||||
sem ac eros ullamcorper efficitur ut id arcu. Vestibulum euismod arcu eget
|
||||
aliquet tempor. Nullam nec consequat magna. Etiam posuere, ipsum id condimentum
|
||||
mollis, massa libero efficitur lectus, nec tempor mauris tellus ut ligula.
|
||||
Quisque viverra diam velit, quis ultricies nisl lacinia vitae.
|
||||
|
||||
Aliquam libero nibh, luctus vel augue at, congue feugiat risus. Mauris volutpat
|
||||
eget eros ac congue. Duis venenatis, arcu vel sodales accumsan, diam mi posuere
|
||||
mi, vitae rutrum ex mauris nec libero. Sed eleifend nulla magna, eu lobortis
|
||||
mauris fringilla nec. In posuere dignissim eros, ut hendrerit quam lacinia eu.
|
||||
Praesent vestibulum arcu enim, hendrerit convallis risus facilisis eu. Nunc
|
||||
vitae mauris eu nulla laoreet rhoncus. Nullam ligula tellus, vulputate in
|
||||
viverra nec, eleifend eu nulla. Praesent suscipit rutrum imperdiet.
|
||||
|
||||
Curabitur in lacus eu diam cursus viverra non eget turpis. Donec a ornare ipsum,
|
||||
sed egestas orci. Vivamus congue gravida elementum. Pellentesque vitae mauris
|
||||
magna. Phasellus blandit urna vitae auctor consectetur. Aenean iaculis eget arcu
|
||||
vitae ultricies. Nunc maximus, massa hendrerit faucibus fringilla, eros quam
|
||||
consequat enim, sit amet sodales erat quam eget massa.
|
||||
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum in venenatis
|
||||
urna. Vestibulum lectus arcu, scelerisque in ipsum vitae, feugiat cursus tortor.
|
||||
Maecenas aliquam nunc enim, id fringilla est mattis et. Vivamus vitae
|
||||
ullamcorper erat. Sed quis vehicula felis, quis bibendum nunc. Duis semper
|
||||
fermentum ante, id fermentum neque varius convallis. Donec dui leo, fringilla
|
||||
nec massa nec, fermentum molestie purus. Donec eget feugiat velit. Nulla
|
||||
facilisi. Cras maximus felis eu libero mollis consectetur. Nulla molestie vitae
|
||||
neque venenatis porta.
|
||||
|
||||
Vestibulum nunc diam, mattis eu bibendum at, sagittis vitae nunc. Duis lacinia
|
||||
sodales enim, et elementum libero posuere et. Donec ut fringilla orci. Donec at
|
||||
aliquet ipsum, quis mattis risus. Donec malesuada enim in egestas blandit. Proin
|
||||
sagittis mauris magna, elementum faucibus metus tempus eu. Sed in sem ut tellus
|
||||
porta luctus et sed diam. Donec felis ante, euismod a est vitae, mollis
|
||||
condimentum nulla.
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
import Elementary
|
||||
|
||||
extension MainLayout: Sendable where Body: Sendable {}
|
||||
struct MainLayout<Body: HTML>: HTMLDocument {
|
||||
var title: String
|
||||
@HTMLBuilder var pageContent: Body // This var name can't be changed!
|
||||
|
||||
// https://www.srihash.org/
|
||||
var head: some HTML {
|
||||
meta(.charset(.utf8))
|
||||
meta(.name(.viewport), .content("width=device-width, initial-scale=1.0"))
|
||||
|
||||
// ---------------------------------
|
||||
// CSS includes
|
||||
|
||||
link(
|
||||
.rel(.stylesheet),
|
||||
.href("https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/css/bootstrap.min.css"),
|
||||
.integrity("sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH"),
|
||||
.crossorigin(.anonymous))
|
||||
link(.rel(.stylesheet), .href("/style.css"))
|
||||
|
||||
style {
|
||||
"""
|
||||
body {
|
||||
padding-top: 56px;
|
||||
}
|
||||
"""
|
||||
}
|
||||
}
|
||||
|
||||
var body: some HTML {
|
||||
// ---------------------------------
|
||||
// Header
|
||||
|
||||
header {
|
||||
NavMenu()
|
||||
}
|
||||
|
||||
// ---------------------------------
|
||||
// Body
|
||||
|
||||
main {
|
||||
div(.class("cotainer mt-4")) {
|
||||
div(.class("content px-4 pb-4")) {
|
||||
pageContent
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------
|
||||
// JS includes
|
||||
|
||||
script(
|
||||
.src(
|
||||
"https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/js/bootstrap.bundle.min.js"),
|
||||
.integrity("sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"),
|
||||
.crossorigin(.anonymous)
|
||||
) {}
|
||||
script(.src("/js/site.js")) {}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
import Elementary
|
||||
|
||||
struct NavMenu: HTML {
|
||||
var content: some HTML {
|
||||
nav(.class("navbar navbar-expand-lg navbar-light bg-light fixed-top")) {
|
||||
div(.class("container-fluid")) {
|
||||
a(.class("navbar-brand"), .href("#")) { "Logo" }
|
||||
button(
|
||||
.class("navbar-toggler"), .type(.button),
|
||||
.data("bs-toggle", value: "collapse"),
|
||||
.data("bs-target", value: "#navbarNav")
|
||||
) {
|
||||
span(.class("navbar-toggler-icon")) {}
|
||||
}
|
||||
div(.class("collapse navbar-collapse"), .id("navbarNav")) {
|
||||
ul(.class("navbar-nav me-auto mb-2 mb-lg-0")) {
|
||||
li(.class("nav-item")) {
|
||||
a(.class("nav-link active"), .href("#")) { "Home" }
|
||||
}
|
||||
li(.class("nav-item")) {
|
||||
a(.class("nav-link"), .href("#")) { "About" }
|
||||
}
|
||||
li(.class("nav-item")) {
|
||||
a(.class("nav-link"), .href("#")) { "Services" }
|
||||
}
|
||||
li(.class("nav-item")) {
|
||||
a(.class("nav-link"), .href("#")) { "Contact" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user