aboutsummaryrefslogtreecommitdiff
path: root/docs/src/app.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'docs/src/app.gleam')
-rw-r--r--docs/src/app.gleam137
1 files changed, 0 insertions, 137 deletions
diff --git a/docs/src/app.gleam b/docs/src/app.gleam
deleted file mode 100644
index d448ef7..0000000
--- a/docs/src/app.gleam
+++ /dev/null
@@ -1,137 +0,0 @@
-// IMPORTS ---------------------------------------------------------------------
-
-import app/layout
-import gleam/function
-import gleam/map.{Map}
-import lustre
-import lustre/attribute
-import lustre/effect.{Effect}
-import lustre/element.{Element}
-import lustre/element/html
-
-// MAIN ------------------------------------------------------------------------
-
-pub fn main(route: Route) -> fn(Msg) -> Nil {
- let app = lustre.application(init, update, view)
- let assert Ok(dispatch) = lustre.start(app, "body", route)
-
- dispatch
-}
-
-// MODEL -----------------------------------------------------------------------
-
-type Model {
- Model(route: Route, content: String, history: Map(String, String))
-}
-
-fn init(route: Route) -> #(Model, Effect(Msg)) {
- let content = ""
- let history = map.new()
- let model = Model(route, content, history)
- let effects = case route.path {
- "/" -> fetch_post("/docs/quickstart", history)
- _ -> fetch_post(route.path, history)
- }
-
- #(model, effects)
-}
-
-// UPDATE ----------------------------------------------------------------------
-
-pub type Msg {
- OnRouteChange(Route)
- GotPost(String, String)
-}
-
-pub type Route {
- Route(path: String, hash: String)
-}
-
-fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) {
- // We need to do this because Gleam doesn't support record field access in
- // guards just yet.
- let current_path = model.route.path
-
- case msg {
- OnRouteChange(Route(path: "/", hash: _) as route) -> #(
- Model(..model, route: route),
- fetch_post("/docs/quickstart", model.history),
- )
-
- // Only fetch the markdown
- OnRouteChange(Route(path: path, hash: _) as route) if path != current_path -> #(
- Model(..model, route: route),
- fetch_post(path, model.history),
- )
-
- GotPost(path, content) -> #(
- Model(
- ..model,
- content: content,
- history: map.insert(model.history, path, content),
- ),
- effect.none(),
- )
- }
-}
-
-fn fetch_post(path: String, history: Map(String, String)) -> Effect(Msg) {
- use dispatch <- effect.from
-
- case map.get(history, path) {
- Ok(content) -> dispatch(GotPost(path, content))
- Error(_) ->
- fetch_post_content(path, function.compose(GotPost(path, _), dispatch))
- }
-}
-
-@external(javascript, "./app.ffi.mjs", "fetch_post")
-fn fetch_post_content(path: String, dispatch: fn(String) -> Nil) -> Nil
-
-// VIEW ------------------------------------------------------------------------
-
-fn view(model: Model) -> Element(Msg) {
- case model.route.path {
- "/" ->
- html.body(
- [],
- [
- html.div(
- [
- attribute.class(
- "w-screen h-screen flex justify-center items-center",
- ),
- attribute.style([
- #("background-color", "hsla(226,0%,100%,1)"),
- #(
- "background-image",
- " radial-gradient(at 62% 13%, hsla(170,76%,60%,1) 0px, transparent 65%),
- radial-gradient(at 67% 42%, hsla(234,89%,70%,1) 0px, transparent 65%),
- radial-gradient(at 10% 7%, hsla(213,93%,57%,1) 0px, transparent 65%),
- radial-gradient(at 32% 46%, hsla(291,93%,80%,1) 0px, transparent 65%)",
- ),
- ]),
- ],
- [
- html.hgroup(
- [],
- [
- html.h1(
- [attribute.class("text-8xl")],
- [element.text("Lustre.")],
- ),
- html.p(
- [attribute.class("pl-1")],
- [element.text("Web apps from space!")],
- ),
- ],
- ),
- ],
- ),
- layout.docs_section(model.content),
- ],
- )
-
- _ -> layout.docs_page(model.content)
- }
-}