Add txt to chess position function.
continuous-integration/drone/push Build is failing Details

This commit is contained in:
Oly 2025-01-24 13:40:30 +00:00
parent 0d97469f64
commit b267ae6cbb
3 changed files with 80 additions and 37 deletions

View File

@ -3,6 +3,10 @@
(defn get-square [pos game-state] (defn get-square [pos game-state]
(get game-state pos {})) (get game-state pos {}))
(defn chess-pos->coords [chars]
[( + 1 (first (keep-indexed #(when (= (first chars) %2) %1) [\A \B "C" \D \E \F \G \H])))
(js/parseInt (second chars))])
(defn edge? (defn edge?
"Return true if x and are inside the grid" "Return true if x and are inside the grid"
[[distance x y]] [[distance x y]]

View File

@ -170,3 +170,13 @@
:type :rook :type :rook
:start-pos [8 8]}]) :start-pos [8 8]}])
(defn find-piece [colour piece]
(first (filter #(and (= colour (:colour %1)) (= piece (:type %1))) start-state)))
(defn translate-char->piece [char]
(get {"K" :king
"Q" :queen
"B" :bishop
"N" :knight
"R" :rook
"P" :pawn} char))

View File

@ -1,17 +1,18 @@
(ns com.oly.static-sites.do-blog.pages.chess-board (ns com.oly.static-sites.do-blog.pages.chess-board
(:require (:require
[com.oly.static-sites.do-blog.pages.chess.movement [com.oly.static-sites.do-blog.pages.chess.movement
:refer [fetch-selected-piece-moves valid-move?]] :refer [fetch-selected-piece-moves valid-move? chess-pos->coords ]]
[com.oly.static-sites.do-blog.pages.chess.render [com.oly.static-sites.do-blog.pages.chess.render
:refer [calculate-black-white create-board enhance-board place-pieces-on-board]] :refer [calculate-black-white create-board enhance-board place-pieces-on-board]]
[com.oly.static-sites.do-blog.pages.chess.state :refer [game-state start-state]] [com.oly.static-sites.do-blog.pages.chess.state :refer [game-state start-state translate-char->piece find-piece]]
[com.oly.static-sites.do-blog.pages.chess.vstate :as v :refer [viking-start-state]] [com.oly.static-sites.do-blog.pages.chess.vstate :as v :refer [viking-start-state]]
[com.oly.static-sites.ui-hiccup.interface :refer [board]] [com.oly.static-sites.ui-hiccup.interface :refer [board]]
[reagent.core :as r])) [reagent.core :as r]))
;;/addwidget https://blog-test.digitaloctave.com/chess?widgetId=dochess ;;/addwidget https://blog-test.digitaloctave.com/chess?widgetId=dochess
;;/addwidget https://blog-test.digitaloctave.com/chess?roomI=!YOyzcCyoomnjylcOFP:matrix.org&widgetId=dochess
(def widget (atom {})) (def widget (atom {}))
(defn send-to-parent (defn send-to-parent
@ -21,16 +22,36 @@
js/window.parent js/window.parent
#js {:api "fromWidget", #js {:api "fromWidget",
:v "1.0" :v "1.0"
:widgetId (:widget-id @widget)
:action action}, "*")) :action action}, "*"))
([action data] ([action data]
(prn (str "sending " action)) (prn (str "sending d " action))
(.postMessage (.postMessage
js/window.parent js/window.parent
#js {:api "fromWidget", #js {:api "fromWidget",
:v "1.0" :v "1.0"
:action action :action action
:data data}, "*"))) :widgetId (:widget-id @widget)
:data data}, "*"))
([action hm-key data]
(prn (str "sending kv " action))
(prn (clj->js {:api "fromWidget",
:v "1.0"
:action action
:widgetId (:widget-id @widget)
(keyword hm-key) data
}))
(.postMessage
js/window.parent
(clj->js {:api "fromWidget",
:v "1.0"
:action action
:widgetId @widget
(keyword hm-key) data
}), "*"))
)
(defn site-startup [] (defn site-startup []
(prn "site start up") (prn "site start up")
@ -43,46 +64,34 @@
(prn (aget event "data" "action")) (prn (aget event "data" "action"))
(prn (aget event "data" "widgetId")) (prn (aget event "data" "widgetId"))
(when (= (aget event "data" "api") "toWidget") (when (= (aget event "data" "api") "toWidget")
(prn (str "msg type " (.-type (.-data event)))) (prn (str "msg type " (aget event "data" "action") ))
(prn (str "msg type " (-> event .-data .-action ))) (case (aget event "data" "action")
(case (aget event "data" "action")
"m.room.message" (prn "type msg") "m.room.message" (prn "type msg")
"m.room.member" (prn "type member") "m.room.member" (prn "type member")
"capabilities" "capabilities"
(do (do
(swap! widget assoc :widget-id (-> event .-data .-widgetId )) (prn "sending capabilities")
(.postMessage (swap! widget assoc :widget-id (aget event "data" "widgetId"))
js/window.parent (send-to-parent "capabilities" :capabilities #js ["m.capability.screenshot"]))
#js {:api "fromWidget",
:v "1.0"
:action "capabilities"
:capabilities #js ["m.text" "m.image"]
#_#_:action "supported_api_versions"}, "*")
(prn "type capa"))
"notify_capabilities" "notify_capabilities"
(do (do
(.postMessage (send-to-parent "capabilities" :capabilities #js ["m.capability.screenshot"]))
js/window.parent (do
#js {:api "fromWidget", (prn "unhandled action " (str (aget event "data" "action")))
:v "1.0" (prn (aget event "data"))))
:action "capabilities"
:capabilities #js ["m.text" "m.image"]
#_#_:action "supported_api_versions"}, "*")
(prn "type capa"))
(prn (.-type event)))
(prn (.-origin event)) #_(prn (.-origin event))
(prn (.-data event))))) #_(prn (.-data event)))))
(prn "send ready message")
(send-to-parent "ready") (send-to-parent "ready")
(send-to-parent "widget_ready")
(send-to-parent "m.room.message" #js {:body "testing from widget" :msgtype "m.text"})
#_(.postMessage js/window.parent #js {:api "fromWidget", #_(.postMessage js/window.parent #js {:api "fromWidget",
:v "1.0" :v "1.0"
:action "ready" :action "ready"
#_#_:action "supported_api_versions"}, "*") #_#_:action "supported_api_versions"}, "*")
(prn "send content loaded message")
#_(.postMessage js/window.parent #js {:api "fromWidget", #_(.postMessage js/window.parent #js {:api "fromWidget",
:v "1.0" :v "1.0"
@ -99,17 +108,28 @@
) )
#_(def game-state-viking (r/atom {:board viking-start-state})) #_(def game-state-viking (r/atom {:board viking-start-state}))
(defn chars->map [text]
(when (= 0 (mod (count text) 4))
(loop [positions text
results []]
(if (seq positions)
(recur
(drop 4 positions)
(conj results
(merge (find-piece :white (translate-char->piece (second positions)))
{:start-pos (chess-pos->coords (str (nth positions 2) (nth positions 3)))
:pos (chess-pos->coords (str (nth positions 2) (nth positions 3)))})))
results))))
(defn setup [] (defn setup []
(prn "register listener") (prn "register listener")
(.addEventListener js/window "load" (.addEventListener js/window "load"
(fn [event] (fn [event]
(prn "on load") (prn "on load")
(prn (.-location js/window)) (site-startup))))
(prn (-> js/window .-location .-hash))
(site-startup)
))
)
(defonce test-event (setup)) (defonce test-event (setup))
@ -250,7 +270,7 @@
(enhance-board click-square) (enhance-board click-square)
(place-pieces-on-board v/viking-start-state click-square))})) (place-pieces-on-board v/viking-start-state click-square))}))
(defonce chess-board-setup (defn chess-board-setup [start-state]
(reset! game-state (reset! game-state
{:player-one {:pieces [] {:player-one {:pieces []
:colour :white :colour :white
@ -263,7 +283,16 @@
(enhance-board click-square) (enhance-board click-square)
(place-pieces-on-board start-state click-square))})) (place-pieces-on-board start-state click-square))}))
(defn chess-page [{:keys [path-params] :as route}] (defn chess-page [{:keys [path-params query-params] :as route}]
(prn route)
(prn (:pieces query-params))
(prn start-state)
(prn (chars->map (:pieces query-params)))
(if (:pieces query-params)
(chess-board-setup (chars->map (:pieces query-params)))
(chess-board-setup start-state))
(fn [{:keys [path-params] :as route}] (fn [{:keys [path-params] :as route}]
[:div [:div
(let [[pos piece] (get-selected-square)] (let [[pos piece] (get-selected-square)]