Add GoogleAnalytics event tracking

This commit is contained in:
Andrew Miner
2016-05-11 21:39:43 -07:00
parent c441d75529
commit 16848772a3
21 changed files with 176 additions and 36 deletions
+67
View File
@@ -0,0 +1,67 @@
#
# Crafting Guide - tracker.coffee
#
# Copyright © 2014-2016 by Redwood Labs
# All rights reserved.
#
########################################################################################################################
module.exports = class Tracker
@::TIMEOUT = 5000
constructor: ->
@_enabled = false
# Public Methods ###############################################################################
trackEvent: (category, action, label='', value=0)->
return unless category?
@_trackEvent category, action, label, value
trackOutboundEvent: (category, action, label='', value=0)->
return unless category?
@_trackEvent category, action, label, value
trackPageView: (pathname)->
promise = w.promise (resolve, reject)=>
pathname ?= window.location.pathname
if @_enabled and ga?
logger.info -> "Recording GA page view: #{pathname}"
ga 'send', 'pageview', pathname, hitCallback: -> resolve true
else
logger.info -> "Suppressing GA page view: #{pathname}"
resolve true
promise.timeout @TIMEOUT
.catch (error)->
logger.error "Failed to send GA event!"
# Property Methods #############################################################################
Object.defineProperties @prototype,
enabled:
get: -> return @_enabled
set: (newEnabled)->
@_enabled = !! newEnabled
# Private Methods ##############################################################################
_trackEvent: (category, action, label='', value=0, options={})->
promise = w.promise (resolve, reject)=>
options.hitCallback = ->
resolve true
if @_enabled and ga?
logger.info -> "Recording GA event: #{category}, #{action}, '#{label}', #{value}"
ga 'send', 'event', category, action, label, value
else
logger.info -> "Suppressing GA event: #{category}, #{action}, '#{label}', #{value}"
resolve true
promise.timeout @TIMEOUT
.catch (error)->
logger.error -> "Failed to send GA event!: #{error}"