Skip to content

Commit 01686e6

Browse files
committed
Port the load(path); function from Fiji's Javascript interpreter
The 'load(path);' function can be used to store libraries of Javascript code in a central location and reuse them from multiple Javascripts. It was noted by Christophe Leterrier that this support was not yet available in SciJava's Javascript support. The original code was written by yours truly, hence it is easy to relicense it to BSD as required for this project. Signed-off-by: Johannes Schindelin <[email protected]>
1 parent fd11739 commit 01686e6

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/main/java/org/scijava/plugins/scripting/javascript/JavaScriptScriptLanguage.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import java.lang.reflect.InvocationTargetException;
3535

3636
import javax.script.ScriptEngine;
37+
import javax.script.ScriptException;
3738

3839
import org.scijava.log.LogService;
3940
import org.scijava.plugin.Parameter;
@@ -58,6 +59,23 @@ public JavaScriptScriptLanguage() {
5859
super("javascript");
5960
}
6061

62+
@Override
63+
public ScriptEngine getScriptEngine() {
64+
final ScriptEngine engine = super.getScriptEngine();
65+
try {
66+
engine.eval("function load(path) {\n"
67+
+ " importClass(Packages.sun.org.mozilla.javascript.internal.Context);\n"
68+
+ " importClass(Packages.java.io.FileReader);\n"
69+
+ " var cx = Context.getCurrentContext();\n"
70+
+ " cx.evaluateReader(this, new FileReader(path), path, 1, null);\n"
71+
+ "}");
72+
}
73+
catch (ScriptException e) {
74+
e.printStackTrace();
75+
}
76+
return engine;
77+
}
78+
6179
@Override
6280
public Object decode(final Object object) {
6381
// NB: JavaScript objects come out of the engine wrapped as

0 commit comments

Comments
 (0)