This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 47c775844a ISIS-3122: adds support for vega-lite
47c775844a is described below

commit 47c775844a54aef0e47920c69bed74e76acebcf9
Author: andi-huber <[email protected]>
AuthorDate: Sat Oct 1 05:58:00 2022 +0200

    ISIS-3122: adds support for vega-lite
---
 .../isis/valuetypes/vega/applib/value/Vega.java    |  3 ++
 .../metamodel/semantics/VegaValueSemantics.java    | 20 +++++++----
 .../vega/ui/wkt/components/VegaComponentWkt.java   | 41 +++++++++++++++++++++-
 ...aJsReference.java => VegaEmbedJsReference.java} | 21 ++++-------
 .../vega/ui/wkt/components/js/VegaJsReference.java |  8 ++---
 ...gaJsReference.java => VegaLiteJsReference.java} | 21 ++++-------
 .../vega/ui/wkt/components/js/[email protected] | 22 ++++++++++++
 .../vega/ui/wkt/components/js/[email protected]   |  2 ++
 .../components/js/{vega.min.js => [email protected]}  |  0
 9 files changed, 97 insertions(+), 41 deletions(-)

diff --git 
a/valuetypes/vega/applib/src/main/java/org/apache/isis/valuetypes/vega/applib/value/Vega.java
 
b/valuetypes/vega/applib/src/main/java/org/apache/isis/valuetypes/vega/applib/value/Vega.java
index b2d67183e4..7a042d2d99 100644
--- 
a/valuetypes/vega/applib/src/main/java/org/apache/isis/valuetypes/vega/applib/value/Vega.java
+++ 
b/valuetypes/vega/applib/src/main/java/org/apache/isis/valuetypes/vega/applib/value/Vega.java
@@ -59,6 +59,9 @@ public final class Vega implements Serializable {
         VEGA("https://vega.github.io/schema/vega/v5.json";),
         VEGA_LITE("https://vega.github.io/schema/vega-lite/v5.json";);
 
+        public boolean isNone() {return this==NONE;}
+        public boolean isVega() {return this==VEGA;}
+        public boolean isVegaLite() {return this==VEGA_LITE;}
         public static String key() { return "$schema"; }
         @Getter @Accessors(fluent = true) private final String value;
         @NonNull String asEmptyJson() {
diff --git 
a/valuetypes/vega/metamodel/src/main/java/org/apache/isis/valuetypes/vega/metamodel/semantics/VegaValueSemantics.java
 
b/valuetypes/vega/metamodel/src/main/java/org/apache/isis/valuetypes/vega/metamodel/semantics/VegaValueSemantics.java
index cb0a1a27e4..da48dae7ff 100644
--- 
a/valuetypes/vega/metamodel/src/main/java/org/apache/isis/valuetypes/vega/metamodel/semantics/VegaValueSemantics.java
+++ 
b/valuetypes/vega/metamodel/src/main/java/org/apache/isis/valuetypes/vega/metamodel/semantics/VegaValueSemantics.java
@@ -89,7 +89,8 @@ implements
     }
 
     /**
-     * see usage examples at https://vega.github.io/vega/usage/
+     * see usage examples at <a 
href="https://vega.github.io/vega/usage/";>vega</a>
+     * and <a 
href="https://vega.github.io/vega-lite/usage/embed.html";>vega-lite</a>
      */
     private String asHtml(final @NonNull Vega vega) {
         val containerId = "vegaContainer" + UUID.randomUUID().toString();
@@ -102,9 +103,9 @@ implements
                     + "document.addEventListener('DOMContentLoaded', (event) 
=> {\n"
                     + "  var spec = %2$s;\n"
                     + "  var view = new vega.View(vega.parse(spec), {\n"
-                    + "    renderer:  '%3$s',\n"
+                    + "    renderer: '%3$s',\n"
                     + "    container: '#%1$s',\n"
-                    + "    hover:     %4$b    \n"
+                    + "    hover: %4$b\n"
                     + "  });\n"
                     + "  view.runAsync();\n"
                     + "});"
@@ -118,12 +119,19 @@ implements
         }
         case VEGA_LITE: {
             val htmlFragment = String.format(""
-                    + "<div id=\"%1$s\">VEGA-LITE TODO</div>\n",
-                    containerId);
+                    + "<div id=\"%1$s\"></div>\n"
+                    + "<script type=\"text/javascript\">\n"
+                    + "document.addEventListener('DOMContentLoaded', (event) 
=> {\n"
+                    + "  var spec = %2$s;\n"
+                    + "  vegaEmbed('#%1$s', spec);"
+                    + "});"
+                    + "</script>",
+                    containerId,
+                    vega.getJson());
             return htmlFragment;
         }
         default:
-            return "<!-- emtpy Vega (unsupported schema) -->";
+            return "<!-- empty Vega (unsupported schema) -->";
         }
     }
 
diff --git 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaComponentWkt.java
 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaComponentWkt.java
index 4388d35a25..837dae8799 100644
--- 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaComponentWkt.java
+++ 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/VegaComponentWkt.java
@@ -18,13 +18,25 @@
  */
 package org.apache.isis.valuetypes.vega.ui.wkt.components;
 
+import java.util.Optional;
+
 import org.apache.wicket.markup.head.IHeaderResponse;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.applib.value.semantics.Renderer.SyntaxHighlighter;
+import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.core.metamodel.object.ManagedObject;
+import org.apache.isis.core.metamodel.object.MmUnwrapUtil;
+import org.apache.isis.valuetypes.vega.applib.value.Vega;
+import 
org.apache.isis.valuetypes.vega.ui.wkt.components.js.VegaEmbedJsReference;
 import org.apache.isis.valuetypes.vega.ui.wkt.components.js.VegaJsReference;
+import 
org.apache.isis.valuetypes.vega.ui.wkt.components.js.VegaLiteJsReference;
 import 
org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent;
 
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
 public class VegaComponentWkt extends MarkupComponent {
 
     private static final long serialVersionUID = 1L;
@@ -39,7 +51,34 @@ public class VegaComponentWkt extends MarkupComponent {
     @Override
     public void renderHead(final IHeaderResponse response) {
         super.renderHead(response);
-        response.render(VegaJsReference.asHeaderItem());
+
+        vegaSchema()
+        .ifPresent(vegaSchema->{
+            if(vegaSchema.isVega()) {
+                response.render(VegaJsReference.asHeaderItem());
+            }
+            else
+            if(vegaSchema.isVegaLite()) {
+                response.render(VegaJsReference.asHeaderItem());
+                response.render(VegaLiteJsReference.asHeaderItem());
+                response.render(VegaEmbedJsReference.asHeaderItem());
+            }
+        });
+    }
+
+    // -- HELPER
+
+    private Optional<Vega.Schema> vegaSchema() {
+        val modelObject = getDefaultModelObject();
+        if(modelObject==null) {
+            return Optional.empty();
+        }
+        if(!(modelObject instanceof ManagedObject)) {
+            log.error("framework bug: unexpected type {}", 
modelObject.getClass().getName());
+            return Optional.empty();
+        }
+        return _Casts.castTo(Vega.class, 
MmUnwrapUtil.single((ManagedObject)modelObject))
+                .map(Vega::getSchema);
     }
 
 }
diff --git 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaEmbedJsReference.java
similarity index 72%
copy from 
valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
copy to 
valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaEmbedJsReference.java
index 57e6ec9b74..968613af11 100644
--- 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
+++ 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaEmbedJsReference.java
@@ -26,31 +26,24 @@ import lombok.Getter;
 import lombok.experimental.Accessors;
 
 /**
- * Provides a local copy of https://vega.github.io/vega/vega.min.js
- * <p>
- * Unfortunately the webjar {@code org.webjars.npm:vega:5.22.1} cannot be used,
- * as (at time of writing) <i>Maven</i> fails to resolve all its dependencies.
+ * Provides a local copy of {@linkplain 
https://cdn.jsdelivr.net/npm/[email protected]}
  * <p>
  * LICENSE <a 
href="https://vega.github.io/vega/vega/blob/main/LICENSE";>BSD-3-Clause 
license</a>
  * @since 2.0
  */
-public class VegaJsReference
+public class VegaEmbedJsReference
 extends JavaScriptResourceReference {
     private static final long serialVersionUID = 1L;
 
     @Getter(lazy = true) @Accessors(fluent = true)
-    private static final VegaJsReference instance =
-        new VegaJsReference();
+    private static final VegaEmbedJsReference instance =
+        new VegaEmbedJsReference();
 
     public static JavaScriptHeaderItem asHeaderItem() {
-        return 
JavaScriptReferenceHeaderItem.forReference(VegaJsReference.instance());
+        return 
JavaScriptReferenceHeaderItem.forReference(VegaEmbedJsReference.instance());
     }
 
-    /**
-     * Private constructor.
-     */
-    private VegaJsReference() {
-        super(VegaJsReference.class, "vega.min.js");
+    private VegaEmbedJsReference() {
+        super(VegaEmbedJsReference.class, "[email protected]");
     }
-
 }
diff --git 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
index 57e6ec9b74..daee8bdae5 100644
--- 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
+++ 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
@@ -26,7 +26,7 @@ import lombok.Getter;
 import lombok.experimental.Accessors;
 
 /**
- * Provides a local copy of https://vega.github.io/vega/vega.min.js
+ * Provides a local copy of {@linkplain 
https://cdn.jsdelivr.net/npm/[email protected]}
  * <p>
  * Unfortunately the webjar {@code org.webjars.npm:vega:5.22.1} cannot be used,
  * as (at time of writing) <i>Maven</i> fails to resolve all its dependencies.
@@ -46,11 +46,7 @@ extends JavaScriptResourceReference {
         return 
JavaScriptReferenceHeaderItem.forReference(VegaJsReference.instance());
     }
 
-    /**
-     * Private constructor.
-     */
     private VegaJsReference() {
-        super(VegaJsReference.class, "vega.min.js");
+        super(VegaJsReference.class, "[email protected]");
     }
-
 }
diff --git 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaLiteJsReference.java
similarity index 72%
copy from 
valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
copy to 
valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaLiteJsReference.java
index 57e6ec9b74..d59120ec9b 100644
--- 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaJsReference.java
+++ 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/VegaLiteJsReference.java
@@ -26,31 +26,24 @@ import lombok.Getter;
 import lombok.experimental.Accessors;
 
 /**
- * Provides a local copy of https://vega.github.io/vega/vega.min.js
- * <p>
- * Unfortunately the webjar {@code org.webjars.npm:vega:5.22.1} cannot be used,
- * as (at time of writing) <i>Maven</i> fails to resolve all its dependencies.
+ * Provides a local copy of {@linkplain 
https://cdn.jsdelivr.net/npm/[email protected]}
  * <p>
  * LICENSE <a 
href="https://vega.github.io/vega/vega/blob/main/LICENSE";>BSD-3-Clause 
license</a>
  * @since 2.0
  */
-public class VegaJsReference
+public class VegaLiteJsReference
 extends JavaScriptResourceReference {
     private static final long serialVersionUID = 1L;
 
     @Getter(lazy = true) @Accessors(fluent = true)
-    private static final VegaJsReference instance =
-        new VegaJsReference();
+    private static final VegaLiteJsReference instance =
+        new VegaLiteJsReference();
 
     public static JavaScriptHeaderItem asHeaderItem() {
-        return 
JavaScriptReferenceHeaderItem.forReference(VegaJsReference.instance());
+        return 
JavaScriptReferenceHeaderItem.forReference(VegaLiteJsReference.instance());
     }
 
-    /**
-     * Private constructor.
-     */
-    private VegaJsReference() {
-        super(VegaJsReference.class, "vega.min.js");
+    private VegaLiteJsReference() {
+        super(VegaLiteJsReference.class, "[email protected]");
     }
-
 }
diff --git 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/[email protected]
 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/[email protected]
new file mode 100644
index 0000000000..a40955608f
--- /dev/null
+++ 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/[email protected]
@@ -0,0 +1,22 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof 
module?module.exports=t(require("vega"),require("vega-lite")):"function"==typeof
 define&&define.amd?define(["vega","vega-lite"],t):(e="undefined"!=typeof 
globalThis?globalThis:e||self).vegaEmbed=t(e.vega,e.vegaLite)}(this,(function(e,t){"use
 strict";function n(e){if(e&&e.__esModule)return e;var 
t=Object.create(null);return 
e&&Object.keys(e).forEach((function(n){if("default"!==n){var 
o=Object.getOwnPropertyDescriptor(e,n);Object [...]
+/*!
+     * https://github.com/Starcounter-Jack/JSON-Patch
+     * (c) 2017-2021 Joachim Wester
+     * MIT license
+     */function D(e,t){void 0===t&&(t=!1);var 
n=T.get(e.object);C(n.value,e.object,e.patches,"",t),e.patches.length&&A(n.value,e.patches);var
 o=e.patches;return 
o.length>0&&(e.patches=[],e.callback&&e.callback(o)),o}function 
C(e,t,n,o,r){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var 
i=l(t),a=l(e),s=!1,p=a.length-1;p>=0;p--){var d=e[g=a[p]];if(!c(t,g)||void 
0===t[g]&&void 
0!==d&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(r&&n.push({op:"test",path:o+"/"+u(g)
 [...]
+/*! 
*****************************************************************************
+    Copyright (c) Microsoft Corporation.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 
WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, 
DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 
OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+    
***************************************************************************** */
+function(e,t){var n={};for(var o in 
e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof
 Object.getOwnPropertySymbols){var 
r=0;for(o=Object.getOwnPropertySymbols(e);r<o.length;r++)t.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(e,o[r])&&(n[o[r]]=e[o[r]])}return
 n}(r,["title","image"]);i&&(o+="<h2>".concat(t(i),"</h2>")),a&&(o+='<img 
src="'.concat(t(a),'">'));const 
c=Object.keys(s);if(c.length>0){o+="<table>";for(const e of  [...]
+//# sourceMappingURL=vega-embed.min.js.map
diff --git 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/[email protected]
 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/[email protected]
new file mode 100644
index 0000000000..09bd86c619
--- /dev/null
+++ 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/[email protected]
@@ -0,0 +1,2 @@
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof 
module?t(exports,require("vega")):"function"==typeof 
define&&define.amd?define(["exports","vega"],t):t((e="undefined"!=typeof 
globalThis?globalThis:e||self).vegaLite={},e.vega)}(this,(function(e,t){"use 
strict";var 
n="5.2.0";Array.prototype.flat||Object.defineProperty(Array.prototype,"flat",{configurable:!0,value:function
 e(){var t=isNaN(arguments[0])?1:Number(arguments[0]);return 
t?Array.prototype.reduce.call(this,(function(n, [...]
+//# sourceMappingURL=vega-lite.min.js.map
diff --git 
a/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/vega.min.js
 
b/valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/[email protected]
similarity index 100%
rename from 
valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/vega.min.js
rename to 
valuetypes/vega/ui/wicket/src/main/java/org/apache/isis/valuetypes/vega/ui/wkt/components/js/[email protected]

Reply via email to