From 8cec739ce5d1311150bd8d2554f7efab8c9194d2 Mon Sep 17 00:00:00 2001 From: "Ahmad K. Bawaneh" Date: Sat, 13 Aug 2022 01:45:53 +0300 Subject: [PATCH 1/6] Update DeepHavenJsApiLinker to allow exporting GWT JsTypes as ES6 module --- .../deephaven/web/DeephavenJsApiLinker.java | 45 ++++++++++++------- .../web/DeephavenJsApiLinkerTemplate.js | 31 +++++++++++++ .../java/io/deephaven/web/public/console.html | 7 +-- .../java/io/deephaven/web/public/format.html | 6 +-- .../java/io/deephaven/web/public/freeze.html | 8 ++-- .../java/io/deephaven/web/public/index.html | 1 - .../io/deephaven/web/public/input_table.html | 10 +++-- .../io/deephaven/web/public/linked/child.html | 18 ++++---- .../io/deephaven/web/public/linked/index.html | 15 ++++--- .../web/public/persistentquery_figures.html | 17 +++---- .../java/io/deephaven/web/public/rollup.html | 4 +- .../java/io/deephaven/web/public/search.html | 22 ++++----- .../java/io/deephaven/web/public/simple.html | 7 +-- .../io/deephaven/web/public/snapshot.html | 19 ++++---- .../io/deephaven/web/public/table_basic.html | 7 +-- .../io/deephaven/web/public/table_batch.html | 27 +++++------ .../deephaven/web/public/table_columns.html | 20 ++++----- .../io/deephaven/web/public/table_filter.html | 17 +++---- .../io/deephaven/web/public/table_sort.html | 13 +++--- .../web/public/table_subscription.html | 19 ++++---- .../deephaven/web/public/table_viewport.html | 9 ++-- .../io/deephaven/web/public/tablemap.html | 18 ++++---- .../deephaven/web/public/totals_tables.html | 8 ++-- .../java/io/deephaven/web/public/treegrid.js | 12 ++--- .../io/deephaven/web/public/treetable.html | 16 ++++--- 25 files changed, 219 insertions(+), 157 deletions(-) create mode 100644 web/client-api/src/main/java/io/deephaven/web/DeephavenJsApiLinkerTemplate.js diff --git a/web/client-api/src/main/java/io/deephaven/web/DeephavenJsApiLinker.java b/web/client-api/src/main/java/io/deephaven/web/DeephavenJsApiLinker.java index 501ffc28ab4..7383b210a49 100644 --- a/web/client-api/src/main/java/io/deephaven/web/DeephavenJsApiLinker.java +++ b/web/client-api/src/main/java/io/deephaven/web/DeephavenJsApiLinker.java @@ -9,7 +9,9 @@ import com.google.gwt.core.ext.linker.*; import com.google.gwt.dev.About; import com.google.gwt.dev.util.DefaultTextOutput; +import com.google.gwt.util.tools.Utility; +import java.io.IOException; import java.util.Set; /** @@ -35,8 +37,6 @@ public ArtifactSet link(TreeLogger logger, LinkerContext context, ArtifactSet ar ArtifactSet toReturn = new ArtifactSet(artifacts); DefaultTextOutput out = new DefaultTextOutput(true); - out.print("(function(){"); - out.newline(); // get compilation result Set results = artifacts.find(CompilationResult.class); @@ -54,23 +54,38 @@ public ArtifactSet link(TreeLogger logger, LinkerContext context, ArtifactSet ar // get the generated javascript String[] javaScript = result.getJavaScript(); - out.print("self.dh = {}"); - out.newline(); - out.print("var $wnd = self, $doc, $entry, $moduleName, $moduleBase;"); - out.newline(); - out.print("var $gwt_version = \"" + About.getGwtVersionNum() + "\";"); - out.newlineOpt(); - out.print(javaScript[0]); - out.newline(); - out.print("gwtOnLoad(null,'" + context.getModuleName() + "',null);"); - out.newline(); - out.print("})();"); - out.newline(); + StringBuffer buffer = readFileToStringBuffer(getSelectionScriptTemplate(), logger); + replaceAll(buffer, "__GWT_VERSION__", About.getGwtVersionNum()); + replaceAll(buffer, "__JAVASCRIPT_RESULT__", javaScript[0]); + replaceAll(buffer, "__MODULE_NAME__", context.getModuleName()); + + out.print(buffer.toString()); toReturn.add(emitString(logger, out.toString(), "dh-core.js")); return toReturn; } - + protected StringBuffer readFileToStringBuffer(String filename, + TreeLogger logger) throws UnableToCompleteException { + StringBuffer buffer; + try { + buffer = new StringBuffer(Utility.getFileFromClassPath(filename)); + } catch (IOException e) { + logger.log(TreeLogger.ERROR, "Unable to read file: " + filename, e); + throw new UnableToCompleteException(); + } + return buffer; + } + protected String getSelectionScriptTemplate(){ + return "io/deephaven/web/DeephavenJsApiLinkerTemplate.js"; + } + protected static void replaceAll(StringBuffer buf, String search, + String replace) { + int len = search.length(); + for (int pos = buf.indexOf(search); pos >= 0; pos = buf.indexOf(search, + pos + 1)) { + buf.replace(pos, pos + len, replace); + } + } } diff --git a/web/client-api/src/main/java/io/deephaven/web/DeephavenJsApiLinkerTemplate.js b/web/client-api/src/main/java/io/deephaven/web/DeephavenJsApiLinkerTemplate.js new file mode 100644 index 00000000000..721f777781a --- /dev/null +++ b/web/client-api/src/main/java/io/deephaven/web/DeephavenJsApiLinkerTemplate.js @@ -0,0 +1,31 @@ +function bindTo(target, source) { + var descriptors = Object.getOwnPropertyDescriptors(source); + for (var key in descriptors) { + if (!(key[0].toUpperCase() === key[0])) { + var descriptor = descriptors[key]; + if (typeof (descriptor.value) === 'function') { + descriptor.value = descriptor.value.bind(source) + } else if (typeof (descriptor.get) === 'function') { + descriptor.get = descriptor.get.bind(source); + } + } + } + Object.defineProperties(target, descriptors); +} + +var Scope = function () { +}; +Scope.prototype = self; +var $doc, $entry, $moduleName, $moduleBase; +var $wnd = new Scope(); +bindTo($wnd, self); + +var dh = {} +$wnd.dh = dh; + +var $gwt_version = "__GWT_VERSION__"; + +__JAVASCRIPT_RESULT__ + +gwtOnLoad(null, '__MODULE_NAME__', null); +export {dh}; diff --git a/web/client-api/src/main/java/io/deephaven/web/public/console.html b/web/client-api/src/main/java/io/deephaven/web/public/console.html index 5b5a3d5dfe3..b964a67a84e 100644 --- a/web/client-api/src/main/java/io/deephaven/web/public/console.html +++ b/web/client-api/src/main/java/io/deephaven/web/public/console.html @@ -5,20 +5,21 @@ Deephaven JS API Console Interaction -
- - - -
- - -
diff --git a/web/client-api/src/main/java/io/deephaven/web/public/format.html b/web/client-api/src/main/java/io/deephaven/web/public/format.html index ed8e4b2d511..db738557e3f 100644 --- a/web/client-api/src/main/java/io/deephaven/web/public/format.html +++ b/web/client-api/src/main/java/io/deephaven/web/public/format.html @@ -3,7 +3,6 @@ Deephaven Web API Formatting examples -