An easy-to-use platform for EEG experimentation in the classroom
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Rebased with makebrainwaves/master

authored by

jdpigeon and committed by
Teon L Brooks
d43ac6e1 90938b01

+37 -75
+4
app/components/HomeComponent/index.tsx
··· 40 40 import EEGExplorationComponent from '../EEGExplorationComponent'; 41 41 import { SignalQualityData } from '../../constants/interfaces'; 42 42 import { getExperimentFromType } from '../../utils/labjs/functions'; 43 + import { languagePluginLoader } from '../../utils/pyodide/pyodide'; 43 44 44 45 const { dialog } = remote; 46 + 47 + // this initiates pyodide 48 + languagePluginLoader; 45 49 46 50 const HOME_STEPS = { 47 51 // TODO: maybe change the recent and new labels, but not necessary right now
+30 -72
app/utils/pyodide/pyodide.js
··· 6 6 // This is filled in by the Makefile to be either a local file or the 7 7 // deployed location. TODO: This should be done in a less hacky 8 8 // way. 9 - var baseURL = self.languagePluginUrl || 'https://iodide.io/pyodide-demo/'; 9 + var baseURL = 'http://localhost:1212/src/'; 10 + // var baseURL = self.languagePluginUrl || 'https://iodide.io/pyodide-demo/'; 10 11 baseURL = baseURL.substr(0, baseURL.lastIndexOf('/')) + '/'; 11 12 12 13 //////////////////////////////////////////////////////////// ··· 47 48 let dirs; 48 49 try { 49 50 dirs = FS.readdir(rootpath); 50 - } catch { 51 + } catch (err) { 51 52 return; 52 53 } 53 54 for (let entry of dirs) { ··· 87 88 try { 88 89 self.importScripts(url); 89 90 onload(); 90 - } catch { 91 + } catch (err) { 91 92 onerror(); 92 93 } 93 94 } ··· 102 103 while (queue.length) { 103 104 let package_uri = queue.pop(); 104 105 105 - const package = _uri_to_package_name(package_uri); 106 + const packageName = _uri_to_package_name(package_uri); 106 107 107 - if (package == null) { 108 + if (packageName == null) { 108 109 console.error(`Invalid package name or URI '${package_uri}'`); 109 110 return; 110 - } else if (package == package_uri) { 111 + } else if (packageName == package_uri) { 111 112 package_uri = 'default channel'; 112 113 } 113 114 114 - if (package in loadedPackages) { 115 - if (package_uri != loadedPackages[package]) { 115 + if (packageName in loadedPackages) { 116 + if (package_uri != loadedPackages[packageName]) { 116 117 console.error(`URI mismatch, attempting to load package ` + 117 - `${package} from ${package_uri} while it is already ` + 118 - `loaded from ${loadedPackages[package]}!`); 118 + `${packageName} from ${package_uri} while it is already ` + 119 + `loaded from ${loadedPackages[packageName]}!`); 119 120 return; 120 121 } 121 - } else if (package in toLoad) { 122 - if (package_uri != toLoad[package]) { 122 + } else if (packageName in toLoad) { 123 + if (package_uri != toLoad[packageName]) { 123 124 console.error(`URI mismatch, attempting to load package ` + 124 - `${package} from ${package_uri} while it is already ` + 125 - `being loaded from ${toLoad[package]}!`); 125 + `${packageName} from ${package_uri} while it is already ` + 126 + `being loaded from ${toLoad[packageName]}!`); 126 127 return; 127 128 } 128 129 } else { 129 - console.log(`Loading ${package} from ${package_uri}`); 130 + console.log(`Loading ${packageName} from ${package_uri}`); 130 131 131 - toLoad[package] = package_uri; 132 - if (packages.hasOwnProperty(package)) { 133 - packages[package].forEach((subpackage) => { 132 + toLoad[packageName] = package_uri; 133 + if (packages.hasOwnProperty(packageName)) { 134 + packages[packageName].forEach((subpackage) => { 134 135 if (!(subpackage in loadedPackages) && !(subpackage in toLoad)) { 135 136 queue.push(subpackage); 136 137 } 137 138 }); 138 139 } else { 139 - console.error(`Unknown package '${package}'`); 140 + console.error(`Unknown package '${packageName}'`); 140 141 } 141 142 } 142 143 } 143 144 144 145 self.pyodide._module.locateFile = (path) => { 145 146 // handle packages loaded from custom URLs 146 - let package = path.replace(/\.data$/, ""); 147 - if (package in toLoad) { 148 - let package_uri = toLoad[package]; 147 + let packageName = path.replace(/\.data$/, ""); 148 + if (packageName in toLoad) { 149 + let package_uri = toLoad[packageName]; 149 150 if (package_uri != 'default channel') { 150 151 return package_uri.replace(/\.js$/, ".data"); 151 152 }; ··· 172 173 self.pyodide._module.monitorRunDependencies = () => { 173 174 packageCounter--; 174 175 if (packageCounter === 0) { 175 - for (let package in toLoad) { 176 - self.pyodide.loadedPackages[package] = toLoad[package]; 176 + for (let packageName in toLoad) { 177 + self.pyodide.loadedPackages[packageName] = toLoad[packageName]; 177 178 } 178 179 delete self.pyodide._module.monitorRunDependencies; 179 180 self.removeEventListener('error', windowErrorHandler); ··· 196 197 }; 197 198 self.addEventListener('error', windowErrorHandler); 198 199 199 - for (let package in toLoad) { 200 + for (let packageName in toLoad) { 200 201 let scriptSrc; 201 - let package_uri = toLoad[package]; 202 + let package_uri = toLoad[packageName]; 202 203 if (package_uri == 'default channel') { 203 - scriptSrc = `${baseURL}${package}.js`; 204 + scriptSrc = `${baseURL}${packageName}.js`; 204 205 } else { 205 206 scriptSrc = `${package_uri}`; 206 207 } ··· 209 210 // (so packageCounter will still hit 0 and finish loading), and remove 210 211 // the package from toLoad so we don't mark it as loaded. 211 212 console.error(`Couldn't load package from URL ${scriptSrc}`) 212 - let index = toLoad.indexOf(package); 213 + let index = toLoad.indexOf(packageName); 213 214 if (index !== -1) { 214 215 toLoad.splice(index, 1); 215 216 } ··· 357 358 self.pyodide.loadPackage = loadPackage; 358 359 }, () => {}); 359 360 }, () => {}); 360 - 361 - //////////////////////////////////////////////////////////// 362 - // Iodide-specific functionality, that doesn't make sense 363 - // if not using with Iodide. 364 - if (self.iodide !== undefined) { 365 - // Load the custom CSS for Pyodide 366 - let link = document.createElement('link'); 367 - link.rel = 'stylesheet'; 368 - link.type = 'text/css'; 369 - link.href = `${baseURL}renderedhtml.css`; 370 - document.getElementsByTagName('head')[0].appendChild(link); 371 - 372 - // Add a custom output handler for Python objects 373 - self.iodide.addOutputRenderer({ 374 - shouldRender : (val) => { 375 - return (typeof val === 'function' && 376 - pyodide._module.PyProxy.isPyProxy(val)); 377 - }, 378 - 379 - render : (val) => { 380 - let div = document.createElement('div'); 381 - div.className = 'rendered_html'; 382 - var element; 383 - if (val._repr_html_ !== undefined) { 384 - let result = val._repr_html_(); 385 - if (typeof result === 'string') { 386 - div.appendChild(new DOMParser() 387 - .parseFromString(result, 'text/html') 388 - .body.firstChild); 389 - element = div; 390 - } else { 391 - element = result; 392 - } 393 - } else { 394 - let pre = document.createElement('pre'); 395 - pre.textContent = val.toString(); 396 - div.appendChild(pre); 397 - element = div; 398 - } 399 - return element.outerHTML; 400 - } 401 - }); 402 - } 403 361 }); 404 - languagePluginLoader 362 + // languagePluginLoader
+3 -3
configs/webpack.config.renderer.dev.babel.js
··· 246 246 inline: true, 247 247 lazy: false, 248 248 hot: true, 249 - headers: { 'Access-Control-Allow-Origin': '*' }, 250 - contentBase: path.join(__dirname, 'dist'), 249 + headers: { "Access-Control-Allow-Origin": "*" }, 250 + contentBase: [path.join(__dirname, "app", "dist"), path.join(__dirname, "app", "utils", "pyodide")], 251 251 watchOptions: { 252 252 aggregateTimeout: 300, 253 253 ignored: /node_modules/, ··· 257 257 verbose: true, 258 258 disableDotRule: false, 259 259 }, 260 - before() { 260 + before(app) { 261 261 if (process.env.START_HOT) { 262 262 console.log('Starting Main Process...'); 263 263 spawn('npm', ['run', 'start-main-dev'], {