summaryrefslogtreecommitdiff
path: root/public/assets/javascripts/ui/reader/Tracker.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2016-10-28 18:06:46 -0400
committerJules Laplace <jules@okfoc.us>2016-10-28 18:06:46 -0400
commit9e7bacd46c1e5d0e1c24433690d421ab3f3a11f2 (patch)
tree4d0cefa2780dfa4382f1ed2ea481b6aafbdbb15e /public/assets/javascripts/ui/reader/Tracker.js
parent50da9e3e677f121f15e501bf062da6c45db255ad (diff)
parentcce1dea756717f1308c6b72f762b5ea5f5b43958 (diff)
merge
Diffstat (limited to 'public/assets/javascripts/ui/reader/Tracker.js')
-rw-r--r--public/assets/javascripts/ui/reader/Tracker.js133
1 files changed, 133 insertions, 0 deletions
diff --git a/public/assets/javascripts/ui/reader/Tracker.js b/public/assets/javascripts/ui/reader/Tracker.js
new file mode 100644
index 0000000..d2dec39
--- /dev/null
+++ b/public/assets/javascripts/ui/reader/Tracker.js
@@ -0,0 +1,133 @@
+if (window.location.host.indexOf("lvh.me") === -1) {
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+}
+else {
+ ga = function(){}
+}
+ga('create', 'UA-56883705-1', 'auto');
+ga('send', 'pageview');
+
+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.bind()
+ // this.trackPageview(opt)
+ },
+
+ 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)
+ event.unshift("send")
+ ga.apply( ga, event )
+ },
+
+ trackPageview: function(opt){
+ // this.pushEvent([ "view", opt.mode ])
+ },
+
+ //
+ // 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 > 1000) {
+ 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
+})