restructure correctly, add new features, start working on articles
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import Ignite
|
||||
|
||||
struct Button: HTML {
|
||||
private var name: String
|
||||
private var link: String
|
||||
let buttonWidth = 200
|
||||
let buttonHeight = 70
|
||||
|
||||
|
||||
init(name: String = "Hinnen", link: String = "Underground") {
|
||||
self.name = name
|
||||
self.link = link
|
||||
}
|
||||
|
||||
var body: some HTML {
|
||||
Link(name, target: link)
|
||||
.linkStyle(.button)
|
||||
.background(.blue)
|
||||
.border(Color.black, width: 1)
|
||||
.font(.custom("Futura", size: .em(1)))
|
||||
.frame(width: buttonWidth, height: buttonHeight)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
//
|
||||
// LibraryBurroughs.swift
|
||||
// IgniteStarter
|
||||
//
|
||||
// Created by Rory on 5/6/26.
|
||||
//
|
||||
import Ignite
|
||||
|
||||
struct LibraryBurroughs: HTML {
|
||||
var body: some HTML {
|
||||
Group {
|
||||
Text("Edgar Rice Burrough: Barsoom and Amtor")
|
||||
.font(.title2)
|
||||
.horizontalAlignment(.center)
|
||||
Text("""
|
||||
Burroughs wrote these in the early part of the last century, and a they can be challenging to modern readers, both for the writing style and the content. They’re straightforward action, mostly focused on beating the bad guys and getting the girl (who always misunderstands our noble hero).
|
||||
""")
|
||||
HStack(alignment: .top ) {
|
||||
VStack {
|
||||
Text("The Barsoom Series")
|
||||
.font(.title3)
|
||||
List {
|
||||
Link("A Princess of Mars", target: "/epubs/PrincessOfMars.epub")
|
||||
Link("The Gods of Mars", target: "/epubs/GodsOfMars.epub")
|
||||
Link("Warlord of Mars", target: "/epubs/WarlordOfMars.epub")
|
||||
Link("Thuvia, Maid of Mars", target: "/epubs/ThuviaMaidOfMars.epub")
|
||||
Link("Chessmen of Mars", target: "/epubs/ChessmenOfMars.epub")
|
||||
Link("Fighting Man of Mars", target: "/epubs/FightingManOfMars.epub")
|
||||
Link("Swords of Mars", target: "/epubs/SwordsOfMars.epub")
|
||||
Link("Synthetic Men of Mars", target: "/epubs/SyntheticMenOfMars.epub")
|
||||
Link("Llana of Gathol", target: "/epubs/LlanaOfGathol.epub")
|
||||
Link("The Mastermind Of Mars", target: "/epubs/MastermindOfMars.epub")
|
||||
Link("John Carter of Mars", target: "/epubs/JohnCarterOfMars.epub")
|
||||
}
|
||||
.horizontalAlignment(.leading)
|
||||
}
|
||||
VStack {
|
||||
Text("The Amtor Series")
|
||||
.font(.title3)
|
||||
List {
|
||||
Link("Pirates of Venus", target: "/epubs/PiratesOfVenus.epub")
|
||||
Link("Lost on Venus", target: "/epubs/LostOnVenus.epub")
|
||||
Link("Carson of Venus", target: "/epubs/CarsonOfVenus.epub")
|
||||
Link("Escape on Venus", target: "/epubs/EscapeOnVenus.epub")
|
||||
Link("The Wizard of Venus", target: "/epubs/WizardOfVenus.epub")
|
||||
}
|
||||
.horizontalAlignment(.leading)
|
||||
}
|
||||
}
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// LibraryBurroughs.swift
|
||||
// IgniteStarter
|
||||
//
|
||||
// Created by Rory on 5/6/26.
|
||||
//
|
||||
|
||||
|
||||
import Ignite
|
||||
|
||||
struct LibraryChandler: HTML {
|
||||
var body: some HTML {
|
||||
Group {
|
||||
Text("Raymond Chandler")
|
||||
.font(.title2)
|
||||
.horizontalAlignment(.center)
|
||||
Text("""
|
||||
This man writes like an angel. And tells sordid stories of sin and debauchery.
|
||||
""").horizontalAlignment(.leading)
|
||||
VStack{
|
||||
List {
|
||||
Link("The Big Sleep", target: "/epubs/tbs.epub")
|
||||
Link("The Little Sister", target: "/epubs/tls.epub")
|
||||
}
|
||||
.horizontalAlignment(.leading)
|
||||
}
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// LibraryBurroughs.swift
|
||||
// IgniteStarter
|
||||
//
|
||||
// Created by Rory on 5/6/26.
|
||||
//
|
||||
|
||||
|
||||
import Ignite
|
||||
|
||||
struct LibraryGraham: HTML {
|
||||
var body: some HTML {
|
||||
Group {
|
||||
Text("Kenneth Graham")
|
||||
.font(.title2)
|
||||
.horizontalAlignment(.center)
|
||||
Text("""
|
||||
Shoegaze. Soak in the psychodelia.
|
||||
""").horizontalAlignment(.leading)
|
||||
VStack{
|
||||
List {
|
||||
Link("The Wind in the Willows", target: "/epubs/twit.epub")
|
||||
}
|
||||
.horizontalAlignment(.leading)
|
||||
}
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// LibraryBurroughs.swift
|
||||
// IgniteStarter
|
||||
//
|
||||
// Created by Rory on 5/6/26.
|
||||
//
|
||||
|
||||
|
||||
import Ignite
|
||||
|
||||
struct LibraryGray: HTML {
|
||||
var body: some HTML { Group {
|
||||
Text("Zane Gray")
|
||||
.font(.title2)
|
||||
.horizontalAlignment(.center)
|
||||
Text("""
|
||||
I am not a fan of the genre 'Western'. My dad is.
|
||||
""").horizontalAlignment(.leading)
|
||||
VStack{
|
||||
List {
|
||||
Link("The Mysterious Rider", target: "/epubs/mr.epub")
|
||||
}
|
||||
.horizontalAlignment(.leading)
|
||||
}
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// LibraryBurroughs.swift
|
||||
// IgniteStarter
|
||||
//
|
||||
// Created by Rory on 5/6/26.
|
||||
//
|
||||
|
||||
import Ignite
|
||||
|
||||
struct LibraryLovecraft: HTML {
|
||||
var body: some HTML {
|
||||
Group {
|
||||
Text("Howard Phillips Lovecraft")
|
||||
.font(.title2)
|
||||
.horizontalAlignment(.center)
|
||||
Text("""
|
||||
Lovecraft has a cult following, which is funny because he always wrote about cults. He takes a view of a universe in which humanity is not only insignificant, but stands on the edge of doom once beings greater than we take notice.
|
||||
""")
|
||||
VStack{
|
||||
List {
|
||||
Link("At the Mountains of Madness", target: "/epubs/AtTheMountainsOfMadnes.epub")
|
||||
Link("Dagon", target: "/epubs/dagon.epub")
|
||||
Link("The Shadow Over Innsmouth", target: "/epubs/TheShadowOverInnsmouth.epub")
|
||||
Link("Call of Cthulhu", target: "/epubs/CallOfCthulhu.epub")
|
||||
Link("The Innsmouth Look", target: "/epubs/TheInnsmouthLook.epub")
|
||||
}
|
||||
.horizontalAlignment(.leading)
|
||||
Emphasis("(All three in one!)")
|
||||
}
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// LibraryBurroughs.swift
|
||||
// IgniteStarter
|
||||
//
|
||||
// Created by Rory on 5/6/26.
|
||||
//
|
||||
|
||||
import Ignite
|
||||
|
||||
struct LibrarySmith: HTML {
|
||||
var body: some HTML {
|
||||
Group {
|
||||
Text("E.E. \"Doc\" Smith")
|
||||
.font(.title2)
|
||||
.horizontalAlignment(.center)
|
||||
Text("""
|
||||
Just happy adventure stories with strong, exceptional men doing strong, exceptional things. Lensmen became a sort of model for Green Lantern, with its interstellar police who is above the law. I'm not going to defend these as great writing. I'm not going to defend these at all. It's just very juvenile fun.
|
||||
""")
|
||||
VStack{
|
||||
List {
|
||||
Link("Triplanetary", target: "/epubs/triplanetary.epub")
|
||||
Link("First Lensman", target: "/epubs/flen.epub")
|
||||
}
|
||||
.horizontalAlignment(.leading)
|
||||
}
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// LibraryBurroughs.swift
|
||||
// IgniteStarter
|
||||
//
|
||||
// Created by Rory on 5/6/26.
|
||||
//
|
||||
|
||||
|
||||
import Ignite
|
||||
|
||||
struct LibraryWells: HTML {
|
||||
var body: some HTML {
|
||||
Group {
|
||||
Text("H.G. Wells")
|
||||
.font(.title2)
|
||||
.horizontalAlignment(.center)
|
||||
Text("""
|
||||
Wells is the Patron Saint of English Science Fiction. Verne might have been first, but Wells is the man who made it work. His books aren't always what you think. While he was an avid wargamer (he created what we consider one of the first tabletop wargames), he was a pacifist. War of the Worlds was a critique of British Empire building.
|
||||
""")
|
||||
VStack{
|
||||
List {
|
||||
Link("The War of the Worlds", target: "/epubs/twotw.epub")
|
||||
Link("Little Wars", target: "/epubs/LittleWars.epub")
|
||||
}
|
||||
.horizontalAlignment(.leading)
|
||||
}
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import Ignite
|
||||
|
||||
struct Logo: HTML {
|
||||
private var barTitle: String
|
||||
private var underTitle: String
|
||||
|
||||
init(barTitle: String = "Hinnen", underTitle: String = "Underground") {
|
||||
self.barTitle = barTitle
|
||||
self.underTitle = underTitle
|
||||
}
|
||||
|
||||
var body: some HTML {
|
||||
|
||||
// ── Logo ──────────────────────────────────────────────────────────────
|
||||
// Simplified Underground logo using ZStack and SwiftUI-like modifiers
|
||||
VStack {
|
||||
ZStack {
|
||||
// Red circle
|
||||
Text("")
|
||||
.frame(width: 190, height: 190)
|
||||
.background(.red)
|
||||
.cornerRadius(95)
|
||||
.border(.black, width: 1)
|
||||
|
||||
// White circle
|
||||
Text("")
|
||||
.frame(width: 110, height: 110)
|
||||
.background(.white)
|
||||
.cornerRadius(55)
|
||||
.border(.black, width: 1)
|
||||
|
||||
// Blue bar with "Hinnen"
|
||||
VStack {
|
||||
Spacer()
|
||||
Text(barTitle.uppercased())
|
||||
.foregroundStyle(.white)
|
||||
.font(.custom("Futura", size: 33))
|
||||
Spacer()
|
||||
}
|
||||
.frame(width: 214, height: 40, alignment: .center)
|
||||
.background(.blue)
|
||||
.border(.black, width: 1)
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
// "Underground" label beneath
|
||||
Text(underTitle.uppercased())
|
||||
.font(.custom("Futura", size: 25))
|
||||
.frame(width: 214, alignment: .top)
|
||||
.horizontalAlignment(.center)
|
||||
}
|
||||
.frame(width: 214)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
//
|
||||
// Mastodon.swift
|
||||
// IgniteStarter
|
||||
//
|
||||
// Created by Rory on 5/5/26.
|
||||
//
|
||||
|
||||
import Ignite
|
||||
|
||||
struct Mastodon: HTML {
|
||||
var body: some HTML {
|
||||
// ── Mastodon / rel=me links (hidden, for verification) ────────────────
|
||||
Link("", target: "https://twit.social/@roryh")
|
||||
.relationship(.me)
|
||||
.hidden(.responsive(true))
|
||||
Link("", target: "https://mograph.social/@Roryhinnen")
|
||||
.relationship(.me)
|
||||
.hidden(.responsive(true))
|
||||
Link("", target: "https://cinematheque.social/@Rory")
|
||||
.relationship(.me)
|
||||
.hidden(.responsive(true))
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
//
|
||||
// NavBar.swift
|
||||
// IgniteSamples
|
||||
// https://www.github.com/twostraws/Ignite
|
||||
// See LICENSE for license information.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Ignite
|
||||
|
||||
/// Displays a global "Social Footer", with each social icon linking to an
|
||||
/// external site in a new browser tab, demonstrating how to create reusable
|
||||
/// components with builtIn icons, external links and custom attributes.
|
||||
struct SocialFooter: HTML {
|
||||
let icons = [
|
||||
Image(systemName: "github"),
|
||||
Image(systemName: "twitter"),
|
||||
Image(systemName: "youtube"),
|
||||
Image(systemName: "mastodon")
|
||||
]
|
||||
|
||||
let urlStrings = [
|
||||
"https://github.com/twostraws",
|
||||
"https://twitter.com/twostraws",
|
||||
"https://youtube.com/@twostraws",
|
||||
"https://mastodon.social/@twostraws"
|
||||
]
|
||||
|
||||
var body: some HTML {
|
||||
VStack {
|
||||
HStack {
|
||||
ForEach(zip(icons, urlStrings)) { (icon, urlString) in
|
||||
Link(icon, target: urlString)
|
||||
.role(.secondary)
|
||||
.target(.blank)
|
||||
.relationship(.noOpener, .noReferrer)
|
||||
}
|
||||
}
|
||||
}
|
||||
.margin(.top, .xLarge)
|
||||
.font(.title2)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
//
|
||||
// Version Info.swift
|
||||
// IgniteSamples
|
||||
// https://www.github.com/twostraws/Ignite
|
||||
// See LICENSE for license information.
|
||||
//
|
||||
|
||||
import Ignite
|
||||
|
||||
/// Displays the version of Ignite the site was built with and the publishing date.
|
||||
struct VersionInfo: HTML {
|
||||
private let dateFormat = Date.FormatStyle().month(.defaultDigits).day(.defaultDigits).year(.twoDigits)
|
||||
var body: some HTML {
|
||||
Text("\(Ignite.version) · Updated \(Date.now.formatted(dateFormat))")
|
||||
.horizontalAlignment(.center)
|
||||
.foregroundStyle(.gray)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user