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 };
|