You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.4 KiB
46 lines
1.4 KiB
(ns wanijo.devmode
|
|
(:require [hiccup.core :as hcore]))
|
|
|
|
(def bar-entries (atom []))
|
|
|
|
(defn send-to-bar [msg]
|
|
(swap! bar-entries #(conj % msg)))
|
|
|
|
(defn devmode-on? [req]
|
|
(let [query-param (get-in req [:query-params "dev"])
|
|
cookie (get-in req [:cookies "devmode" :value])]
|
|
(or (= query-param "on")
|
|
(and (= cookie "1")
|
|
(not= query-param "off")))))
|
|
|
|
(defn devbar []
|
|
(hcore/html
|
|
[:section.devbar
|
|
[:ol
|
|
(for [entry @bar-entries]
|
|
[:li [:pre entry]])]]))
|
|
|
|
(defn append-devbar [resp]
|
|
(let [body (:body resp)
|
|
new-body (clojure.string/replace
|
|
body "</body>" (str (devbar) "</body>"))]
|
|
(assoc resp :body new-body)))
|
|
|
|
(defn wrap-devmode [handler]
|
|
(fn [req]
|
|
(let [on? (devmode-on? req)
|
|
query-param? (get-in req [:query-params "dev"])
|
|
new-req (assoc-in req [:session :devmode] on?)
|
|
resp (handler new-req)
|
|
new-resp (cond
|
|
on? (-> resp
|
|
append-devbar
|
|
(assoc-in [:cookies :devmode] 1))
|
|
(some? query-param?) (assoc-in
|
|
resp
|
|
[:cookies :devmode]
|
|
(if on? 1 0))
|
|
:else resp)]
|
|
(reset! bar-entries [])
|
|
new-resp)))
|