Mercurial > hg > mood-conductor
comparison mcserver/static/app.js @ 17:49cfd3ad1fe7
update safari
author | mgeorgi |
---|---|
date | Fri, 22 Jun 2012 15:01:16 +0100 |
parents | 2c3fe4b24640 |
children | 9d57fcc848c0 |
comparison
equal
deleted
inserted
replaced
16:43c9011caff3 | 17:49cfd3ad1fe7 |
---|---|
1 var Application = { | 1 var Application = { |
2 moods: [ | |
3 ['power',0.69,0.71,0.79,1], | |
4 ['bright',0.81,0.55,0.67,2], | |
5 ['brutal',0.23,0.7,0.45,3], | |
6 ['confused',0.28,0.63,0.41,4], | |
7 ['rock',0.57,0.44,0.52,5], | |
8 ['serious',0.51,0.38,0.52,6], | |
9 ['relaxed',0.75,0.17,0.57,7], | |
10 ['calm',0.72,0.33,0.67,8], | |
11 ['dark',0.46,0.41,0.48,9], | |
12 ['dirty',0.26,0.49,0.46,10], | |
13 ['energy',0.78,0.74,0.74,11], | |
14 ['fun',0.92,0.78,0.73,12], | |
15 ['aggressive',0.51,0.6,0.57,13], | |
16 ['scary',0.28,0.71,0.33,14], | |
17 ['positive',0.88,0.57,0.65,15], | |
18 ['sad',0.08,0.39,0.31,16] | |
19 ], | |
20 | |
2 init: function() { | 21 init: function() { |
3 this.canvas = document.getElementById('canvas'); | 22 this.canvas = document.getElementById('canvas'); |
4 this.marker = document.getElementById('marker'); | |
5 this.label = document.getElementById('label'); | 23 this.label = document.getElementById('label'); |
24 this.draw(); | |
6 | 25 |
7 this.canvas.addEventListener('click', this.onMouseUp.bind(this)); | 26 this.canvas.addEventListener('click', this.onMouseUp.bind(this)); |
8 | |
9 this.request("/moodconductor/moods.csv", this.loadMoods.bind(this)); | |
10 this.draw(); | |
11 }, | 27 }, |
12 | 28 |
13 tl: { r: 200, g: 0, b: 0 }, | 29 tl: { r: 200, g: 0, b: 0 }, |
14 tr: { r: 200, g: 150, b: 0 }, | 30 tr: { r: 200, g: 150, b: 0 }, |
15 bl: { r: 0, g: 50, b: 100 }, | 31 bl: { r: 0, g: 50, b: 100 }, |
78 ctx.beginPath(); | 94 ctx.beginPath(); |
79 ctx.arc(this.marker.x, this.marker.y, 20, 0, Math.PI*2, true); | 95 ctx.arc(this.marker.x, this.marker.y, 20, 0, Math.PI*2, true); |
80 ctx.fill(); | 96 ctx.fill(); |
81 } | 97 } |
82 }, | 98 }, |
83 | |
84 loadMoods: function(text) { | |
85 this.moods = []; | |
86 | |
87 var lines = text.split("\n"); | |
88 | |
89 for (var i = 1; i < lines.length; i++) { | |
90 var row = lines[i].split(","); | |
91 var mood = { | |
92 label: row[0], | |
93 val: Number(row[1]), | |
94 aro: Number(row[2]), | |
95 dom: Number(row[3]) | |
96 }; | |
97 this.moods.push(mood); | |
98 } | |
99 }, | |
100 | 99 |
101 request: function(url, callback) { | 100 request: function(url, callback) { |
102 var request = new XMLHttpRequest(); | 101 var request = new XMLHttpRequest(); |
103 request.onreadystatechange = function() { | 102 request.onreadystatechange = function() { |
104 if (callback) { | 103 if (callback) { |
129 y: event.pageY | 128 y: event.pageY |
130 }; | 129 }; |
131 | 130 |
132 var x = event.pageX / 320; | 131 var x = event.pageX / 320; |
133 var y = 1 - event.pageY / 320; | 132 var y = 1 - event.pageY / 320; |
134 | |
135 var mood = this.findMood(x, y); | |
136 | 133 |
137 this.label.innerHTML = mood.label; | 134 this.label.innerHTML = this.findMood(x, y); |
138 this.mood = mood; | |
139 }, | 135 }, |
140 | 136 |
141 findMood: function(x, y) { | 137 findMood: function(x, y) { |
142 var distance = 1; | 138 var distance = 1; |
143 var index = null; | 139 var index = null; |
144 | 140 |
145 for (var i = 0; i < this.moods.length; i++) { | 141 for (var i = 0; i < this.moods.length; i++) { |
146 var mood = this.moods[i]; | 142 var mood = this.moods[i]; |
147 var dx = Math.abs(mood.val - x); | 143 var dx = Math.abs(mood[1] - x); |
148 var dy = Math.abs(mood.aro - y); | 144 var dy = Math.abs(mood[2] - y); |
149 var d = Math.sqrt(dx * dx + dy * dy); | 145 var d = Math.sqrt(dx * dx + dy * dy); |
150 | 146 |
151 if (d < distance) { | 147 if (d < distance) { |
152 distance = d; | 148 distance = d; |
153 index = i; | 149 index = i; |
154 } | 150 } |
155 } | 151 } |
156 | 152 |
157 return this.moods[index]; | 153 return this.moods[index][0]; |
158 } | 154 } |
159 }; | 155 }; |