changeset 9:180274c3b48a

send on mouse release
author mgeorgi
date Fri, 22 Jun 2012 10:36:35 +0100
parents f9d621228bd9
children 63cc59d5b665
files mcserver/static/app.js mcserver/static/app.js~
diffstat 2 files changed, 91 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/mcserver/static/app.js	Fri Jun 22 10:34:48 2012 +0100
+++ b/mcserver/static/app.js	Fri Jun 22 10:36:35 2012 +0100
@@ -116,6 +116,13 @@
   onMouseUp: function(event) {
     this.mouseDown = false;
     this.setMarker(event.pageX, event.pageY);
+    this.sendPosition(event.pageX, event.pageY);
+  },
+
+  sendPosition: function(pageX, pageY) {
+    var x = pageX / 320;
+    var y = 1 - pageY / 320;
+    this.request("/mood?x=" + x + "&y=" + y);
   },
 
   setMarker: function(pageX, pageY) {
@@ -127,11 +134,8 @@
     
     var mood = this.findMood(x, y);
 
-    if (mood != this.mood) {
-      this.label.innerHTML = mood.label;
-      this.mood = mood;
-      this.request("/mood?x=" + x + "&y=" + y);
-    }
+    this.label.innerHTML = mood.label;
+    this.mood = mood;
   },
   
   drawMarker: function(x, y) {
--- a/mcserver/static/app.js~	Fri Jun 22 10:34:48 2012 +0100
+++ b/mcserver/static/app.js~	Fri Jun 22 10:36:35 2012 +0100
@@ -9,7 +9,69 @@
     this.canvas.addEventListener('mouseup', this.onMouseUp.bind(this));
     
     this.request("/moods.csv", this.loadMoods.bind(this));
-    this.request("/colors.txt", this.loadColors.bind(this));
+    this.background();
+  },
+
+  tl: { r: 200, g: 0, b: 0 },
+  tr: { r: 200, g: 150, b: 0 },
+  bl: { r: 0, g: 50, b: 100 },
+  br: { r: 200, g: 230, b: 80 },
+  
+  interpolateColor: function(a, b, x) {
+    return {
+      r: Math.floor(a.r + (b.r - a.r) * x),
+      g: Math.floor(a.g + (b.g - a.g) * x),
+      b: Math.floor(a.b + (b.b - a.b) * x)
+    };
+  },
+
+  background: function() {
+    var step = 20;
+    var ctx = this.canvas.getContext("2d");  
+    ctx.clearRect(0, 0, 320, 320);
+
+    for (var y = 0; y < 320; y += step) {
+      var left = this.interpolateColor(this.tl, this.bl, y / 320);
+      var right = this.interpolateColor(this.tr, this.br, y / 320);
+      for (var x = 0; x < 320; x += step) {
+        var color = this.interpolateColor(left, right, x / 320);
+        ctx.fillStyle = "rgb(" + color.r + "," + color.g + "," + color.b + ")";
+        ctx.fillRect(x, y, step, step);
+      }
+    }
+    ctx.strokeStyle = "rgb(0,0,0)";
+    ctx.moveTo(0, 160);
+    ctx.lineTo(320, 160);
+    ctx.stroke();
+    
+    ctx.fillStyle = "rgb(0,0,0)";
+    ctx.beginPath();
+    ctx.moveTo(320, 160);
+    ctx.lineTo(310, 150);
+    ctx.lineTo(310, 170);
+    ctx.fill();
+
+    ctx.strokeStyle = "rgb(0,0,0)";
+    ctx.moveTo(160, 320);
+    ctx.lineTo(160, 0);
+    ctx.stroke();
+    
+    ctx.fillStyle = "rgb(0,0,0)";
+    ctx.beginPath();
+    ctx.moveTo(160, 0);
+    ctx.lineTo(150, 10);
+    ctx.lineTo(170, 10);
+    ctx.fill();
+
+    ctx.font = "16px Arial";
+    ctx.fillText("Valence", 200, 158);  
+    
+    ctx.save();
+    ctx.translate(158, 120);
+    ctx.rotate(Math.PI * 1.5);
+    ctx.font = "16px Arial";
+    ctx.fillText("Arousal", 0, 0);  
+    ctx.restore();
   },
 
   loadMoods: function(text) {
@@ -20,33 +82,15 @@
     for (var i = 1; i < lines.length; i++) {
       var row = lines[i].split(",");
       var mood = {
-        label: row[1], 
-        x: Number(row[3]), 
-        y: Number(row[5])
+        label: row[0],
+        val: Number(row[1]), 
+        aro: Number(row[2]),
+        dom: Number(row[3])
       };
-
-      // var div = document.createElement('div');
-      // this.canvas.appendChild(div);
-      // div.style.position = 'absolute';
-      // div.style.left = mood.x * 320 + 'px';
-      // div.style.top = mood.y * 320 + 'px';
-      // div.innerHTML = mood.label;
-      
       this.moods.push(mood);
     }
   },
-
-  loadColors: function(text) {
-    this.colors = {};
-
-    var lines = text.split("\n");
-
-    for (var i = 1; i < lines.length; i++) {
-      var row = lines[i].split("\t");
-      this.colors[row[0]] = row[2];
-    }
-  },
-  
+ 
   request: function(url, callback) {
     var request = new XMLHttpRequest();
     request.onreadystatechange = function() {
@@ -75,21 +119,28 @@
   },
 
   setMarker: function(pageX, pageY) {
-    this.marker.style.left = pageX + 'px';
-    this.marker.style.top = pageY + 'px';
-    
+    this.background();
+    this.drawMarker(pageX, pageY);
+
     var x = pageX / 320;
     var y = 1 - pageY / 320;
     
     var mood = this.findMood(x, y);
 
     if (mood != this.mood) {
-      this.marker.innerHTML = mood.label;
+      this.label.innerHTML = mood.label;
       this.mood = mood;
-      this.canvas.style.backgroundColor = '#' + this.colors[mood.label];
       this.request("/mood?x=" + x + "&y=" + y);
     }
   },
+  
+  drawMarker: function(x, y) {
+    var ctx = this.canvas.getContext("2d");  
+    ctx.fillStyle = "rgba(0, 0, 0, 0.5)";
+    ctx.beginPath();
+    ctx.arc(x, y, 20, 0, Math.PI*2, true); 
+    ctx.fill();
+  },
 
   findMood: function(x, y) {
     var distance = 1;
@@ -97,8 +148,8 @@
     
     for (var i = 0; i < this.moods.length; i++) {
       var mood = this.moods[i];
-      var dx = Math.abs(mood.x - x);
-      var dy = Math.abs(mood.y - y);
+      var dx = Math.abs(mood.val - x);
+      var dy = Math.abs(mood.aro - y);
       var d = Math.sqrt(dx * dx + dy * dy);
 
       if (d < distance) {