-
Notifications
You must be signed in to change notification settings - Fork 140
/
Copy pathTagManager.js
53 lines (47 loc) · 1.54 KB
/
TagManager.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import Snippets from './Snippets'
const TagManager = {
dataScript: function (dataLayer) {
const script = document.createElement('script')
script.innerHTML = dataLayer
return script
},
gtm: function (args) {
const snippets = Snippets.tags(args)
const noScript = () => {
const noscript = document.createElement('noscript')
noscript.innerHTML = snippets.iframe
return noscript
}
const script = () => {
const script = document.createElement('script')
script.innerHTML = snippets.script
return script
}
const dataScript = this.dataScript(snippets.dataLayerVar)
return {
noScript,
script,
dataScript
}
},
initialize: function ({ gtmId, events = {}, dataLayer, dataLayerName = 'dataLayer', auth = '', preview = '' }) {
const gtm = this.gtm({
id: gtmId,
events: events,
dataLayer: dataLayer || undefined,
dataLayerName: dataLayerName,
auth,
preview
})
if (dataLayer) document.head.appendChild(gtm.dataScript)
document.head.insertBefore(gtm.script(), document.head.childNodes[0])
document.body.insertBefore(gtm.noScript(), document.body.childNodes[0])
},
dataLayer: function ({dataLayer, dataLayerName = 'dataLayer'}) {
if (window[dataLayerName]) return window[dataLayerName].push(dataLayer)
const snippets = Snippets.dataLayer(dataLayer, dataLayerName)
const dataScript = this.dataScript(snippets)
document.head.insertBefore(dataScript, document.head.childNodes[0])
}
}
module.exports = TagManager