diff --git a/bun.lockb b/bun.lockb index 2facdd2..95304ef 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/gleam.toml b/gleam.toml index 107e1ba..613306b 100644 --- a/gleam.toml +++ b/gleam.toml @@ -14,15 +14,16 @@ target = "javascript" # https://gleam.run/writing-gleam/gleam-toml/. [dependencies] -gleam_stdlib = ">= 0.34.0 and < 2.0.0" -jot = ">= 2.0.0 and < 3.0.0" +gleam_stdlib = ">= 0.60.0 and < 2.0.0" +jot = ">= 5.0.0 and < 6.0.0" simplifile = ">= 2.2.0 and < 3.0.0" -lustre = ">= 4.6.3 and < 5.0.0" +lustre = ">= 5.1.0 and < 6.0.0" birl = ">= 1.8.0 and < 2.0.0" argv = ">= 1.0.2 and < 2.0.0" -glen = ">= 2.2.1 and < 3.0.0" -gleam_javascript = ">= 0.13.0 and < 1.0.0" -glen_node = ">= 0.0.2 and < 1.0.0" +# glen = ">= 2.2.1 and < 3.0.0" +gleam_javascript = ">= 1.0.0 and < 2.0.0" +gleam_time = ">= 1.2.0 and < 2.0.0" +# glen_node = ">= 0.0.2 and < 1.0.0" [dev-dependencies] gleeunit = ">= 1.0.0 and < 2.0.0" diff --git a/manifest.toml b/manifest.toml index 9c44431..5cb24ac 100644 --- a/manifest.toml +++ b/manifest.toml @@ -4,36 +4,31 @@ packages = [ { name = "argv", version = "1.0.2", build_tools = ["gleam"], requirements = [], otp_app = "argv", source = "hex", outer_checksum = "BA1FF0929525DEBA1CE67256E5ADF77A7CDDFE729E3E3F57A5BDCAA031DED09D" }, { name = "birl", version = "1.8.0", build_tools = ["gleam"], requirements = ["gleam_regexp", "gleam_stdlib", "ranger"], otp_app = "birl", source = "hex", outer_checksum = "2AC7BA26F998E3DFADDB657148BD5DDFE966958AD4D6D6957DD0D22E5B56C400" }, - { name = "conversation", version = "1.4.3", build_tools = ["gleam"], requirements = ["gleam_http", "gleam_javascript", "gleam_stdlib"], otp_app = "conversation", source = "hex", outer_checksum = "908B46F60444442785A495197D482558AD8B849C3714A38FAA1940358CC8CCCD" }, - { name = "filepath", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "67A6D15FB39EEB69DD31F8C145BB5A421790581BD6AA14B33D64D5A55DBD6587" }, - { name = "gleam_community_ansi", version = "1.4.2", build_tools = ["gleam"], requirements = ["gleam_community_colour", "gleam_regexp", "gleam_stdlib"], otp_app = "gleam_community_ansi", source = "hex", outer_checksum = "479DEDC748D08B310C9FEB9C4CBEC46B95C874F7F4F2844304D6D20CA78A8BB5" }, - { name = "gleam_community_colour", version = "1.4.1", build_tools = ["gleam"], requirements = ["gleam_json", "gleam_stdlib"], otp_app = "gleam_community_colour", source = "hex", outer_checksum = "386CB9B01B33371538672EEA8A6375A0A0ADEF41F17C86DDCB81C92AD00DA610" }, - { name = "gleam_erlang", version = "0.33.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_erlang", source = "hex", outer_checksum = "A1D26B80F01901B59AABEE3475DD4C18D27D58FA5C897D922FCB9B099749C064" }, - { name = "gleam_http", version = "3.7.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_http", source = "hex", outer_checksum = "8A70D2F70BB7CFEB5DF048A2183FFBA91AF6D4CF5798504841744A16999E33D2" }, - { name = "gleam_javascript", version = "0.13.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_javascript", source = "hex", outer_checksum = "F98328FCF573DA6F3A35D7F6CB3F9FF19FD5224CCBA9151FCBEAA0B983AF2F58" }, - { name = "gleam_json", version = "2.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "C55C5C2B318533A8072D221C5E06E5A75711C129E420DD1CE463342106012E5D" }, - { name = "gleam_otp", version = "0.16.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "FA0EB761339749B4E82D63016C6A18C4E6662DA05BAB6F1346F9AF2E679E301A" }, - { name = "gleam_regexp", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_regexp", source = "hex", outer_checksum = "A3655FDD288571E90EE9C4009B719FEF59FA16AFCDF3952A76A125AF23CF1592" }, - { name = "gleam_stdlib", version = "0.52.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "50703862DF26453B277688FFCDBE9DD4AC45B3BD9742C0B370DB62BC1629A07D" }, + { name = "filepath", version = "1.1.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "filepath", source = "hex", outer_checksum = "B06A9AF0BF10E51401D64B98E4B627F1D2E48C154967DA7AF4D0914780A6D40A" }, + { name = "gleam_erlang", version = "0.34.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_erlang", source = "hex", outer_checksum = "0C38F2A128BAA0CEF17C3000BD2097EB80634E239CE31A86400C4416A5D0FDCC" }, + { name = "gleam_javascript", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_javascript", source = "hex", outer_checksum = "EF6C77A506F026C6FB37941889477CD5E4234FCD4337FF0E9384E297CB8F97EB" }, + { name = "gleam_json", version = "3.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "5BA154440B22D9800955B1AB854282FA37B97F30F409D76B0824D0A60C934188" }, + { name = "gleam_otp", version = "0.16.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_stdlib"], otp_app = "gleam_otp", source = "hex", outer_checksum = "50DA1539FC8E8FA09924EB36A67A2BBB0AD6B27BCDED5A7EF627057CF69D035E" }, + { name = "gleam_regexp", version = "1.1.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_regexp", source = "hex", outer_checksum = "9C215C6CA84A5B35BB934A9B61A9A306EC743153BE2B0425A0D032E477B062A9" }, + { name = "gleam_stdlib", version = "0.60.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "621D600BB134BC239CB2537630899817B1A42E60A1D46C5E9F3FAE39F88C800B" }, + { name = "gleam_time", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_time", source = "hex", outer_checksum = "D71F1AFF7FEB534FF55E5DC58E534E9201BA75A444619788A2E4DEA4EBD87D16" }, { name = "gleam_yielder", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_yielder", source = "hex", outer_checksum = "8E4E4ECFA7982859F430C57F549200C7749823C106759F4A19A78AEA6687717A" }, - { name = "gleeunit", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "F7A7228925D3EE7D0813C922E062BFD6D7E9310F0BEE585D3A42F3307E3CFD13" }, - { name = "glen", version = "2.2.1", build_tools = ["gleam"], requirements = ["conversation", "filepath", "gleam_community_ansi", "gleam_http", "gleam_javascript", "gleam_stdlib", "marceau"], otp_app = "glen", source = "hex", outer_checksum = "836E324CD4604E19C04469156F3CAD71A5E26619582D2257DC6CD7B8D97D174E" }, - { name = "glen_node", version = "0.0.2", build_tools = ["gleam"], requirements = ["gleam_javascript", "glen"], otp_app = "glen_node", source = "hex", outer_checksum = "D2157D1E38B0963945E55F99E8C3F95FDA494DD1D3DF8DBF3A3744C4E501EA80" }, - { name = "jot", version = "2.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "jot", source = "hex", outer_checksum = "81E61DA896901BFC0522DCFB14C661B6C70F0664C01D8B461F5F9B1A9E965FD4" }, - { name = "lustre", version = "4.6.3", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_json", "gleam_otp", "gleam_stdlib"], otp_app = "lustre", source = "hex", outer_checksum = "BDF833368F6C8F152F948D5B6A79866E9881CB80CB66C0685B3327E7DCBFB12F" }, - { name = "marceau", version = "1.3.0", build_tools = ["gleam"], requirements = [], otp_app = "marceau", source = "hex", outer_checksum = "2D1C27504BEF45005F5DFB18591F8610FB4BFA91744878210BDC464412EC44E9" }, + { name = "gleeunit", version = "1.3.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "A7DD6C07B7DA49A6E28796058AA89E651D233B357D5607006D70619CD89DAAAB" }, + { name = "houdini", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "houdini", source = "hex", outer_checksum = "5BA517E5179F132F0471CB314F27FE210A10407387DA1EA4F6FD084F74469FC2" }, + { name = "jot", version = "5.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "houdini", "splitter"], otp_app = "jot", source = "hex", outer_checksum = "2C1B30CC00B0D79F904028F48229C0BB354F3C1BC05EE99D4F3D423E223D85BF" }, + { name = "lustre", version = "5.1.0", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_json", "gleam_otp", "gleam_stdlib", "houdini"], otp_app = "lustre", source = "hex", outer_checksum = "A0ADD4D936A49EE2CEBB8070F39058009122F0321D4B5445843D56E54875ECD8" }, { name = "ranger", version = "1.4.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "gleam_yielder"], otp_app = "ranger", source = "hex", outer_checksum = "C8988E8F8CDBD3E7F4D8F2E663EF76490390899C2B2885A6432E942495B3E854" }, - { name = "simplifile", version = "2.2.0", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "0DFABEF7DC7A9E2FF4BB27B108034E60C81BEBFCB7AB816B9E7E18ED4503ACD8" }, + { name = "simplifile", version = "2.2.1", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "C88E0EE2D509F6D86EB55161D631657675AA7684DAB83822F7E59EB93D9A60E3" }, + { name = "splitter", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "splitter", source = "hex", outer_checksum = "128FC521EE33B0012E3E64D5B55168586BC1B9C8D7B0D0CA223B68B0D770A547" }, ] [requirements] argv = { version = ">= 1.0.2 and < 2.0.0" } birl = { version = ">= 1.8.0 and < 2.0.0" } -gleam_javascript = { version = ">= 0.13.0 and < 1.0.0" } -gleam_stdlib = { version = ">= 0.34.0 and < 2.0.0" } +gleam_javascript = { version = ">= 1.0.0 and < 2.0.0" } +gleam_stdlib = { version = ">= 0.60.0 and < 2.0.0" } +gleam_time = { version = ">= 1.2.0 and < 2.0.0" } gleeunit = { version = ">= 1.0.0 and < 2.0.0" } -glen = { version = ">= 2.2.1 and < 3.0.0" } -glen_node = { version = ">= 0.0.2 and < 1.0.0" } -jot = { version = ">= 2.0.0 and < 3.0.0" } -lustre = { version = ">= 4.6.3 and < 5.0.0" } +jot = { version = ">= 5.0.0 and < 6.0.0" } +lustre = { version = ">= 5.1.0 and < 6.0.0" } simplifile = { version = ">= 2.2.0 and < 3.0.0" } diff --git a/package.json b/package.json index 5e89b5b..01b7eb4 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "promptbox", "type": "module", - "version": "1.0.0", - "description": "[![Package Version](https://img.shields.io/hexpm/v/promptbox)](https://hex.pm/packages/promptbox) [![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/promptbox/)", + "version": "1.1.0", + "description": "", "main": "index.js", "directories": { "test": "test" @@ -15,7 +15,7 @@ "author": "", "license": "ISC", "devDependencies": { - "@chouqueth/gleam": "^1.7.0" + "@chouqueth/gleam": "^1.9.0" }, "dependencies": { "@tailwindcss/postcss": "^4.0.1", diff --git a/priv/posts/flight.md b/priv/posts/flight.md new file mode 100644 index 0000000..2741d56 --- /dev/null +++ b/priv/posts/flight.md @@ -0,0 +1,39 @@ +--- +title: Flight +week: 14 +date: 2025-04-08 +--- +precisely folded, in a pack,\ +strapped on tight to adventurer's back:\ +this daredevil I serve,\ +as we fall, twist, and swerve + +I'm gripped by her brain,\ +always up in this plane:\ +in my strength she can trust,\ +leaning back, a strong gust + +we fall, free and wild,\ +lucidity like a child:\ +my time coming soon,\ +together, we're attuned + +all at once, familiar tug,\ +I spread out, a broad rug:\ +the wind beneath my sails,\ +slowed, the view details + +down lower we float,\ +no longer remote:\ +we land safe on the shore,\ +fold and reset me once more ++++ +I leap with hand on withers as my guide\ +To hoist myself atop his scaly back\ +I find my place there saddled forward loin\ +Now braced with hand on pommel stapped to crest + +With small squeeze I sign for a swift rise\ +A bold rush to great hight by wings beat\ +I'm struck by the sharp bite of cold wind\ +And weights ease that lifts me in deep dive diff --git a/priv/posts/obsession.md b/priv/posts/obsession.md new file mode 100644 index 0000000..f70e33f --- /dev/null +++ b/priv/posts/obsession.md @@ -0,0 +1,23 @@ +--- +title: Obsession +week: 17 +date: 2025-04-29 +--- +the rolling thought of\ +everything, that keeps me up at\ +night, led by errant\ +realities, that are not so\ +real, deranged --\ +obsessive, wondering as to my\ +fate, which others don't\ +consider, it could all end\ +tomorrow, I will feel\ +better ++++ +An itch that just doesn't fade\ +Even if scratch is made\ +Till my skin is frayed + +I ignored, though it stayed\ +Even when thoughts strayed\ +My obsession unswayed diff --git a/priv/posts/secret-garden.md b/priv/posts/secret-garden.md index eff8740..bbe4b4b 100644 --- a/priv/posts/secret-garden.md +++ b/priv/posts/secret-garden.md @@ -1,7 +1,7 @@ --- title: Secret Garden week: 13 -date: 2024-04-01 +date: 2025-04-01 --- The landscape was filled with hidings aplenty. Even though strange happenings often occurred here, curious people came in droves each summer. Lush greens and vibrant purples blanketed rich earth. Trees hushed solemnly. What if they found out what was drawing them all in?\ "This place is incredible," I heard my next victims exclaim. After their footsteps stilled, I lurched out and grabbed them, two unexpecting lovers. Leaves crunched under heavy foot as I dragged them back to my home. The garden around us laughed wickedly, another story to savour. diff --git a/priv/posts/souvenir.md b/priv/posts/souvenir.md new file mode 100644 index 0000000..38b553c --- /dev/null +++ b/priv/posts/souvenir.md @@ -0,0 +1,38 @@ +--- +title: Souvenir +week: 18 +date: 2025-05-06 +--- +purple elephant cup,\ +rock from the office\ +alien planet magnet,\ +crystals, here before us + +amongst my life,\ +I find these things,\ +wherever I dare go\ +when I'm in strife,\ +their memory clings,\ +not really just for show + +leftover lego pieces,\ +skirt from Vanuatu\ +worked-on wooden box,\ +trinkets, I bought two + +deep and hidden,\ +they hide away,\ +pretend to disappear\ +history unwritten,\ +hard to convey,\ +a lifelong souvenir ++++ +A plush ape of joy immature\ +Tropical lamps to help endure\ +Twisted glass of latent allure\ +And golden flakes that's so unsure + +All these items held souvenir\ +For memories kept ever dear\ +Recalling times no longer here\ +So the feelings can persevere diff --git a/priv/posts/susceptible.md b/priv/posts/susceptible.md new file mode 100644 index 0000000..c41585e --- /dev/null +++ b/priv/posts/susceptible.md @@ -0,0 +1,51 @@ +--- +title: Susceptible +week: 16 +date: 2025-04-22 +--- +you are not immune,\ +your blind spots will prevail -\ +the evil's out to get us,\ +hook, thorn, lie and trail + +'I'm not the problem,' you say with pride,\ +to anyone who listens -\ +but while you turn your back to them,\ +they're pulling out munitions + +'I don't think there's an issue,'\ +you declare without a search -\ +it's easy to miss the war\ +from up there on that perch + +'these people just complain too much,'\ +you moan and whinge and spout -\ +how lucky you are to live a life\ +with little to grumble about + +'supports are good, I guess,\ +but some people are just bludging,'\ +when all this push comes to shove,\ +it's you that we'll be judging + +look within, think for yourself,\ +you've been far too susceptible\ +in ignorance you may feel bliss,\ +but disregard proves unacceptable ++++ +Dressed up nice, but why I'm unsure\ +To mourn a man I met not knew\ +Yet I'll attend and act mature\ +And show grief even if untrue + +Sitting worried how it appears\ +Given the lack of woe I've shown\ +I see her there, eyes full of tears\ +Such I feel welling in my own\ +In this I discover new fears\ +Of a world where I'm not alone + +An effect which I was aware\ +Yet for myself was skeptical\ +In this bizarre awkward affair\ +I've found myself susceptible diff --git a/priv/posts/violence.md b/priv/posts/violence.md new file mode 100644 index 0000000..eb208a9 --- /dev/null +++ b/priv/posts/violence.md @@ -0,0 +1,39 @@ +--- +title: Violence +week: 15 +date: 2025-04-15 +--- +I don't want to write about violence\ +it's much too hard to think about\ +all the pain and hurt we give each other\ +concealed with hate and doubt + +a raging river, the endless stream\ +we all fall in sometimes\ +perpetrator, victim too\ +complex connection paradigms + +it's normal here, will always be\ +at least that's how it seems\ +so many find this status quo\ +is something of their dreams + +mild mannered monsters\ +hiding in plain sight\ +they lie in wait, unknowing\ +they'll set your life alight ++++ +An act so vile\ +Not done to one\ +But rather left\ +To quell an it + +The triumph felt\ +May quench the fear\ +Of notions found\ +On premise false + +But if allowed\ +To declass one\ +The wound that's dealt\ +Will shackle all diff --git a/priv/posts/voyage.md b/priv/posts/voyage.md new file mode 100644 index 0000000..745da74 --- /dev/null +++ b/priv/posts/voyage.md @@ -0,0 +1,34 @@ +--- +title: Voyage +week: 19 +date: 2025-05-13 +--- +humongous high beam waves\ +crashing with a roar\ +lashing on our hull\ +beneath the cabin floor + +across the sea we travel\ +destinations not so near\ +this voyage gently carried\ +by unrelenting fear + +land on the horizon\ +speaks out to us with hope\ +peered at from afar\ +with brass and glass turned scope + +the ending's now in sight\ +as we wash up by the dock\ +bashed and bruised and battered\ +our sea-torn home-bound flock ++++ +Sails filled with billows, spurring our bows breach\ +The morns brisk wind brings waves of frigid spray\ +Maintaining course, sail trimmed for a beam reach.\ +Our only trace a wake in quick decay + +At nights fall surrounded by glistening\ +The starry reflections on moving seas\ +But ye beware of late night listening\ +The sirens song turns sweet the bitter breeze diff --git a/src/promptbox/devserver.gleam b/src/promptbox/devserver.gleam index 285b164..5753671 100644 --- a/src/promptbox/devserver.gleam +++ b/src/promptbox/devserver.gleam @@ -1,4 +1,4 @@ -import birl +import gleam/time/calendar import lustre import lustre/element/html import promptbox/parser @@ -29,7 +29,7 @@ fn view(_model) { slug: "ebben-flow", title: "ebben flow", week: 1, - date: birl.now(), + date: calendar.Date(1970, calendar.January, 1), post_p: "No", post_j: "OK", ), diff --git a/src/promptbox/parser.gleam b/src/promptbox/parser.gleam index 61420ef..bed6234 100644 --- a/src/promptbox/parser.gleam +++ b/src/promptbox/parser.gleam @@ -1,9 +1,9 @@ -import birl import gleam/dict import gleam/int import gleam/list import gleam/result import gleam/string +import gleam/time/calendar import jot pub type Post { @@ -11,7 +11,7 @@ pub type Post { slug: String, title: String, week: Int, - date: birl.Time, + date: calendar.Date, post_p: String, post_j: String, ) @@ -19,6 +19,7 @@ pub type Post { pub fn parse_post(slug: String, content: String) -> Post { let assert [_, frontmatter, posts] = string.split(content, "---\n") + let frontmatter = frontmatter |> string.split("\n") @@ -27,7 +28,8 @@ pub fn parse_post(slug: String, content: String) -> Post { False -> Error(Nil) True -> { let assert [key, value] = - string.split(entry, ":") |> list.map(string.trim) + string.split(entry, ":") + |> list.map(string.trim) Ok(#(key, value)) } @@ -49,9 +51,25 @@ pub fn parse_post(slug: String, content: String) -> Post { |> result.try(int.parse) |> result.unwrap(-1), date: dict.get(frontmatter, "date") - |> result.try(birl.parse) - |> result.unwrap(birl.now()), + |> result.try(parse_date) + |> result.unwrap(calendar.Date(1970, calendar.January, 1)), post_p:, post_j:, ) } + +fn parse_date(time_str: String) -> Result(calendar.Date, Nil) { + case + time_str + |> string.split("-") + |> list.filter_map(int.parse) + { + [year, month, date] + if year > 2000 && month > 0 && month < 13 && date > 0 && date < 31 + -> { + let assert Ok(month) = calendar.month_from_int(month) + Ok(calendar.Date(year, month, date)) + } + _ -> Error(Nil) + } +} diff --git a/src/promptbox/web.gleam b/src/promptbox/web.gleam index 6eaeebc..3c08908 100644 --- a/src/promptbox/web.gleam +++ b/src/promptbox/web.gleam @@ -1,6 +1,7 @@ import gleam/int import gleam/list import lustre/attribute.{attribute, class} +import lustre/element import lustre/element/html import promptbox/parser @@ -30,20 +31,24 @@ pub fn home(posts: List(parser.Post)) { } pub fn individual(post: parser.Post) { - html.div([class("container px-4 mx-auto")], [prompt_element(post)]) + html.div([class("container px-4 mx-auto")], [prompt_element(post)]) } fn prompt_element(post: parser.Post) { html.article([class("post py-8"), attribute.id(post.slug)], [ - html.h2([class("prompt_title text-center text-4xl font-bold italic mb-1")], [html.text(post.title)]), - html.h5([class("prompt_week text-center italic text-slate-700 mb-5")], [html.text("Week " <> int.to_string(post.week))]), + html.h2([class("prompt_title text-center text-4xl font-bold italic mb-1")], [ + html.a([attribute.href("/prompts/" <> post.slug)], [html.text(post.title)]), + ]), + html.h5([class("prompt_week text-center italic text-slate-700 mb-5")], [ + html.text("Week " <> int.to_string(post.week)), + ]), html.div([class("flex flex-col")], [ html.article([class("prose text-left")], [ - html.div([attribute("dangerous-unescaped-html", post.post_p)], []), + element.unsafe_raw_html("", "div", [], post.post_p), html.cite([class("text-slate-800")], [html.text("~ P")]), ]), html.article([class("prose text-right self-end")], [ - html.div([attribute("dangerous-unescaped-html", post.post_j)], []), + element.unsafe_raw_html("", "div", [], post.post_j), html.cite([class("text-slate-800")], [html.text("~ J")]), ]), ]), diff --git a/test/promptbox_test.gleam b/test/promptbox_test.gleam index 67ac9d1..6c464a0 100644 --- a/test/promptbox_test.gleam +++ b/test/promptbox_test.gleam @@ -1,6 +1,4 @@ -import birl -import gleam/io -import gleam/result +import gleam/time/calendar import gleeunit import gleeunit/should import lustre/element @@ -13,21 +11,24 @@ pub fn main() { gleeunit.main() } -// gleeunit test functions end in `_test` -pub fn hello_world_test() { - let post = - simplifile.read("./priv/posts/ebb_and_flow.md") - |> result.unwrap("") - |> parser.parse_post("ebb_and_flow") - |> io.debug - - io.debug(birl.to_date_string(post.date)) - - files.read_all_posts() - |> io.debug - - 1 - |> should.equal(1) +pub fn parse_basic_post_test() { + "--- +title: a title +week: 1 +date: 2025-01-01 +--- +Post content 1 ++++ +Post content 2" + |> parser.parse_post("a-title", _) + |> should.equal(parser.Post( + slug: "a-title", + title: "a title", + week: 1, + date: calendar.Date(2025, calendar.January, 1), + post_p: "

Post content 1

\n", + post_j: "

Post content 2

\n", + )) } pub fn generate_test() {