62 lines
1.6 KiB
Elm
62 lines
1.6 KiB
Elm
module Main exposing (main)
|
|
|
|
import Browser
|
|
import Random
|
|
import Html exposing (Html, button, div, p, text)
|
|
import Html.Attributes exposing (disabled, hidden)
|
|
import Html.Events exposing (onClick)
|
|
import GenderFriends exposing (altBlumBlumShub, getPolygenderWithLength, renderPolygender)
|
|
|
|
constant a b = a
|
|
|
|
main = Browser.element
|
|
{ init = init
|
|
, update = update
|
|
, subscriptions = constant Sub.none
|
|
, view = view
|
|
}
|
|
|
|
type Model
|
|
= AwaitingSeed
|
|
| Ready Int {- seed -} Int {- regeneration count -}
|
|
|
|
type Msg
|
|
= SetSeed Int
|
|
| Regenerate
|
|
|
|
init : () -> (Model, Cmd Msg)
|
|
init _ = (AwaitingSeed, Random.generate SetSeed (Random.int 2147483648 4294967296))
|
|
|
|
update : Msg -> Model -> (Model, Cmd Msg)
|
|
update msg model =
|
|
let
|
|
newModel =
|
|
case msg of
|
|
SetSeed seed -> Ready seed 0
|
|
Regenerate -> case model of
|
|
AwaitingSeed -> AwaitingSeed
|
|
Ready oldSeed regenCount -> Ready (altBlumBlumShub oldSeed) (regenCount + 1)
|
|
in
|
|
(newModel, Cmd.none)
|
|
|
|
viewStr : Model -> String
|
|
viewStr model = case model of
|
|
AwaitingSeed -> "...loading..."
|
|
Ready seed regenCount ->
|
|
let
|
|
(gender, newSeed) = getPolygenderWithLength regenCount seed
|
|
genderStr = if regenCount == 75 then "queer platonic partners" else renderPolygender gender
|
|
in "do u think a ouppy and a kittys could be " ++ genderStr ++ ",,?"
|
|
|
|
view : Model -> Html Msg
|
|
view model =
|
|
div []
|
|
[ p [] [ text (viewStr model) ]
|
|
, button
|
|
( case model of
|
|
AwaitingSeed -> []
|
|
Ready _ 75 -> [disabled True, hidden True]
|
|
Ready _ _ -> [onClick Regenerate]
|
|
)
|
|
[ text "make it gayer" ]
|
|
] |