app/assets/javascripts/hyrax/analytics_events.js in hyrax-3.5.0 vs app/assets/javascripts/hyrax/analytics_events.js in hyrax-3.6.0

- old
+ new

@@ -1,75 +1,125 @@ class TrackingTags { constructor(provider) { this.provider = provider + switch(this.provider) { + case 'matomo': + this.tracker = new MatomoTagTracker(); + break; + case 'google': + this.tracker = new UATagTracker(); + break; + case 'ga4': + this.tracker = new GA4TagTracker(); + break; + default: + console.error('Unsupport analytics provider ' + this.provider + ', supported values are: matomo, google, ga4'); + } } + // Track an event with the configured provider + trackTagEvent(category, action, name) { + this.tracker.trackEvent(category, action, name); + } + + // Track a page view with the configured provider + trackPageView() { + this.tracker.trackPageView(); + } + + // Deprecated: use trackTagEvent and trackPageView instead. analytics() { - if(this.provider === "matomo") { - return _paq; - } - else { - return _gaq; - } + return this; } - pageView() { - if(this.provider === "matomo") { - return 'trackPageView' + // Deprecated: use trackTagEvent and trackPageView instead. + push(params) { + if (params[0] == 'trackPageView' || params[0] == '_trackPageView') { + this.tracker.trackPageView(); } else { - return '_trackPageview' + this.tracker.trackTagEvent(params[1], params[2], params[3]); } } + // Deprecated + pageView() { + return 'trackPageView'; + } + + // Deprecated trackEvent() { - if(this.provider === "matomo") { - return 'trackEvent' - } else { - return '_trackEvent' - } + return 'trackEvent'; } } +class GA4TagTracker { + trackEvent(category, action, name) { + gtag('event', action, { + 'category': category, + 'label': name + }); + } + + trackPageView() { + // No operation necessary, this event is automatically collected + } +} + +class UATagTracker { + trackEvent(category, action, name) { + _gaq.push(['_trackEvent', category, action, name]); + } + + trackPageView() { + _gaq.push(['_trackPageView']); + } +} + +class MatomoTagTracker { + trackEvent(category, action, name) { + _paq.push(['trackEvent', category, action, name]); + } + + trackPageView() { + _paq.push(['trackPageView']); + } +} + function trackPageView() { - window.trackingTags.analytics().push([window.trackingTags.pageView()]); + window.trackingTags.trackPageView(); } function trackAnalyticsEvents() { $('span.analytics-event').each(function(){ - var eventSpan = $(this) - window.trackingTags.analytics().push([window.trackingTags.trackEvent(), eventSpan.data('category'), eventSpan.data('action'), eventSpan.data('name')]); + var eventSpan = $(this); + window.trackingTags.trackTagEvent(eventSpan.data('category'), eventSpan.data('action'), eventSpan.data('name')); }) } function setupTracking() { - var provider = $('meta[name="analytics-provider"]').prop('content') - if (provider === undefined) { - return; - } - window.trackingTags = new TrackingTags(provider) - trackPageView() - trackAnalyticsEvents() + var provider = $('meta[name="analytics-provider"]').prop('content') + if (provider === undefined) { + return; + } + window.trackingTags = new TrackingTags(provider); + trackPageView(); + trackAnalyticsEvents(); } if (typeof Turbolinks !== 'undefined') { $(document).on('turbolinks:load', function() { - setupTracking() - }) + setupTracking(); + }); } else { $(document).on('ready', function() { - setupTracking() - }) + setupTracking(); + }); } $(document).on('click', '#file_download', function(e) { - var provider = $('meta[name="analytics-provider"]').prop('content') - if (provider === undefined) { - return; - } - window.trackingTags = new TrackingTags(provider) - window.trackingTags.analytics().push([trackingTags.trackEvent(), 'file-set', 'file-set-download', $(this).data('label')]); - window.trackingTags.analytics().push([trackingTags.trackEvent(), 'file-set-in-work', 'file-set-in-work-download', $(this).data('work-id')]); + window.trackingTags.trackTagEvent('file-set', 'file-set-download', $(this).data('label')); + window.trackingTags.trackTagEvent('file-set-in-work', 'file-set-in-work-download', $(this).data('work-id')); $(this).data('collection-ids').forEach(function (collection) { - window.trackingTags.analytics().push([trackingTags.trackEvent(), 'file-set-in-collection', 'file-set-in-collection-download', collection]); - window.trackingTags.analytics().push([trackingTags.trackEvent(), 'work-in-collection', 'work-in-collection-download', collection]); + window.trackingTags.trackTagEvent('file-set-in-collection', 'file-set-in-collection-download', collection); + window.trackingTags.trackTagEvent('work-in-collection', 'work-in-collection-download', collection); }); });