Commit 88f427e1 authored by Boxiang Sun's avatar Boxiang Sun

Amend the code to meet the JSLint requirement

parent 1a47bd9e
...@@ -2,61 +2,60 @@ ...@@ -2,61 +2,60 @@
/*jslint nomen: true, indent: 2, maxerr: 3 */ /*jslint nomen: true, indent: 2, maxerr: 3 */
(function (window) { (function (window) {
"use strict"; "use strict";
function sideEffectDiv(sideEffectClass, reportSideEffect) { function sideEffectDiv(sideEffectClass, reportSideEffect) {
// appends a side effect div to the side effect area // appends a side effect div to the side effect area
var div = document.createElement("div"); var div = document.createElement("div");
div.setAttribute("class", sideEffectClass); div.setAttribute("class", sideEffectClass);
if (reportSideEffect === false) { if (reportSideEffect === undefined) {
div.setAttribute("style", "display:"); div.setAttribute("style", "display:");
} }
document.body.appendChild(div); document.body.appendChild(div);
return div; return div;
} }
var IODide = function createIODide() { var IODide = function createIODide() {
var iodide = { var iodide = {
addOutputHandler: function (renderer) {
// TODO: seems this function was deprecated...
},
output: { output: {
text: (s, reportSideEffect = false) => { text: function (s, reportSideEffect) {
var i, div, line_list;
console.log("Inside output.text"); console.log("Inside output.text");
console.log(s); console.log(s);
for (const line of s.toString().split("\n")) { line_list = s.toString().split("\n");
const div = sideEffectDiv("side-effect-print", reportSideEffect); for (i = 0; i < line_list.length; i += 1) {
div.innerText = line; div = sideEffectDiv("side-effect-print", reportSideEffect);
div.innerText = line_list[i];
} }
}, },
element: (nodeType, reportSideEffect = true) => { element: function (nodeType, reportSideEffect) {
console.log("Inside output.element"); var div, node;
const div = sideEffectDiv("side-effect-element", reportSideEffect); div = sideEffectDiv("side-effect-element", reportSideEffect);
const node = document.createElement(nodeType); node = document.createElement(nodeType);
div.append(node); div.append(node);
console.log(node);
return node; return node;
} }
} }
}; };
return iodide; return iodide;
}, },
JSMDCell = function createJSMDCell(type, line_list) { JSMDCell = function createJSMDCell(type, line_list) {
this._type = type; this._type = type;
this._line_list = line_list; this._line_list = line_list;
}, },
split_line_regex = /[\r\n|\n|\r]/, split_line_regex = /[\r\n|\n|\r]/,
cell_type_regexp = /^\%\% (\w+)\b/, cell_type_regexp = /^\%\% (\w+)\b/,
language_type_regexp = /\{[\S\s]+\}/, language_type_regexp = /\{[\S\s]+\}/,
is_pyodide_loaded = false, is_pyodide_loaded = false,
Module = {}, Module = {},
packages, packages,
loadedPackages = new Array(), loadedPackages = [],
// Regexp for validating package name and URI // Regexp for validating package name and URI
package_name_regexp = '[a-z0-9_][a-z0-9_\-]*', package_name_regexp = '[a-z0-9_][a-z0-9_\-]*',
package_uri_regexp = new RegExp('^https?://.*?(' + package_name_regexp + ').js$', 'i'); package_uri_regexp = new RegExp('^https?://.*?(' + package_name_regexp + ').js$', 'i');
package_name_regexp = new RegExp('^' + package_name_regexp + '$', 'i'); package_name_regexp = new RegExp('^' + package_name_regexp + '$', 'i');
window.iodide = new IODide(); window.iodide = new IODide();
IODide.prototype.addOutputHandler = function () { IODide.prototype.addOutputHandler = function () {
return; return;
}; };
...@@ -109,79 +108,91 @@ ...@@ -109,79 +108,91 @@
// Generate a unique package name from URI // Generate a unique package name from URI
if (package_name_regexp.test(package_uri)) { if (package_name_regexp.test(package_uri)) {
return package_uri; return package_uri;
} else if (package_uri_regexp.test(package_uri)) { }
let match = package_uri_regexp.exec(package_uri);
if (package_uri_regexp.test(package_uri)) {
var match = package_uri_regexp.exec(package_uri);
// Get the regexp group corresponding to the package name // Get the regexp group corresponding to the package name
return match[1]; return match[1];
} else {
return null;
} }
return null;
} }
function pyodideLoadPackage(names) { function pyodideLoadPackage(names) {
// DFS to find all dependencies of the requested packages // DFS to find all dependencies of the requested packages
let packages = window.pyodide.packages.dependencies; var queue, toLoad, package_uri, package_name, k,
let queue = new Array(names); subpackage, promise, packageList, script;
let toLoad = new Array(); packages = window.pyodide.packages.dependencies;
queue = new Array(names);
toLoad = [];
while (queue.length) { while (queue.length) {
let package_uri = queue.pop(); package_uri = queue.pop();
package_name = _uri_to_package_name(package_uri);
const package_name = _uri_to_package_name(package_uri); if (package_name === null) {
throw new Error("Invalid package name or URI " + package_uri);
}
if (package_name == null) { if (package_name === package_uri) {
throw new Error(`Invalid package name or URI '${package_uri}'`);
} else if (package_name == package_uri) {
package_uri = 'default channel'; package_uri = 'default channel';
} }
console.log(`Loading ${package_name} from ${package_uri}`); console.log("Loading " + package_name + " from " + package_uri);
console.log("Loaded packages");
console.log(loadedPackages);
if (package_name in loadedPackages) { if (package_name in loadedPackages) {
if (package_uri != loadedPackages[package_name]) { if (package_uri !== loadedPackages[package_name]) {
throw new Error( throw new Error(
`URI mismatch, attempting to load package ` + "URI mismatch, attempting to load package " +
`${package_name} from ${package_uri} while it is already ` + package_name + " from " + package_uri + " while it is already " +
`loaded from ${loadedPackages[package_name]}!`); "loaded from " + loadedPackages[package_name] + " ! "
);
} }
} else { } else {
toLoad[package_name] = package_uri; toLoad[package_name] = package_uri;
if (packages.hasOwnProperty(package_name)) { if (packages.hasOwnProperty(package_name)) {
packages[package_name].forEach((subpackage) => { for (k in packages[package_name]) {
subpackage = packages[package_name][k];
if (!(subpackage in loadedPackages) && !(subpackage in toLoad)) { if (!(subpackage in loadedPackages) && !(subpackage in toLoad)) {
queue.push(subpackage); queue.push(subpackage);
} }
}); }
} else { } else {
console.log(`Unknown package '${package_name}'`); console.log("Unknown package " + package_name);
} }
} }
} }
let promise = new Promise((resolve, reject) => { promise = new RSVP.Promise(function (resolve, reject) {
if (Object.keys(toLoad).length === 0) { if (Object.keys(toLoad).length === 0) {
resolve('No new packages to load'); resolve('No new packages to load');
} }
pyodide.monitorRunDependencies = (n) => { pyodide.monitorRunDependencies = function (n) {
if (n === 0) { if (n === 0) {
for (let package_name in toLoad) { for (package_name in toLoad) {
loadedPackages[package_name] = toLoad[package_name]; loadedPackages[package_name] = toLoad[package_name];
} }
delete pyodide.monitorRunDependencies; delete pyodide.monitorRunDependencies;
const packageList = Array.from(Object.keys(toLoad)).join(', '); packageList = Array.from(Object.keys(toLoad)).join(', ');
resolve(`Loaded ${packageList}`); resolve("Loaded " + packageList);
} }
}; };
for (let package_name in toLoad) { function script_reject(e) {
let script = document.createElement('script'); reject(e);
let package_uri = toLoad[package_name]; }
if (package_uri == 'default channel') {
script.src = `${package_name}.js`; for (package_name in toLoad) {
script = document.createElement('script');
package_uri = toLoad[package_name];
if (package_uri === 'default channel') {
script.src = package_name + ".js";
} else { } else {
script.src = `${package_uri}`; script.src = package_uri;
} }
script.onerror = (e) => { reject(e); }; script.onerror = script_reject;
document.body.appendChild(script); document.body.appendChild(script);
} }
...@@ -425,8 +436,6 @@ ...@@ -425,8 +436,6 @@
function executePyCell(line_list) { function executePyCell(line_list) {
var result, code_text = line_list.join('\n'); var result, code_text = line_list.join('\n');
result = pyodide.runPython(code_text); result = pyodide.runPython(code_text);
console.log("Result is");
console.log(result);
renderCodeblock(result); renderCodeblock(result);
} }
...@@ -451,25 +460,25 @@ ...@@ -451,25 +460,25 @@
Module.instantiateWasm = loadPyodide; Module.instantiateWasm = loadPyodide;
window.Module = Module; window.Module = Module;
}) })
.push(function () { .push(function () {
return loadJSResource('pyodide.asm.data.js'); return loadJSResource('pyodide.asm.data.js');
}) })
.push(function () { .push(function () {
return loadJSResource('pyodide.asm.js'); return loadJSResource('pyodide.asm.js');
}) })
.push(function () { .push(function () {
return pyodideSetting(); return pyodideSetting();
}) })
.push(function () { .push(function () {
return fetch(`packages.json`) return fetch('packages.json');
}) })
.push(function (response) { .push(function (response) {
return response.json(); return response.json();
}) })
.push(function (json) { .push(function (json) {
window.pyodide.packages = json; window.pyodide.packages = json;
return; return;
}); });
return queue; return queue;
} }
...@@ -506,9 +515,9 @@ ...@@ -506,9 +515,9 @@
queue.push(function () { queue.push(function () {
return initPyodide(); return initPyodide();
}) })
.push(function () { .push(function () {
return pyodideLoadPackage('matplotlib'); return pyodideLoadPackage('matplotlib');
}); });
is_pyodide_loaded = true; is_pyodide_loaded = true;
} }
queue.push(function () { queue.push(function () {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment