It starts to do something

master
LEdoian 1 week ago
parent 70779a91ca
commit 0e215cf008

@ -0,0 +1,4 @@
im queer: aro, enby/agen, acespec
i love tea: oolongs, pu erh, sencha
computer toucher

@ -0,0 +1,50 @@
<!--
# queer_ledoian
[![Package Version](https://img.shields.io/hexpm/v/queer_ledoian)](https://hex.pm/packages/queer_ledoian)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/queer_ledoian/)
```sh
gleam add queer_ledoian@1
```
```gleam
import queer_ledoian
pub fn main() {
// TODO: An example of the project in use
}
```
Further documentation can be found at <https://hexdocs.pm/queer_ledoian>.
## Development
```sh
gleam run # Run the project
gleam test # Run the tests
```
-->
# My queer page
This is a (wip) page, not dissimilar to [pronouns.page](https://pronouns.page), [pronouns.cc](https://pronouns.cc) &c. that describes my queerness.
I wanted to have a way of describing my quirks (queerks? :-P) in more detail, since labels are not everything and sometimes the conventional understanding implies stuff that are different for me (e.g. my trans-ness involves little to no dysphoria and there are no transition plans). Also, Czech language is heavily gendered, so I need more space to describe stuff than “just setting 5 pronouns”.
And I wanted to have a testing project in Gleam (and Lustre in this case) <!-- TODO links -->
## Running
```sh
gleam build
python3 -m http.server # or any other server for local static files
badwolf http://localhost:8000 # or other browser
```
## Deployment
None yet. I'll see if I can deploy this in a similar way to [my blog](https://blog.ledoian.cz/about-blog.html).
## Tests
I accidentally deleted the default ones, so there are none :3

@ -0,0 +1,21 @@
name = "queer_ledoian"
target = "javascript"
version = "1.0.0"
# Fill out these fields if you intend to generate HTML documentation or publish
# your project to the Hex package manager.
#
# description = ""
# licences = ["Apache-2.0"]
# repository = { type = "github", user = "", repo = "" }
# links = [{ title = "Website", href = "" }]
#
# For a full reference of all the available options, you can have a look at
# https://gleam.run/writing-gleam/gleam-toml/.
[dependencies]
gleam_stdlib = ">= 0.34.0 and < 2.0.0"
[dev-dependencies]
gleeunit = ">= 1.0.0 and < 2.0.0"
lustre = ">= 4.6.1 and < 5.0.0"

@ -0,0 +1,14 @@
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>TODO: title</title>
<script type=module>
import * as qle from "./build/dev/javascript/queer_ledoian/queer_ledoian.mjs";
qle.main();
</script>
</head>
<body>
<main id=lustre-app></main>
</body>
</html>

@ -0,0 +1,16 @@
# This file was generated by Gleam
# You typically do not need to edit this file
packages = [
{ name = "gleam_erlang", version = "0.30.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_erlang", source = "hex", outer_checksum = "760618870AE4A497B10C73548E6E44F43B76292A54F0207B3771CBB599C675B4" },
{ name = "gleam_json", version = "2.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "CB10B0E7BF44282FB25162F1A24C1A025F6B93E777CCF238C4017E4EEF2CDE97" },
{ name = "gleam_otp", version = "0.14.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "5A8CE8DBD01C29403390A7BD5C0A63D26F865C83173CF9708E6E827E53159C65" },
{ name = "gleam_stdlib", version = "0.43.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "69EF22E78FDCA9097CBE7DF91C05B2A8B5436826D9F66680D879182C0860A747" },
{ name = "gleeunit", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "F7A7228925D3EE7D0813C922E062BFD6D7E9310F0BEE585D3A42F3307E3CFD13" },
{ name = "lustre", version = "4.6.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_json", "gleam_otp", "gleam_stdlib"], otp_app = "lustre", source = "hex", outer_checksum = "486C3CFBD126939CAD2CA8B92A979A2DAADA5BABAA62BF2B163CD21E257BD4A1" },
]
[requirements]
gleam_stdlib = { version = ">= 0.34.0 and < 2.0.0" }
gleeunit = { version = ">= 1.0.0 and < 2.0.0" }
lustre = { version = ">= 4.6.1 and < 5.0.0" }

@ -0,0 +1,64 @@
import gleam/bool
import gleam/io
import gleam/list
import lustre
import lustre/attribute
import lustre/element.{type Element}
import lustre/element/html
import lustre/event
pub fn main() {
io.println("Hello from queer_ledoian!")
let app = lustre.simple(init, update, view)
let assert Ok(_) = lustre.start(app, "#lustre-app", Nil)
}
type Msg = Int
type Bit {
Bit(closed: Element(Msg), open: Element(Msg))
}
type Model {
Model(bits: List(Bit), states: List(Bool))
}
fn init(_opts) {
let bits = [
Bit(html.text("Agender"), html.text("Hi I'm agen lol")),
]
let states = list.map(bits, fn(_) {False})
Model(bits: bits, states: states)
}
fn flip_at(list: List(Bool), index: Int) -> List(Bool) {
list.index_map(list, fn(elem, idx) {
// This worked too ig, but xor is fancy :-D
// case idx {
// idx if idx == index -> !elem
// _ -> elem
// }
bool.exclusive_or(elem, idx == index)
})
}
fn update(model, msg) {
Model(..model, states: flip_at(model.states, msg))
}
fn view(model: Model) {
html.div([], // no attributes, can style `main > div` or sth
list.zip(model.bits, model.states)
|> list.index_map(fn(bitstate: #(Bit, Bool), index) {
let #(bit, state) = bitstate
let style = case state {
True -> [#("display", "block")]
False -> [#("display", "none")]
}
html.div([attribute.class("bit")], [ // FIXME: This is like a lot of divs. Could we learn to alter stuff from the Model?
html.div([event.on_click(index)], [bit.closed]),
html.div([attribute.style(style)], [bit.open]),
])
})
)
}
Loading…
Cancel
Save