mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-26 05:53:39 -04:00
Update Tracker.trackEvent
Mechanics have changed a bit: first param is an action string, second param has specific properties if Google Analytics. Updating some of the trackEvent calls to use correct actions and categories.
This commit is contained in:
parent
6cb46aafa8
commit
fc2c68a7af
7 changed files with 34 additions and 23 deletions
app
|
@ -78,14 +78,14 @@ module.exports = class LevelSetupManager extends CocoClass
|
|||
@inventoryModal.didReappear()
|
||||
@inventoryModal.onShown()
|
||||
@inventoryModal.setHero(e.hero)
|
||||
window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Inventory', ['Google Analytics']
|
||||
window.tracker?.trackEvent 'Choose Inventory', category: 'Play Level', ['Google Analytics']
|
||||
|
||||
onChooseHeroClicked: ->
|
||||
@options.parent.openModalView(@heroesModal)
|
||||
@heroesModal.render()
|
||||
@heroesModal.didReappear()
|
||||
@inventoryModal.endHighlight()
|
||||
window.tracker?.trackEvent 'Play Level Modal', Action: 'Choose Hero', ['Google Analytics']
|
||||
window.tracker?.trackEvent 'Change Hero', category: 'Play Level', ['Google Analytics']
|
||||
|
||||
onInventoryModalPlayClicked: ->
|
||||
@navigatingToPlay = true
|
||||
|
|
|
@ -25,18 +25,29 @@ module.exports = class Tracker
|
|||
console.log 'Going to track visit for', "/#{url}" if debugAnalytics
|
||||
analytics.pageview "/#{url}"
|
||||
|
||||
trackEvent: (event, properties, includeProviders=null) =>
|
||||
console.log 'Would track analytics event:', event, properties if debugAnalytics
|
||||
trackEvent: (action, properties, includeProviders=null) =>
|
||||
# 'action' is a string
|
||||
# Google Analytics properties format: {category: 'Account', label: 'Premium', value: 50 }
|
||||
# https://segment.com/docs/integrations/google-analytics/#track
|
||||
# https://developers.google.com/analytics/devguides/collection/gajs/eventTrackerGuide#Anatomy
|
||||
# Mixpanel properties format: whatever you want unlike GA
|
||||
# https://segment.com/docs/integrations/mixpanel/
|
||||
console.log 'Would track analytics event:', action, properties if debugAnalytics
|
||||
return unless me and @isProduction and analytics? and not me.isAdmin()
|
||||
console.log 'Going to track analytics event:', event, properties if debugAnalytics
|
||||
console.log 'Going to track analytics event:', action, properties if debugAnalytics
|
||||
properties = properties or {}
|
||||
context = {}
|
||||
|
||||
# TODO: Restrict providers, if given includeProviders
|
||||
# TODO: This method may not work anymore, because it is not referenced in the segment.io docs
|
||||
# TODO: Can double check in Mixpanel
|
||||
# TODO: https://segment.com/docs/api/tracking/track/
|
||||
if includeProviders
|
||||
context.providers = {'All': false}
|
||||
for provider in includeProviders
|
||||
context.providers[provider] = true
|
||||
event.label = properties.label if properties.label
|
||||
analytics?.track event, properties, context
|
||||
|
||||
analytics?.track action, properties, context
|
||||
|
||||
trackTiming: (duration, category, variable, label, samplePercentage=5) ->
|
||||
# https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingTiming
|
||||
|
|
|
@ -15,7 +15,7 @@ module.exports = class HomeView extends RootView
|
|||
|
||||
constructor: ->
|
||||
super()
|
||||
window.tracker?.trackEvent 'Homepage', Action: 'Loaded'
|
||||
window.tracker?.trackEvent 'Homepage Loaded', category: 'Homepage', ['Google Analytics']
|
||||
if not me.get('hourOfCode') and @getQueryVariable 'hour_of_code'
|
||||
@setUpHourOfCode()
|
||||
elapsed = (new Date() - new Date(me.get('dateCreated')))
|
||||
|
@ -41,7 +41,7 @@ module.exports = class HomeView extends RootView
|
|||
@playSound 'menu-button-click'
|
||||
e.preventDefault()
|
||||
e.stopImmediatePropagation()
|
||||
window.tracker?.trackEvent 'Homepage', Action: 'Play'
|
||||
window.tracker?.trackEvent 'Click Play', category: 'Homepage'
|
||||
window.open '/play', '_blank'
|
||||
|
||||
afterInsert: ->
|
||||
|
|
|
@ -428,7 +428,7 @@ module.exports = class InventoryModal extends ModalView
|
|||
hasGoneFullScreenOnce = true
|
||||
@updateConfig =>
|
||||
@trigger? 'play-click'
|
||||
window.tracker?.trackEvent 'Play Level Modal', Action: 'Play', ['Google Analytics']
|
||||
window.tracker?.trackEvent 'Inventory Play', category: 'Play Level', ['Google Analytics']
|
||||
|
||||
updateConfig: (callback, skipSessionSave) ->
|
||||
sessionHeroConfig = @options.session.get('heroConfig') ? {}
|
||||
|
|
|
@ -47,7 +47,7 @@ module.exports = class RootView extends CocoView
|
|||
|
||||
logoutAccount: ->
|
||||
Backbone.Mediator.publish("auth:logging-out")
|
||||
window.tracker?.trackEvent 'Homepage', Action: 'Log Out' if @id is 'home-view'
|
||||
window.tracker?.trackEvent 'Log Out', category:'Homepage', ['Google Analytics'] if @id is 'home-view'
|
||||
logoutUser($('#login-email').val())
|
||||
|
||||
showWizardSettingsModal: ->
|
||||
|
@ -57,18 +57,18 @@ module.exports = class RootView extends CocoView
|
|||
|
||||
onClickSignupButton: ->
|
||||
AuthModal = require 'views/modal/AuthModal'
|
||||
window.tracker?.trackEvent 'Homepage', Action: 'Signup Modal' if @id is 'home-view'
|
||||
window.tracker?.trackEvent 'Sign Up', category: 'Homepage', ['Google Analytics'] if @id is 'home-view'
|
||||
@openModalView new AuthModal {mode: 'signup'}
|
||||
|
||||
onClickLoginButton: ->
|
||||
AuthModal = require 'views/modal/AuthModal'
|
||||
window.tracker?.trackEvent 'Homepage', Action: 'Login Modal' if @id is 'home-view'
|
||||
window.tracker?.trackEvent 'Login', category: 'Homepage', ['Google Analytics'] if @id is 'home-view'
|
||||
@openModalView new AuthModal {mode: 'login'}
|
||||
|
||||
onClickAnchor: (e) ->
|
||||
return if @destroyed
|
||||
anchorText = e?.currentTarget?.text
|
||||
window.tracker?.trackEvent 'Homepage', Action: anchorText, ['Google Analytics'] if @id is 'home-view' and anchorText
|
||||
window.tracker?.trackEvent anchorText, category: 'Homepage', ['Google Analytics'] if @id is 'home-view' and anchorText
|
||||
@toggleModal e
|
||||
|
||||
onOpenModalView: (e) ->
|
||||
|
|
|
@ -70,7 +70,7 @@ module.exports = class WorldMapView extends RootView
|
|||
@hadEverChosenHero = me.get('heroConfig')?.thangType
|
||||
@listenTo me, 'change:purchased', -> @renderSelectors('#gems-count')
|
||||
@listenTo me, 'change:spent', -> @renderSelectors('#gems-count')
|
||||
window.tracker?.trackEvent 'World Map', Action: 'Loaded', ['Google Analytics']
|
||||
window.tracker?.trackEvent 'Loaded World Map', category: 'World Map', ['Google Analytics']
|
||||
|
||||
# If it's a new player who didn't appear to come from Hour of Code, we register her here without setting the hourOfCode property.
|
||||
elapsed = (new Date() - new Date(me.get('dateCreated')))
|
||||
|
@ -192,12 +192,12 @@ module.exports = class WorldMapView extends RootView
|
|||
levelElement = $(e.target).parents('.level')
|
||||
levelID = levelElement.data('level-id')
|
||||
@startLevel levelElement
|
||||
window.tracker?.trackEvent 'World Map', Action: 'Play Level', levelID: levelID, ['Google Analytics']
|
||||
window.tracker?.trackEvent 'Clicked Level', category: 'World Map', levelID: levelID, ['Google Analytics']
|
||||
|
||||
onClickStartLevel: (e) ->
|
||||
levelElement = $(e.target).parents('.level-info-container')
|
||||
@startLevel levelElement
|
||||
window.tracker?.trackEvent 'World Map', Action: 'Play Level', levelID: levelElement.data('level-id'), ['Google Analytics']
|
||||
window.tracker?.trackEvent 'Clicked Start Level', category: 'World Map', levelID: levelElement.data('level-id'), ['Google Analytics']
|
||||
|
||||
startLevel: (levelElement) ->
|
||||
@setupManager?.destroy()
|
||||
|
|
|
@ -110,7 +110,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
setTimeout f, 100
|
||||
else
|
||||
@load()
|
||||
application.tracker?.trackEvent 'Started Level Load', level: @levelID, label: @levelID, ['Google Analytics']
|
||||
application.tracker?.trackEvent 'Started Level Load', category: 'Play Level', level: @levelID, label: @levelID, ['Google Analytics']
|
||||
|
||||
setLevel: (@level, givenSupermodel) ->
|
||||
@supermodel.models = givenSupermodel.models
|
||||
|
@ -135,9 +135,8 @@ module.exports = class PlayLevelView extends RootView
|
|||
@loadEndTime = new Date()
|
||||
loadDuration = @loadEndTime - @loadStartTime
|
||||
console.debug "Level unveiled after #{(loadDuration / 1000).toFixed(2)}s"
|
||||
application.tracker?.trackEvent 'Finished Level Load', level: @levelID, label: @levelID, loadDuration: loadDuration, ['Google Analytics']
|
||||
application.tracker?.trackEvent 'Finished Level Load', category: 'Play Level', label: @levelID, level: @levelID, loadDuration: loadDuration, ['Google Analytics']
|
||||
application.tracker?.trackTiming loadDuration, 'Level Load Time', @levelID, @levelID
|
||||
application.tracker?.trackEvent 'Play Level', Action: 'Loaded', levelID: @levelID
|
||||
|
||||
# CocoView overridden methods ###############################################
|
||||
|
||||
|
@ -338,7 +337,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
if @options.realTimeMultiplayerSessionID?
|
||||
Backbone.Mediator.publish 'playback:real-time-playback-waiting', {}
|
||||
@realTimeMultiplayerContinueGame @options.realTimeMultiplayerSessionID
|
||||
application.tracker?.trackEvent 'Play Level', Action: 'Start Level', levelID: @levelID
|
||||
application.tracker?.trackEvent 'Started Level', category:'Play Level', levelID: @levelID
|
||||
|
||||
playAmbientSound: ->
|
||||
return if @ambientSound
|
||||
|
@ -421,6 +420,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
victoryTime = (new Date()) - @loadEndTime
|
||||
if victoryTime > 10 * 1000 # Don't track it if we're reloading an already-beaten level
|
||||
application.tracker?.trackEvent 'Saw Victory',
|
||||
category: 'Play Level'
|
||||
level: @level.get('name')
|
||||
label: @level.get('name')
|
||||
application.tracker?.trackTiming victoryTime, 'Level Victory Time', @levelID, @levelID, 100
|
||||
|
@ -438,12 +438,12 @@ module.exports = class PlayLevelView extends RootView
|
|||
@tome.reloadAllCode()
|
||||
Backbone.Mediator.publish 'level:restarted', {}
|
||||
$('#level-done-button', @$el).hide()
|
||||
application.tracker?.trackEvent 'Confirmed Restart', level: @level.get('name'), label: @level.get('name')
|
||||
application.tracker?.trackEvent 'Confirmed Restart', category: 'Play Level', level: @level.get('name'), label: @level.get('name')
|
||||
|
||||
onInfiniteLoop: (e) ->
|
||||
return unless e.firstWorld
|
||||
@openModalView new InfiniteLoopModal()
|
||||
application.tracker?.trackEvent 'Saw Initial Infinite Loop', level: @level.get('name'), label: @level.get('name')
|
||||
application.tracker?.trackEvent 'Saw Initial Infinite Loop', category: 'Play Level', level: @level.get('name'), label: @level.get('name')
|
||||
|
||||
onPlayNextLevel: ->
|
||||
nextLevelID = @getNextLevelID()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue