From db6cbc3ab710b2e6f5f3e26aeb7e31a1c61b3ea1 Mon Sep 17 00:00:00 2001 From: Sergey Semenov Date: Thu, 7 Nov 2024 10:33:20 +0100 Subject: [PATCH] feat: analyticsParams --- priv/tracker/js/plausible.live-view.js | 2 +- tracker/src/plausible.js | 2 +- tracker/test/live-view.spec.js | 13 +++++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/priv/tracker/js/plausible.live-view.js b/priv/tracker/js/plausible.live-view.js index f6de8a99ab1e..f62d43ddc415 100644 --- a/priv/tracker/js/plausible.live-view.js +++ b/priv/tracker/js/plausible.live-view.js @@ -1 +1 @@ -!function(){"use strict";var a=window.location,o=window.document,r=o.currentScript,s=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event";function l(e,t){e&&console.warn("Ignoring Event: "+e),t&&t.callback&&t.callback()}function n(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return l("localhost",t);if((window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)&&!window.__plausible)return l(null,t);try{if("true"===window.localStorage.plausible_ignore)return l("localStorage flag",t)}catch(e){}var i={},n=(i.n=e,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=t.props),new XMLHttpRequest);n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4===n.readyState&&t&&t.callback&&t.callback({status:n.status})}}var e=window.plausible&&window.plausible.q||[];window.plausible=n;for(var t,i=0;in("pageview",{u:e.detail.href})),["phx:page-loading-start","phx:page-loading-stop"].map(t=>{window.addEventListener(t,e=>n("phx-event",{props:{event:t,detail:new URLSearchParams(e.detail||{}).toString()}}))}),window.addEventListener("submit",e=>n("js-submit",{props:{dom_id:e.target.id,...Object.fromEntries(new FormData(e.target).entries())}})),window.liveSocket?window.liveSocket.socket.logger=(e,t,i)=>{"push"!==e||t.includes("phoenix heartbeat")||n("phx-push",{props:{msg:t,...i}})}:console&&console.error("No liveSocket initialized")}(); \ No newline at end of file +!function(){"use strict";var a=window.location,o=window.document,r=o.currentScript,s=r.getAttribute("data-api")||new URL(r.src).origin+"/api/event";function l(e,t){e&&console.warn("Ignoring Event: "+e),t&&t.callback&&t.callback()}function n(e,t){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(a.hostname)||"file:"===a.protocol)return l("localhost",t);if((window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)&&!window.__plausible)return l(null,t);try{if("true"===window.localStorage.plausible_ignore)return l("localStorage flag",t)}catch(e){}var i={},n=(i.n=e,i.u=a.href,i.d=r.getAttribute("data-domain"),i.r=o.referrer||null,t&&t.meta&&(i.m=JSON.stringify(t.meta)),t&&t.props&&(i.p=t.props),new XMLHttpRequest);n.open("POST",s,!0),n.setRequestHeader("Content-Type","text/plain"),n.send(JSON.stringify(i)),n.onreadystatechange=function(){4===n.readyState&&t&&t.callback&&t.callback({status:n.status})}}var e=window.plausible&&window.plausible.q||[];window.plausible=n;for(var t,i=0;in("pageview",{u:e.detail.href})),["phx:page-loading-start","phx:page-loading-stop"].map(t=>{window.addEventListener(t,e=>n("phx-event",{props:{event:t,detail:new URLSearchParams(e.detail||{}).toString()}}))}),window.addEventListener("submit",e=>n("js-submit",{props:{dom_id:e.target.id,...Object.fromEntries(new FormData(e.target).entries())}})),window.liveSocket?window.liveSocket.socket.logger=(e,t,i)=>{"push"!==e||t.includes("phoenix heartbeat")||n("phx-push",{props:{msg:t,...window.analyticsParams||{},...i}})}:console&&console.error("No liveSocket initialized")}(); \ No newline at end of file diff --git a/tracker/src/plausible.js b/tracker/src/plausible.js index b328133b23e1..f42dd6e06918 100644 --- a/tracker/src/plausible.js +++ b/tracker/src/plausible.js @@ -182,7 +182,7 @@ if (window.liveSocket) window.liveSocket.socket.logger = (kind, msg, data) => { if ((kind === 'push') && !msg.includes("phoenix heartbeat")){ - trigger('phx-push', {props: {msg, ...data}}); + trigger('phx-push', {props: {msg, ...(window.analyticsParams || {}), ...data}}); } } else diff --git a/tracker/test/live-view.spec.js b/tracker/test/live-view.spec.js index 963ed0a26768..b1882472618c 100644 --- a/tracker/test/live-view.spec.js +++ b/tracker/test/live-view.spec.js @@ -10,10 +10,23 @@ test.describe('script.live-view.js events', () => { }); test('Sends phx-event', async ({ page }) => { + await page.evaluate(() => window.dispatchEvent(new CustomEvent("phx:page-loading-start", { }))) + expectCustomEvent(await plausibleRequestMock, 'phx-event', { }) + }); + + test('Sends phx-push', async ({ page }) => { await page.evaluate(() => window.liveSocket.socket.logger('push', '_message', { a: 1 })) expectCustomEvent(await plausibleRequestMock, 'phx-push', { a: 1 }) }); + test('Sends analyticsParams', async ({ page }) => { + await page.evaluate(() => { + window.analyticsParams = { b: 2 }; + window.liveSocket.socket.logger('push', '_message', { a: 1 }); + }) + expectCustomEvent(await plausibleRequestMock, 'phx-push', { a: 1, b: 2 }) + }); + test('Sends submit event', async ({ page }) => { await (await page.locator("#main-form-btn")).click() expectCustomEvent(await plausibleRequestMock, 'js-submit', { 'user[name]': "name", dom_id: "main-form" })