From fe8b587a61b94982236e4c86a45e926b12c8c0a7 Mon Sep 17 00:00:00 2001 From: Andrew Suzuki Date: Tue, 7 Jun 2016 10:51:38 -0400 Subject: [PATCH] ulysses.env, google analytics setup, autotrack setup --- package.json | 1 + project.clj | 8 ++++++-- resources/public/index.html | 11 +++++++++++ src/clj/ulysses/css.clj | 6 ------ src/clj/ulysses/env.clj | 30 ++++++++++++++++++++++++++++++ src/cljs/ulysses/config.cljs | 12 +++++++++++- src/cljs/ulysses/core.cljs | 3 ++- src/cljs/ulysses/routes.cljs | 4 ++++ 8 files changed, 65 insertions(+), 10 deletions(-) delete mode 100644 src/clj/ulysses/css.clj create mode 100644 src/clj/ulysses/env.clj diff --git a/package.json b/package.json index 1ce14bc..2721861 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "test": "test" }, "dependencies": { + "autotrack": "^0.6.5", "bootstrap": "^4.0.0-alpha.2", "font-awesome": "^4.6.1" }, diff --git a/project.clj b/project.clj index 19238b3..6a11eea 100644 --- a/project.clj +++ b/project.clj @@ -41,13 +41,15 @@ {:builds [ {:id "dev" - :source-paths ["src/cljs"] + :source-paths ["src/cljs" "src/clj"] :figwheel {:on-jsload "ulysses.core/mount-root"} :compiler {:main ulysses.core :output-to "resources/public/js/compiled/app.js" :output-dir "resources/public/js/compiled/out" :asset-path "js/compiled/out" - :source-map-timestamp true}} + :source-map-timestamp true + :foreign-libs [{:file "node_modules/autotrack/autotrack.js" + :provides ["autotrack"]}]}} {:id "test" :source-paths ["src/cljs" "test/cljs"] @@ -65,4 +67,6 @@ :optimizations :advanced :closure-defines {goog.DEBUG false} :externs ["src/externs/extra.externs.js"] + :foreign-libs [{:file "node_modules/autotrack/autotrack.js" + :provides ["autotrack"]}] :pretty-print false}}]}}}) diff --git a/resources/public/index.html b/resources/public/index.html index 20f1a2d..b8d4d8f 100644 --- a/resources/public/index.html +++ b/resources/public/index.html @@ -10,5 +10,16 @@ + + + + + diff --git a/src/clj/ulysses/css.clj b/src/clj/ulysses/css.clj deleted file mode 100644 index aa58ff8..0000000 --- a/src/clj/ulysses/css.clj +++ /dev/null @@ -1,6 +0,0 @@ -(ns ulysses.css - (:require [garden.def :refer [defstyles]])) - -(defstyles screen - [:body {:color "#000"}] - [:.level1 {:color "blue"}]) diff --git a/src/clj/ulysses/env.clj b/src/clj/ulysses/env.clj new file mode 100644 index 0000000..3b04a00 --- /dev/null +++ b/src/clj/ulysses/env.clj @@ -0,0 +1,30 @@ +(ns ulysses.env) + +;; adapted from https://github.com/adzerk-oss/env/blob/master/src/adzerk/env.clj +;; (added ^:export metadata to def'd vars) + +(defmacro env [] + (if (:js-globals &env) + (throw (IllegalStateException. + "macro not available in CLJS: see https://github.com/adzerk-oss/env/issues/1")) + (->> (merge {} (System/getenv) (System/getProperties)) + (reduce #(into %1 (when-not (re-find #"\." (first %2)) [%2])) {})))) + +(defn- setenv [k v] + (when v (assert (string? v)) (System/setProperty k v) v)) + +(defmacro def [& ks] + (let [cljs? (:js-globals &env)] + (loop [[[k v] & ks] (partition 2 ks), err [], ret []] + (let [ex `(throw (ex-info ~(str "Required env vars: " err) {:missing-vars '~err}))] + (when (and cljs? (not k) (seq err)) (eval ex)) + (cond (not k) `(do ~@ret ~(when (seq err) ex)) + :else (let [k' (name k) + v' (get (env) k') + v'' (or v' (when-not (= :required v) + (if cljs? v `(#'setenv ~k' ~v)))) + err (into err (when (and (not v') (= :required v)) [k]))] + (recur ks err (conj ret `(do (~'def ^:export ~k ~v'') + ~(when-not cljs? + `(add-watch (var ~k) :ulysses.env/w + #(when %4 (#'setenv ~k' %4))))))))))))) diff --git a/src/cljs/ulysses/config.cljs b/src/cljs/ulysses/config.cljs index 0eceee3..bae633b 100644 --- a/src/cljs/ulysses/config.cljs +++ b/src/cljs/ulysses/config.cljs @@ -1,12 +1,22 @@ (ns ulysses.config + (:require-macros [ulysses.env :as env]) (:require [clojure.string :as string])) -(def debug? +;; from environment ---- + +(env/def + google-analytics-code "UA-XXXXX-Y") + +;; from closure defines ---- + +(def ^:export debug? ^boolean js/goog.DEBUG) (when debug? (enable-console-print!)) +;; rest ---- + (def hostname (-> js/window .-location .-hostname)) diff --git a/src/cljs/ulysses/core.cljs b/src/cljs/ulysses/core.cljs index af03e79..c4c4c93 100644 --- a/src/cljs/ulysses/core.cljs +++ b/src/cljs/ulysses/core.cljs @@ -5,7 +5,8 @@ [ulysses.subs] [ulysses.routes :as routes] [ulysses.views :as views] - [ulysses.config :as config])) + [ulysses.config :as config] + [autotrack])) (when config/debug? (println "dev mode")) diff --git a/src/cljs/ulysses/routes.cljs b/src/cljs/ulysses/routes.cljs index dcb035b..e1aa5b9 100644 --- a/src/cljs/ulysses/routes.cljs +++ b/src/cljs/ulysses/routes.cljs @@ -3,6 +3,10 @@ [bidi.bidi :as bidi] [pushy.core :as pushy])) +;; ---------------------------------------------------------------------------- +;; Routes +;; ---------------------------------------------------------------------------- + (def routes ["/" {"" :home ["builder/" :grant-op-id] :builder ["profile/" :person-id] :profile