Add GoogleAnalytics event tracking
This commit is contained in:
@@ -18,15 +18,18 @@ global.π = Math.PI
|
|||||||
global.ε = 0.0001
|
global.ε = 0.0001
|
||||||
global.w = require 'when'
|
global.w = require 'when'
|
||||||
|
|
||||||
global.Backbone = Backbone = require 'backbone'
|
|
||||||
Backbone.$ = $
|
|
||||||
|
|
||||||
{Logger} = require 'crafting-guide-common'
|
{Logger} = require 'crafting-guide-common'
|
||||||
global.logger = new Logger
|
global.logger = new Logger
|
||||||
|
|
||||||
|
Tracker = require './tracker'
|
||||||
|
global.tracker = new Tracker
|
||||||
|
|
||||||
marked = require 'marked'
|
marked = require 'marked'
|
||||||
marked.setOptions sanitize:true
|
marked.setOptions sanitize:true
|
||||||
|
|
||||||
|
global.Backbone = Backbone = require 'backbone'
|
||||||
|
Backbone.$ = $
|
||||||
|
|
||||||
########################################################################################################################
|
########################################################################################################################
|
||||||
|
|
||||||
global.hostName = window.location.hostname
|
global.hostName = window.location.hostname
|
||||||
@@ -46,6 +49,7 @@ switch global.hostName
|
|||||||
when 'crafting-guide.com'
|
when 'crafting-guide.com'
|
||||||
global.env = 'production'
|
global.env = 'production'
|
||||||
logger.level = Logger.INFO
|
logger.level = Logger.INFO
|
||||||
|
tracker.enabled = true
|
||||||
apiBaseUrl = 'http://api.crafting-guide.com'
|
apiBaseUrl = 'http://api.crafting-guide.com'
|
||||||
else
|
else
|
||||||
throw new Error "cannot determine the environment of: #{window.location.hostname}"
|
throw new Error "cannot determine the environment of: #{window.location.hostname}"
|
||||||
@@ -75,4 +79,5 @@ site.loadDefaultModPack()
|
|||||||
site.loadCurrentUser()
|
site.loadCurrentUser()
|
||||||
|
|
||||||
Backbone.history.start pushState:true
|
Backbone.history.start pushState:true
|
||||||
|
tracker.trackPageView()
|
||||||
logger.info -> "CraftingGuide is ready"
|
logger.info -> "CraftingGuide is ready"
|
||||||
|
|||||||
@@ -49,15 +49,26 @@ module.exports = class BaseController extends Backbone.View
|
|||||||
@off()
|
@off()
|
||||||
|
|
||||||
routeLinkClick: (event)->
|
routeLinkClick: (event)->
|
||||||
event.preventDefault()
|
$link = $(event.target)
|
||||||
href = $(event.target).attr 'href'
|
if not $link.attr('href')?
|
||||||
href ?= $(event.currentTarget).attr 'href'
|
$link = $(event.currentTarget)
|
||||||
logger.info "Re-routing link to internal navigation: #{href}"
|
|
||||||
|
href = $link.attr 'href'
|
||||||
|
target = $link.attr 'target'
|
||||||
|
|
||||||
|
logger.info -> "Re-routing link to internal navigation: #{href}"
|
||||||
|
|
||||||
if href? and href.match /^http/
|
if href? and href.match /^http/
|
||||||
window.location.href = href
|
tracker.trackEvent c.tracking.category.navigate, 'external-link', href
|
||||||
|
.then -> window.location.href = href
|
||||||
|
return false
|
||||||
|
else if target?
|
||||||
|
tracker.trackEvent c.tracking.category.navigate, 'external-link', href
|
||||||
|
return true
|
||||||
else
|
else
|
||||||
|
tracker.trackEvent c.tracking.category.navigate, 'internal-link', href
|
||||||
@router.navigate href, trigger:true
|
@router.navigate href, trigger:true
|
||||||
|
return false
|
||||||
|
|
||||||
show: ($el)->
|
show: ($el)->
|
||||||
$el ?= @$el
|
$el ?= @$el
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ module.exports = class InventoryController extends BaseController
|
|||||||
@_isAcceptable = options.isAcceptable ?= null
|
@_isAcceptable = options.isAcceptable ?= null
|
||||||
@_secondButtonType = options.secondButtonType ?= null
|
@_secondButtonType = options.secondButtonType ?= null
|
||||||
@_shouldEnableButton = options.shouldEnableButton ?= (model, button)-> true
|
@_shouldEnableButton = options.shouldEnableButton ?= (model, button)-> true
|
||||||
|
@_trackingContext = options.trackingContext ?= null
|
||||||
|
|
||||||
options.templateName = 'common/inventory'
|
options.templateName = 'common/inventory'
|
||||||
super options
|
super options
|
||||||
@@ -54,20 +55,26 @@ module.exports = class InventoryController extends BaseController
|
|||||||
return unless @model?
|
return unless @model?
|
||||||
return if @$clearButton.hasClass 'disabled'
|
return if @$clearButton.hasClass 'disabled'
|
||||||
|
|
||||||
|
tracker.trackEvent @_trackingContext, 'clear'
|
||||||
@model.clear()
|
@model.clear()
|
||||||
@trigger c.event.clear, this
|
@trigger c.event.clear, this
|
||||||
@trigger c.event.change, this
|
@trigger c.event.change, this
|
||||||
|
|
||||||
onFirstButtonClicked: (stackController)->
|
onFirstButtonClicked: (stackController)->
|
||||||
|
tracker.trackEvent @_trackingContext, 'remove-from', stackController?.model?.itemSlug
|
||||||
@trigger c.event.button.first, this, stackController?.model?.itemSlug
|
@trigger c.event.button.first, this, stackController?.model?.itemSlug
|
||||||
|
|
||||||
onItemSelectorButtonClicked: ->
|
onItemSelectorButtonClicked: ->
|
||||||
return unless @model?
|
return unless @model?
|
||||||
|
|
||||||
|
tracker.trackEvent @_trackingContext, 'launch-add-to'
|
||||||
@_selector.launch()
|
@_selector.launch()
|
||||||
.then (itemSlug)=>
|
.then (itemSlug)=>
|
||||||
return unless itemSlug?
|
if not itemSlug?
|
||||||
|
tracker.trackEvent @_trackingContext, 'cancel-add-to'
|
||||||
|
return
|
||||||
|
|
||||||
|
tracker.trackEvent @_trackingContext, 'complete-add-to', itemSlug
|
||||||
@model.add itemSlug, 1
|
@model.add itemSlug, 1
|
||||||
@trigger c.event.add, this, itemSlug
|
@trigger c.event.add, this, itemSlug
|
||||||
@trigger c.event.change, this
|
@trigger c.event.change, this
|
||||||
@@ -136,6 +143,7 @@ module.exports = class InventoryController extends BaseController
|
|||||||
router: @_router
|
router: @_router
|
||||||
secondButtonType: @_secondButtonType
|
secondButtonType: @_secondButtonType
|
||||||
shouldEnableButton: @_shouldEnableButton
|
shouldEnableButton: @_shouldEnableButton
|
||||||
|
trackingContext: @_trackingContext
|
||||||
controller.on c.event.change, => @trigger c.event.change, this
|
controller.on c.event.change, => @trigger c.event.change, this
|
||||||
controller.on c.event.button.first, (c)=> @onFirstButtonClicked(c)
|
controller.on c.event.button.first, (c)=> @onFirstButtonClicked(c)
|
||||||
controller.on c.event.button.second, (c)=> @onSecondButtonClicked(c)
|
controller.on c.event.button.second, (c)=> @onSecondButtonClicked(c)
|
||||||
|
|||||||
@@ -29,10 +29,6 @@ module.exports = class ItemSelectorController extends BaseController
|
|||||||
# Public Methods ###############################################################################
|
# Public Methods ###############################################################################
|
||||||
|
|
||||||
launch: (hint='')->
|
launch: (hint='')->
|
||||||
if @_session
|
|
||||||
@_session.resolve null
|
|
||||||
@_session = null
|
|
||||||
|
|
||||||
@model.hint = hint
|
@model.hint = hint
|
||||||
if @rendered then @refresh()
|
if @rendered then @refresh()
|
||||||
|
|
||||||
@@ -141,6 +137,10 @@ module.exports = class ItemSelectorController extends BaseController
|
|||||||
@$popup.detach()
|
@$popup.detach()
|
||||||
@model.hint = ''
|
@model.hint = ''
|
||||||
|
|
||||||
|
if @_session
|
||||||
|
@_session.resolve null
|
||||||
|
@_session = null
|
||||||
|
|
||||||
_disableWindowScrolling: ->
|
_disableWindowScrolling: ->
|
||||||
@_windowScrollPosition = $(window).scrollTop()
|
@_windowScrollPosition = $(window).scrollTop()
|
||||||
$('body').addClass('scrollDisabled').css('margin-top', -@_windowScrollPosition)
|
$('body').addClass('scrollDisabled').css('margin-top', -@_windowScrollPosition)
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ module.exports = class MarkdownSectionController extends BaseController
|
|||||||
# Event Methods ################################################################################
|
# Event Methods ################################################################################
|
||||||
|
|
||||||
onCancelClicked: (event)->
|
onCancelClicked: (event)->
|
||||||
|
tracker.trackEvent c.tracking.category.markdown, 'cancel'
|
||||||
@model = @_originalModel
|
@model = @_originalModel
|
||||||
@resetToDefaultState()
|
@resetToDefaultState()
|
||||||
|
|
||||||
@@ -70,6 +71,7 @@ module.exports = class MarkdownSectionController extends BaseController
|
|||||||
onEditClicked: (event)->
|
onEditClicked: (event)->
|
||||||
return false unless @editable
|
return false unless @editable
|
||||||
|
|
||||||
|
tracker.trackEvent c.tracking.category.markdown, 'edit'
|
||||||
@_originalModel = @model
|
@_originalModel = @model
|
||||||
@state = @State.waiting
|
@state = @State.waiting
|
||||||
@_beginEditing()
|
@_beginEditing()
|
||||||
@@ -87,15 +89,18 @@ module.exports = class MarkdownSectionController extends BaseController
|
|||||||
return false
|
return false
|
||||||
|
|
||||||
onPreviewClicked: (event)->
|
onPreviewClicked: (event)->
|
||||||
|
tracker.trackEvent c.tracking.category.markdown, 'preview'
|
||||||
@_updatePreview()
|
@_updatePreview()
|
||||||
@state = @State.previewing
|
@state = @State.previewing
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onReturnClicked: (event)->
|
onReturnClicked: (event)->
|
||||||
|
tracker.trackEvent c.tracking.category.markdown, 'return'
|
||||||
@state = @State.editing
|
@state = @State.editing
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onSaveClicked: (event)->
|
onSaveClicked: (event)->
|
||||||
|
tracker.trackEvent c.tracking.category.markdown, 'save'
|
||||||
@state = @State.waiting
|
@state = @State.waiting
|
||||||
@_endEditing()
|
@_endEditing()
|
||||||
.then =>
|
.then =>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ module.exports = class StackController extends BaseController
|
|||||||
@_modPack = options.modPack
|
@_modPack = options.modPack
|
||||||
@_secondButtonType = options.secondButtonType ?= null
|
@_secondButtonType = options.secondButtonType ?= null
|
||||||
@_shouldEnableButton = options.shouldEnableButton ?= (model, button)-> true
|
@_shouldEnableButton = options.shouldEnableButton ?= (model, button)-> true
|
||||||
|
@_trackingContext = options.trackingContext ?= null
|
||||||
|
|
||||||
@_modPack.on c.event.change, => @tryRefresh()
|
@_modPack.on c.event.change, => @tryRefresh()
|
||||||
|
|
||||||
@@ -70,6 +71,8 @@ module.exports = class StackController extends BaseController
|
|||||||
@trigger c.event.change + ':quantity', this, oldQuantity, newQuantity
|
@trigger c.event.change + ':quantity', this, oldQuantity, newQuantity
|
||||||
@trigger c.event.change, this
|
@trigger c.event.change, this
|
||||||
|
|
||||||
|
tracker.trackEvent @_trackingContext, 'update-quantity', @model.itemSlug, @model.quantity
|
||||||
|
|
||||||
onQuantityFieldChanged: ->
|
onQuantityFieldChanged: ->
|
||||||
return unless @_editable
|
return unless @_editable
|
||||||
|
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ module.exports = class CraftPageController extends PageController
|
|||||||
$el = $el.parent()
|
$el = $el.parent()
|
||||||
|
|
||||||
if inventoryText?
|
if inventoryText?
|
||||||
|
tracker.trackEvent c.tracking.category.craft, 'add-sample', inventoryText
|
||||||
sampleInventory = new SimpleInventory
|
sampleInventory = new SimpleInventory
|
||||||
sampleInventory.parse inventoryText
|
sampleInventory.parse inventoryText
|
||||||
@model.craftsman.want.addInventory sampleInventory
|
@model.craftsman.want.addInventory sampleInventory
|
||||||
@@ -91,6 +92,7 @@ module.exports = class CraftPageController extends PageController
|
|||||||
modPack: @_modPack
|
modPack: @_modPack
|
||||||
model: @model.craftsman.want
|
model: @model.craftsman.want
|
||||||
router: @_router
|
router: @_router
|
||||||
|
trackingContext: c.tracking.category.craftWant
|
||||||
@_wantInventoryController.on c.event.button.first, (c, s)=> @onRemoveFromWant(s)
|
@_wantInventoryController.on c.event.button.first, (c, s)=> @onRemoveFromWant(s)
|
||||||
@_wantInventoryController.on c.event.change, (c)=> @onWantInventoryChanged()
|
@_wantInventoryController.on c.event.change, (c)=> @onWantInventoryChanged()
|
||||||
|
|
||||||
@@ -100,6 +102,7 @@ module.exports = class CraftPageController extends PageController
|
|||||||
modPack: @_modPack
|
modPack: @_modPack
|
||||||
model: @model.craftsman.have
|
model: @model.craftsman.have
|
||||||
router: @_router
|
router: @_router
|
||||||
|
trackingContext: c.tracking.category.craftHave
|
||||||
@_haveInventoryController.on c.event.button.first, (controller, itemSlug)=>
|
@_haveInventoryController.on c.event.button.first, (controller, itemSlug)=>
|
||||||
@onRemoveFromHaveInventory itemSlug
|
@onRemoveFromHaveInventory itemSlug
|
||||||
|
|
||||||
@@ -110,6 +113,7 @@ module.exports = class CraftPageController extends PageController
|
|||||||
modPack: @_modPack
|
modPack: @_modPack
|
||||||
model: null
|
model: null
|
||||||
router: @_router
|
router: @_router
|
||||||
|
trackingContext: c.tracking.category.craftNeed
|
||||||
@_needInventoryController.on c.event.button.first, (c, s)=> @onMoveNeedToHave(s)
|
@_needInventoryController.on c.event.button.first, (c, s)=> @onMoveNeedToHave(s)
|
||||||
|
|
||||||
@_workingSectionController = @addChild CraftsmanWorkingController, '.view__craftsman_working',
|
@_workingSectionController = @addChild CraftsmanWorkingController, '.view__craftsman_working',
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ module.exports = class CraftsmanWorkingController extends BaseController
|
|||||||
# Event Methods ################################################################################
|
# Event Methods ################################################################################
|
||||||
|
|
||||||
onButtonClicked: ->
|
onButtonClicked: ->
|
||||||
|
tracker.trackEvent c.tracking.category.craft, 'start'
|
||||||
@trigger c.event.click
|
@trigger c.event.click
|
||||||
@model.reset()
|
@model.reset()
|
||||||
@model.work()
|
@model.work()
|
||||||
|
|||||||
@@ -41,8 +41,13 @@ module.exports = class StepController extends BaseController
|
|||||||
|
|
||||||
onCompleteButtonClicked: (event)->
|
onCompleteButtonClicked: (event)->
|
||||||
return if @$completeButton.hasClass 'disabled'
|
return if @$completeButton.hasClass 'disabled'
|
||||||
|
tracker.trackEvent c.tracking.category.craft, 'mark-complete', null, @model.number
|
||||||
@onComplete this
|
@onComplete this
|
||||||
|
|
||||||
|
onShowToolPlan: (event)->
|
||||||
|
tracker.trackEvent c.tracking.category.navigate, 'show-tool-plan', @$toolButton.attr 'target'
|
||||||
|
return true
|
||||||
|
|
||||||
# BaseController Overrides #####################################################################
|
# BaseController Overrides #####################################################################
|
||||||
|
|
||||||
onDidRender: ->
|
onDidRender: ->
|
||||||
@@ -90,6 +95,7 @@ module.exports = class StepController extends BaseController
|
|||||||
events: ->
|
events: ->
|
||||||
return _.extend super,
|
return _.extend super,
|
||||||
'click .button.complete': 'onCompleteButtonClicked'
|
'click .button.complete': 'onCompleteButtonClicked'
|
||||||
|
'click a.button.tool': 'onShowToolPlan'
|
||||||
|
|
||||||
# Private Methods ##############################################################################
|
# Private Methods ##############################################################################
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
.view__feedback
|
.view__feedback
|
||||||
.form-content
|
.form-content
|
||||||
input(name="name", placeholder="name (optional)")
|
input(name="name", placeholder="name")
|
||||||
input(name="email", placeholder="email (optional)")
|
input(name="email", placeholder="email")
|
||||||
|
|
||||||
label(name="comment") Comment:
|
label(name="comment") Comment:
|
||||||
textarea(name="comment")
|
textarea(name="comment")
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ module.exports = class FeedbackController extends BaseController
|
|||||||
# Public Methods ###############################################################################
|
# Public Methods ###############################################################################
|
||||||
|
|
||||||
enterFeedback: (message)->
|
enterFeedback: (message)->
|
||||||
|
tracker.trackEvent c.tracking.category.feedback, 'ask-a-question'
|
||||||
promise = w(true)
|
promise = w(true)
|
||||||
if not @isOpen then promise = @onToggle()
|
if not @isOpen then promise = @onToggle()
|
||||||
promise.then => @$commentField.val message
|
promise.then => @$commentField.val message
|
||||||
@@ -38,6 +39,7 @@ module.exports = class FeedbackController extends BaseController
|
|||||||
email: @$emailField.val()
|
email: @$emailField.val()
|
||||||
comment: @$commentField.val()
|
comment: @$commentField.val()
|
||||||
|
|
||||||
|
tracker.trackEvent c.tracking.category.feedback, 'send'
|
||||||
@model.send('feedback', message)
|
@model.send('feedback', message)
|
||||||
.then =>
|
.then =>
|
||||||
@onToggle()
|
@onToggle()
|
||||||
@@ -58,6 +60,7 @@ module.exports = class FeedbackController extends BaseController
|
|||||||
@$screen.off 'click'
|
@$screen.off 'click'
|
||||||
|
|
||||||
if @isOpen
|
if @isOpen
|
||||||
|
tracker.trackEvent c.tracking.category.feedback, 'toggle-closed'
|
||||||
@$screen.css display:'none'
|
@$screen.css display:'none'
|
||||||
@$page.removeClass 'blur'
|
@$page.removeClass 'blur'
|
||||||
@$el.animate {left:-@_closeWidth}, duration:c.duration.fast, complete:=>
|
@$el.animate {left:-@_closeWidth}, duration:c.duration.fast, complete:=>
|
||||||
@@ -65,6 +68,7 @@ module.exports = class FeedbackController extends BaseController
|
|||||||
@$('input, textarea').blur()
|
@$('input, textarea').blur()
|
||||||
resolve()
|
resolve()
|
||||||
else
|
else
|
||||||
|
tracker.trackEvent c.tracking.category.feedback, 'toggle-open'
|
||||||
@$page.addClass 'blur'
|
@$page.addClass 'blur'
|
||||||
@$screen.on 'click', => @onToggle()
|
@$screen.on 'click', => @onToggle()
|
||||||
@$screen.css display:'block'
|
@$screen.css display:'block'
|
||||||
|
|||||||
@@ -26,29 +26,38 @@ module.exports = class HeaderController extends BaseController
|
|||||||
# Event Methods ################################################################################
|
# Event Methods ################################################################################
|
||||||
|
|
||||||
onCraft: ->
|
onCraft: ->
|
||||||
|
tracker.trackEvent c.tracking.category.navigate, 'click-button', 'craft'
|
||||||
@router.navigate '/craft', trigger:true
|
@router.navigate '/craft', trigger:true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onBrowse: ->
|
onBrowse: ->
|
||||||
|
tracker.trackEvent c.tracking.category.navigate, 'click-button', 'browse'
|
||||||
@router.navigate '/browse', trigger:true
|
@router.navigate '/browse', trigger:true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onLogin: ->
|
onLogin: ->
|
||||||
if global.site.user?
|
if global.site.user?
|
||||||
|
tracker.trackEvent c.tracking.category.account, 'logout'
|
||||||
global.site.logout()
|
global.site.logout()
|
||||||
else
|
else
|
||||||
|
tracker.trackEvent c.tracking.category.navigate, 'click-button', 'login'
|
||||||
@router.navigate '/login', trigger:true
|
@router.navigate '/login', trigger:true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onNews: ->
|
onNews: ->
|
||||||
|
tracker.trackEvent c.tracking.category.navigate, 'click-button', 'news'
|
||||||
@router.navigate '/news', trigger:true
|
@router.navigate '/news', trigger:true
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onSearch: (event, hint='')->
|
onSearch: (event, hint='')->
|
||||||
|
tracker.trackEvent c.tracking.category.search, 'launch'
|
||||||
@_selector.launch hint
|
@_selector.launch hint
|
||||||
.then (itemSlug)=>
|
.then (itemSlug)=>
|
||||||
return unless itemSlug?
|
if not itemSlug?
|
||||||
|
tracker.trackEvent c.tracking.category.search, 'cancel', itemSlug
|
||||||
|
return
|
||||||
|
|
||||||
|
tracker.trackEvent c.tracking.category.search, 'complete', itemSlug
|
||||||
itemDisplay = @_modPack.findItemDisplay itemSlug
|
itemDisplay = @_modPack.findItemDisplay itemSlug
|
||||||
@router.navigate itemDisplay.itemUrl, trigger:true
|
@router.navigate itemDisplay.itemUrl, trigger:true
|
||||||
return false
|
return false
|
||||||
@@ -121,7 +130,8 @@ module.exports = class HeaderController extends BaseController
|
|||||||
@hide @$breadcrumbs
|
@hide @$breadcrumbs
|
||||||
|
|
||||||
_refreshExtraNav: ->
|
_refreshExtraNav: ->
|
||||||
extraNavContent = @model?.controller?.getExtraNav()
|
return unless _.isFunction @model?.controller?.getExtraNav
|
||||||
|
extraNavContent = @model.controller.getExtraNav()
|
||||||
|
|
||||||
if extraNavContent?
|
if extraNavContent?
|
||||||
@$extraNav.empty()
|
@$extraNav.empty()
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ module.exports = class ItemPageController extends PageController
|
|||||||
# Event Methods ################################################################################
|
# Event Methods ################################################################################
|
||||||
|
|
||||||
craftingPlanButtonClicked: ->
|
craftingPlanButtonClicked: ->
|
||||||
|
tracker.trackEvent c.tracking.category.craft, 'view-crafting-plan', @model.item.slug
|
||||||
display = @_modPack.findItemDisplay @model.item.slug
|
display = @_modPack.findItemDisplay @model.item.slug
|
||||||
@_router.navigate display.craftingUrl, trigger:true
|
@_router.navigate display.craftingUrl, trigger:true
|
||||||
return false
|
return false
|
||||||
|
|||||||
@@ -29,11 +29,13 @@ module.exports = class MultiblockViewerController extends BaseController
|
|||||||
|
|
||||||
onBackClicked: ->
|
onBackClicked: ->
|
||||||
return if @$backButton.hasClass 'disabled'
|
return if @$backButton.hasClass 'disabled'
|
||||||
|
tracker.trackEvent c.tracking.category.multiblock, 'back'
|
||||||
@multiblockController.goBackLayer()
|
@multiblockController.goBackLayer()
|
||||||
@refresh()
|
@refresh()
|
||||||
|
|
||||||
onNextClicked: ->
|
onNextClicked: ->
|
||||||
return if @$nextButton.hasClass 'disabled'
|
return if @$nextButton.hasClass 'disabled'
|
||||||
|
tracker.trackEvent c.tracking.category.multiblock, 'next'
|
||||||
@multiblockController.goNextLayer()
|
@multiblockController.goNextLayer()
|
||||||
@refresh()
|
@refresh()
|
||||||
|
|
||||||
@@ -41,6 +43,7 @@ module.exports = class MultiblockViewerController extends BaseController
|
|||||||
if itemDisplay?
|
if itemDisplay?
|
||||||
@$captionText.html itemDisplay.itemName
|
@$captionText.html itemDisplay.itemName
|
||||||
@_imageLoader.load itemDisplay.iconUrl, @$captionIcon
|
@_imageLoader.load itemDisplay.iconUrl, @$captionIcon
|
||||||
|
tracker.trackEvent c.tracking.category.multiblock, 'hover', itemDisplay.slug
|
||||||
else
|
else
|
||||||
@$captionText.html ' '
|
@$captionText.html ' '
|
||||||
@$captionIcon.attr 'src', '/images/empty.png'
|
@$captionIcon.attr 'src', '/images/empty.png'
|
||||||
|
|||||||
@@ -36,15 +36,18 @@ module.exports = class LoginPageController extends PageController
|
|||||||
# Event Methods ################################################################################
|
# Event Methods ################################################################################
|
||||||
|
|
||||||
onExpandReadMore: (event)->
|
onExpandReadMore: (event)->
|
||||||
|
tracker.trackEvent c.tracking.category.account, 'click-read-more'
|
||||||
@$readMoreLink.css display: 'none'
|
@$readMoreLink.css display: 'none'
|
||||||
@$readMoreContainer.css 'max-height':@$readMoreContent.height()
|
@$readMoreContainer.css 'max-height':@$readMoreContent.height()
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onLoginButtonClicked: (event)->
|
onLoginButtonClicked: (event)->
|
||||||
@_redirectToGitHub()
|
tracker.trackEvent c.tracking.category.account, 'login'
|
||||||
|
.then => @_redirectToGitHub()
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onLogoutButtonClicked: (event)->
|
onLogoutButtonClicked: (event)->
|
||||||
|
tracker.trackEvent c.tracking.category.account, 'logout'
|
||||||
global.site.logout()
|
global.site.logout()
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
|||||||
@@ -27,9 +27,9 @@
|
|||||||
and recipes from this mod.
|
and recipes from this mod.
|
||||||
.right
|
.right
|
||||||
p Official Links:
|
p Official Links:
|
||||||
a.homePage project page
|
a.homePage(target="home-page") project page
|
||||||
a.documentation documentation
|
a.documentation(target="documentation") documentation
|
||||||
a.download download
|
a.download(target="download") download
|
||||||
|
|
||||||
section.tutorials
|
section.tutorials
|
||||||
h2 Tutorials
|
h2 Tutorials
|
||||||
|
|||||||
@@ -30,14 +30,17 @@ module.exports = class ModPageController extends BaseController
|
|||||||
|
|
||||||
onToggleEnabled: ->
|
onToggleEnabled: ->
|
||||||
if @model.activeVersion is Mod.Version.None
|
if @model.activeVersion is Mod.Version.None
|
||||||
|
tracker.trackEvent c.tracking.category.modPack, 'toggle-on', @model.slug
|
||||||
@model.activeVersion = Mod.Version.Latest
|
@model.activeVersion = Mod.Version.Latest
|
||||||
else
|
else
|
||||||
|
tracker.trackEvent c.tracking.category.modPack, 'toggle-off', @model.slug
|
||||||
@model.activeVersion = Mod.Version.None
|
@model.activeVersion = Mod.Version.None
|
||||||
|
|
||||||
return false
|
return false
|
||||||
|
|
||||||
onVersionChanged: ->
|
onVersionChanged: ->
|
||||||
@model.activeVersion = @$versionSelector.val()
|
@model.activeVersion = @$versionSelector.val()
|
||||||
|
tracker.trackEvent c.tracking.category.modPack, 'select-version', "#{@model.slug}@#{@model.activeVersion}"
|
||||||
return false
|
return false
|
||||||
|
|
||||||
# Property Methods #############################################################################
|
# Property Methods #############################################################################
|
||||||
@@ -95,6 +98,7 @@ module.exports = class ModPageController extends BaseController
|
|||||||
return _.extend super,
|
return _.extend super,
|
||||||
'change .version select': 'onVersionChanged'
|
'change .version select': 'onVersionChanged'
|
||||||
'click .modpack': 'onToggleEnabled'
|
'click .modpack': 'onToggleEnabled'
|
||||||
|
'click .about .right a': 'routeLinkClick'
|
||||||
|
|
||||||
# Private Methods ##############################################################################
|
# Private Methods ##############################################################################
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ module.exports = class Router extends Backbone.Router
|
|||||||
|
|
||||||
navigate: ->
|
navigate: ->
|
||||||
super
|
super
|
||||||
@_recordPageView()
|
tracker.trackPageView()
|
||||||
|
|
||||||
routes:
|
routes:
|
||||||
'': 'route__home'
|
'': 'route__home'
|
||||||
@@ -161,12 +161,3 @@ module.exports = class Router extends Backbone.Router
|
|||||||
|
|
||||||
_makeOptions: (options={})->
|
_makeOptions: (options={})->
|
||||||
return _.extend options, @_siteController.controllerOptions
|
return _.extend options, @_siteController.controllerOptions
|
||||||
|
|
||||||
_recordPageView: ->
|
|
||||||
pathname = window.location.pathname
|
|
||||||
|
|
||||||
if global.env is 'production' and ga?
|
|
||||||
logger.info -> "Recording GA page view: #{pathname}"
|
|
||||||
ga 'send', 'pageview', pathname
|
|
||||||
else
|
|
||||||
logger.info -> "Suppressing GA page view: #{pathname}"
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Crafting Guide - storage.coffee
|
# Crafting Guide - url_params.coffee
|
||||||
#
|
#
|
||||||
# Copyright © 2014-2016 by Redwood Labs
|
# Copyright © 2014-2016 by Redwood Labs
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
|
|||||||
@@ -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}"
|
||||||
@@ -156,6 +156,20 @@ text.title = _.template 'Minecraft Crafting Guide'
|
|||||||
text.titleWithText = _.template '<%= text %> | Minecraft Crafting Guide'
|
text.titleWithText = _.template '<%= text %> | Minecraft Crafting Guide'
|
||||||
text.tutorialDescription = _.template 'Learn about <%= name %> in <%= mod %> and use the interactive crafting planner to get ready for your build!'
|
text.tutorialDescription = _.template 'Learn about <%= name %> in <%= mod %> and use the interactive crafting planner to get ready for your build!'
|
||||||
|
|
||||||
|
exports.tracking = tracking = {}
|
||||||
|
tracking.category = {}
|
||||||
|
tracking.category.account = 'account'
|
||||||
|
tracking.category.craft = 'craft'
|
||||||
|
tracking.category.craftHave = 'craft-have'
|
||||||
|
tracking.category.craftNeed = 'craft-need'
|
||||||
|
tracking.category.craftWant = 'craft-want'
|
||||||
|
tracking.category.feedback = 'feedback'
|
||||||
|
tracking.category.markdown = 'markdown'
|
||||||
|
tracking.category.modPack = 'mod-pack'
|
||||||
|
tracking.category.multiblock = 'multiblock'
|
||||||
|
tracking.category.navigate = 'navigate'
|
||||||
|
tracking.category.search = 'search'
|
||||||
|
|
||||||
exports.url = url = {}
|
exports.url = url = {}
|
||||||
url.crafting = _.template "/craft/<%= inventoryText %>"
|
url.crafting = _.template "/craft/<%= inventoryText %>"
|
||||||
url.item = _.template "/browse/<%= modSlug %>/<%= itemSlug %>/"
|
url.item = _.template "/browse/<%= modSlug %>/<%= itemSlug %>/"
|
||||||
|
|||||||
Reference in New Issue
Block a user