···4040import EEGExplorationComponent from '../EEGExplorationComponent';
4141import { SignalQualityData } from '../../constants/interfaces';
4242import { getExperimentFromType } from '../../utils/labjs/functions';
4343+import { languagePluginLoader } from '../../utils/pyodide/pyodide';
43444445const { dialog } = remote;
4646+4747+// this initiates pyodide
4848+languagePluginLoader;
45494650const HOME_STEPS = {
4751 // TODO: maybe change the recent and new labels, but not necessary right now
+30-72
app/utils/pyodide/pyodide.js
···66 // This is filled in by the Makefile to be either a local file or the
77 // deployed location. TODO: This should be done in a less hacky
88 // way.
99- var baseURL = self.languagePluginUrl || 'https://iodide.io/pyodide-demo/';
99+ var baseURL = 'http://localhost:1212/src/';
1010+ // var baseURL = self.languagePluginUrl || 'https://iodide.io/pyodide-demo/';
1011 baseURL = baseURL.substr(0, baseURL.lastIndexOf('/')) + '/';
11121213 ////////////////////////////////////////////////////////////
···4748 let dirs;
4849 try {
4950 dirs = FS.readdir(rootpath);
5050- } catch {
5151+ } catch (err) {
5152 return;
5253 }
5354 for (let entry of dirs) {
···8788 try {
8889 self.importScripts(url);
8990 onload();
9090- } catch {
9191+ } catch (err) {
9192 onerror();
9293 }
9394 }
···102103 while (queue.length) {
103104 let package_uri = queue.pop();
104105105105- const package = _uri_to_package_name(package_uri);
106106+ const packageName = _uri_to_package_name(package_uri);
106107107107- if (package == null) {
108108+ if (packageName == null) {
108109 console.error(`Invalid package name or URI '${package_uri}'`);
109110 return;
110110- } else if (package == package_uri) {
111111+ } else if (packageName == package_uri) {
111112 package_uri = 'default channel';
112113 }
113114114114- if (package in loadedPackages) {
115115- if (package_uri != loadedPackages[package]) {
115115+ if (packageName in loadedPackages) {
116116+ if (package_uri != loadedPackages[packageName]) {
116117 console.error(`URI mismatch, attempting to load package ` +
117117- `${package} from ${package_uri} while it is already ` +
118118- `loaded from ${loadedPackages[package]}!`);
118118+ `${packageName} from ${package_uri} while it is already ` +
119119+ `loaded from ${loadedPackages[packageName]}!`);
119120 return;
120121 }
121121- } else if (package in toLoad) {
122122- if (package_uri != toLoad[package]) {
122122+ } else if (packageName in toLoad) {
123123+ if (package_uri != toLoad[packageName]) {
123124 console.error(`URI mismatch, attempting to load package ` +
124124- `${package} from ${package_uri} while it is already ` +
125125- `being loaded from ${toLoad[package]}!`);
125125+ `${packageName} from ${package_uri} while it is already ` +
126126+ `being loaded from ${toLoad[packageName]}!`);
126127 return;
127128 }
128129 } else {
129129- console.log(`Loading ${package} from ${package_uri}`);
130130+ console.log(`Loading ${packageName} from ${package_uri}`);
130131131131- toLoad[package] = package_uri;
132132- if (packages.hasOwnProperty(package)) {
133133- packages[package].forEach((subpackage) => {
132132+ toLoad[packageName] = package_uri;
133133+ if (packages.hasOwnProperty(packageName)) {
134134+ packages[packageName].forEach((subpackage) => {
134135 if (!(subpackage in loadedPackages) && !(subpackage in toLoad)) {
135136 queue.push(subpackage);
136137 }
137138 });
138139 } else {
139139- console.error(`Unknown package '${package}'`);
140140+ console.error(`Unknown package '${packageName}'`);
140141 }
141142 }
142143 }
143144144145 self.pyodide._module.locateFile = (path) => {
145146 // handle packages loaded from custom URLs
146146- let package = path.replace(/\.data$/, "");
147147- if (package in toLoad) {
148148- let package_uri = toLoad[package];
147147+ let packageName = path.replace(/\.data$/, "");
148148+ if (packageName in toLoad) {
149149+ let package_uri = toLoad[packageName];
149150 if (package_uri != 'default channel') {
150151 return package_uri.replace(/\.js$/, ".data");
151152 };
···172173 self.pyodide._module.monitorRunDependencies = () => {
173174 packageCounter--;
174175 if (packageCounter === 0) {
175175- for (let package in toLoad) {
176176- self.pyodide.loadedPackages[package] = toLoad[package];
176176+ for (let packageName in toLoad) {
177177+ self.pyodide.loadedPackages[packageName] = toLoad[packageName];
177178 }
178179 delete self.pyodide._module.monitorRunDependencies;
179180 self.removeEventListener('error', windowErrorHandler);
···196197 };
197198 self.addEventListener('error', windowErrorHandler);
198199199199- for (let package in toLoad) {
200200+ for (let packageName in toLoad) {
200201 let scriptSrc;
201201- let package_uri = toLoad[package];
202202+ let package_uri = toLoad[packageName];
202203 if (package_uri == 'default channel') {
203203- scriptSrc = `${baseURL}${package}.js`;
204204+ scriptSrc = `${baseURL}${packageName}.js`;
204205 } else {
205206 scriptSrc = `${package_uri}`;
206207 }
···209210 // (so packageCounter will still hit 0 and finish loading), and remove
210211 // the package from toLoad so we don't mark it as loaded.
211212 console.error(`Couldn't load package from URL ${scriptSrc}`)
212212- let index = toLoad.indexOf(package);
213213+ let index = toLoad.indexOf(packageName);
213214 if (index !== -1) {
214215 toLoad.splice(index, 1);
215216 }
···357358 self.pyodide.loadPackage = loadPackage;
358359 }, () => {});
359360 }, () => {});
360360-361361- ////////////////////////////////////////////////////////////
362362- // Iodide-specific functionality, that doesn't make sense
363363- // if not using with Iodide.
364364- if (self.iodide !== undefined) {
365365- // Load the custom CSS for Pyodide
366366- let link = document.createElement('link');
367367- link.rel = 'stylesheet';
368368- link.type = 'text/css';
369369- link.href = `${baseURL}renderedhtml.css`;
370370- document.getElementsByTagName('head')[0].appendChild(link);
371371-372372- // Add a custom output handler for Python objects
373373- self.iodide.addOutputRenderer({
374374- shouldRender : (val) => {
375375- return (typeof val === 'function' &&
376376- pyodide._module.PyProxy.isPyProxy(val));
377377- },
378378-379379- render : (val) => {
380380- let div = document.createElement('div');
381381- div.className = 'rendered_html';
382382- var element;
383383- if (val._repr_html_ !== undefined) {
384384- let result = val._repr_html_();
385385- if (typeof result === 'string') {
386386- div.appendChild(new DOMParser()
387387- .parseFromString(result, 'text/html')
388388- .body.firstChild);
389389- element = div;
390390- } else {
391391- element = result;
392392- }
393393- } else {
394394- let pre = document.createElement('pre');
395395- pre.textContent = val.toString();
396396- div.appendChild(pre);
397397- element = div;
398398- }
399399- return element.outerHTML;
400400- }
401401- });
402402- }
403361});
404404-languagePluginLoader
362362+// languagePluginLoader