@@ -2,14 +2,10 @@ import ActivityClient
22import Dependencies
33import Foundation
44import HTML
5+ import Models
56import Vue
67
78public struct HomePage : Page {
8- struct State : Encodable , Sendable {
9- let codeStyle = 0
10- let selection : Int ? = nil
11- }
12-
139 public let title = " Erik Bautista Santibanez | Portfolio "
1410 public let lang = " en "
1511
@@ -33,74 +29,6 @@ public struct HomePage: Page {
3329 }
3430}
3531
36- private struct SectionView < Content: HTML > : HTML {
37- let codeTag : String
38- let codeHeader : String
39- @HTMLBuilder let content : @Sendable ( ) -> Content
40-
41- private var id : String {
42- codeTag. enumerated ( ) . flatMap { idx, char in
43- [
44- char. isUppercase && idx > 0 ? " - " : nil ,
45- String ( char) . lowercased ( ) ,
46- ]
47- . compactMap ( \. self)
48- }
49- . joined ( )
50- }
51-
52- var body : some HTML {
53- section ( . id( self . id) ) {
54- div {
55- header {
56- CodeTag ( id: self . id, codeTag: self . codeTag)
57- CodeHeader ( codeTag: self . codeTag, codeHeader: self . codeHeader)
58- }
59-
60- self . content ( )
61- }
62- . containerStyling ( )
63- }
64- . wrappedStyling ( )
65- }
66-
67- struct CodeTag : HTML {
68- let id : String
69- let codeTag : String
70-
71- var body : some HTML {
72- pre {
73- a ( . href( " # \( self . id) " ) ) {
74- code { " \( self . codeTag) .swift " }
75- }
76- . inlineStyle ( " color " , " #777 " )
77- }
78- . inlineStyle ( " font-size " , " 0.75em " )
79- . inlineStyle ( " font-weight " , " 500 " )
80- . inlineStyle ( " text-align " , " end " )
81- . inlineStyle ( " padding " , " 1.5rem 1.5rem 0 " )
82- }
83- }
84-
85- struct CodeHeader : HTML {
86- let codeTag : String
87- let codeHeader : String
88-
89- var body : some HTML {
90- pre {
91- code ( . class( " hljs language-swift " ) ) {
92- """
93- /// \( self . codeTag) .swift
94- /// Portfolio
95- \( self . codeHeader)
96- """
97- }
98- }
99- . inlineStyle ( " padding " , " 0.75rem 1.5rem 1.5rem " )
100- }
101- }
102- }
103-
10432private struct UserView : HTML {
10533 @Dependency ( \. activityClient) private var activityClient
10634
@@ -120,21 +48,41 @@ private struct UserView: HTML {
12048 return [ location. city, location. state, location. region == " United States " ? nil : location. region]
12149 . compactMap ( \. self)
12250 . joined ( separator: " , " )
123-
12451 }
12552
53+ @HTMLBuilder
12654 var body : some HTML {
127- SectionView (
128- codeTag: " User " ,
129- codeHeader: """
130- struct User: Portfolio {
131- let name = " Erik Bautista Santibanez "
132- let role = " Mobile & Web Developer "
133- let home = " \( residency ?? . default) " \
134- \( currentLocation. flatMap { " \n let location = \" Currently in \( $0) \" " } ?? " " )
55+ SectionView ( id: " user " ) { lang in
56+ switch lang {
57+ case . swift:
58+ """
59+ let user = User(
60+ name: " Erik Bautista Santibanez " ,
61+ role: " Mobile & Web Developer " ,
62+ home: " \( residency ?? . default) " \
63+ \( currentLocation. flatMap { " , \n location: \" Currently in \( $0) \" " } ?? " " )
64+ )
65+ """
66+ case . typescript:
67+ """
68+ const user = {
69+ name: " Erik Bautista Santibanez " ,
70+ role: " Mobile & Web Developer " ,
71+ home: " \( residency ?? . default) " \
72+ \( currentLocation. flatMap { " , \n location: \" Currently in \( $0) \" " } ?? " " )
73+ };
74+ """
75+ case . rust:
76+ """
77+ let user = Portfolio {
78+ name: " Erik Bautista Santibanez " ,
79+ role: " Mobile & Web Developer " ,
80+ home: " \( residency ?? . default) " \
81+ \( currentLocation. flatMap { " , \n location: \" Currently in \( $0) \" " } ?? " " )
82+ }
83+ """
13584 }
136- """
137- ) {
85+ } content: {
13886 EmptyHTML ( )
13987 }
14088 }
@@ -156,13 +104,22 @@ private struct UserView: HTML {
156104
157105private struct PostsView : HTML {
158106 var body : some HTML {
159- // TODO: Allow changing `fetch(.all)` based on filter.
160- SectionView (
161- codeTag: " DevLogs " ,
162- codeHeader: """
163- var logs: [DevLog] = await fetch(.all)
164- """
165- ) {
107+ SectionView ( id: " dev-logs " ) { lang in
108+ switch lang {
109+ case . swift:
110+ """
111+ let logs: [DevLog] = await fetch(.all)
112+ """
113+ case . typescript:
114+ """
115+ const logs = await fetch(Filter.All)
116+ """
117+ case . rust:
118+ """
119+ let logs = fetch(Filter::All).await
120+ """
121+ }
122+ } content: {
166123 for (num, post) in Post . allCases. enumerated ( ) . reversed ( ) {
167124 PostView ( number: num, post: post)
168125 }
@@ -290,8 +247,7 @@ private struct PostsView: HTML {
290247 struct PostLinkView : HTML {
291248 let link : Post . Link
292249
293- @HTMLBuilder
294- var body : some HTML {
250+ @HTMLBuilder var body : some HTML {
295251 a (
296252 . href( self . link. href) ,
297253 . target( . blank) ,
0 commit comments