You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/08/05 08:01:45 UTC

[isis] branch master updated: ISIS-3112: fixes Prism JS load order

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 80c58f2a67 ISIS-3112: fixes Prism JS load order
80c58f2a67 is described below

commit 80c58f2a67403faa383e4a4edb7cac7c6d6d0543
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Aug 5 10:01:39 2022 +0200

    ISIS-3112: fixes Prism JS load order
---
 .../demoapp/dom/domain/_changes/ChangesVm.java     | 34 ++++------
 .../wicket/markup/ListeningMarkupComponent.java    |  4 +-
 .../ui/wkt/components/AsciiDocComponentWkt.java    | 50 ++------------
 .../ui/wkt/components/MarkdownComponentWkt.java    | 47 +------------
 .../wkt/components/MarkdownPanelFactoriesWkt.java  |  2 +-
 .../isis/viewer/commons/prism/PrismLanguage.java   |  5 +-
 .../components/scalars/markup/MarkupComponent.java | 76 +++++++++++++++++++---
 .../wicket/ui/errors/ExceptionStackTracePanel.java |  6 +-
 .../org/apache/isis/viewer/wicket/ui/util/Wkt.java |  3 +-
 9 files changed, 95 insertions(+), 132 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/_changes/ChangesVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/_changes/ChangesVm.java
index a4c2c92af0..3d5fdf1b24 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/_changes/ChangesVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/_changes/ChangesVm.java
@@ -19,43 +19,28 @@
 package demoapp.dom.domain._changes;
 
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
 
 import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-import org.apache.isis.applib.annotation.Action;
-import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.Collection;
-import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.MemberSupport;
+import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.ValueSemantics;
 import org.apache.isis.applib.jaxb.JavaTimeXMLGregorianCalendarMarshalling;
-import org.apache.isis.applib.jaxb.JavaUtilJaxbAdapters;
-import org.apache.isis.applib.util.JaxbUtil;
-import org.apache.isis.applib.util.schema.ChangesDtoUtils;
 import org.apache.isis.schema.chg.v2.ChangesDto;
-import org.apache.isis.schema.common.v2.OidsDto;
 
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
-import lombok.val;
-
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain.actions.Action.associateWith.child.ActionAssociateWithChildVm;
 
 @XmlRootElement(name = "root")
 @XmlType
@@ -65,21 +50,24 @@ import demoapp.dom.domain.actions.Action.associateWith.child.ActionAssociateWith
     nature=Nature.VIEW_MODEL
 )
 @NoArgsConstructor
+@AllArgsConstructor
 public class ChangesVm {
 
+    @ObjectSupport
     public String title() {
         int numCreated = changesDto.getObjects().getCreated().getOid().size();
         int numUpdated = changesDto.getObjects().getUpdated().getOid().size();
         int numDeleted = changesDto.getObjects().getDeleted().getOid().size();
-        LocalDateTime completedAt = JavaTimeXMLGregorianCalendarMarshalling.toLocalDateTime(changesDto.getCompletedAt());
-        return String.format("%s: %d created, %d updated, %d deleted", completedAt, numCreated, numUpdated, numDeleted);
+        LocalDateTime completedAt = JavaTimeXMLGregorianCalendarMarshalling
+                .toLocalDateTime(changesDto.getCompletedAt());
+        return String.format("%s: %d created, %d updated, %d deleted",
+                completedAt, numCreated, numUpdated, numDeleted);
     }
 
+    @Property(editing = Editing.DISABLED)
+    @PropertyLayout(fieldSetName = "ChangesDto", labelPosition = LabelPosition.NONE)
     @ValueSemantics(provider = "pretty-render")
     @Getter @Setter
     private ChangesDto changesDto;
 
-    public ChangesVm(ChangesDto dto) {
-        this.changesDto = dto;
-    }
 }
diff --git a/extensions/vw/sse/wicket/src/main/java/org/apache/isis/extensions/sse/wicket/markup/ListeningMarkupComponent.java b/extensions/vw/sse/wicket/src/main/java/org/apache/isis/extensions/sse/wicket/markup/ListeningMarkupComponent.java
index acad3ccd5b..b206256c43 100644
--- a/extensions/vw/sse/wicket/src/main/java/org/apache/isis/extensions/sse/wicket/markup/ListeningMarkupComponent.java
+++ b/extensions/vw/sse/wicket/src/main/java/org/apache/isis/extensions/sse/wicket/markup/ListeningMarkupComponent.java
@@ -43,14 +43,14 @@ public class ListeningMarkupComponent extends MarkupComponent {
             final String id,
             final ScalarModel model,
             final LocalResourcePath observing){
-        super(id, model);
+        super(id, model, Options.defaults());
         this.observing = observing;
     }
 
     public ListeningMarkupComponent(
             final String id,
             final ValueModel model){
-        super(id, model);
+        super(id, model, Options.defaults());
         this.observing = null;
     }
 
diff --git a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocComponentWkt.java b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocComponentWkt.java
index b2b78e69cf..508a5b88df 100644
--- a/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocComponentWkt.java
+++ b/valuetypes/asciidoc/ui/wicket/src/main/java/org/apache/isis/valuetypes/asciidoc/ui/wkt/components/AsciiDocComponentWkt.java
@@ -18,59 +18,19 @@
  */
 package org.apache.isis.valuetypes.asciidoc.ui.wkt.components;
 
-import java.util.List;
-
-import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.MarkupStream;
-import org.apache.wicket.markup.head.CssHeaderItem;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.request.resource.ResourceReference;
 
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent;
-import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent_reloadJs;
-import org.apache.isis.viewer.wicket.ui.util.PrismResourcesWkt;
-
-import lombok.val;
 
 public class AsciiDocComponentWkt extends MarkupComponent {
 
     private static final long serialVersionUID = 1L;
 
-    public AsciiDocComponentWkt(final String id, final ScalarModel model){
-        super(id, model);
-    }
-
-    public AsciiDocComponentWkt(final String id, final ValueModel model){
-        super(id, model);
+    public AsciiDocComponentWkt(final String id, final IModel<?> model){
+        super(id, model,
+                Options.builder()
+                .syntaxHighLighter(SyntaxHighLighter.PRISM)
+                .build());
     }
 
-    public AsciiDocComponentWkt(final String id, final IModel<String> model){
-        super(id, model);
-    }
-
-    @Override
-    public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) {
-        val htmlContent = extractHtmlOrElse(getDefaultModelObject(), "" /*fallback*/);
-        replaceComponentTagBody(markupStream, openTag,
-                MarkupComponent_reloadJs.decorate(htmlContent, jsRefs()));
-    }
-
-    @Override
-    public void renderHead(final IHeaderResponse response) {
-        super.renderHead(response);
-        response.render(CssHeaderItem.forReference(PrismResourcesWkt.getCssResourceReferenceWkt()));
-        for(ResourceReference jsRef : jsRefs()) {
-            response.render(JavaScriptHeaderItem.forReference(jsRef));
-        }
-    }
-
-    private static final List<ResourceReference> jsRefs() {
-        return PrismResourcesWkt.getJsResourceReferencesWkt();
-    }
-
-
 }
diff --git a/valuetypes/markdown/ui/wicket/src/main/java/org/apache/isis/valuetypes/markdown/ui/wkt/components/MarkdownComponentWkt.java b/valuetypes/markdown/ui/wicket/src/main/java/org/apache/isis/valuetypes/markdown/ui/wkt/components/MarkdownComponentWkt.java
index 3f376d4e59..7fe70548d1 100644
--- a/valuetypes/markdown/ui/wicket/src/main/java/org/apache/isis/valuetypes/markdown/ui/wkt/components/MarkdownComponentWkt.java
+++ b/valuetypes/markdown/ui/wicket/src/main/java/org/apache/isis/valuetypes/markdown/ui/wkt/components/MarkdownComponentWkt.java
@@ -18,59 +18,16 @@
  */
 package org.apache.isis.valuetypes.markdown.ui.wkt.components;
 
