diff mcserver/static/app.js~ @ 0:89a05584e39e

initial commit of mood conductor stuff
author gyorgyf
date Sat, 16 Jun 2012 20:31:41 +0100
parents
children 9d2f4e6a3f36
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mcserver/static/app.js~	Sat Jun 16 20:31:41 2012 +0100
@@ -0,0 +1,80 @@
+var Application = {
+  init: function() {
+    this.canvas = document.getElementById('canvas');
+    this.marker = document.getElementById('marker');
+    this.label = document.getElementById('label');
+
+    this.canvas.addEventListener('mousedown', this.onMouseDown.bind(this));
+    this.canvas.addEventListener('mousemove', this.onMouseMove.bind(this));
+    this.canvas.addEventListener('mouseup', this.onMouseUp.bind(this));
+    
+    this.request("/moods.csv", this.loadCSV.bind(this));
+  },
+
+  loadCSV: function(text) {
+    this.moods = [];
+
+    var lines = text.split("\n");
+
+    for (var i = 1; i < lines.length; i++) {
+      var row = lines[i].split(",");
+      this.moods.push({
+        label: row[1], 
+        x: Number(row[3]), 
+        y: Number(row[5])
+      });
+    }
+  },
+  
+  request: function(url, callback) {
+    var request = new XMLHttpRequest();
+    request.onreadystatechange = function() {
+      callback(request.responseText);
+    }.bind(this);
+    request.open("GET", url);
+    request.send(null);
+  },
+
+  onMouseDown: function(event) {
+    this.mouseDown = true;
+    this.setMarker(event.pageX, event.pageY);
+  },
+
+  onMouseMove: function(event) {
+    if (this.mouseDown) {
+      this.setMarker(event.pageX, event.pageY);
+    }
+  },
+
+  onMouseUp: function(event) {
+    this.mouseDown = false;
+    this.setMarker(event.pageX, event.pageY);
+  },
+
+  setMarker: function(x, y) {
+    this.marker.style.left = x + 'px';
+    this.marker.style.top = y + 'px';
+    
+    var _x = x / 480;
+    var _y = y / 960;
+    var match = {
+      dx: 1,
+      dy: 1,
+      index: null
+    };
+    
+    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);
+
+      if (dx < match.dx && dy < match.dy) {
+        match.dx = dx;
+        match.dy = dy;
+        match.index = i;
+      }
+    }
+
+    this.label.innerHTML = this.moods[match.index].label;
+  }
+};