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 09:56:50 UTC
[isis] branch master updated: ISIS-3112: support for Prism theme selection through value semantics
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 d438b82956 ISIS-3112: support for Prism theme selection through value semantics
d438b82956 is described below
commit d438b8295690d5b46e3a6ea26ddd15eb93e6a885
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Aug 5 11:56:44 2022 +0200
ISIS-3112: support for Prism theme selection through value semantics
---
.../isis/applib/value/semantics/Renderer.java | 2 +
.../ChangesDtoValueSemanticsPrettyRender.java | 2 +-
.../CommandDtoValueSemanticsPrettyRender.java | 2 +-
.../InteractionDtoValueSemanticsPrettyRender.java | 2 +-
.../isis/viewer/commons/prism/PrismLanguage.java | 3 +-
.../components/scalars/markup/MarkupComponent.java | 58 +---------------------
.../scalars/markup/_HighlightBehavior.java | 56 +++++++++++++++++++++
.../scalars/markup/_HighlightBehaviorPrism.java | 58 ++++++++++++++++++++++
.../viewer/wicket/ui/util/PrismResourcesWkt.java | 24 ++++-----
9 files changed, 135 insertions(+), 72 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/Renderer.java b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/Renderer.java
index f147fd2a96..f3b57b3a0a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/Renderer.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/Renderer.java
@@ -37,6 +37,8 @@ public interface Renderer<T> {
public static enum SyntaxHighlighter {
NONE,
+ /** <i>Prism<> with 'default' theme */
+ PRISM_DEFAULT,
/** <i>Prism<> with 'coy' theme */
PRISM_COY;
}
diff --git a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/ChangesDtoValueSemanticsPrettyRender.java b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/ChangesDtoValueSemanticsPrettyRender.java
index 67414e5a5c..1036134a6a 100644
--- a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/ChangesDtoValueSemanticsPrettyRender.java
+++ b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/ChangesDtoValueSemanticsPrettyRender.java
@@ -47,7 +47,7 @@ extends ChangesDtoValueSemantics {
@Override
public SyntaxHighlighter syntaxHighlighter() {
- return SyntaxHighlighter.PRISM_COY;
+ return SyntaxHighlighter.PRISM_DEFAULT;
}
diff --git a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/CommandDtoValueSemanticsPrettyRender.java b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/CommandDtoValueSemanticsPrettyRender.java
index 675cf4986d..a5d1ca2023 100644
--- a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/CommandDtoValueSemanticsPrettyRender.java
+++ b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/CommandDtoValueSemanticsPrettyRender.java
@@ -46,7 +46,7 @@ extends CommandDtoValueSemantics {
@Override
public SyntaxHighlighter syntaxHighlighter() {
- return SyntaxHighlighter.PRISM_COY;
+ return SyntaxHighlighter.PRISM_DEFAULT;
}
diff --git a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/InteractionDtoValueSemanticsPrettyRender.java b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/InteractionDtoValueSemanticsPrettyRender.java
index 84fb76c954..d769ff692c 100644
--- a/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/InteractionDtoValueSemanticsPrettyRender.java
+++ b/valuetypes/asciidoc/metamodel/src/main/java/org/apache/isis/valuetypes/asciidoc/metamodel/semantics/InteractionDtoValueSemanticsPrettyRender.java
@@ -46,7 +46,7 @@ extends InteractionDtoValueSemantics {
@Override
public SyntaxHighlighter syntaxHighlighter() {
- return SyntaxHighlighter.PRISM_COY;
+ return SyntaxHighlighter.PRISM_DEFAULT;
}
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 88e49f68f0..1755968944 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
@@ -44,7 +44,8 @@ public enum PrismLanguage {
}
public static List<PrismLanguage> mostCommon() {
- //order matters, eg. JAVADOCLIKE must come before JAVADOC
+ //XXX order matters, eg. JAVADOCLIKE must come before JAVADOC
+ //XXX future extensions might want to make that a config option
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 11c8507152..bd014c14fa 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
@@ -19,28 +19,21 @@
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.request.resource.ResourceReference;
-import org.springframework.lang.Nullable;
import org.apache.isis.applib.value.semantics.Renderer.SyntaxHighlighter;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
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.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;
@@ -50,53 +43,6 @@ public class MarkupComponent extends WebComponent {
private static final long serialVersionUID = 1L;
- /**
- * Maps {@link SyntaxHighlighter} to behavior.
- */
- private static enum HighlightBehavior {
- 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());
- }
- };
-
- public static HighlightBehavior valueOf(final @Nullable SyntaxHighlighter syntaxHighlighter) {
- if(syntaxHighlighter==null) {
- return NONE;
- }
- switch(syntaxHighlighter) {
- case PRISM_COY:
- return HighlightBehavior.PRISM;
- case NONE:
- return HighlightBehavior.NONE;
- default:
- throw _Exceptions.unmatchedCase(syntaxHighlighter);
- }
- }
- abstract void renderHead(IHeaderResponse response);
- abstract CharSequence htmlContentPostProcess(CharSequence htmlContent);
- private static final List<ResourceReference> prismJsRefs() {
- return PrismResourcesWkt.getJsResourceReferencesWkt();
- }
- }
-
@Value @Builder
public static class Options implements Serializable {
private static final long serialVersionUID = 1L;
@@ -108,8 +54,8 @@ public class MarkupComponent extends WebComponent {
return Options.builder().build();
}
- public HighlightBehavior highlightBehavior() {
- return HighlightBehavior.valueOf(getSyntaxHighlighter());
+ private _HighlightBehavior highlightBehavior() {
+ return _HighlightBehavior.valueOf(getSyntaxHighlighter());
}
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/_HighlightBehavior.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/_HighlightBehavior.java
new file mode 100644
index 0000000000..128f30c505
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/_HighlightBehavior.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.wicket.ui.components.scalars.markup;
+
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.springframework.lang.Nullable;
+
+import org.apache.isis.applib.value.semantics.Renderer.SyntaxHighlighter;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.viewer.commons.prism.Prism;
+
+interface _HighlightBehavior {
+
+ void renderHead(final IHeaderResponse response);
+ CharSequence htmlContentPostProcess(final CharSequence htmlContent);
+
+ public static _HighlightBehavior NONE = new _HighlightBehavior() {
+ @Override public void renderHead(final IHeaderResponse response) { }
+ @Override public CharSequence htmlContentPostProcess(final CharSequence htmlContent) {
+ return htmlContent;
+ }
+ };
+
+ public static _HighlightBehavior valueOf(final @Nullable SyntaxHighlighter syntaxHighlighter) {
+ if(syntaxHighlighter==null) {
+ return NONE;
+ }
+ switch(syntaxHighlighter) {
+ case PRISM_DEFAULT:
+ return new _HighlightBehaviorPrism(Prism.DEFAULT);
+ case PRISM_COY:
+ return new _HighlightBehaviorPrism(Prism.COY);
+ case NONE:
+ return NONE;
+ default:
+ throw _Exceptions.unmatchedCase(syntaxHighlighter);
+ }
+ }
+
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/_HighlightBehaviorPrism.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/_HighlightBehaviorPrism.java
new file mode 100644
index 0000000000..514ec76df1
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/_HighlightBehaviorPrism.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.wicket.ui.components.scalars.markup;
+
+import java.util.List;
+
+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.request.resource.ResourceReference;
+
+import org.apache.isis.viewer.commons.prism.Prism;
+import org.apache.isis.viewer.wicket.ui.util.PrismResourcesWkt;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+class _HighlightBehaviorPrism implements _HighlightBehavior {
+
+ private final Prism theme;
+
+ @Getter(lazy = true) private final ResourceReference cssResourceReference =
+ PrismResourcesWkt.cssResource(theme);
+
+ @Getter(lazy = true) private final List<ResourceReference> jsResourceReferences =
+ PrismResourcesWkt.jsResources(theme);
+
+ @Override
+ public void renderHead(final IHeaderResponse response) {
+ response.render(CssHeaderItem.forReference(getCssResourceReference()));
+ for(ResourceReference jsRef : getJsResourceReferences()) {
+ response.render(JavaScriptHeaderItem.forReference(jsRef));
+ }
+ }
+
+ @Override
+ public CharSequence htmlContentPostProcess(final CharSequence htmlContent) {
+ return MarkupComponent_reloadJs.decorate(htmlContent, getJsResourceReferences());
+ }
+
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/PrismResourcesWkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/PrismResourcesWkt.java
index b2c922dafd..0b05d4b575 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/PrismResourcesWkt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/PrismResourcesWkt.java
@@ -22,37 +22,37 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
+import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.isis.viewer.commons.prism.Prism;
import org.apache.isis.viewer.commons.prism.PrismLanguage;
+import lombok.experimental.UtilityClass;
+
import de.agilecoders.wicket.webjars.request.resource.WebjarsCssResourceReference;
import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
-import lombok.Getter;
-import lombok.experimental.UtilityClass;
@UtilityClass
public final class PrismResourcesWkt{
- @Getter(lazy = true) private static final ResourceReference cssResourceReferenceWkt =
- new WebjarsCssResourceReference(Prism.COY.cssFile());
-
- @Getter(lazy = true) private static final List<ResourceReference> jsResourceReferencesWkt =
- assembleJsResources();
-
- // -- HELPER
+ /**
+ * Returns the main Prism CSS resource for selected theme
+ */
+ public CssResourceReference cssResource(final Prism theme) {
+ return new WebjarsCssResourceReference(theme.cssFile());
+ }
/**
- * Returns the main Prism JS resource with theme 'coy' + most common languages
+ * Returns the main Prism JS resources for selected theme + most common languages
*/
- private List<ResourceReference> assembleJsResources() {
+ public List<ResourceReference> jsResources(final Prism theme) {
final List<ResourceReference> resources = PrismLanguage.mostCommon().stream()
.map(PrismLanguage::jsFile)
.map(WebjarsJavaScriptResourceReference::new)
.collect(Collectors.toCollection(ArrayList::new));
- resources.add(0, new WebjarsJavaScriptResourceReference(Prism.COY.jsFile()));
+ resources.add(0, new WebjarsJavaScriptResourceReference(theme.jsFile()));
return resources;
}