From 125273ab36a21f242a60eb02360dd6a582928b2b Mon Sep 17 00:00:00 2001 From: HonzaTuron Date: Thu, 15 May 2025 10:15:19 +0200 Subject: [PATCH 1/4] feat: Setup page analytics and cookie consent for docs [internal] --- docusaurus.config.js | 8 +++ .../docusaurus-plugin-segment/index.js | 60 +++++++++++++++++++ .../docusaurus-plugin-segment/segment.js | 44 ++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 src/plugins/docusaurus-plugin-segment/index.js create mode 100644 src/plugins/docusaurus-plugin-segment/segment.js diff --git a/docusaurus.config.js b/docusaurus.config.js index df71d853c4..4306a37305 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -6,6 +6,7 @@ const { createApiPageMD } = require('docusaurus-plugin-openapi-docs/lib/markdown const { config } = require('./apify-docs-theme'); const { collectSlugs } = require('./tools/utils/collectSlugs'); const { externalLinkProcessor } = require('./tools/utils/externalLink'); +const path = require('node:path'); /** @type {Partial} */ module.exports = { @@ -250,6 +251,13 @@ module.exports = { }, }, ], + [ + path.resolve(__dirname, 'src/plugins/docusaurus-plugin-segment'), + { + writeKey: process.env.SEGMENT_TOKEN, + allowedInDev: false, + }, + ], () => ({ name: 'webpack-loader-fix', configureWebpack() { diff --git a/src/plugins/docusaurus-plugin-segment/index.js b/src/plugins/docusaurus-plugin-segment/index.js new file mode 100644 index 0000000000..20f5b996b7 --- /dev/null +++ b/src/plugins/docusaurus-plugin-segment/index.js @@ -0,0 +1,60 @@ +const path = require('node:path'); + +module.exports = function (context, options) { + const { writeKey, allowedInDev = false } = options; + + return { + name: 'docusaurus-plugin-segment', + + getClientModules() { + return [path.resolve(__dirname, './segment')]; + }, + + injectHtmlTags() { + if (!writeKey) { + throw new Error( + 'You need to specify a Segment writeKey in the plugin options', + ); + } + + if (process.env.NODE_ENV !== 'production' && !allowedInDev) { + return {}; + } + + return { + headTags: [ + { + tagName: 'script', + attributes: { + src: 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js', + type: 'text/javascript', + charset: 'UTF-8', + 'data-domain-script': '7a8d334b-f744-4c02-9931-92861196dd3c', + }, + }, + { + tagName: 'script', + attributes: { + type: 'text/javascript', + }, + innerHTML: 'function OptanonWrapper() {}', + }, + { + tagName: 'script', + attributes: { + src: 'https://cdn.jsdelivr.net/npm/@segment/analytics-consent-wrapper-onetrust@latest/dist/umd/analytics-onetrust.umd.js', + }, + }, + { + tagName: 'script', + innerHTML: ` + !function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n Date: Mon, 19 May 2025 11:21:04 +0200 Subject: [PATCH 2/4] Resolve path --- docusaurus.config.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 4306a37305..d2644db215 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,4 +1,4 @@ -const { join } = require('node:path'); +const { join, resolve } = require('node:path'); const clsx = require('clsx'); const { createApiPageMD } = require('docusaurus-plugin-openapi-docs/lib/markdown'); @@ -6,7 +6,6 @@ const { createApiPageMD } = require('docusaurus-plugin-openapi-docs/lib/markdown const { config } = require('./apify-docs-theme'); const { collectSlugs } = require('./tools/utils/collectSlugs'); const { externalLinkProcessor } = require('./tools/utils/externalLink'); -const path = require('node:path'); /** @type {Partial} */ module.exports = { @@ -252,7 +251,7 @@ module.exports = { }, ], [ - path.resolve(__dirname, 'src/plugins/docusaurus-plugin-segment'), + resolve(__dirname, 'src/plugins/docusaurus-plugin-segment'), { writeKey: process.env.SEGMENT_TOKEN, allowedInDev: false, From 90a8371d10c5f47be28995426b37429d5ab079dc Mon Sep 17 00:00:00 2001 From: HonzaTuron Date: Mon, 19 May 2025 12:50:12 +0200 Subject: [PATCH 3/4] correct app --- src/plugins/docusaurus-plugin-segment/segment.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/docusaurus-plugin-segment/segment.js b/src/plugins/docusaurus-plugin-segment/segment.js index 3d1af2df03..7bb7f1969d 100644 --- a/src/plugins/docusaurus-plugin-segment/segment.js +++ b/src/plugins/docusaurus-plugin-segment/segment.js @@ -33,7 +33,7 @@ export default ExecutionEnvironment.canUseDOM ? { // Don't track page views on development if (process.env.NODE_ENV === 'production' && window.analytics) { window.analytics.page({ - app: 'crawlee', + app: 'docs', path: location.pathname, url: location.href, search: location.search, From 7af1c7efff8503155db0188c8663fc6651a89f53 Mon Sep 17 00:00:00 2001 From: HonzaTuron Date: Mon, 19 May 2025 14:46:09 +0200 Subject: [PATCH 4/4] Remove duplicated segment setup --- docusaurus.config.js | 15 --------------- src/plugins/docusaurus-plugin-segment/segment.js | 2 ++ 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index d2644db215..a304898573 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -46,21 +46,6 @@ module.exports = { sizes: 'any', }, }, - // Segment analytics - process.env.SEGMENT_TOKEN && { - tagName: 'script', - innerHTML: ` - !function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n