From 16843a6ab8fd6620c04320d2a71ecdb4171396bf Mon Sep 17 00:00:00 2001 From: trisua Date: Fri, 20 Jun 2025 17:40:55 -0400 Subject: [PATCH] add: drawings in questions --- crates/app/src/assets.rs | 1 + crates/app/src/langs/en-US.toml | 2 + crates/app/src/public/css/root.css | 8 + crates/app/src/public/html/body.lisp | 36 + crates/app/src/public/html/components.lisp | 94 ++- crates/app/src/public/html/journals/app.lisp | 3 +- crates/app/src/public/html/profile/media.lisp | 2 +- .../app/src/public/html/profile/outbox.lisp | 2 +- crates/app/src/public/html/profile/posts.lisp | 2 +- .../app/src/public/html/profile/replies.lisp | 2 +- .../app/src/public/html/profile/settings.lisp | 8 + crates/app/src/public/js/atto.js | 1 + crates/app/src/public/js/carp.js | 624 ++++++++++++++++++ crates/app/src/public/js/loader.js | 2 +- .../routes/api/v1/communities/questions.rs | 8 +- crates/app/src/routes/api/v1/journals.rs | 12 +- crates/app/src/routes/api/v1/uploads.rs | 17 +- crates/app/src/routes/assets.rs | 1 + crates/app/src/routes/mod.rs | 1 + crates/core/src/database/auth.rs | 2 +- crates/core/src/database/posts.rs | 18 + crates/core/src/database/questions.rs | 65 +- crates/core/src/model/auth.rs | 3 + crates/core/src/model/carp.rs | 285 ++++++++ crates/core/src/model/communities.rs | 4 + crates/core/src/model/mod.rs | 3 + crates/core/src/model/uploads.rs | 5 +- sql_changes/questions_drawings.sql | 2 + 28 files changed, 1181 insertions(+), 32 deletions(-) create mode 100644 crates/app/src/public/js/carp.js create mode 100644 crates/core/src/model/carp.rs create mode 100644 sql_changes/questions_drawings.sql diff --git a/crates/app/src/assets.rs b/crates/app/src/assets.rs index a3bb588..5533a77 100644 --- a/crates/app/src/assets.rs +++ b/crates/app/src/assets.rs @@ -39,6 +39,7 @@ pub const LOADER_JS: &str = include_str!("./public/js/loader.js"); pub const ATTO_JS: &str = include_str!("./public/js/atto.js"); pub const ME_JS: &str = include_str!("./public/js/me.js"); pub const STREAMS_JS: &str = include_str!("./public/js/streams.js"); +pub const CARP_JS: &str = include_str!("./public/js/carp.js"); // html pub const BODY: &str = include_str!("./public/html/body.lisp"); diff --git a/crates/app/src/langs/en-US.toml b/crates/app/src/langs/en-US.toml index b725251..11491fc 100644 --- a/crates/app/src/langs/en-US.toml +++ b/crates/app/src/langs/en-US.toml @@ -135,6 +135,8 @@ version = "1.0.0" "communities:label.file" = "File" "communities:label.drafts" = "Drafts" "communities:label.load" = "Load" +"communities:action.draw" = "Draw" +"communities:action.remove_drawing" = "Remove drawing" "notifs:action.mark_as_read" = "Mark as read" "notifs:action.mark_as_unread" = "Mark as unread" diff --git a/crates/app/src/public/css/root.css b/crates/app/src/public/css/root.css index fbb1d4d..3d7dd62 100644 --- a/crates/app/src/public/css/root.css +++ b/crates/app/src/public/css/root.css @@ -389,3 +389,11 @@ blockquote { transform: rotateZ(360deg); } } + +canvas { + border-radius: var(--radius); + border: solid 5px var(--color-primary); + background: white; + box-shadow: var(--shadow-x-offset) var(--shadow-y-offset) var(--shadow-size) + var(--color-shadow); +} diff --git a/crates/app/src/public/html/body.lisp b/crates/app/src/public/html/body.lisp index 16a47d8..a8e398b 100644 --- a/crates/app/src/public/html/body.lisp +++ b/crates/app/src/public/html/body.lisp @@ -18,6 +18,42 @@ (div ("class" "skel") ("style" "width: 25%; height: 25px;")) (div ("class" "skel") ("style" "width: 100%; height: 150px")))))) +(template + ("id" "carp_canvas") + (div + ("class" "flex flex-col gap-2") + (div ("ui_ident" "canvas_loc")) + (div + ("class" "flex justify-between gap-2") + (div + ("class" "flex gap-2") + (input + ("type" "color") + ("style" "width: 5rem") + ("ui_ident" "color_picker")) + + (input + ("type" "range") + ("min" "1") + ("max" "25") + ("step" "1") + ("value" "2") + ("ui_ident" "stroke_range"))) + + (div + ("class" "flex gap-2") + (button + ("title" "Undo") + ("ui_ident" "undo") + ("type" "button") + (icon (text "undo"))) + + (button + ("title" "Redo") + ("ui_ident" "redo") + ("type" "button") + (icon (text "redo"))))))) + ; random js (text "