Merge pull request #33278 from overleaf/ar-mixpanel-autocapture

[web] mixpanel autocapture

GitOrigin-RevId: 81f6a11ae968da4c13a28e202dd3ed1113f365d4
This commit is contained in:
Andrew Rumble
2026-04-30 16:20:46 +01:00
committed by Copybot
parent 42f7bca37e
commit 30bedf3913
6 changed files with 89 additions and 1 deletions

View File

@@ -179,7 +179,7 @@ async function projectListPage(req, res, next) {
userId,
`email isAdmin emails features alphaProgram betaProgram lastPrimaryEmailCheck lastActive signUpDate ace refProviders${
isSaas
? ' enrollment writefull completedTutorials aiFeatures aiErrorAssistant'
? ' enrollment writefull completedTutorials aiFeatures aiErrorAssistant labsProgram'
: ''
}`
)

View File

@@ -418,6 +418,8 @@ export default async function (webRouter, privateApiRouter, publicApiRouter) {
cioSiteId: Settings.analytics?.cio?.siteId,
linkedInInsightsPartnerId: Settings.analytics?.linkedIn?.partnerId,
enablePandocConversions: Settings.enablePandocConversions,
mixpanelLabsToken:
Settings.labs?.enable && Settings.analytics?.mixpanel?.labsToken,
}
next()
})

View File

@@ -0,0 +1,77 @@
if user && user.labsProgram && ExposedSettings.mixpanelLabsToken
script(
type='text/javascript'
nonce=scriptNonce
id='mp-loader'
data-mixpanel-token=ExposedSettings.mixpanelLabsToken
).
;(function (f, b) {
if (!b.__SV) {
var e, g, i, h
window.mixpanel = b
b._i = []
b.init = function (e, f, c) {
function g(a, d) {
var b = d.split('.')
2 == b.length && ((a = a[b[0]]), (d = b[1]))
a[d] = function () {
a.push([d].concat(Array.prototype.slice.call(arguments, 0)))
}
}
var a = b
'undefined' !== typeof c ? (a = b[c] = []) : (c = 'mixpanel')
a.people = a.people || []
a.toString = function (a) {
var d = 'mixpanel'
'mixpanel' !== c && (d += '.' + c)
a || (d += ' (stub)')
return d
}
a.people.toString = function () {
return a.toString(1) + '.people (stub)'
}
i = 'disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking start_batch_senders people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove'.split(' ')
for (h = 0; h < i.length; h++) g(a, i[h])
var j = 'set set_once union unset remove delete'.split(' ')
a.get_group = function () {
function b(c) {
d[c] = function () {
call2_args = arguments
call2 = [c].concat(Array.prototype.slice.call(call2_args, 0))
a.push([e, call2])
}
}
for (var d = {}, e = ['get_group'].concat(Array.prototype.slice.call(arguments, 0)), c = 0; c < j.length; c++) b(j[c])
return d
}
b._i.push([e, f, c])
}
b.__SV = 1.2
e = f.createElement('script')
e.type = 'text/javascript'
e.async = !0
e.src = 'undefined' !== typeof MIXPANEL_CUSTOM_LIB_URL ? MIXPANEL_CUSTOM_LIB_URL : 'file:' === f.location.protocol && '//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js'.match(/^\/\//) ? 'https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js' : '//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js'
g = f.getElementsByTagName('script')[0]
g.parentNode.insertBefore(e, g)
}
})(document, window.mixpanel || [])
var mixpanelSettings = document.querySelector('#mp-loader').dataset
var mixpanelToken = mixpanelSettings.mixpanelToken
if (mixpanelToken) {
mixpanel.init(mixpanelToken, {
api_host: 'https://api-eu.mixpanel.com',
autocapture: {
capture_text_content: false,
input: true,
rage_click: true,
dead_click: true,
scroll: true,
submit: true,
click: true,
pageview: 'full-url',
},
})
}

View File

@@ -13,5 +13,8 @@ block vars
block content
#pdf-preview-detached-root
block append head-scripts
include ./_mixpanel_autocapture.pug
block append meta
include editor/_meta

View File

@@ -32,3 +32,6 @@ block prepend foot-scripts
src=(wsUrl || '/socket.io') + '/socket.io.js'
defer=deferScripts
)
block append head-scripts
include ./_mixpanel_autocapture.pug

View File

@@ -95,3 +95,6 @@ block append meta
block content
#project-list-root
block append head-scripts
include ./_mixpanel_autocapture.pug