File tree Expand file tree Collapse file tree 5 files changed +52
-1
lines changed
src/codes/clj/docs/frontend
test/codes/clj/docs/frontend/test/infra Expand file tree Collapse file tree 5 files changed +52
-1
lines changed Original file line number Diff line number Diff line change 16
16
:install-deps true
17
17
:closure-defines {codes.clj.docs.frontend.config/BASE_URL #shadow/env [" BASE_URL" ]
18
18
codes.clj.docs.frontend.config/CLIENT_ID #shadow/env [" CLIENT_ID" ]
19
- codes.clj.docs.frontend.config/REDIRECT_URI #shadow/env [" REDIRECT_URI" ]}}
19
+ codes.clj.docs.frontend.config/REDIRECT_URI #shadow/env [" REDIRECT_URI" ]
20
+ codes.clj.docs.frontend.config/GA_TAG_ID #shadow/env [" GA_TAG_ID" ]}}
20
21
:build-hooks [(codes.clj.docs.frontend.dev.shadow.hooks/hashed-files
21
22
[" resources/public/css/app.css"
22
23
" resources/public/js/core.js" ])
Original file line number Diff line number Diff line change 20
20
(goog-define BASE_URL " https://docs-backend.fly.dev/api/" )
21
21
(goog-define CLIENT_ID " 46d86692f00ed9c613a1" )
22
22
(goog-define REDIRECT_URI " https://docs.clj.codes/github-callback" )
23
+ (goog-define GA_TAG_ID " " )
23
24
24
25
(def config
25
26
(let [debug? goog.DEBUG]
26
27
{:debug? debug?
28
+ :ga-tag-id (if debug?
29
+ " "
30
+ GA_TAG_ID)
27
31
:base-url (if debug?
28
32
" http://localhost:3001/api/"
29
33
BASE_URL)
Original file line number Diff line number Diff line change 2
2
(:require [" @mantine/core" :refer [MantineProvider]]
3
3
[" react-dom/client" :as rdom]
4
4
[codes.clj.docs.frontend.config :refer [theme]]
5
+ [codes.clj.docs.frontend.infra.analytics :refer [google-analytics]]
5
6
[codes.clj.docs.frontend.infra.flex.hook :refer [use-flex]]
6
7
[codes.clj.docs.frontend.infra.helix :refer [defnc ]]
7
8
[codes.clj.docs.frontend.infra.routes.core :refer [init-routes!]]
25
26
(.render root ($ app)))
26
27
27
28
(defn ^:export init []
29
+ (google-analytics )
28
30
(init-routes! )
29
31
(render ))
Original file line number Diff line number Diff line change
1
+ (ns codes.clj.docs.frontend.infra.analytics
2
+ (:require [clojure.string :as string]
3
+ [codes.clj.docs.frontend.infra.system.state :as system.state]))
4
+
5
+ (defn google-tag-manager
6
+ [ga-tag-id]
7
+ (let [script (js/document.createElement " script" )]
8
+ (set! (.-src script) (str " https://www.googletagmanager.com/gtag/js?id="
9
+ ga-tag-id))
10
+ (set! (.-async script) true )
11
+ (js/document.head.prepend script)
12
+ script))
13
+
14
+ (defn google-tag
15
+ [ga-tag-id gtm-script]
16
+ (let [script (js/document.createElement " script" )]
17
+ (set! (.-src script) (str " window.dataLayer = window.dataLayer || [];
18
+ function gtag(){dataLayer.push(arguments);}
19
+ gtag('js', new Date());
20
+
21
+ gtag('config', '" ga-tag-id " ');" ))
22
+ (js/document.head.insertBefore script (.-nextSibling gtm-script))))
23
+
24
+ (defn ga-scripts
25
+ [ga-tag-id]
26
+ (when-not (string/blank? ga-tag-id)
27
+ (let [gtm-script (google-tag-manager ga-tag-id)]
28
+ (google-tag ga-tag-id gtm-script))))
29
+
30
+ (defn google-analytics []
31
+ (ga-scripts (-> @system.state/components :config :ga-tag-id )))
Original file line number Diff line number Diff line change
1
+ (ns codes.clj.docs.frontend.test.infra.analytics-test
2
+ (:require [cljs.test :refer-macros [deftest is testing]]
3
+ [clojure.string :as string]
4
+ [codes.clj.docs.frontend.infra.analytics :as analytics]))
5
+
6
+ (deftest ga-scripts-test
7
+ (testing " not-blank GA_TAG_ID should return a script containing the tag id"
8
+ (let [ga-tag-id " G-0123456789"
9
+ ga-scripts (analytics/ga-scripts ga-tag-id)]
10
+ (is (instance? js/HTMLScriptElement ga-scripts))
11
+ (is (string/includes? (.-src ga-scripts) ga-tag-id))))
12
+ (testing " blank GA_TAG_ID should not return anything"
13
+ (is (nil? (analytics/ga-scripts " " )))))
You can’t perform that action at this time.
0 commit comments