(page "index.html" (:require [app.rpc :as rpc] [app.scoreboard :as s])) (defc token "") (defc= logged-in? rpc/token-ok) (defc= error rpc/error) (defc= error-message (when error (.-message error))) (rpc/init) (html (head (link :rel "stylesheet" :type "text/css" :href "css/main.css") (title "Potluck CTF")) (body (h1 "Potluck CTF") (div :id "error" :click #(reset! rpc/error nil) :toggle (cell= (not (nil? rpc/error))) (text "\u00d7 Error: ~{error-message}")) (let [token-input (input :name "token")] (form :toggle (cell= (not logged-in?)) :submit #(do (reset! token (.-value token-input)) (rpc/check-token @token) (set! (.-value token-input) nil)) (text "Registration Token:") token-input (input :type "submit"))) (let [my-name (cell= (:name (get rpc/scoreboard (first (.split token "-"))))) toggle (cell false) editing-name? (cell= (or toggle (nil? my-name))) name-input (input :name "name" :toggle editing-name? :value my-name)] (form :toggle logged-in? :submit #(do (rpc/set-name! @token (.-value name-input)) (reset! toggle false)) (span :click #(reset! toggle true) :title "Click to change" (text "Your name is: ") (span :toggle (cell= (not editing-name?)) :text my-name)) name-input (input :toggle editing-name? :type "submit"))) (let [flag-input (input :name "flag")] (form :toggle logged-in? :submit #(do (rpc/submit-flag! @token (.-value flag-input)) (set! (.-value flag-input) nil)) (text "Flag:") flag-input (input :type "submit"))) (form :toggle logged-in? :submit #(do (reset! token "") (reset! rpc/token-ok false)) (input :type "submit" :value "Logout")) (let [toggle (cell false)] (div (h2 :toggle logged-in? :click #(do (swap! toggle not) (rpc/get-hints)) (text "~(if toggle \"\u25be\" \"\u25b8\") Hints")) (pre :toggle toggle :text rpc/hints))) (h2 "Scoreboard") (s/scoreboard :scoreboard rpc/scoreboard))) ;; vim: set expandtab ts=2 sw=2 filetype=clojure :