@factor/plugin-google-tag-manager
Version:
This plugin adds Google Tag Manager to your Factor app.
50 lines (44 loc) • 1.49 kB
text/typescript
import { addFilter, setting } from "@factor/api"
export const setup = (): void => {
const googleTagManagerId = setting("googleTagManager.googleTagManagerId")
const developmentMode = setting("googleTagManager.developmentMode")
// Don't load in development by default
if (
((process.env.NODE_ENV != "production" || process.env.FACTOR_ENV == "test") &&
!developmentMode) ||
!googleTagManagerId
) {
return
}
addFilter({
key: "tagManagerScript",
hook: "factor_head",
callback: (_: string[]): string[] => {
const add = `<script>
; (function (w, d, s, l, i) {
w[l] = w[l] || []
w[l].push({ "gtm.start": new Date().getTime(), event: "gtm.js" })
var f = d.getElementsByTagName(s)[0],
j = d.createElement(s),
dl = l != "dataLayer" ? "&l=" + l : ""
j.async = true
j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl
f.parentNode.insertBefore(j, f)
})(window, document, "script", "dataLayer", "${googleTagManagerId}")
</script>`
return [..._, add]
},
priority: 200,
})
addFilter({
key: "tagManagerBodyScript",
hook: "factor_body_start",
callback: (_: string[]): string[] => {
const add = `<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=${googleTagManagerId}" height="0" width="0"
style="display:none;visibility:hidden"></iframe></noscript>
`
return [..._, add]
},
})
}
setup()