It starts to do something
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
|
||||||
|
|
||||||
|
[](https://hex.pm/packages/queer_ledoian)
|
||||||
|
[](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…
Reference in New Issue