Mercurial > hg > mood-conductor
comparison mcserver/static/app.js~ @ 6:9d2f4e6a3f36
color coding in client ui
author | mgeorgi |
---|---|
date | Fri, 22 Jun 2012 10:14:12 +0100 |
parents | 89a05584e39e |
children | 180274c3b48a |
comparison
equal
deleted
inserted
replaced
4:02b4c5e122e8 | 6:9d2f4e6a3f36 |
---|---|
6 | 6 |
7 this.canvas.addEventListener('mousedown', this.onMouseDown.bind(this)); | 7 this.canvas.addEventListener('mousedown', this.onMouseDown.bind(this)); |
8 this.canvas.addEventListener('mousemove', this.onMouseMove.bind(this)); | 8 this.canvas.addEventListener('mousemove', this.onMouseMove.bind(this)); |
9 this.canvas.addEventListener('mouseup', this.onMouseUp.bind(this)); | 9 this.canvas.addEventListener('mouseup', this.onMouseUp.bind(this)); |
10 | 10 |
11 this.request("/moods.csv", this.loadCSV.bind(this)); | 11 this.request("/moods.csv", this.loadMoods.bind(this)); |
12 this.request("/colors.txt", this.loadColors.bind(this)); | |
12 }, | 13 }, |
13 | 14 |
14 loadCSV: function(text) { | 15 loadMoods: function(text) { |
15 this.moods = []; | 16 this.moods = []; |
17 | |
18 var lines = text.split("\n"); | |
19 | |
20 for (var i = 1; i < lines.length; i++) { | |
21 var row = lines[i].split(","); | |
22 var mood = { | |
23 label: row[1], | |
24 x: Number(row[3]), | |
25 y: Number(row[5]) | |
26 }; | |
27 | |
28 // var div = document.createElement('div'); | |
29 // this.canvas.appendChild(div); | |
30 // div.style.position = 'absolute'; | |
31 // div.style.left = mood.x * 320 + 'px'; | |
32 // div.style.top = mood.y * 320 + 'px'; | |
33 // div.innerHTML = mood.label; | |
34 | |
35 this.moods.push(mood); | |
36 } | |
37 }, | |
38 | |
39 loadColors: function(text) { | |
40 this.colors = {}; | |
16 | 41 |
17 var lines = text.split("\n"); | 42 var lines = text.split("\n"); |
18 | 43 |
19 for (var i = 1; i < lines.length; i++) { | 44 for (var i = 1; i < lines.length; i++) { |
20 var row = lines[i].split(","); | 45 var row = lines[i].split("\t"); |
21 this.moods.push({ | 46 this.colors[row[0]] = row[2]; |
22 label: row[1], | |
23 x: Number(row[3]), | |
24 y: Number(row[5]) | |
25 }); | |
26 } | 47 } |
27 }, | 48 }, |
28 | 49 |
29 request: function(url, callback) { | 50 request: function(url, callback) { |
30 var request = new XMLHttpRequest(); | 51 var request = new XMLHttpRequest(); |
31 request.onreadystatechange = function() { | 52 request.onreadystatechange = function() { |
32 callback(request.responseText); | 53 if (callback) { |
54 callback(request.responseText); | |
55 } | |
33 }.bind(this); | 56 }.bind(this); |
34 request.open("GET", url); | 57 request.open("GET", url); |
35 request.send(null); | 58 request.send(null); |
36 }, | 59 }, |
37 | 60 |
49 onMouseUp: function(event) { | 72 onMouseUp: function(event) { |
50 this.mouseDown = false; | 73 this.mouseDown = false; |
51 this.setMarker(event.pageX, event.pageY); | 74 this.setMarker(event.pageX, event.pageY); |
52 }, | 75 }, |
53 | 76 |
54 setMarker: function(x, y) { | 77 setMarker: function(pageX, pageY) { |
55 this.marker.style.left = x + 'px'; | 78 this.marker.style.left = pageX + 'px'; |
56 this.marker.style.top = y + 'px'; | 79 this.marker.style.top = pageY + 'px'; |
57 | 80 |
58 var _x = x / 480; | 81 var x = pageX / 320; |
59 var _y = y / 960; | 82 var y = 1 - pageY / 320; |
60 var match = { | 83 |
61 dx: 1, | 84 var mood = this.findMood(x, y); |
62 dy: 1, | 85 |
63 index: null | 86 if (mood != this.mood) { |
64 }; | 87 this.marker.innerHTML = mood.label; |
88 this.mood = mood; | |
89 this.canvas.style.backgroundColor = '#' + this.colors[mood.label]; | |
90 this.request("/mood?x=" + x + "&y=" + y); | |
91 } | |
92 }, | |
93 | |
94 findMood: function(x, y) { | |
95 var distance = 1; | |
96 var index = null; | |
65 | 97 |
66 for (var i = 0; i < this.moods.length; i++) { | 98 for (var i = 0; i < this.moods.length; i++) { |
67 var mood = this.moods[i]; | 99 var mood = this.moods[i]; |
68 var dx = Math.abs(mood.x - _x); | 100 var dx = Math.abs(mood.x - x); |
69 var dy = Math.abs(mood.y - _y); | 101 var dy = Math.abs(mood.y - y); |
102 var d = Math.sqrt(dx * dx + dy * dy); | |
70 | 103 |
71 if (dx < match.dx && dy < match.dy) { | 104 if (d < distance) { |
72 match.dx = dx; | 105 distance = d; |
73 match.dy = dy; | 106 index = i; |
74 match.index = i; | |
75 } | 107 } |
76 } | 108 } |
77 | 109 |
78 this.label.innerHTML = this.moods[match.index].label; | 110 return this.moods[index]; |
79 } | 111 } |
80 }; | 112 }; |