forked from ParabolInc/parabol
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtemplate.html
More file actions
87 lines (83 loc) · 3.13 KB
/
template.html
File metadata and controls
87 lines (83 loc) · 3.13 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<!doctype html>
<html lang="en">
<head>
<!-- Google Tag Manager -->
<script>
gtmId = window.__ACTION__.googleTagManagerId
gtmIdValidation = /^GTM-[A-Z0-9]+$/
if (gtmId && gtmIdValidation.test(gtmId)) {
;(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', gtmId)
}
</script>
<!-- End Google Tag Manager -->
<title>Streamline or Replace Meetings | Parabol</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#493272" />
<meta
name="description"
content="Meetings are expensive. Parabol makes meeting time as efficient as possible or even replaces meetings with a structured collaborative process that can be done on your own time. Try our team stand-ups, check-ins, retrospectives, Sprint Poker, prioritization templates and more, free."
/>
<link href="/manifest.json" rel="manifest" crossorigin="use-credentials" />
<link href="__PUBLIC_PATH__/favicon.ico" rel="shortcut icon" crossorigin="" />
<%=
htmlWebpackPlugin.tags.headTags.map((tag) => {
tag.attributes.crossorigin=''
return tag
}).join('')
%>
<!-- Safari sometimes kills the current service worker before it can load the initial script to load the updated one -->
<script>
if ('serviceWorker' in navigator) {
let loadError = false
let serviceWorkerUpdateFound = false
function unregisterSW(event) {
if (!loadError || !serviceWorkerUpdateFound) return
location.reload()
}
// because the script tag is `defer` we need to attach the handler via script
document.querySelectorAll('script').forEach((script) => {
if (script.src) {
script.onerror = () => {
console.log('Error loading script ', script.src)
loadError = true
unregisterSW()
}
script.onload = () => {
console.log('Load script ', script.src)
loadError = false
script.onerror = null
script.onload = null
}
}
})
// context closed event happens because the old service worker is killed because a new one is found
navigator.serviceWorker.getRegistration().then((reg) => {
if (!reg) return
reg.addEventListener('updatefound', () => {
console.log('Service worker update found')
serviceWorkerUpdateFound = true
unregisterSW()
})
})
}
</script>
<!-- End Safari hack -->
</head>
<body>
<div id="root"></div>
<%= htmlWebpackPlugin.tags.bodyTags %>
</body>
</html>