1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
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)
},
trackPageview: function(opt){
this.events.push([ "view" ])
},
//
// how long they spend in front of each wall
trackChangeWall: function(opt){
var duration = this.wallTimer.currentTime()
if (this.wall_id && duration > 5000) {
this.events.push([ "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){
this.sceneryTimer.start()
this.scenery_id = opt.scenery.id
},
trackScenery: function(){
var duration = this.sceneryTimer.currentTime()
if (this.scenery_id && duration > 5000) {
this.events.push([ "scenery", this.scenery_id, duration ])
}
this.scenery_id = null
this.sceneryTimer.reset()
},
//
// how long they spend in the room
trackChangeRoom: function(opt){
var duration = this.roomTimer.currentTime()
if (this.room_id && duration > 5000) {
this.events.push([ "room", this.room_id, duration ])
}
this.room_id = opt.room.id
this.roomTimer.start()
},
//
// how many clicks per room
trackClick: function(opt){
console.log("track click")
this.clicks += 1
},
save: function () {
},
}
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
},
}
})
|