|
| 1 | +const path = require('path') |
| 2 | + |
| 3 | +// based on https://github.com/karser/docusaurus-plugin-matomo with extended parameters |
| 4 | + |
| 5 | +function matomoAnalytics (context, options) { |
| 6 | + const { siteConfig } = context |
| 7 | + const { themeConfig } = siteConfig |
| 8 | + const { matomoAnalytics } = themeConfig || {} |
| 9 | + |
| 10 | + if (!matomoAnalytics) { |
| 11 | + throw new Error( |
| 12 | + 'Please specify \'matomo\' object in \'themeConfig\' with \'matomoUrl\' and \'siteId\' fields in it to use docusaurus-plugin-matomo' |
| 13 | + ) |
| 14 | + } |
| 15 | + |
| 16 | + const { matomoUrl, siteId } = matomoAnalytics |
| 17 | + |
| 18 | + if (!matomoUrl) { |
| 19 | + throw new Error( |
| 20 | + 'Please specify the `matomoUrl` field in the `themeConfig.matomo`' |
| 21 | + ) |
| 22 | + } |
| 23 | + if (!siteId) { |
| 24 | + throw new Error( |
| 25 | + 'Please specify the `siteId` field in the `themeConfig.matomo`' |
| 26 | + ) |
| 27 | + } |
| 28 | + |
| 29 | + const isProd = process.env.NODE_ENV === 'production' |
| 30 | + return { |
| 31 | + name: 'docusaurus-plugin-matomo-analytics', |
| 32 | + |
| 33 | + getClientModules () { |
| 34 | + return isProd ? [path.resolve(__dirname, './track')] : [] |
| 35 | + }, |
| 36 | + |
| 37 | + injectHtmlTags () { |
| 38 | + return { |
| 39 | + headTags: [ |
| 40 | + { |
| 41 | + tagName: 'link', |
| 42 | + attributes: { |
| 43 | + rel: 'preconnect', |
| 44 | + href: `${matomoAnalytics.matomoUrl}` |
| 45 | + } |
| 46 | + }, |
| 47 | + { |
| 48 | + tagName: 'script', |
| 49 | + innerHTML: ` |
| 50 | + var _paq = window._paq = window._paq || []; |
| 51 | + _paq.push(["setDocumentTitle", document.domain + "/" + document.title]); |
| 52 | + ${matomoAnalytics.cookieDomain ? `_paq.push(["setCookieDomain", "${matomoAnalytics.cookieDomain}"]);` : ''} |
| 53 | + ${matomoAnalytics.domains ? `_paq.push(["setDomains", ["${matomoAnalytics.domains}"]])` : ''} |
| 54 | + ${matomoAnalytics.campaignNameKey ? `_paq.push(["setCampaignNameKey", "${matomoAnalytics.campaignNameKey}"]);` : ''} |
| 55 | + ${matomoAnalytics.campaignKeywordKey ? `_paq.push(["setCampaignKeywordKey", "${matomoAnalytics.campaignKeywordKey}"]);` : ''} |
| 56 | + ${matomoAnalytics.doNotTrack ? `_paq.push(["setDoNotTrack", ${matomoAnalytics.doNotTrack}]);` : ''} |
| 57 | + ${matomoAnalytics.disableCookies ? '_paq.push(["disableCookies"]);' : ''} |
| 58 | + _paq.push(['trackPageView']); |
| 59 | + _paq.push(['enableLinkTracking']); |
| 60 | + (function() { |
| 61 | + var u="${matomoAnalytics.matomoUrl}"; |
| 62 | + _paq.push(['setTrackerUrl', u+'${matomoAnalytics.phpLoader}']); |
| 63 | + _paq.push(['setSiteId', '${matomoAnalytics.siteId}']); |
| 64 | + var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; |
| 65 | + g.async=true; g.src=u+'${ |
| 66 | + matomoAnalytics.jsLoader |
| 67 | + }'; s.parentNode.insertBefore(g,s); |
| 68 | + })(); |
| 69 | + |
| 70 | + ` |
| 71 | + } |
| 72 | + ] |
| 73 | + } |
| 74 | + } |
| 75 | + } |
| 76 | +} |
| 77 | + |
| 78 | +module.exports = matomoAnalytics |
0 commit comments