blinker / firefox.plugin / lib / main.js @ a03cd52e
History | View | Annotate | Download (8.837 KB)
1 | a03cd52e | Thies Pfeiffer | /*
|
---|---|---|---|
2 | * Copyright 2015 Thies Pfeiffer and Dimitri Heil
|
||
3 | * Blinker is distributed under the terms of the GNU General Public License
|
||
4 | *
|
||
5 | * This file is part of Blinker.
|
||
6 | *
|
||
7 | * Blinker is free software: you can redistribute it and/or modify
|
||
8 | * it under the terms of the GNU General Public License as published by
|
||
9 | * the Free Software Foundation, either version 3 of the License, or
|
||
10 | * (at your option) any later version.
|
||
11 | *
|
||
12 | * Blinker is distributed in the hope that it will be useful,
|
||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
15 | * GNU General Public License for more details.
|
||
16 | *
|
||
17 | * You should have received a copy of the GNU General Public License
|
||
18 | * along with Blinker. If not, see <http://www.gnu.org/licenses/>.
|
||
19 | */
|
||
20 | |||
21 | var {
|
||
22 | ToggleButton |
||
23 | } = require("sdk/ui/button/toggle");
|
||
24 | var panels = require("sdk/panel"); |
||
25 | var tabs = require("sdk/tabs"); |
||
26 | var pageMod = require("sdk/page-mod"); |
||
27 | var pageWorker = require("sdk/page-worker"); |
||
28 | var self = require("sdk/self"); |
||
29 | var settings = require("sdk/simple-prefs"); |
||
30 | var activeTABURL = "no"; |
||
31 | var about_config = require("sdk/preferences/service"); |
||
32 | var array = require("sdk/util/array"); |
||
33 | about_config.set("network.websocket.allowInsecureFromHTTPS", true); |
||
34 | |||
35 | var pageModWorkers = [];
|
||
36 | var activeWorker;
|
||
37 | var calibrationImage = self.data.url('calib.png'); |
||
38 | var holeImage = self.data.url('hole_200.gif'); |
||
39 | var currentPort = null; |
||
40 | |||
41 | var arr;
|
||
42 | |||
43 | //open the presentation.html on startup
|
||
44 | tabs.open({ |
||
45 | url: self.data.url("presentation.html"), |
||
46 | inBackground: false, |
||
47 | }); |
||
48 | |||
49 | |||
50 | //initiation of the settings panel button
|
||
51 | var button = ToggleButton({
|
||
52 | id: "mozilla-link", |
||
53 | label: "Visit Mozilla", |
||
54 | icon: {
|
||
55 | "16": "./eye-icon.png", |
||
56 | "32": "./eye-icon.png", |
||
57 | "64": "./eye-icon.png" |
||
58 | }, |
||
59 | onChange: handleChange
|
||
60 | }); |
||
61 | |||
62 | /*
|
||
63 | * Initiate pageworker (WebSocketServer-Connector)
|
||
64 | */
|
||
65 | var pw = pageWorker.Page({
|
||
66 | contentURL: self.data.url("websocket.html") |
||
67 | }); |
||
68 | //pw.contentURL = self.data.url("websocket.html");
|
||
69 | |||
70 | |||
71 | pw.port.on('getEyeTracker', function() { |
||
72 | worker.port.emit("EyeTracker", eyeTracker);
|
||
73 | }); |
||
74 | |||
75 | /*
|
||
76 | * If pageworker
|
||
77 | */
|
||
78 | pw.port.on('getAllSettings', function() { |
||
79 | emitAllPrefs(worker.port); |
||
80 | }); |
||
81 | |||
82 | /*
|
||
83 | * If message with name: 'eyeTrackerData' is received from pageworker, send it to the according listener
|
||
84 | * inside the active pagemod
|
||
85 | */
|
||
86 | pw.port.on('eyeTrackerData', function(message) { |
||
87 | //console.log("main.js :: pageMod :: port.on.eyeTrackerData" + ", message: " + message);
|
||
88 | if (activeWorker !== undefined) { |
||
89 | switch (settings.prefs.eyeTracker) {
|
||
90 | case "eyetribe": |
||
91 | activeWorker.port.emit('eyeTrackerData', message);
|
||
92 | break;
|
||
93 | case "smi": |
||
94 | activeWorker.port.emit('smiData', message);
|
||
95 | break;
|
||
96 | case "mygaze": |
||
97 | activeWorker.port.emit('myGazeData', message);
|
||
98 | break;
|
||
99 | default:
|
||
100 | break;
|
||
101 | } |
||
102 | } |
||
103 | }); |
||
104 | |||
105 | |||
106 | |||
107 | |||
108 | /*
|
||
109 | * Initiate pagemod and append listeners
|
||
110 | *
|
||
111 | */
|
||
112 | pageMod.PageMod({ |
||
113 | include: ["*", "file://*", "resource://*"], |
||
114 | contentScriptFile: [self.data.url("jquery-1.11.1.js"), self.data.url("notify.js"), self.data.url("jquery-ui.js"), self.data.url("jquery.knob.js"), self.data.url("eyeTribe.js"), self.data.url("withinViewport.js"), self.data.url("jquery.withinViewport.js"), self.data.url("circle-progress.js"), self.data.url("functions.js"), self.data.url("myscript.js"), self.data.url("jquery.nearest.js")], |
||
115 | contentStyleFile: [self.data.url("style.css"), self.data.url("font-awesome.css")], |
||
116 | attachTo: ["top"], |
||
117 | onAttach: function(worker) { |
||
118 | |||
119 | //set global activeworker to current pagemod
|
||
120 | activeWorker = worker; |
||
121 | |||
122 | /*
|
||
123 | * if page tab / page is (re)-activated - reset the eyetribes configuration settings and refresh the
|
||
124 | * blickBrowserSettings, that might have changed in another tab
|
||
125 | */
|
||
126 | worker.tab.on('activate', function() { |
||
127 | activeWorker = worker; |
||
128 | activeWorker.port.emit("initializeEyeTribe", ""); |
||
129 | emitAllPrefs(activeWorker.port); |
||
130 | }); |
||
131 | /*
|
||
132 | * if page tab / page is (re)-activated - reset the eyetribes configuration settings and refresh the
|
||
133 | * blickBrowserSettings, that might have changed in another tab
|
||
134 | */
|
||
135 | worker.on('pageshow', function() { |
||
136 | activeWorker = worker; |
||
137 | activeWorker.port.emit("initializeEyeTribe", ""); |
||
138 | array.add(pageModWorkers, this);
|
||
139 | emitAllPrefs(activeWorker.port); |
||
140 | }); |
||
141 | |||
142 | /*
|
||
143 | * if page tab / page is minimized, remove the actual worker from pagemodworkers
|
||
144 | */
|
||
145 | worker.on('pagehide', function() { |
||
146 | array.remove(pageModWorkers, this);
|
||
147 | }); |
||
148 | |||
149 | /*
|
||
150 | * if page tab / page is closed, remove the actual worker from pagemodworkers
|
||
151 | */
|
||
152 | worker.on('detach', function() { |
||
153 | console.log("worker detached.");
|
||
154 | array.remove(pageModWorkers, this);
|
||
155 | }); |
||
156 | |||
157 | |||
158 | /*
|
||
159 | * ################################################################
|
||
160 | * #################### PAGEMOD PORT LISTENERS ####################
|
||
161 | * ################################################################
|
||
162 | */
|
||
163 | |||
164 | /*
|
||
165 | * Redirect message from pagemod to pageworker
|
||
166 | */
|
||
167 | worker.port.on("sendToTracker", function(message) { |
||
168 | pw.port.emit("toEyetracker", message);
|
||
169 | }); |
||
170 | |||
171 | |||
172 | /*
|
||
173 | * Set panel button icon color
|
||
174 | */
|
||
175 | worker.port.on('setIconGreen', function() { |
||
176 | button.icon = "./eye-icon_green.png";
|
||
177 | }); |
||
178 | worker.port.on('setIconRed', function() { |
||
179 | button.icon = "./eye-icon_red.png";
|
||
180 | }); |
||
181 | |||
182 | |||
183 | worker.port.on('blickBrowserMode', function(value) { |
||
184 | settings.prefs.blickBrowserMode = value; |
||
185 | emitAllPrefs(activeWorker.port); |
||
186 | }); |
||
187 | |||
188 | /*
|
||
189 | * Settings have changed from inside the pagemod - adjust them globally
|
||
190 | */
|
||
191 | worker.port.on("writeSettings", function(settings) { |
||
192 | writeSettings(settings); |
||
193 | }); |
||
194 | |||
195 | /*
|
||
196 | * ################################################################
|
||
197 | * #################### PAGEMOD PORT EMITTERS #####################
|
||
198 | * ################################################################
|
||
199 | */
|
||
200 | |||
201 | /*
|
||
202 | * Send calibration image file to pagemod
|
||
203 | */
|
||
204 | worker.port.emit("calibrationImage", calibrationImage);
|
||
205 | |||
206 | /*
|
||
207 | * Send privacy image file to pagemod
|
||
208 | */
|
||
209 | worker.port.emit("holeImage", holeImage);
|
||
210 | |||
211 | |||
212 | } |
||
213 | }); |
||
214 | |||
215 | /*
|
||
216 | * Initiate the settings panel
|
||
217 | */
|
||
218 | var panel = panels.Panel({
|
||
219 | contentURL: self.data.url("settings.html"), |
||
220 | contentScriptFile: [self.data.url("settingsvariables.js"), self.data.url("jquery-1.11.1.js"), self.data.url("settings.js")], |
||
221 | position: button,
|
||
222 | //width: 400,
|
||
223 | height: 700, |
||
224 | onHide: handleHide
|
||
225 | }); |
||
226 | |||
227 | |||
228 | |||
229 | |||
230 | |||
231 | /*
|
||
232 | * Send all blickbrowsersettings to the settings panel on request
|
||
233 | */
|
||
234 | panel.port.on('getAllSettings', function() { |
||
235 | emitAllPrefs(panel.port); |
||
236 | //panel.port.emit('blickBrowserSettings', settings.prefs);
|
||
237 | }); |
||
238 | |||
239 | /*
|
||
240 | * Settings have changed from inside the settings panel - adjust them globally
|
||
241 | */
|
||
242 | panel.port.on("writeSettings", function(settings) { |
||
243 | writeSettings(settings); |
||
244 | }); |
||
245 | |||
246 | /*
|
||
247 | * Eyetracker calibration has been toggled from settings panel
|
||
248 | * send request to eyetracker
|
||
249 | */
|
||
250 | panel.port.on("toggleCalibrate", function(value) { |
||
251 | if (settings.prefs.eyeTracker == "eyetribe") { |
||
252 | activeWorker.port.emit('startCalibration', 'go'); |
||
253 | } |
||
254 | }); |
||
255 | |||
256 | /*
|
||
257 | * Calibration check is being called from settings panel - hide the panel and tell the pagemod
|
||
258 | */
|
||
259 | panel.port.on("toggleCheckCalibration", function(value) { |
||
260 | if (settings.prefs.eyeTracker == "eyetribe") { |
||
261 | /*tabs.activeTab.reload();*/
|
||
262 | panel.hide(); |
||
263 | //handleChange();
|
||
264 | activeWorker.port.emit('checkCalibration', 'go'); |
||
265 | |||
266 | } |
||
267 | }); |
||
268 | |||
269 | /*
|
||
270 | * Emit blickbrowsersettings to the panel
|
||
271 | */
|
||
272 | panel.port.emit('loadSettings', 'go'); |
||
273 | |||
274 | |||
275 | /*
|
||
276 | * Is called when the button's state has changed (is it checked or not)
|
||
277 | */
|
||
278 | function handleChange(state) { |
||
279 | if (state.checked) {
|
||
280 | panel.port.emit('loadSettings', 'go'); |
||
281 | panel.show(); |
||
282 | } |
||
283 | } |
||
284 | |||
285 | /*
|
||
286 | * update settings and send them to the active tab
|
||
287 | * @set: The settings array (e.g. blickBrowserSettings)
|
||
288 | */
|
||
289 | function writeSettings(set) { |
||
290 | //console.log("writeSettings()");
|
||
291 | for (var name in set) { |
||
292 | settings.prefs[name] = set [name]; |
||
293 | } |
||
294 | emitAllPrefs(activeWorker.port); |
||
295 | } |
||
296 | |||
297 | /*
|
||
298 | * Update the panel settings button's state when settings panel is being hidden
|
||
299 | */
|
||
300 | function handleHide() { |
||
301 | button.state('window', {
|
||
302 | checked: false |
||
303 | }); |
||
304 | } |
||
305 | |||
306 | /*
|
||
307 | * send all settings to the given port
|
||
308 | * @port: The port the settings are sent to (e.g. )
|
||
309 | */
|
||
310 | function emitAllPrefs(port) { |
||
311 | port.emit("blickBrowserSettings", settings.prefs);
|
||
312 | } |