-import java.util.List;
-
-import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.MarkupStream;
-import org.apache.wicket.markup.head.CssHeaderItem;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.request.resource.ResourceReference;
 
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent;
-import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent_reloadJs;
-import org.apache.isis.viewer.wicket.ui.util.PrismResourcesWkt;
-
-import lombok.val;
 
 public class MarkdownComponentWkt extends MarkupComponent {
 
     private static final long serialVersionUID = 1L;
 
-    public MarkdownComponentWkt(final String id, final ScalarModel model){
-        super(id, model);
-    }
-
-    public MarkdownComponentWkt(final String id, final ValueModel model){
-        super(id, model);
-    }
-
-    public MarkdownComponentWkt(final String id, final IModel<String> model){
-        super(id, model);
-    }
-
-
-    @Override
-    public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag) {
-        val htmlContent = extractHtmlOrElse(getDefaultModelObject(), "" /*fallback*/);
-        replaceComponentTagBody(markupStream, openTag,
-                MarkupComponent_reloadJs.decorate(htmlContent, jsRefs()));
-    }
-
-    @Override
-    public void renderHead(final IHeaderResponse response) {
-        super.renderHead(response);
-        response.render(CssHeaderItem.forReference(PrismResourcesWkt.getCssResourceReferenceWkt()));
-        for(ResourceReference jsRef : jsRefs()) {
-            response.render(JavaScriptHeaderItem.forReference(jsRef));
-        }
-    }
-
-    private static final List<ResourceReference> jsRefs() {
-        return PrismResourcesWkt.getJsResourceReferencesWkt();
+    public MarkdownComponentWkt(final String id, final IModel<?> model){
+        super(id, model, Options.defaults());
     }
 
 }
diff --git a/valuetypes/markdown/ui/wicket/src/main/java/org/apache/isis/valuetypes/markdown/ui/wkt/components/MarkdownPanelFactoriesWkt.java b/valuetypes/markdown/ui/wicket/src/main/java/org/apache/isis/valuetypes/markdown/ui/wkt/components/MarkdownPanelFactoriesWkt.java
index fa2d043dc0..57dcfe78b2 100644
--- a/valuetypes/markdown/ui/wicket/src/main/java/org/apache/isis/valuetypes/markdown/ui/wkt/components/MarkdownPanelFactoriesWkt.java
+++ b/valuetypes/markdown/ui/wicket/src/main/java/org/apache/isis/valuetypes/markdown/ui/wkt/components/MarkdownPanelFactoriesWkt.java
@@ -67,7 +67,7 @@ public class MarkdownPanelFactoriesWkt {
 
         @Override
         protected MarkupComponent newMarkupComponent(final String id, final ValueModel model) {
-            return new MarkupComponent(id, model);
+            return new MarkdownComponentWkt(id, model);
         }
 
     }
