From 51d3fa0dd19994fe62feb6003f06a4da6f0015d0 Mon Sep 17 00:00:00 2001 From: Luciano Laratelli Date: Thu, 13 Mar 2025 18:39:26 -0400 Subject: [PATCH] clean up paths --- src/com/biffweb/my_project/app.clj | 109 ++++++++++++----------------- 1 file changed, 46 insertions(+), 63 deletions(-) diff --git a/src/com/biffweb/my_project/app.clj b/src/com/biffweb/my_project/app.clj index 5eb4c22..3a50aea 100644 --- a/src/com/biffweb/my_project/app.clj +++ b/src/com/biffweb/my_project/app.clj @@ -1,6 +1,5 @@ (ns com.biffweb.my-project.app (:require - [clojure.pprint :as pprint] [clojure.pprint :as pp] [clojure.string :as str] [com.biffweb :as biff] @@ -25,7 +24,7 @@ (defn error-style [s] [:h4.pico-color-red-500 s]) -(defn set-bar [{:keys [example/ds session params] :as _ctx}] +(defn create-game [{:keys [example/ds session params] :as _ctx}] (let [players (map str/trim (-> params :players str/split-lines))] (if (> 2 (count players)) (error-style "Need at least two players") @@ -53,22 +52,23 @@ :game_code code})})) {:status 200 - :headers {"HX-redirect" "/game"} + :headers {"HX-redirect" (str/join "/" ["" "game" code "display"])} :session {:id id}})))) -(defn game [{:keys [session params] - :example/keys [ds] - :as _ctx}] - (let [id (:id session) - _ (println id) - _ (println (str id)) +(defn display-game [{:keys [session params path-params] + :example/keys [ds] + :as _ctx}] + (let [code (:code path-params) + players (into [] + (sort-by + :player/play_order + (jdbc/execute! ds (sql/format {:select :* + :from :player + :where [:= :game_code code]})))) game (jdbc/execute-one! ds (sql/format {:select :* :from :game - :where [:= :id id]})) - players (sort-by :player/play_order - (jdbc/execute! ds (sql/format {:select :* - :from :player - :where [:= :game_code (:game/code game)]})))] + :where [:= :code code]})) + current-player (:game/current_player game)] (ui/page {} @@ -78,7 +78,7 @@ [:ul [:li (biff/form {:id "reset" :hx-get "/reset"} [:button.secondary "Reset"])]]] - [:h4 id] + [:h4 (:game/id game)] (let [player-elements-swap-str (->> players (map (fn [{:player/keys [id play_order]}] @@ -99,8 +99,19 @@ :hx-swap player-elements-swap-str}] (for [p players :let [{:player/keys [id play_order score]} p]] + [:tr - [:th {:scope "row"} (:player/name p)] + [:th {:scope "row"} [:div + (:player/name p) + (when (= (:player/play_order p) current-player) + [:span.pico-background-jade-600 + {:style {:text-align "center" + :padding "4px 8px" + :width "8px" + :margin-left "20px" + :border-radius "5px" + :align-items "center"}} "now playing"])]] + [:td [:div {:id (str "player" id "-" play_order)} @@ -161,7 +172,7 @@ :hx-get "/reset"} [:button.secondary "Reset"])]]] [:div.grid - [:h4 "Playing next:" (-> (get players current-player) :player/name)]] + [:h4 "Now playing: " [:b.pico-color-jade-600 (-> (get players current-player) :player/name)]]] (biff/form {:id ::score-form} [:table @@ -180,19 +191,6 @@ [:button {:type "submit"} "Score pigs"] [:button.contrast {:type "submit"} "Pigs are touching! (Lose all points)"])]))) -(defn connect - [{:keys [session params] - :example/keys [ds] - :as _ctx}] - (let [code (:game-code params) - game (delay (jdbc/execute-one! ds (sql/format {:select :* :from :game - :where [:= :code code]})))] - (if (and code @game) - {:status 200 - :session session - :headers {"HX-Redirect" (str "/game/" code)}} - (error-style "Code does not exist.")))) - (defn app [{:keys [session params] :example/keys [ds] :as _ctx}] @@ -211,35 +209,22 @@ [:section [:button {:_ "on click toggle the *display of #new-game-form"} "New game"]] - (biff/form - {:hx-post "/set-bar" - :style {:display :none} - :hx-swap "afterend" - :id ::new-game-form} - [:div - [:textarea#players {:type "textarea" :rows "8" :name "players"}] - [:fieldset - [:legend "Game options:"] - [:label - [:input {:type "checkbox", :name "random-player-order", :checked ""}] - "Random player order"] - ;; [:label - ;; [:input {:type "checkbox", :name "french", :checked ""}] - ;; "French"] - ] - - [:button {:type "submit"} "Start"]]) - (biff/form - {:hx-post "/connect" - :hx-swap "afterend" - :id ::connect-to-game} - [:fieldset - {:role "group"} + [:div + [:label + "Existing game? Enter the code here:" [:input {:name "game-code", - :type "text", - :placeholder "Connect to an existing game"}] - [:input {:type "submit", :value "Connect"}]])]))) + :placeholder "game code", + :type "text" + :_ "on keyup + set #control-existing-game@href to '/game/' + my.value + '/control' + then + set #display-existing-game@href to '/game/' + my.value + '/display' "}]] + [:div {:role "group"} + [:a {:id ::display-existing-game + :type "button"} "Show scoreboard"] + [:a.secondary {:id ::control-existing-game + :type "button"} "Start game control"]]]]))) (def about-page (ui/page @@ -257,12 +242,10 @@ :routes ["/" {:middleware [wrap-session]} ["" {:get app}] ["game/" - ["" {:get game}] + ["create" {:post create-game}] [":code" - ["/" {:get control-view}] + ["/display" {:get display-game}] + ["/control" {:get control-view}] ["/connect" {:get connect-ws}]]] - - ["connect" {:post connect}] - ["reset" {:get reset}] - ["set-bar" {:post set-bar}]] + ["reset" {:get reset}]] :api-routes [["/api/echo" {:post echo}]]})