var Tracker = Fiber.extend(function(base){ var exports = { init: function(opt){ this.wall_id = null this.scenery_id = null this.clicks = 0 this.wallTimer = new Timer () this.roomTimer = new Timer () this.sceneryTimer = new Timer () this.events = [] this.bind() this.trackPageview() }, bind: function () { window.addEventListener("click", this.trackClick.bind(this), true) app.on("change-wall", this.changeWall.bind(this)) app.on("pick-scenery", this.pickScenery.bind(this)) app.on("close-scenery", this.trackScenery.bind(this)) app.on("change-room", this.changeRoom.bind(this)) }, pushEvent: function(event){ this.events.push(event) }, trackPageview: function(opt){ this.pushEvent([ "view" ]) }, // // how long they spend in front of each wall changeWall: function(opt){ var duration = this.wallTimer.currentTime() if (this.wall_id && duration > 5000) { this.pushEvent([ "wall", this.wall_id, duration ]) } this.wall_id = opt.wall.id this.wallTimer.start() }, // // how long the user spends on each item they click pickScenery: function(opt){ if (this.scenery_id && opt.scenery.id !== this.scenery_id) { this.trackScenery() } else { this.sceneryTimer.start() } this.scenery_id = opt.scenery.id }, trackScenery: function(){ var duration = this.sceneryTimer.currentTime() if (this.scenery_id && duration > 5000) { this.pushEvent([ "scenery", this.scenery_id, duration ]) } this.scenery_id = null this.sceneryTimer.reset() }, // // how long they spend in the room changeRoom: function(opt){ var duration = this.roomTimer.currentTime() if (this.room_id !== opt.room.id) { if (this.room_id && duration > 5000) { this.pushEvent([ "room", this.room_id, duration ]) } this.roomTimer.start() this.room_id = opt.room.id } }, // // how many clicks per room trackClick: function(opt){ this.clicks += 1 }, save: function () { // possibly just push to google analytics }, } return exports }) var Timer = Fiber.extend(function(base){ var exports = { init: function(opt){ this.time = 0 }, reset: function(){ this.time = 0 }, start: function(){ this.time = Date.now() }, currentTime: function(){ return this.time ? Date.now() - this.time : 0 }, } return exports })