comparison mcserver/static/app.js~ @ 9:180274c3b48a

send on mouse release
author mgeorgi
date Fri, 22 Jun 2012 10:36:35 +0100
parents 9d2f4e6a3f36
children 9d9169751aba
comparison
equal deleted inserted replaced
8:f9d621228bd9 9:180274c3b48a
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.loadMoods.bind(this)); 11 this.request("/moods.csv", this.loadMoods.bind(this));
12 this.request("/colors.txt", this.loadColors.bind(this)); 12 this.background();
13 },
14
15 tl: { r: 200, g: 0, b: 0 },
16 tr: { r: 200, g: 150, b: 0 },
17 bl: { r: 0, g: 50, b: 100 },
18 br: { r: 200, g: 230, b: 80 },
19
20 interpolateColor: function(a, b, x) {
21 return {
22 r: Math.floor(a.r + (b.r - a.r) * x),
23 g: Math.floor(a.g + (b.g - a.g) * x),
24 b: Math.floor(a.b + (b.b - a.b) * x)
25 };
26 },
27
28 background: function() {
29 var step = 20;
30 var ctx = this.canvas.getContext("2d");
31 ctx.clearRect(0, 0, 320, 320);
32
33 for (var y = 0; y < 320; y += step) {
34 var left = this.interpolateColor(this.tl, this.bl, y / 320);
35 var right = this.interpolateColor(this.tr, this.br, y / 320);
36 for (var x = 0; x < 320; x += step) {
37 var color = this.interpolateColor(left, right, x / 320);
38 ctx.fillStyle = "rgb(" + color.r + "," + color.g + "," + color.b + ")";
39 ctx.fillRect(x, y, step, step);
40 }
41 }
42 ctx.strokeStyle = "rgb(0,0,0)";
43 ctx.moveTo(0, 160);
44 ctx.lineTo(320, 160);
45 ctx.stroke();
46
47 ctx.fillStyle = "rgb(0,0,0)";
48 ctx.beginPath();
49 ctx.moveTo(320, 160);
50 ctx.lineTo(310, 150);
51 ctx.lineTo(310, 170);
52 ctx.fill();
53
54 ctx.strokeStyle = "rgb(0,0,0)";
55 ctx.moveTo(160, 320);
56 ctx.lineTo(160, 0);
57 ctx.stroke();
58
59 ctx.fillStyle = "rgb(0,0,0)";
60 ctx.beginPath();
61 ctx.moveTo(160, 0);
62 ctx.lineTo(150, 10);
63 ctx.lineTo(170, 10);
64 ctx.fill();
65
66 ctx.font = "16px Arial";
67 ctx.fillText("Valence", 200, 158);
68
69 ctx.save();
70 ctx.translate(158, 120);
71 ctx.rotate(Math.PI * 1.5);
72 ctx.font = "16px Arial";
73 ctx.fillText("Arousal", 0, 0);
74 ctx.restore();
13 }, 75 },
14 76
15 loadMoods: function(text) { 77 loadMoods: function(text) {
16 this.moods = []; 78 this.moods = [];
17 79
18 var lines = text.split("\n"); 80 var lines = text.split("\n");
19 81
20 for (var i = 1; i < lines.length; i++) { 82 for (var i = 1; i < lines.length; i++) {
21 var row = lines[i].split(","); 83 var row = lines[i].split(",");
22 var mood = { 84 var mood = {
23 label: row[1], 85 label: row[0],
24 x: Number(row[3]), 86 val: Number(row[1]),
25 y: Number(row[5]) 87 aro: Number(row[2]),
88 dom: Number(row[3])
26 }; 89 };
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); 90 this.moods.push(mood);
36 } 91 }
37 }, 92 },
38 93
39 loadColors: function(text) {
40 this.colors = {};
41
42 var lines = text.split("\n");
43
44 for (var i = 1; i < lines.length; i++) {
45 var row = lines[i].split("\t");
46 this.colors[row[0]] = row[2];
47 }
48 },
49
50 request: function(url, callback) { 94 request: function(url, callback) {
51 var request = new XMLHttpRequest(); 95 var request = new XMLHttpRequest();
52 request.onreadystatechange = function() { 96 request.onreadystatechange = function() {
53 if (callback) { 97 if (callback) {
54 callback(request.responseText); 98 callback(request.responseText);
73 this.mouseDown = false; 117 this.mouseDown = false;
74 this.setMarker(event.pageX, event.pageY); 118 this.setMarker(event.pageX, event.pageY);
75 }, 119 },
76 120
77 setMarker: function(pageX, pageY) { 121 setMarker: function(pageX, pageY) {
78 this.marker.style.left = pageX + 'px'; 122 this.background();
79 this.marker.style.top = pageY + 'px'; 123 this.drawMarker(pageX, pageY);
80 124
81 var x = pageX / 320; 125 var x = pageX / 320;
82 var y = 1 - pageY / 320; 126 var y = 1 - pageY / 320;
83 127
84 var mood = this.findMood(x, y); 128 var mood = this.findMood(x, y);
85 129
86 if (mood != this.mood) { 130 if (mood != this.mood) {
87 this.marker.innerHTML = mood.label; 131 this.label.innerHTML = mood.label;
88 this.mood = mood; 132 this.mood = mood;
89 this.canvas.style.backgroundColor = '#' + this.colors[mood.label];
90 this.request("/mood?x=" + x + "&y=" + y); 133 this.request("/mood?x=" + x + "&y=" + y);
91 } 134 }
135 },
136
137 drawMarker: function(x, y) {
138 var ctx = this.canvas.getContext("2d");
139 ctx.fillStyle = "rgba(0, 0, 0, 0.5)";
140 ctx.beginPath();
141 ctx.arc(x, y, 20, 0, Math.PI*2, true);
142 ctx.fill();
92 }, 143 },
93 144
94 findMood: function(x, y) { 145 findMood: function(x, y) {
95 var distance = 1; 146 var distance = 1;
96 var index = null; 147 var index = null;
97 148
98 for (var i = 0; i < this.moods.length; i++) { 149 for (var i = 0; i < this.moods.length; i++) {
99 var mood = this.moods[i]; 150 var mood = this.moods[i];
100 var dx = Math.abs(mood.x - x); 151 var dx = Math.abs(mood.val - x);
101 var dy = Math.abs(mood.y - y); 152 var dy = Math.abs(mood.aro - y);
102 var d = Math.sqrt(dx * dx + dy * dy); 153 var d = Math.sqrt(dx * dx + dy * dy);
103 154
104 if (d < distance) { 155 if (d < distance) {
105 distance = d; 156 distance = d;
106 index = i; 157 index = i;