From c764bff0acb02d75a1b41d578f8da880d20e98ca Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Tue, 24 Jul 2018 15:55:59 +0200 Subject: [PATCH] fix #2152 @6 --- js/libs/fluidbook/fluidbook.bookmarks.js | 10 +- js/libs/fluidbook/fluidbook.js | 2 + js/libs/fluidbook/fluidbook.links.js | 2 + js/libs/fluidbook/fluidbook.menu.js | 4 +- js/libs/fluidbook/fluidbook.stats.js | 123 ++++++++++++++++++++--- js/libs/fluidbook/fluidbook.zoom.js | 6 ++ js/main.js | 1 - 7 files changed, 126 insertions(+), 22 deletions(-) diff --git a/js/libs/fluidbook/fluidbook.bookmarks.js b/js/libs/fluidbook/fluidbook.bookmarks.js index b2db7212..dc463594 100644 --- a/js/libs/fluidbook/fluidbook.bookmarks.js +++ b/js/libs/fluidbook/fluidbook.bookmarks.js @@ -94,7 +94,7 @@ FluidbookBookmarks.prototype = { var re = 0; for (var i = 0; i < this.bookmarks.length; i++) { var b = this.bookmarks[i]; - if(b>this.fluidbook.getMaxPage()){ + if (b > this.fluidbook.getMaxPage()) { continue; } if (rs == 0) { @@ -264,7 +264,7 @@ FluidbookBookmarks.prototype = { }, getLinkedPages: function (page) { var group = this.getGroupOfPage(page); - console.log('group : '+group); + console.log('group : ' + group); if (group === -1 || isNaN(group)) { return []; } @@ -280,14 +280,14 @@ FluidbookBookmarks.prototype = { var page = pages[i]; if (!cornersOnly) { - console.log('add bookmark on page '+page); this.bookmarks.push(page); } } if (!cornersOnly) { - console.log('bookmark added'); this.updateBookmarks(); - // TODO add stats call + if (pages.length > 0) { + this.fluidbook.stats.track(4, pages[0]); + } } }, setCornersEnabled: function (page, enabled) { diff --git a/js/libs/fluidbook/fluidbook.js b/js/libs/fluidbook/fluidbook.js index 02dc4603..42dcda63 100644 --- a/js/libs/fluidbook/fluidbook.js +++ b/js/libs/fluidbook/fluidbook.js @@ -872,10 +872,12 @@ Fluidbook.prototype = { }, print: function (button) { + this.stats.track(3); return this.openPDF(button, true); }, downloadPDF: function (button) { + this.stats.track(7); return this.openPDF(button, false) }, diff --git a/js/libs/fluidbook/fluidbook.links.js b/js/libs/fluidbook/fluidbook.links.js index d45affc7..261e5405 100644 --- a/js/libs/fluidbook/fluidbook.links.js +++ b/js/libs/fluidbook/fluidbook.links.js @@ -287,6 +287,8 @@ FluidbookLinks.prototype = { // Hide close button initially so it only shows when zoom finishes. $(".zoomPopupClose").css('opacity', 0); + $this.fluidbook.stats.track(2, $this.fluidbook.currentPage); + // Display close button after zoom animation has finished setTimeout(function () { $(".zoomPopupClose").css('opacity', 1); diff --git a/js/libs/fluidbook/fluidbook.menu.js b/js/libs/fluidbook/fluidbook.menu.js index d6d8af30..f3d8f29e 100644 --- a/js/libs/fluidbook/fluidbook.menu.js +++ b/js/libs/fluidbook/fluidbook.menu.js @@ -395,6 +395,7 @@ FluidbookMenu.prototype = { if (callback != undefined) { callback(); } + this.fluidbook.stats.track(14); }, openExternalChapters: function (callback) { var view = '
' + this.closeButton() + '
'; @@ -407,6 +408,7 @@ FluidbookMenu.prototype = { if (callback != undefined) { callback(); } + this.fluidbook.stats.track(14); }, openIndex: function (title, group, closeAll, callback) { var c = !closeAll ? ' one' : ''; @@ -531,7 +533,7 @@ FluidbookMenu.prototype = { h = hh; fullscreen = true; } - forceHeight=true; + forceHeight = true; break; case 'cart': w = 1024; diff --git a/js/libs/fluidbook/fluidbook.stats.js b/js/libs/fluidbook/fluidbook.stats.js index 49734152..2b6732bd 100644 --- a/js/libs/fluidbook/fluidbook.stats.js +++ b/js/libs/fluidbook/fluidbook.stats.js @@ -2,6 +2,19 @@ function FluidbookStats(fluidbook) { this.fluidbook = fluidbook; this.id = this.fluidbook.datas.id; this.vid = guid(); + if (this.fluidbook.datas.googleAnalytics !== '') { + this.ga = 'gtag'; + this.gaCodes = this.fluidbook.datas.googleAnalytics.split(','); + $.each(this.gaCodes, function (k, code) { + gtag('config', code, {'send_page_view': false}); + }); + } else { + if ('ga' in window) { + this.ga = 'ga'; + } else { + this.ga = false; + } + } this.init(); } @@ -13,31 +26,110 @@ FluidbookStats.prototype = { return true; }); }, - trackPageChange: function () { + + track: function (type, page, extra) { if (!this.fluidbook.support.hasNetwork()) { return; } - try { - if (_gaq == undefined) { - return; + + if (this.fluidbook.datas.stats) { + this.trackFluidbook(type, page, extra); + } + this.trackGoogleAnalytics(type, page, extra); + }, + + trackGoogleAnalytics: function (type, page, extra) { + if (this.ga === false) { + return; + } + + var url = location.pathname + location.search + location.hash + + switch (type) { + case 0: // Change page + this._ga('pageview', url); + break; + case 10: // Open Book + this._ga('pageview'); + break; + case 14: // Open chapters menu + this._ga('event', 'menu', 'click', 'chapters'); + break; + case 6: // Click a link in a page + this._ga('event', 'link', 'click', extra); + break; + case 1: // Search + var l = document.createElement('a'); + l.href = window.location.toString(); + if (l.search == '') { + l.search = '?'; + } else { + l.search += '&'; + } + l.search = 'q=' + extra; + this._ga('pageview', l.pathname + l.search + l.hash); + break; + case 3: // Print + this._ga('event', 'menu', 'click', 'print'); + break; + case 5: // Share + case 12: // Facebook + case 13: // Twitter + this._ga('event', 'share', 'send', type); + break; + case 7: // PDF + case 8: // Partial PDF + this._ga('event', 'menu', 'click', 'download'); + break; + case 4: // Bookmarks + this._ga('event', 'bookmark', 'page', 'page ' + page); + break; + case 9: // Extras + this._ga('event', 'extra', 'click', extra); + break; + case 2:// Zoom + this._ga('event', 'zoom', 'page', page); + break; + case 11:// Video + this._ga('event', 'video', 'view', extra); + break; + } + }, + + _ga: function (a0, a1, a2, a3, a4) { + var args = Array.prototype.slice.call(arguments); + if (this.ga == 'gtag') { + var f, o, c, a; + o = {}; + if (a0 === 'pageview') { + f = 'config'; + c = true; + o = {}; + if (a1 !== undefined) { + o.page_path = a1; + } + } else if (a0 === 'event') { + f = 'event'; + c = false; + a = a2; + o.event_category = a1; + o.event_label = a3; } - var page = location.pathname + location.search + location.hash; - if (_gatrackers != undefined) { - $.each(_gatrackers, function (k, v) { - _gaq.push([v + '._trackPageview', page]); + + if (c) { + $.each(this.gaCodes, function (k, code) { + gtag(f, code, o); }); } else { - _gaq.push(['_trackPageview', page]); + gtag(f, a, o); } - } catch (err) { - + } else if (this.ga == 'ga') { + args.unshift('send'); + window['ga'].apply(null, args); } }, - track: function (type, page, extra) { - if (!this.fluidbook.support.hasNetwork()) { - return; - } + trackFluidbook: function (type, page, extra) { if (page == undefined) { page = 0; } @@ -64,5 +156,6 @@ FluidbookStats.prototype = { } }); } + , }; diff --git a/js/libs/fluidbook/fluidbook.zoom.js b/js/libs/fluidbook/fluidbook.zoom.js index a169c632..5aeed86c 100644 --- a/js/libs/fluidbook/fluidbook.zoom.js +++ b/js/libs/fluidbook/fluidbook.zoom.js @@ -38,6 +38,8 @@ FluidbookZoom.prototype = { setZoom: function (zoom, direction, end) { + var origZoom = this.zoom; + if (end == undefined) { end = false; } @@ -73,6 +75,10 @@ FluidbookZoom.prototype = { } this.zoom = zoom; this.updateZoom(); + + if (origZoom == 1 && this.zoom > 1) { + this.fluidbook.stats.track(2, this.currentPage); + } }, setTransition: function (transition) { diff --git a/js/main.js b/js/main.js index 799dee43..bf85ffe5 100644 --- a/js/main.js +++ b/js/main.js @@ -295,7 +295,6 @@ try { if (maskHashChange) { return; } - fluidbook.stats.trackPageChange(); fluidbook.changeAddress(); return false; }); -- 2.39.5