Mercurial > hg > mood-conductor
comparison mcserver/static/app.js @ 11:2c3fe4b24640
update python static folder
author | mgeorgi |
---|---|
date | Fri, 22 Jun 2012 11:24:19 +0100 |
parents | 180274c3b48a |
children | 49cfd3ad1fe7 |
comparison
equal
deleted
inserted
replaced
10:63cc59d5b665 | 11:2c3fe4b24640 |
---|---|
2 init: function() { | 2 init: function() { |
3 this.canvas = document.getElementById('canvas'); | 3 this.canvas = document.getElementById('canvas'); |
4 this.marker = document.getElementById('marker'); | 4 this.marker = document.getElementById('marker'); |
5 this.label = document.getElementById('label'); | 5 this.label = document.getElementById('label'); |
6 | 6 |
7 this.canvas.addEventListener('mousedown', this.onMouseDown.bind(this)); | 7 this.canvas.addEventListener('click', this.onMouseUp.bind(this)); |
8 this.canvas.addEventListener('mousemove', this.onMouseMove.bind(this)); | |
9 this.canvas.addEventListener('mouseup', this.onMouseUp.bind(this)); | |
10 | 8 |
11 this.request("/moods.csv", this.loadMoods.bind(this)); | 9 this.request("/moodconductor/moods.csv", this.loadMoods.bind(this)); |
12 this.background(); | 10 this.draw(); |
13 }, | 11 }, |
14 | 12 |
15 tl: { r: 200, g: 0, b: 0 }, | 13 tl: { r: 200, g: 0, b: 0 }, |
16 tr: { r: 200, g: 150, b: 0 }, | 14 tr: { r: 200, g: 150, b: 0 }, |
17 bl: { r: 0, g: 50, b: 100 }, | 15 bl: { r: 0, g: 50, b: 100 }, |
23 g: Math.floor(a.g + (b.g - a.g) * x), | 21 g: Math.floor(a.g + (b.g - a.g) * x), |
24 b: Math.floor(a.b + (b.b - a.b) * x) | 22 b: Math.floor(a.b + (b.b - a.b) * x) |
25 }; | 23 }; |
26 }, | 24 }, |
27 | 25 |
28 background: function() { | 26 draw: function() { |
29 var step = 20; | 27 var step = 20; |
30 var ctx = this.canvas.getContext("2d"); | 28 var ctx = this.canvas.getContext("2d"); |
31 ctx.clearRect(0, 0, 320, 320); | 29 ctx.clearRect(0, 0, 320, 320); |
32 | 30 |
33 for (var y = 0; y < 320; y += step) { | 31 for (var y = 0; y < 320; y += step) { |
37 var color = this.interpolateColor(left, right, x / 320); | 35 var color = this.interpolateColor(left, right, x / 320); |
38 ctx.fillStyle = "rgb(" + color.r + "," + color.g + "," + color.b + ")"; | 36 ctx.fillStyle = "rgb(" + color.r + "," + color.g + "," + color.b + ")"; |
39 ctx.fillRect(x, y, step, step); | 37 ctx.fillRect(x, y, step, step); |
40 } | 38 } |
41 } | 39 } |
40 | |
41 ctx.beginPath(); | |
42 ctx.strokeStyle = "rgb(0,0,0)"; | 42 ctx.strokeStyle = "rgb(0,0,0)"; |
43 ctx.moveTo(0, 160); | 43 ctx.moveTo(0, 160); |
44 ctx.lineTo(320, 160); | 44 ctx.lineTo(320, 160); |
45 ctx.stroke(); | 45 ctx.stroke(); |
46 | 46 |
70 ctx.translate(158, 120); | 70 ctx.translate(158, 120); |
71 ctx.rotate(Math.PI * 1.5); | 71 ctx.rotate(Math.PI * 1.5); |
72 ctx.font = "16px Arial"; | 72 ctx.font = "16px Arial"; |
73 ctx.fillText("Arousal", 0, 0); | 73 ctx.fillText("Arousal", 0, 0); |
74 ctx.restore(); | 74 ctx.restore(); |
75 | |
76 if (this.marker) { | |
77 ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; | |
78 ctx.beginPath(); | |
79 ctx.arc(this.marker.x, this.marker.y, 20, 0, Math.PI*2, true); | |
80 ctx.fill(); | |
81 } | |
75 }, | 82 }, |
76 | 83 |
77 loadMoods: function(text) { | 84 loadMoods: function(text) { |
78 this.moods = []; | 85 this.moods = []; |
79 | 86 |
100 }.bind(this); | 107 }.bind(this); |
101 request.open("GET", url); | 108 request.open("GET", url); |
102 request.send(null); | 109 request.send(null); |
103 }, | 110 }, |
104 | 111 |
105 onMouseDown: function(event) { | 112 onMouseUp: function(event) { |
106 this.mouseDown = true; | 113 event.preventDefault(); |
107 this.setMarker(event.pageX, event.pageY); | 114 this.setMarker(event); |
115 this.sendPosition(event); | |
116 this.draw(); | |
108 }, | 117 }, |
109 | 118 |
110 onMouseMove: function(event) { | 119 sendPosition: function(event) { |
111 if (this.mouseDown) { | 120 var x = event.pageX / 320; |
112 this.setMarker(event.pageX, event.pageY); | 121 var y = 1 - event.pageY / 320; |
113 } | 122 |
123 this.request("/moodconductor/mood?x=" + x + "&y=" + y); | |
114 }, | 124 }, |
115 | 125 |
116 onMouseUp: function(event) { | 126 setMarker: function(event) { |
117 this.mouseDown = false; | 127 this.marker = { |
118 this.setMarker(event.pageX, event.pageY); | 128 x: event.pageX, |
119 this.sendPosition(event.pageX, event.pageY); | 129 y: event.pageY |
120 }, | 130 }; |
121 | 131 |
122 sendPosition: function(pageX, pageY) { | 132 var x = event.pageX / 320; |
123 var x = pageX / 320; | 133 var y = 1 - event.pageY / 320; |
124 var y = 1 - pageY / 320; | |
125 this.request("/mood?x=" + x + "&y=" + y); | |
126 }, | |
127 | |
128 setMarker: function(pageX, pageY) { | |
129 this.background(); | |
130 this.drawMarker(pageX, pageY); | |
131 | |
132 var x = pageX / 320; | |
133 var y = 1 - pageY / 320; | |
134 | 134 |
135 var mood = this.findMood(x, y); | 135 var mood = this.findMood(x, y); |
136 | 136 |
137 this.label.innerHTML = mood.label; | 137 this.label.innerHTML = mood.label; |
138 this.mood = mood; | 138 this.mood = mood; |
139 }, | |
140 | |
141 drawMarker: function(x, y) { | |
142 var ctx = this.canvas.getContext("2d"); | |
143 ctx.fillStyle = "rgba(0, 0, 0, 0.5)"; | |
144 ctx.beginPath(); | |
145 ctx.arc(x, y, 20, 0, Math.PI*2, true); | |
146 ctx.fill(); | |
147 }, | 139 }, |
148 | 140 |
149 findMood: function(x, y) { | 141 findMood: function(x, y) { |
150 var distance = 1; | 142 var distance = 1; |
151 var index = null; | 143 var index = null; |