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

72 lines
2.3 KiB
JavaScript
Raw Normal View History

2018-05-07 18:29:27 +02:00
import React from 'react'
function buildTrackingCode(pluginOptions) {
2018-06-19 23:28:44 +02:00
const script = pluginOptions.localScript
? pluginOptions.localScript
: `${pluginOptions.matomoUrl}/piwik.js`
2018-05-10 23:53:41 +02:00
2018-05-07 18:29:27 +02:00
const html = `
window.dev = ${pluginOptions.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 || [];
2018-07-29 09:54:01 +02:00
${pluginOptions.requireConsent ? 'window._paq.push([\'requireConsent\']);' : ''}
2018-07-29 15:12:53 +02:00
${pluginOptions.disableCookies ? 'window._paq.push([\'disableCookies\']);' : ''}
2018-06-28 19:53:03 +02:00
window._paq.push(['setTrackerUrl', '${pluginOptions.matomoUrl}/piwik.php']);
window._paq.push(['setSiteId', '${pluginOptions.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) {
console.log('[Matomo] Tracking initialized')
2018-06-28 19:53:03 +02:00
console.log('[Matomo] matomoUrl: ${pluginOptions.matomoUrl}, siteId: ${pluginOptions.siteId}')
}
2018-05-07 18:29:27 +02:00
}
`
return (
<script
key={'gatsby-plugin-matomo'}
dangerouslySetInnerHTML={{ __html: html }}
/>
)
}
function buildTrackingCodeNoJs(pluginOptions, pathname) {
2018-06-28 19:53:03 +02:00
const html = `<img src="${pluginOptions.matomoUrl}/piwik.php?idsite=${pluginOptions.siteId}&rec=1&url=${pluginOptions.siteUrl + pathname}" style="border:0" alt="tracker" />`
2018-05-07 18:29:27 +02:00
return (
<noscript
key={'gatsby-plugin-matomo'}
dangerouslySetInnerHTML={{ __html: html }}
/>
)
}
exports.onRenderBody = ({ setPostBodyComponents, pathname }, pluginOptions) => {
2018-12-05 20:33:18 +01:00
let excludePaths = ['/offline-plugin-app-shell-fallback/']
if (typeof pluginOptions.exclude !== 'undefined') {
pluginOptions.exclude.map(exclude => {
excludePaths.push(exclude)
})
}
const isPathExcluded = excludePaths.some(path => pathname === path)
if (
(process.env.NODE_ENV === 'production' || pluginOptions.dev === true) &&
!isPathExcluded
) {
return setPostBodyComponents([
buildTrackingCode(pluginOptions),
buildTrackingCodeNoJs(pluginOptions, pathname)
])
}
2018-05-07 18:29:27 +02:00
return null
}