diff --git a/viewers/commons/prism/src/main/java/org/apache/isis/viewer/commons/prism/PrismLanguage.java b/viewers/commons/prism/src/main/java/org/apache/isis/viewer/commons/prism/PrismLanguage.java
index 8521dc4b54..88e49f68f0 100644
--- a/viewers/commons/prism/src/main/java/org/apache/isis/viewer/commons/prism/PrismLanguage.java
+++ b/viewers/commons/prism/src/main/java/org/apache/isis/viewer/commons/prism/PrismLanguage.java
@@ -31,10 +31,12 @@ public enum PrismLanguage {
     JAVA("java"),
     JAVASCRIPT("javascript"),
     ASCIIDOC("asciidoc"),
-    JAVADOC("javadoc"),
     JAVADOCLIKE("javadoclike"),
+    JAVADOC("javadoc"),
     JSON("json"),
     PROPERTIES("properties"),
+    XML_DOC("xml-doc"),
+    YAML("yaml"),
     ;
     final String languageSuffix;
     public String jsFile() {
@@ -42,6 +44,7 @@ public enum PrismLanguage {
     }
 
     public static List<PrismLanguage> mostCommon() {
+        //order matters, eg. JAVADOCLIKE must come before JAVADOC
         return Arrays.asList(PrismLanguage.values());
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
index a46175b942..3b9af3b8f7 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
@@ -18,48 +18,104 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.scalars.markup;
 
+import java.io.Serializable;
+import java.util.List;
 import java.util.Optional;
 
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.MarkupStream;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
 import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.parser.XmlTag.TagType;
 import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.ResourceReference;
 
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
 import org.apache.isis.viewer.commons.model.feature.ParameterUiModel;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarPropertyModel;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
+import org.apache.isis.viewer.wicket.ui.util.PrismResourcesWkt;
 
+import lombok.Builder;
+import lombok.Value;
 import lombok.val;
 
 public class MarkupComponent extends WebComponent {
 
     private static final long serialVersionUID = 1L;
 
-    public MarkupComponent(final String id, final ScalarModel model){
-        super(id, model);
+    public static enum SyntaxHighLighter {
+        NONE {
+            @Override
+            void renderHead(final IHeaderResponse response) {
+            }
+            @Override
+            CharSequence htmlContentPostProcess(final CharSequence htmlContent) {
+                return htmlContent;
+            }
+        },
+        PRISM {
+            @Override
+            void renderHead(final IHeaderResponse response) {
+                response.render(CssHeaderItem.forReference(PrismResourcesWkt.getCssResourceReferenceWkt()));
+                for(ResourceReference jsRef : prismJsRefs()) {
+                    response.render(JavaScriptHeaderItem.forReference(jsRef));
+                }
+            }
+            @Override
+            CharSequence htmlContentPostProcess(final CharSequence htmlContent) {
+                return MarkupComponent_reloadJs.decorate(htmlContent, prismJsRefs());
+            }
+        };
+        abstract void renderHead(IHeaderResponse response);
+        abstract CharSequence htmlContentPostProcess(CharSequence htmlContent);
+        private static final List<ResourceReference> prismJsRefs() {
+            return PrismResourcesWkt.getJsResourceReferencesWkt();
+        }
     }
 
-    public MarkupComponent(final String id, final ValueModel model){
-        super(id, model);
+    @Value @Builder
+    public static class Options implements Serializable {
+        private static final long serialVersionUID = 1L;
+
+        @Builder.Default
+        private SyntaxHighLighter syntaxHighLighter = SyntaxHighLighter.NONE;
+
+        public static Options defaults() {
+            return Options.builder().build();
+        }
     }
 
-    public MarkupComponent(final String id, final IModel<String> model){
+    // -- CONSTRUCTION
+
+    private final Options options;
+
+    protected MarkupComponent(final String id, final IModel<?> model, final Options options) {
         super(id, model);
+        this.options = options;
+    }
+
+    public MarkupComponent(final String id, final IModel<?> model) {
+        this(id, model, Options.defaults());
     }
 
-    public MarkupComponent(final String id, final String html){
-        super(id, Model.of(html));
+    // --
+
+    @Override
+    public final void renderHead(final IHeaderResponse response) {
+        super.renderHead(response);
+        options.getSyntaxHighLighter().renderHead(response);
     }
 
+
     @Override
     public void onComponentTagBody(final MarkupStream markupStream, final ComponentTag openTag){
         val htmlContent = extractHtmlOrElse(getDefaultModelObject(), "" /*fallback*/);
-        replaceComponentTagBody(markupStream, openTag, htmlContent);
+        replaceComponentTagBody(markupStream, openTag,
+                options.getSyntaxHighLighter().htmlContentPostProcess(htmlContent));
     }
 
     @Override
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
index d31fcde73e..98335c4a06 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
@@ -37,14 +37,12 @@ import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.isis.applib.services.error.Ticket;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.PageType;
-import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent;
 import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModelProvider;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
-import org.apache.isis.viewer.wicket.ui.pages.home.HomePage;
+import org.apache.isis.viewer.wicket.ui.util.Wkt;
 import org.apache.isis.viewer.wicket.ui.util.WktComponents;
 import org.apache.isis.viewer.wicket.ui.util.WktLinks;
-import org.apache.isis.viewer.wicket.ui.util.Wkt;
 
 public class ExceptionStackTracePanel extends Panel {
 
@@ -98,7 +96,7 @@ public class ExceptionStackTracePanel extends Panel {
                 if(ticketMarkup == null) {
                     WktComponents.permanentlyHide(this, ID_TICKET_MARKUP);
                 } else {
-                    add(new MarkupComponent(ID_TICKET_MARKUP, Model.of(ticket.getMarkup())));
+                    Wkt.markupAdd(this, ID_TICKET_MARKUP, ticket.getMarkup());
                 }
 
                 final boolean suppressExceptionDetail =
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
index f25e6168ed..ff1753a1cd 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
@@ -63,6 +63,7 @@ import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.OddEvenItem;
 import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.CssResourceReference;
 import org.apache.wicket.request.resource.IResource;
@@ -823,7 +824,7 @@ public class Wkt {
     }
 
     public MarkupComponent markup(final String id, final String html) {
-        return new MarkupComponent(id, html);
+        return markup(id, Model.of(html));
     }
 
     public MarkupComponent markupAdd(final MarkupContainer container, final String id, final String html) {