+1
gleam.toml
+1
gleam.toml
+5
-1
manifest.toml
+5
-1
manifest.toml
···
11
11
{ name = "gleam_community_colour", version = "1.4.0", build_tools = ["gleam"], requirements = ["gleam_json", "gleam_stdlib"], otp_app = "gleam_community_colour", source = "hex", outer_checksum = "795964217EBEDB3DA656F5EB8F67D7AD22872EB95182042D3E7AFEF32D3FD2FE" },
12
12
{ name = "gleam_crypto", version = "1.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_crypto", source = "hex", outer_checksum = "ADD058DEDE8F0341F1ADE3AAC492A224F15700829D9A3A3F9ADF370F875C51B7" },
13
13
{ name = "gleam_erlang", version = "0.25.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_erlang", source = "hex", outer_checksum = "054D571A7092D2A9727B3E5D183B7507DAB0DA41556EC9133606F09C15497373" },
14
+
{ name = "gleam_fetch", version = "0.4.0", build_tools = ["gleam"], requirements = ["gleam_http", "gleam_javascript", "gleam_stdlib"], otp_app = "gleam_fetch", source = "hex", outer_checksum = "7446410A44A1D1328F5BC1FF4FC9CBD1570479EA69349237B3F82E34521CCC10" },
14
15
{ name = "gleam_http", version = "3.6.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_http", source = "hex", outer_checksum = "8C07DF9DF8CC7F054C650839A51C30A7D3C26482AC241C899C1CEA86B22DBE51" },
15
16
{ name = "gleam_httpc", version = "2.2.0", build_tools = ["gleam"], requirements = ["gleam_http", "gleam_stdlib"], otp_app = "gleam_httpc", source = "hex", outer_checksum = "CF76C71002DEECF6DC5D9CA83D962728FAE166B57926BE442D827004D3C7DF1B" },
17
+
{ name = "gleam_javascript", version = "0.8.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_javascript", source = "hex", outer_checksum = "14D5B7E1A70681E0776BF0A0357F575B822167960C844D3D3FA114D3A75F05A8" },
16
18
{ name = "gleam_json", version = "1.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib", "thoas"], otp_app = "gleam_json", source = "hex", outer_checksum = "9063D14D25406326C0255BDA0021541E797D8A7A12573D849462CAFED459F6EB" },
17
19
{ name = "gleam_otp", version = "0.10.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "0B04FE915ACECE539B317F9652CAADBBC0F000184D586AAAF2D94C100945D72B" },
18
20
{ name = "gleam_package_interface", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_json", "gleam_stdlib"], otp_app = "gleam_package_interface", source = "hex", outer_checksum = "52A721BCA972C8099BB881195D821AAA64B9F2655BECC102165D5A1097731F01" },
···
26
28
{ name = "logging", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "logging", source = "hex", outer_checksum = "A996064F04EF6E67F0668FD0ACFB309830B05D0EE3A0C11BBBD2D4464334F792" },
27
29
{ name = "lustre", version = "4.2.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_json", "gleam_otp", "gleam_stdlib"], otp_app = "lustre", source = "hex", outer_checksum = "258F876CD7AB12C2C773F1A30F76DFC0A0ED989B720070DF32FC0717A6A0E60C" },
28
30
{ name = "lustre_dev_tools", version = "1.3.2", build_tools = ["gleam"], requirements = ["argv", "filepath", "fs", "gleam_community_ansi", "gleam_erlang", "gleam_http", "gleam_httpc", "gleam_json", "gleam_otp", "gleam_package_interface", "gleam_stdlib", "glint", "glisten", "mist", "simplifile", "spinner", "term_size", "tom", "wisp"], otp_app = "lustre_dev_tools", source = "hex", outer_checksum = "CC8F46BCE51C1349862C5F6BA0075B0C68096B866ED1C520B60358FAAB398B60" },
31
+
{ name = "lustre_http", version = "0.5.2", build_tools = ["gleam"], requirements = ["gleam_fetch", "gleam_http", "gleam_javascript", "gleam_json", "gleam_stdlib", "lustre"], otp_app = "lustre_http", source = "hex", outer_checksum = "FB0478CBFA6B16DBE8ECA326DAE2EC15645E04900595EF2C4F039ABFA0512ABA" },
29
32
{ name = "lustre_ui", version = "0.6.0", build_tools = ["gleam"], requirements = ["gleam_community_colour", "gleam_json", "gleam_stdlib", "lustre"], otp_app = "lustre_ui", source = "hex", outer_checksum = "FA1F9E89D89CDD5DF376ED86ABA8A38441CB2E664CD4D402F22A49DA4D7BB56D" },
30
33
{ name = "marceau", version = "1.1.0", build_tools = ["gleam"], requirements = [], otp_app = "marceau", source = "hex", outer_checksum = "1AAD727A30BE0F95562C3403BB9B27C823797AD90037714255EEBF617B1CDA81" },
31
34
{ name = "mist", version = "1.2.0", build_tools = ["gleam"], requirements = ["birl", "gleam_erlang", "gleam_http", "gleam_otp", "gleam_stdlib", "glisten", "gramps", "hpack_erl", "logging"], otp_app = "mist", source = "hex", outer_checksum = "109B4D64E68C104CC23BB3CC5441ECD479DD7444889DA01113B75C6AF0F0E17B" },
···
42
45
]
43
46
44
47
[requirements]
45
-
birl = { version = ">= 1.7.0 and < 2.0.0"}
48
+
birl = { version = ">= 1.7.0 and < 2.0.0" }
46
49
gleam_stdlib = { version = ">= 0.34.0 and < 2.0.0" }
47
50
gleeunit = { version = ">= 1.0.0 and < 2.0.0" }
48
51
lustre = { version = ">= 4.2.0 and < 5.0.0" }
49
52
lustre_dev_tools = { version = ">= 1.3.2 and < 2.0.0" }
53
+
lustre_http = { version = ">= 0.5.2 and < 1.0.0"}
50
54
lustre_ui = { version = ">= 0.6.0 and < 1.0.0" }
51
55
modem = { version = ">= 1.1.0 and < 2.0.0" }
+26
src/website.gleam
+26
src/website.gleam
···
13
13
import website/common
14
14
import website/posts
15
15
import website/projects
16
+
import gleam/dynamic
17
+
import lustre_http
16
18
17
19
// Main
18
20
···
30
32
current_route: Route,
31
33
posts: List(posts.Post(Msg)),
32
34
projects: List(projects.Project(Msg)),
35
+
repositories: List(Repository)
33
36
)
34
37
}
35
38
···
53
56
@external(javascript, "./ffi.mjs", "switch_theme")
54
57
fn do_switch_theme() -> Nil
55
58
59
+
type Repository {
60
+
Repository(
61
+
avatar_url: String,
62
+
description: String,
63
+
name: String,
64
+
stars_count: Int,
65
+
)
66
+
}
67
+
68
+
fn get_repositories() -> Effect(Msg) {
69
+
let url = "https://codeberg.org/api/v1/users/naomi/repos"
70
+
let decoder = dynamic.list(of: dynamic.decode4(
71
+
Repository,
72
+
dynamic.field("avatar_url", dynamic.string),
73
+
dynamic.field("description", dynamic.string),
74
+
dynamic.field("name", dynamic.string),
75
+
dynamic.field("stars_count", dynamic.int)
76
+
))
77
+
lustre_http.get(url, lustre_http.expect_json(decoder, ApiGotRepositories))
78
+
}
79
+
56
80
fn switch_theme() -> Effect(Msg) {
57
81
effect.from(fn(disp) {
58
82
do_switch_theme()
···
101
125
OnRouteChange(Route)
102
126
ChangeDarkMode
103
127
DoneChangeDarkMode
128
+
ApiGotRepositories(Result(List(Repository), lustre_http.HttpError))
104
129
}
105
130
106
131
fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) {
···
111
136
)
112
137
ChangeDarkMode -> #(model, switch_theme())
113
138
DoneChangeDarkMode -> #(model, effect.none())
139
+
ApiGotRepositories -> #(model, effect.none())
114
140
}
115
141
}
116
142