comparison nodejs-server/app.js~ @ 6:9d2f4e6a3f36

color coding in client ui
author mgeorgi
date Fri, 22 Jun 2012 10:14:12 +0100
parents 89a05584e39e
children f9d621228bd9
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 };