diff --git a/wicket-core-tests/src/test/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehaviorTest.java b/wicket-core-tests/src/test/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehaviorTest.java
index 77de9af69c6..782ff1186dc 100644
--- a/wicket-core-tests/src/test/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehaviorTest.java
+++ b/wicket-core-tests/src/test/java/org/apache/wicket/behavior/OutputMarkupContainerClassNameBehaviorTest.java
@@ -21,15 +21,16 @@
import org.apache.wicket.MockPanelWithLink;
import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.settings.DebugSettings;
import org.apache.wicket.util.tester.WicketTestCase;
import org.junit.jupiter.api.Test;
class OutputMarkupContainerClassNameBehaviorTest extends WicketTestCase {
@Test
- void whenDebugIsEnabled_thenRenderAttribute()
+ void whenDebugIsEnabledWithAttribute_thenRenderAttribute()
{
- tester.getApplication().getDebugSettings().setOutputMarkupContainerClassName(true);
+ tester.getApplication().getDebugSettings().setOutputMarkupContainerClassNameStrategy(DebugSettings.ClassOutputStrategy.TAG_ATTRIBUTE);
MockPanelWithLink component = new MockPanelWithLink("test") {
@Override
@@ -43,9 +44,25 @@ protected void onLinkClick(AjaxRequestTarget target) {
}
@Test
- void whenDebugIsDisabled_thenDontRenderAttribute()
+ void whenDebugIsEnabledWithComment_thenRenderComment()
{
- tester.getApplication().getDebugSettings().setOutputMarkupContainerClassName(false);
+ tester.getApplication().getDebugSettings().setOutputMarkupContainerClassNameStrategy(DebugSettings.ClassOutputStrategy.HTML_COMMENT);
+
+ MockPanelWithLink component = new MockPanelWithLink("test") {
+ @Override
+ protected void onLinkClick(AjaxRequestTarget target) {
+
+ }
+ };
+ tester.startComponentInPage(component);
+
+ assertTrue(tester.getLastResponseAsString().contains(""));
+ }
+
+ @Test
+ void whenDebugIsDisabled_thenDontRenderAttributeOrComment()
+ {
+ tester.getApplication().getDebugSettings().setOutputMarkupContainerClassNameStrategy(DebugSettings.ClassOutputStrategy.NONE);
MockPanelWithLink component = new MockPanelWithLink("test") {
@Override
@@ -56,5 +73,6 @@ protected void onLinkClick(AjaxRequestTarget target) {
tester.startComponentInPage(component);
assertFalse(tester.getLastResponseAsString().contains("
It is used internally by Wicket when {@link DebugSettings#isOutputMarkupContainerClassName()} is active.
+ *It is used internally by Wicket when {@link org.apache.wicket.settings.DebugSettings.ClassOutputStrategy#TAG_ATTRIBUTE} is active.
* - * @see DebugSettings#setOutputMarkupContainerClassName(boolean) + * @see DebugSettings#setOutputMarkupContainerClassNameStrategy(DebugSettings.ClassOutputStrategy) */ public class OutputMarkupContainerClassNameBehavior extends Behavior { diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/DebugSettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/DebugSettings.java index 92d393ea3a1..8d2883fca11 100644 --- a/wicket-core/src/main/java/org/apache/wicket/settings/DebugSettings.java +++ b/wicket-core/src/main/java/org/apache/wicket/settings/DebugSettings.java @@ -16,6 +16,8 @@ */ package org.apache.wicket.settings; +import org.apache.wicket.util.lang.Args; + /** * Settings class for various debug settings *@@ -54,7 +56,7 @@ public class DebugSettings /** * Whether the container's class name should be printed to response (in a html comment). */ - private boolean outputMarkupContainerClassName = false; + private ClassOutputStrategy outputMarkupContainerClassNameStrategy = ClassOutputStrategy.NONE; private String componentPathAttributeName = null; @@ -104,14 +106,26 @@ public boolean isLinePreciseReportingOnNewComponentEnabled() } /** - * Returns whether the output of markup container's should be wrapped by comments containing the - * container's class name. + * Returns whether the output of markup container's should contain the + * container's Java class name. * - * @return true if the markup container's class name should be written to response + * @return true if the markup container's Java class name should be written to response + * @deprecated use {@link #getOutputMarkupContainerClassNameStrategy()} instead */ + @Deprecated(forRemoval = true) public boolean isOutputMarkupContainerClassName() { - return outputMarkupContainerClassName; + return outputMarkupContainerClassNameStrategy != ClassOutputStrategy.NONE; + } + + /** + * Returns the strategy for outputting the Java class name of a markup container + * + * @return the strategy for outputting the Java class name of a markup container + */ + public ClassOutputStrategy getOutputMarkupContainerClassNameStrategy() + { + return outputMarkupContainerClassNameStrategy; } /** @@ -173,13 +187,39 @@ public DebugSettings setLinePreciseReportingOnNewComponentEnabled(boolean enable * * @param enable * @return {@code this} object for chaining + * @deprecated use {@link #setOutputMarkupContainerClassNameStrategy(ClassOutputStrategy)} instead */ + @Deprecated(forRemoval = true) public DebugSettings setOutputMarkupContainerClassName(boolean enable) { - outputMarkupContainerClassName = enable; + outputMarkupContainerClassNameStrategy = enable ? ClassOutputStrategy.HTML_COMMENT : ClassOutputStrategy.NONE; + return this; + } + + /** + * Sets the strategy for outputting the Java class name of a markup container in the HTML output. + * + * @param strategy + * @return {@code this} object for chaining + */ + public DebugSettings setOutputMarkupContainerClassNameStrategy(ClassOutputStrategy strategy) + { + outputMarkupContainerClassNameStrategy = Args.notNull(strategy, "strategy"); return this; } + /** + * Sets the strategy for outputting the Java class name of a markup container in the HTML output. + * + * @param strategyName the enum name of the {@link ClassOutputStrategy} to use + * @return {@code this} object for chaining + */ + public DebugSettings setOutputMarkupContainerClassNameStrategy(String strategyName) + { + final ClassOutputStrategy strategy = Enum.valueOf(ClassOutputStrategy.class, strategyName); + return setOutputMarkupContainerClassNameStrategy(strategy); + } + /** * If the parameter value is non-empty then Wicket will use it as the name of an attribute of the * component tag to print the {@link org.apache.wicket.Component}'s path. @@ -233,4 +273,23 @@ public boolean isDevelopmentUtilitiesEnabled() { return developmentUtilitiesEnabled; } + + /** + * Strategy for outputting the Java class name of a markup container + */ + public enum ClassOutputStrategy + { + /** + * Output the container's class name in an HTML comment + */ + HTML_COMMENT, + /** + * Output the container's class name in a tag attribute + */ + TAG_ATTRIBUTE, + /** + * Do not output the container's class name + */ + NONE + } } diff --git a/wicket-jmx/src/main/java/org/apache/wicket/jmx/DebugSettingsMBean.java b/wicket-jmx/src/main/java/org/apache/wicket/jmx/DebugSettingsMBean.java index 283f5ed6e4e..1374ea21859 100644 --- a/wicket-jmx/src/main/java/org/apache/wicket/jmx/DebugSettingsMBean.java +++ b/wicket-jmx/src/main/java/org/apache/wicket/jmx/DebugSettingsMBean.java @@ -72,14 +72,22 @@ public interface DebugSettingsMBean * class name. (Useful for determining which part of page belongs to which markup file). * * @param enable + * @deprecated use {@link #setOutputMarkupContainerClassNameStrategy(String)} instead */ void setOutputMarkupContainerClassName(boolean enable); /** - * Returns whether the output of markup container's should be wrapped by comments containing the - * container's class name. + * Sets the strategy for outputting the Java class name of a markup container in the HTML output. + * (Useful for determining which part of page belongs to which markup file). + * + * @param strategyName the enum name of the class output strategy to use + */ + void setOutputMarkupContainerClassNameStrategy(String strategyName); + + /** + * Returns whether the markup container's Java class name should be written to the response. * - * @return true if the markup container's class name should be written to response + * @return true if the markup container's Java class name should be written to response */ boolean isOutputMarkupContainerClassName(); diff --git a/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/DebugSettings.java b/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/DebugSettings.java index f4cdea5139f..e30c5611264 100644 --- a/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/DebugSettings.java +++ b/wicket-jmx/src/main/java/org/apache/wicket/jmx/wrapper/DebugSettings.java @@ -86,6 +86,12 @@ public void setOutputMarkupContainerClassName(final boolean enable) application.getDebugSettings().setOutputMarkupContainerClassName(enable); } + @Override + public void setOutputMarkupContainerClassNameStrategy(final String strategyName) { + application.getDebugSettings().setOutputMarkupContainerClassNameStrategy(strategyName); + + } + @Override public boolean isOutputMarkupContainerClassName() {