gatsby-plugin-matomo/src/gatsby-ssr.js

94 lines
2.6 KiB
JavaScript
Raw Normal View History

2020-02-15 14:07:20 +01:00
// eslint-disable-next-line no-unused-vars
2018-05-07 18:29:27 +02:00
import React from 'react'
function buildTrackingCode(pluginOptions) {
2019-06-10 02:04:28 +02:00
const {
matomoUrl,
siteId,
dev,
localScript,
requireConsent,
disableCookies
} = pluginOptions
const script = localScript ? localScript : `${matomoUrl}/piwik.js`
2018-05-10 23:53:41 +02:00
2018-05-07 18:29:27 +02:00
const html = `
2019-06-10 02:04:28 +02:00
window.dev = ${dev}
2018-12-05 20:33:18 +01:00
if (window.dev === true || !(navigator.doNotTrack === '1' || window.doNotTrack === '1')) {
2018-05-07 18:29:27 +02:00
window._paq = window._paq || [];
2019-06-10 02:04:28 +02:00
${requireConsent ? "window._paq.push(['requireConsent']);" : ''}
${disableCookies ? "window._paq.push(['disableCookies']);" : ''}
window._paq.push(['setTrackerUrl', '${matomoUrl}/piwik.php']);
window._paq.push(['setSiteId', '${siteId}']);
2018-05-07 18:29:27 +02:00
window._paq.push(['enableHeartBeatTimer']);
window.start = new Date();
2018-06-28 19:53:03 +02:00
(function() {
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src='${script}'; s.parentNode.insertBefore(g,s);
})();
2018-06-28 19:53:03 +02:00
if (window.dev === true) {
2020-02-15 14:07:20 +01:00
console.debug('[Matomo] Tracking initialized')
console.debug('[Matomo] matomoUrl: ${matomoUrl}, siteId: ${siteId}')
}
2018-05-07 18:29:27 +02:00
}
`
return (
<script
2020-02-15 14:07:20 +01:00
key="script-gatsby-plugin-matomo"
2018-05-07 18:29:27 +02:00
dangerouslySetInnerHTML={{ __html: html }}
/>
)
}
function buildTrackingCodeNoJs(pluginOptions, pathname) {
2020-02-15 14:07:20 +01:00
const { matomoUrl, siteId, siteUrl } = pluginOptions
const html = `<img src="${matomoUrl}/piwik.php?idsite=${siteId}&rec=1&url=${siteUrl +
2019-06-10 02:04:28 +02:00
pathname}" style="border:0" alt="tracker" />`
2018-05-07 18:29:27 +02:00
return (
<noscript
2020-02-15 14:07:20 +01:00
key="noscript-gatsby-plugin-matomo"
2018-05-07 18:29:27 +02:00
dangerouslySetInnerHTML={{ __html: html }}
/>
)
}
function buildHead(pluginOptions) {
return (
<link
rel="preconnect"
href={pluginOptions.matomoUrl}
2020-02-15 14:07:20 +01:00
key="preconnect-gatsby-plugin-matomo"
/>
)
}
2020-02-15 14:07:20 +01:00
export const onRenderBody = (
{ setHeadComponents, setPostBodyComponents, pathname },
pluginOptions
) => {
2020-02-15 14:07:20 +01:00
const { exclude, dev } = pluginOptions
const isProduction = process.env.NODE_ENV === 'production'
2018-12-05 20:33:18 +01:00
let excludePaths = ['/offline-plugin-app-shell-fallback/']
2020-02-15 14:07:20 +01:00
if (typeof exclude !== 'undefined') {
exclude.map(exclude => {
2018-12-05 20:33:18 +01:00
excludePaths.push(exclude)
})
}
const isPathExcluded = excludePaths.some(path => pathname === path)
2020-02-15 14:07:20 +01:00
if ((isProduction || dev === true) && !isPathExcluded) {
setHeadComponents([buildHead(pluginOptions)])
setPostBodyComponents([
buildTrackingCode(pluginOptions),
buildTrackingCodeNoJs(pluginOptions, pathname)
])
}
2018-05-07 18:29:27 +02:00
}