annotate mcserver/static/app.js~ @ 22:858fc44a17c1

added s option to stop blobs from fading
author gyorgyf
date Fri, 22 Jun 2012 16:52:57 +0100
parents 9d9169751aba
children 9d57fcc848c0
rev   line source
gyorgyf@0 1 var Application = {
gyorgyf@0 2 init: function() {
gyorgyf@0 3 this.canvas = document.getElementById('canvas');
gyorgyf@0 4 this.marker = document.getElementById('marker');
gyorgyf@0 5 this.label = document.getElementById('label');
gyorgyf@0 6
gyorgyf@12 7 this.canvas.addEventListener('click', this.onMouseUp.bind(this));
gyorgyf@0 8
gyorgyf@12 9 this.request("/moodconductor/moods.csv", this.loadMoods.bind(this));
gyorgyf@12 10 <<<<<<< local
mgeorgi@9 11 this.background();
gyorgyf@12 12 =======
gyorgyf@12 13 this.draw();
gyorgyf@12 14 >>>>>>> other
mgeorgi@9 15 },
mgeorgi@9 16
mgeorgi@9 17 tl: { r: 200, g: 0, b: 0 },
mgeorgi@9 18 tr: { r: 200, g: 150, b: 0 },
mgeorgi@9 19 bl: { r: 0, g: 50, b: 100 },
mgeorgi@9 20 br: { r: 200, g: 230, b: 80 },
mgeorgi@9 21
mgeorgi@9 22 interpolateColor: function(a, b, x) {
mgeorgi@9 23 return {
mgeorgi@9 24 r: Math.floor(a.r + (b.r - a.r) * x),
mgeorgi@9 25 g: Math.floor(a.g + (b.g - a.g) * x),
mgeorgi@9 26 b: Math.floor(a.b + (b.b - a.b) * x)
mgeorgi@9 27 };
mgeorgi@9 28 },
mgeorgi@9 29
gyorgyf@12 30 draw: function() {
mgeorgi@9 31 var step = 20;
mgeorgi@9 32 var ctx = this.canvas.getContext("2d");
mgeorgi@9 33 ctx.clearRect(0, 0, 320, 320);
mgeorgi@9 34
mgeorgi@9 35 for (var y = 0; y < 320; y += step) {
mgeorgi@9 36 var left = this.interpolateColor(this.tl, this.bl, y / 320);
mgeorgi@9 37 var right = this.interpolateColor(this.tr, this.br, y / 320);
mgeorgi@9 38 for (var x = 0; x < 320; x += step) {
mgeorgi@9 39 var color = this.interpolateColor(left, right, x / 320);
mgeorgi@9 40 ctx.fillStyle = "rgb(" + color.r + "," + color.g + "," + color.b + ")";
mgeorgi@9 41 ctx.fillRect(x, y, step, step);
mgeorgi@9 42 }
mgeorgi@9 43 }
gyorgyf@12 44
gyorgyf@12 45 ctx.beginPath();
mgeorgi@9 46 ctx.strokeStyle = "rgb(0,0,0)";
mgeorgi@9 47 ctx.moveTo(0, 160);
mgeorgi@9 48 ctx.lineTo(320, 160);
mgeorgi@9 49 ctx.stroke();
mgeorgi@9 50
mgeorgi@9 51 ctx.fillStyle = "rgb(0,0,0)";
mgeorgi@9 52 ctx.beginPath();
mgeorgi@9 53 ctx.moveTo(320, 160);
mgeorgi@9 54 ctx.lineTo(310, 150);
mgeorgi@9 55 ctx.lineTo(310, 170);
mgeorgi@9 56 ctx.fill();
mgeorgi@9 57
mgeorgi@9 58 ctx.strokeStyle = "rgb(0,0,0)";
mgeorgi@9 59 ctx.moveTo(160, 320);
mgeorgi@9 60 ctx.lineTo(160, 0);
mgeorgi@9 61 ctx.stroke();
mgeorgi@9 62
mgeorgi@9 63 ctx.fillStyle = "rgb(0,0,0)";
mgeorgi@9 64 ctx.beginPath();
mgeorgi@9 65 ctx.moveTo(160, 0);
mgeorgi@9 66 ctx.lineTo(150, 10);
mgeorgi@9 67 ctx.lineTo(170, 10);
mgeorgi@9 68 ctx.fill();
mgeorgi@9 69
mgeorgi@9 70 ctx.font = "16px Arial";
mgeorgi@9 71 ctx.fillText("Valence", 200, 158);
mgeorgi@9 72
mgeorgi@9 73 ctx.save();
mgeorgi@9 74 ctx.translate(158, 120);
mgeorgi@9 75 ctx.rotate(Math.PI * 1.5);
mgeorgi@9 76 ctx.font = "16px Arial";
mgeorgi@9 77 ctx.fillText("Arousal", 0, 0);
mgeorgi@9 78 ctx.restore();
gyorgyf@12 79
gyorgyf@12 80 if (this.marker) {
gyorgyf@12 81 ctx.fillStyle = "rgba(0, 0, 0, 0.5)";
gyorgyf@12 82 ctx.beginPath();
gyorgyf@12 83 ctx.arc(this.marker.x, this.marker.y, 20, 0, Math.PI*2, true);
gyorgyf@12 84 ctx.fill();
gyorgyf@12 85 }
gyorgyf@0 86 },
gyorgyf@0 87
mgeorgi@6 88 loadMoods: function(text) {
gyorgyf@0 89 this.moods = [];
gyorgyf@0 90
gyorgyf@0 91 var lines = text.split("\n");
mgeorgi@6 92
mgeorgi@6 93 for (var i = 1; i < lines.length; i++) {
mgeorgi@6 94 var row = lines[i].split(",");
mgeorgi@6 95 var mood = {
mgeorgi@9 96 label: row[0],
mgeorgi@9 97 val: Number(row[1]),
mgeorgi@9 98 aro: Number(row[2]),
mgeorgi@9 99 dom: Number(row[3])
mgeorgi@6 100 };
mgeorgi@6 101 this.moods.push(mood);
mgeorgi@6 102 }
mgeorgi@6 103 },
mgeorgi@9 104
gyorgyf@0 105 request: function(url, callback) {
gyorgyf@0 106 var request = new XMLHttpRequest();
gyorgyf@0 107 request.onreadystatechange = function() {
mgeorgi@6 108 if (callback) {
mgeorgi@6 109 callback(request.responseText);
mgeorgi@6 110 }
gyorgyf@0 111 }.bind(this);
gyorgyf@0 112 request.open("GET", url);
gyorgyf@0 113 request.send(null);
gyorgyf@0 114 },
gyorgyf@0 115
gyorgyf@12 116 onMouseUp: function(event) {
gyorgyf@12 117 event.preventDefault();
gyorgyf@12 118 this.setMarker(event);
gyorgyf@12 119 this.sendPosition(event);
gyorgyf@12 120 this.draw();
gyorgyf@0 121 },
gyorgyf@0 122
gyorgyf@12 123 sendPosition: function(event) {
gyorgyf@12 124 var x = event.pageX / 320;
gyorgyf@12 125 var y = 1 - event.pageY / 320;
gyorgyf@12 126
gyorgyf@12 127 this.request("/moodconductor/mood?x=" + x + "&y=" + y);
gyorgyf@0 128 },
gyorgyf@0 129
gyorgyf@12 130 setMarker: function(event) {
gyorgyf@12 131 this.marker = {
gyorgyf@12 132 x: event.pageX,
gyorgyf@12 133 y: event.pageY
gyorgyf@12 134 };
gyorgyf@12 135
gyorgyf@12 136 <<<<<<< local
gyorgyf@12 137 sendPosition: function(pageX, pageY) {
gyorgyf@12 138 var x = pageX / 320;
gyorgyf@12 139 var y = 1 - pageY / 320;
gyorgyf@12 140 this.request("/moodconductor/mood?x=" + x + "&y=" + y);
gyorgyf@0 141 },
gyorgyf@0 142
mgeorgi@6 143 setMarker: function(pageX, pageY) {
mgeorgi@9 144 this.background();
mgeorgi@9 145 this.drawMarker(pageX, pageY);
mgeorgi@9 146
mgeorgi@6 147 var x = pageX / 320;
mgeorgi@6 148 var y = 1 - pageY / 320;
gyorgyf@12 149 =======
gyorgyf@12 150 var x = event.pageX / 320;
gyorgyf@12 151 var y = 1 - event.pageY / 320;
gyorgyf@12 152 >>>>>>> other
mgeorgi@6 153
mgeorgi@6 154 var mood = this.findMood(x, y);
mgeorgi@6 155
gyorgyf@12 156 this.label.innerHTML = mood.label;
gyorgyf@12 157 this.mood = mood;
mgeorgi@9 158 },
mgeorgi@6 159
mgeorgi@6 160 findMood: function(x, y) {
mgeorgi@6 161 var distance = 1;
mgeorgi@6 162 var index = null;
gyorgyf@0 163
gyorgyf@0 164 for (var i = 0; i < this.moods.length; i++) {
gyorgyf@0 165 var mood = this.moods[i];
mgeorgi@9 166 var dx = Math.abs(mood.val - x);
mgeorgi@9 167 var dy = Math.abs(mood.aro - y);
mgeorgi@6 168 var d = Math.sqrt(dx * dx + dy * dy);
gyorgyf@0 169
mgeorgi@6 170 if (d < distance) {
mgeorgi@6 171 distance = d;
mgeorgi@6 172 index = i;
gyorgyf@0 173 }
gyorgyf@0 174 }
gyorgyf@0 175
mgeorgi@6 176 return this.moods[index];
gyorgyf@0 177 }
gyorgyf@12 178 };