From: Vincent Vanwaelscappel Date: Wed, 22 Dec 2021 11:06:54 +0000 (+0100) Subject: wip #4978 @1 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=47470620b03aabceec2c85221d7bc9756e5daeb2;p=fluidbook-html5.git wip #4978 @1 --- diff --git a/js/libs/fluidbook/fluidbook.stats.js b/js/libs/fluidbook/fluidbook.stats.js index 31303cfe..8d87da2e 100644 --- a/js/libs/fluidbook/fluidbook.stats.js +++ b/js/libs/fluidbook/fluidbook.stats.js @@ -9,6 +9,21 @@ function FluidbookStats(fluidbook) { if (this.fluidbook.settings.stats) { this.worker = new Worker('js/libs/fluidbook/workers/stats.js'); } + if (this.fluidbook.settings.statsMatomo) { + window._paq = window._paq || []; + window._paq.push(["setDoNotTrack", true]); + window._paq.push(['enableHeartBeatTimer']); + window._paq.push(['enableLinkTracking']); + (function (siteId) { + var u = "https://v3.stats.fluidbook.com/"; + window._paq.push(['setTrackerUrl', u + 'matomo.php']); + window._paq.push(['setSiteId', siteId]); + var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0]; + g.async = true; + g.src = u + 'matomo.js'; + s.parentNode.insertBefore(g, s); + })(this.fluidbook.settings.statsMatomo); + } if (this.fluidbook.settings.googleTagManager !== undefined && this.fluidbook.settings.googleTagManager !== '') { this.ga = 'gtm'; } else if (this.fluidbook.settings.googleAnalytics !== '') { @@ -104,6 +119,9 @@ FluidbookStats.prototype = { if (this.fluidbook.settings.stats) { this.trackFluidbook(type, page, extra); } + if (this.fluidbook.settings.statsMatomo) { + this.trackMatomo(type, page, extra); + } this.trackGoogleAnalytics(type, page, extra); }, @@ -128,6 +146,58 @@ FluidbookStats.prototype = { } }, + trackMatomo(type, page, extra, url) { + console.log('track matomo', type, page, extra, url); + if (url === undefined) { + url = window.location; + } + switch (type) { + case 0: // Change page + + window._paq.push(['setCustomUrl', url]); + window._paq.push(['trackPageView']); + break; + case 10: // Open Book + window._paq.push(['trackPageView']); + break; + case 14: // Open chapters menu + window._paq.push(['trackEvent', 'menu', 'click', 'chapters']); + break; + case 6: // Click a link in a page + window._paq.push(['trackEvent', 'link', 'click', extra]); + break; + case 1: // Search + window._paq.push(['trackSiteSearch', extra]); + break; + case 3: // Print + window._paq.push(['trackEvent', 'menu', 'click', 'print']); + break; + case 5: // Share + case 12: // Facebook + case 13: // Twitter + window._paq.push(['trackEvent', 'share', 'send', type]); + break; + case 7: // PDF + case 8: // Partial PDF + window._paq.push(['trackEvent', 'menu', 'click', 'download']); + break; + case 4: // Bookmarks + window._paq.push(['trackEvent', 'bookmark', 'page', 'page ' + page]); + break; + case 9: // Extras + window._paq.push(['trackEvent', 'extra', 'click', extra]); + break; + case 2:// Zoom + window._paq.push(['trackEvent', 'zoom', 'page', page]); + break; + case 11:// Video + window._paq.push(['trackEvent', 'video', 'view', extra]); + break; + case 15:// + window._paq.push(['trackEvent', 'cart', 'addproduct', extra]); + } + }, + trackGoogleAnalytics: function (type, page, extra, url) { this.checkGoogleAnalytics(); @@ -256,12 +326,7 @@ FluidbookStats.prototype = { var data = { - id: $this.id, - vid: $this.vid, - type: type, - page: page, - str: extra, - time: new Date().getTime() + id: $this.id, vid: $this.vid, type: type, page: page, str: extra, time: new Date().getTime() }; setTimeout(function () { diff --git a/js/libs/fluidbook/workers/stats.js b/js/libs/fluidbook/workers/stats.js index 9d7f3a6a..16797335 100644 --- a/js/libs/fluidbook/workers/stats.js +++ b/js/libs/fluidbook/workers/stats.js @@ -2,6 +2,7 @@ importScripts('../../stand/axios.min.js', '../../polyfills/promise.min.js'); onmessage = function (e) { var time = new Date().getTime(); + e.data.matomo=1; e.data.offset = Math.round((time - e.data.time) / 1000); var url = 'https://stats.fluidbook.com/stats2.php?' + Object.keys(e.data).reduce(function (a, k) { a.push(k + '=' + encodeURIComponent(e.data[k]));