annotate mcserver/static/app.js~ @ 6:9d2f4e6a3f36

color coding in client ui
author mgeorgi
date Fri, 22 Jun 2012 10:14:12 +0100
parents 89a05584e39e
children 180274c3b48a
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@0 7 this.canvas.addEventListener('mousedown', this.onMouseDown.bind(this));
gyorgyf@0 8 this.canvas.addEventListener('mousemove', this.onMouseMove.bind(this));
gyorgyf@0 9 this.canvas.addEventListener('mouseup', this.onMouseUp.bind(this));
gyorgyf@0 10
mgeorgi@6 11 this.request("/moods.csv", this.loadMoods.bind(this));
mgeorgi@6 12 this.request("/colors.txt", this.loadColors.bind(this));
gyorgyf@0 13 },
gyorgyf@0 14
mgeorgi@6 15 loadMoods: function(text) {
gyorgyf@0 16 this.moods = [];
gyorgyf@0 17
gyorgyf@0 18 var lines = text.split("\n");
mgeorgi@6 19
mgeorgi@6 20 for (var i = 1; i < lines.length; i++) {
mgeorgi@6 21 var row = lines[i].split(",");
mgeorgi@6 22 var mood = {
mgeorgi@6 23 label: row[1],
mgeorgi@6 24 x: Number(row[3]),
mgeorgi@6 25 y: Number(row[5])
mgeorgi@6 26 };
mgeorgi@6 27
mgeorgi@6 28 // var div = document.createElement('div');
mgeorgi@6 29 // this.canvas.appendChild(div);
mgeorgi@6 30 // div.style.position = 'absolute';
mgeorgi@6 31 // div.style.left = mood.x * 320 + 'px';
mgeorgi@6 32 // div.style.top = mood.y * 320 + 'px';
mgeorgi@6 33 // div.innerHTML = mood.label;
mgeorgi@6 34
mgeorgi@6 35 this.moods.push(mood);
mgeorgi@6 36 }
mgeorgi@6 37 },
mgeorgi@6 38
mgeorgi@6 39 loadColors: function(text) {
mgeorgi@6 40 this.colors = {};
mgeorgi@6 41
mgeorgi@6 42 var lines = text.split("\n");
gyorgyf@0 43
gyorgyf@0 44 for (var i = 1; i < lines.length; i++) {
mgeorgi@6 45 var row = lines[i].split("\t");
mgeorgi@6 46 this.colors[row[0]] = row[2];
gyorgyf@0 47 }
gyorgyf@0 48 },
gyorgyf@0 49
gyorgyf@0 50 request: function(url, callback) {
gyorgyf@0 51 var request = new XMLHttpRequest();
gyorgyf@0 52 request.onreadystatechange = function() {
mgeorgi@6 53 if (callback) {
mgeorgi@6 54 callback(request.responseText);
mgeorgi@6 55 }
gyorgyf@0 56 }.bind(this);
gyorgyf@0 57 request.open("GET", url);
gyorgyf@0 58 request.send(null);
gyorgyf@0 59 },
gyorgyf@0 60
gyorgyf@0 61 onMouseDown: function(event) {
gyorgyf@0 62 this.mouseDown = true;
gyorgyf@0 63 this.setMarker(event.pageX, event.pageY);
gyorgyf@0 64 },
gyorgyf@0 65
gyorgyf@0 66 onMouseMove: function(event) {
gyorgyf@0 67 if (this.mouseDown) {
gyorgyf@0 68 this.setMarker(event.pageX, event.pageY);
gyorgyf@0 69 }
gyorgyf@0 70 },
gyorgyf@0 71
gyorgyf@0 72 onMouseUp: function(event) {
gyorgyf@0 73 this.mouseDown = false;
gyorgyf@0 74 this.setMarker(event.pageX, event.pageY);
gyorgyf@0 75 },
gyorgyf@0 76
mgeorgi@6 77 setMarker: function(pageX, pageY) {
mgeorgi@6 78 this.marker.style.left = pageX + 'px';
mgeorgi@6 79 this.marker.style.top = pageY + 'px';
gyorgyf@0 80
mgeorgi@6 81 var x = pageX / 320;
mgeorgi@6 82 var y = 1 - pageY / 320;
mgeorgi@6 83
mgeorgi@6 84 var mood = this.findMood(x, y);
mgeorgi@6 85
mgeorgi@6 86 if (mood != this.mood) {
mgeorgi@6 87 this.marker.innerHTML = mood.label;
mgeorgi@6 88 this.mood = mood;
mgeorgi@6 89 this.canvas.style.backgroundColor = '#' + this.colors[mood.label];
mgeorgi@6 90 this.request("/mood?x=" + x + "&y=" + y);
mgeorgi@6 91 }
mgeorgi@6 92 },
mgeorgi@6 93
mgeorgi@6 94 findMood: function(x, y) {
mgeorgi@6 95 var distance = 1;
mgeorgi@6 96 var index = null;
gyorgyf@0 97
gyorgyf@0 98 for (var i = 0; i < this.moods.length; i++) {
gyorgyf@0 99 var mood = this.moods[i];
mgeorgi@6 100 var dx = Math.abs(mood.x - x);
mgeorgi@6 101 var dy = Math.abs(mood.y - y);
mgeorgi@6 102 var d = Math.sqrt(dx * dx + dy * dy);
gyorgyf@0 103
mgeorgi@6 104 if (d < distance) {
mgeorgi@6 105 distance = d;
mgeorgi@6 106 index = i;
gyorgyf@0 107 }
gyorgyf@0 108 }
gyorgyf@0 109
mgeorgi@6 110 return this.moods[index];
gyorgyf@0 111 }
gyorgyf@0 112 };