mirror of
https://github.com/kremalicious/gatsby-plugin-matomo.git
synced 2024-12-22 17:23:23 +01:00
add dev mode
* will load all scripts in development * ignores your local browser's DNT header * outputs some information in browser console about what it is doing
This commit is contained in:
parent
0109e19e10
commit
5c05efe181
14
README.md
14
README.md
@ -17,6 +17,7 @@ Plugin uses sensible defaults prioritizing user experience & privacy:
|
|||||||
- use image tracking fallback for `noscript`
|
- use image tracking fallback for `noscript`
|
||||||
- don't load anything when visitor has Do Not Track enabled
|
- don't load anything when visitor has Do Not Track enabled
|
||||||
- don't load anything in non-production environments
|
- don't load anything in non-production environments
|
||||||
|
- dev mode for local development
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@ -36,7 +37,7 @@ Plugin uses sensible defaults prioritizing user experience & privacy:
|
|||||||
options: {
|
options: {
|
||||||
siteId: 'YOUR_SITE_ID',
|
siteId: 'YOUR_SITE_ID',
|
||||||
siteUrl: 'https://YOUR_LIVE_SITE_URL.COM',
|
siteUrl: 'https://YOUR_LIVE_SITE_URL.COM',
|
||||||
matomoUrl: 'https://YOUR_MATOMO_URL.COM',
|
matomoUrl: 'https://YOUR_MATOMO_URL.COM'
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
@ -44,7 +45,16 @@ Plugin uses sensible defaults prioritizing user experience & privacy:
|
|||||||
|
|
||||||
3. That's it!
|
3. That's it!
|
||||||
|
|
||||||
_NOTE: This plugin only generates output when run in production mode. To test your tracking code, run: `gatsby build && gatsby serve`_.
|
_NOTE: By default, this plugin only generates output when run in production mode. To test your tracking code, run `gatsby build && gatsby serve` or set `dev` option to `true`_.
|
||||||
|
|
||||||
|
## Options
|
||||||
|
|
||||||
|
Option | Explanation
|
||||||
|
------------|---------
|
||||||
|
`siteId` | Your Matomo site ID configured in your Matomo installation.
|
||||||
|
`siteUrl` | The url of your site, usually the same as `siteMetadata.siteUrl`. Only used for generating the url for `noscript` image tracking fallback.
|
||||||
|
`matomoUrl` | The url of your Matomo installation.
|
||||||
|
`dev` | Activate dev mode by setting it to `true`. Will load all scripts despite not running in `production` environment. Ignores your local browser's DNT header too. Outputs some information in console about what it is doing. Useful for local testing but careful: all hits will be send like in production.
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
/* eslint-disable no-console */
|
||||||
|
|
||||||
let first = true
|
let first = true
|
||||||
|
|
||||||
function getDuration() {
|
function getDuration() {
|
||||||
@ -15,6 +17,9 @@ function getDuration() {
|
|||||||
exports.onRouteUpdate = ({ location }) => {
|
exports.onRouteUpdate = ({ location }) => {
|
||||||
if (process.env.NODE_ENV !== 'production' && typeof _paq !== 'undefined') {
|
if (process.env.NODE_ENV !== 'production' && typeof _paq !== 'undefined') {
|
||||||
window._paq = window._paq || []
|
window._paq = window._paq || []
|
||||||
|
window.dev = window.dev || null
|
||||||
|
|
||||||
|
const pathname = location.pathname
|
||||||
|
|
||||||
if (first) {
|
if (first) {
|
||||||
first = false
|
first = false
|
||||||
@ -25,10 +30,18 @@ exports.onRouteUpdate = ({ location }) => {
|
|||||||
'duration',
|
'duration',
|
||||||
getDuration()
|
getDuration()
|
||||||
])
|
])
|
||||||
|
|
||||||
|
if (window.dev) {
|
||||||
|
console.log(`[Matomo] Page view for: ${pathname}`)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
window._paq.push(['setCustomUrl', location.pathname])
|
window._paq.push(['setCustomUrl', pathname])
|
||||||
window._paq.push(['setDocumentTitle', location.pathname])
|
window._paq.push(['setDocumentTitle', pathname])
|
||||||
window._paq.push(['trackPageView'])
|
window._paq.push(['trackPageView'])
|
||||||
|
|
||||||
|
if (window.dev) {
|
||||||
|
console.log(`[Matomo] Page view for: ${pathname}`)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
|
@ -1,19 +1,26 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
function buildTrackingCode(siteId, matomoUrl) {
|
function buildTrackingCode(pluginOptions) {
|
||||||
const html = `
|
const html = `
|
||||||
if (!(navigator.doNotTrack == '1' || window.doNotTrack == '1')) {
|
window.dev = ${pluginOptions.dev}
|
||||||
|
|
||||||
|
if (window.dev === true || !(navigator.doNotTrack == '1' || window.doNotTrack == '1')) {
|
||||||
window._paq = window._paq || [];
|
window._paq = window._paq || [];
|
||||||
window._paq.push(['setTrackerUrl', '${matomoUrl}/piwik.php']);
|
window._paq.push(['setTrackerUrl', '${pluginOptions.matomoUrl}/piwik.php']);
|
||||||
window._paq.push(['setSiteId', '${siteId}']);
|
window._paq.push(['setSiteId', '${pluginOptions.siteId}']);
|
||||||
window._paq.push(['enableLinkTracking']);
|
window._paq.push(['enableLinkTracking']);
|
||||||
window._paq.push(['trackPageView']);
|
window._paq.push(['trackPageView']);
|
||||||
window._paq.push(['enableHeartBeatTimer']);
|
window._paq.push(['enableHeartBeatTimer']);
|
||||||
window.start = new Date();
|
window.start = new Date();
|
||||||
|
|
||||||
|
if (window.dev === true) {
|
||||||
|
console.log('[Matomo] Tracking initialized')
|
||||||
|
console.log('[Matomo] matomoUrl: ${pluginOptions.matomoUrl}, siteId: ${pluginOptions.siteId}')
|
||||||
|
}
|
||||||
|
|
||||||
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
||||||
g.type='text/javascript'; g.defer=true; g.async=true;
|
g.defer=true; g.async=true;
|
||||||
g.src='${matomoUrl}/piwik.js';
|
g.src='${pluginOptions.matomoUrl}/piwik.js';
|
||||||
s.parentNode.insertBefore(g,s);
|
s.parentNode.insertBefore(g,s);
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
@ -27,8 +34,8 @@ function buildTrackingCode(siteId, matomoUrl) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildTrackingCodeNoJs(siteId, matomoUrl, siteUrl, pathname) {
|
function buildTrackingCodeNoJs(pluginOptions, pathname) {
|
||||||
const html = `<img src="${matomoUrl}/piwik.php?idsite=${siteId}&rec=1&url=${siteUrl + pathname}" style="border:0" alt="tracker" />`
|
const html = `<img src="${pluginOptions.matomoUrl}/piwik.php?idsite=${pluginOptions.siteId}&rec=1&url=${pluginOptions.siteUrl + pathname}" style="border:0" alt="tracker" />`
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<noscript
|
<noscript
|
||||||
@ -39,14 +46,10 @@ function buildTrackingCodeNoJs(siteId, matomoUrl, siteUrl, pathname) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
exports.onRenderBody = ({ setPostBodyComponents, pathname }, pluginOptions) => {
|
exports.onRenderBody = ({ setPostBodyComponents, pathname }, pluginOptions) => {
|
||||||
if (process.env.NODE_ENV === 'production') {
|
if (process.env.NODE_ENV === 'production' || pluginOptions.dev === true) {
|
||||||
const siteId = pluginOptions.siteId
|
|
||||||
const siteUrl = pluginOptions.siteUrl
|
|
||||||
const matomoUrl = pluginOptions.matomoUrl
|
|
||||||
|
|
||||||
return setPostBodyComponents([
|
return setPostBodyComponents([
|
||||||
buildTrackingCode(siteId, matomoUrl),
|
buildTrackingCode(pluginOptions),
|
||||||
buildTrackingCodeNoJs(siteId, matomoUrl, siteUrl, pathname)
|
buildTrackingCodeNoJs(pluginOptions, pathname)
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
|
Loading…
Reference in New Issue
Block a user