Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java?rev=1090127&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureTest.java
 Fri Apr  8 06:08:05 2011
@@ -0,0 +1,75 @@
+/*
+ * 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.wicket.markup.html.internal;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.util.tester.WicketTester;
+
+
+/**
+ * Simple test using the WicketTester
+ * 
+ * @author Joonas Hamalainen
+ */
+public class InlineEnclosureTest extends WicketTestCase
+{
+       /**
+        * @throws Exception
+        */
+       public void testInlineEnclosurePage_1() throws Exception
+       {
+               executeTest(InlineEnclosurePage_1.class, 
"InlineEnclosurePageExpectedResult_1.html");
+       }
+
+       /**
+        * @throws Exception
+        */
+       public void testInlineEnclosurePage_2() throws Exception
+       {
+               executeTest(InlineEnclosurePage_2.class, 
"InlineEnclosurePageExpectedResult_2.html");
+       }
+
+       /**
+        * @throws Exception
+        */
+       public void testInlineEnclosurePanelPage() throws Exception
+       {
+               executeTest(InlineEnclosurePanelPage.class, 
"InlineEnclosurePanelPageExpectedResult.html");
+       }
+
+       @Override
+       protected void setUp() throws Exception
+       {
+               WebApplication app = new WebApplication()
+               {
+                       @Override
+                       public Class<? extends Page> getHomePage()
+                       {
+                               return InlineEnclosurePage_1.class;
+                       }
+
+                       @Override
+                       protected void init()
+                       {
+                               getMarkupSettings().setStripWicketTags(true);
+                       }
+               };
+               tester = new WicketTester(app);
+       }
+}
\ No newline at end of file

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.html?rev=1090127&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.html
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.html
 Fri Apr  8 06:08:05 2011
@@ -0,0 +1,15 @@
+<html xmlns:wicket>
+<body>
+
+<a href="#" wicket:id="toggleLink">Toggle visibility</a>
+
+<div wicket:enclosure="label1">
+       Container 1:
+       The visibility of this text is also toggled.
+       <div wicket:id="label1">Test</div>
+</div>
+
+       <div wicket:id="label2">Test2</div>
+
+</body>
+</html>

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.java?rev=1090127&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/InlineEnclosureWithAdditionalAjaxTargetPage.java
 Fri Apr  8 06:08:05 2011
@@ -0,0 +1,89 @@
+/*
+ * 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.wicket.markup.html.internal;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.basic.Label;
+
+
+/**
+ * Minimal page for testing.
+ * 
+ * @author Joonas Hamalainen
+ * 
+ */
+public class InlineEnclosureWithAdditionalAjaxTargetPage extends WebPage
+{
+       private final Label label1 = new Label("label1", "Test Label 1");
+       private final Label label2 = new Label("label2", "Test Label 2");
+       private final AjaxLink<Void> toggleLink;
+
+       /**
+        * Construct.
+        */
+       @SuppressWarnings("serial")
+       public InlineEnclosureWithAdditionalAjaxTargetPage()
+       {
+
+               toggleLink = new AjaxLink<Void>("toggleLink")
+               {
+                       @Override
+                       public void onClick(AjaxRequestTarget target)
+                       {
+                               label1.setVisible(!label1.isVisible());
+                               target.addComponent(label1);
+                               label2.setVisible(!label2.isVisible());
+                               target.addComponent(label2);
+                       }
+
+               };
+               add(toggleLink);
+               label1.setOutputMarkupId(true);
+               label2.setOutputMarkupId(true);
+               label2.setOutputMarkupPlaceholderTag(true);
+               add(label1);
+               add(label2);
+       }
+
+       /**
+        * @return label1
+        */
+       public Label getLabel1()
+       {
+               return label1;
+       }
+
+       /**
+        * @return label2
+        */
+       public Label getLabel2()
+       {
+               return label2;
+       }
+
+       /**
+        * @return toggle link
+        */
+       public AjaxLink<Void> getLink()
+       {
+               return toggleLink;
+       }
+
+
+}

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.html?rev=1090127&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.html
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.html
 Fri Apr  8 06:08:05 2011
@@ -0,0 +1,10 @@
+<wicket:panel>
+       This is a simple test panel. This contains a label and an inline 
enclosure
+       with a label inside it.
+       <span wicket:id="label1">[some label]</span>
+       
+       <div wicket:enclosure="label2">
+               <span wicket:id="label2">[another label]</span>
+       </div>
+       
+</wicket:panel>
\ No newline at end of file

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.java?rev=1090127&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/SimplePanel2.java
 Fri Apr  8 06:08:05 2011
@@ -0,0 +1,46 @@
+/*
+ * 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.wicket.markup.html.internal;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+
+/**
+ * Just a simple panel for testing purposes.
+ * 
+ * @author Joonas Hamalainen
+ */
+public class SimplePanel2 extends Panel
+{
+
+       private static final long serialVersionUID = 1L;
+
+       /**
+        * simple constructor.
+        * 
+        * @param id
+        */
+       public SimplePanel2(String id)
+       {
+               super(id);
+               add(new Label("label1", new Model<String>("Inside 
InlineEnclosure and Panel: hello world")));
+               add(new Label("label2", new Model<String>(
+                       "Inside InlineEnclosure, Panel and another 
InlineEnclosure: hello again.")));
+       }
+
+}

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTests.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTests.java?rev=1090127&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTests.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TogglePageTests.java
 Fri Apr  8 06:08:05 2011
@@ -0,0 +1,226 @@
+/*
+ * 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.wicket.markup.html.internal;
+
+import java.util.regex.Pattern;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.html.basic.Label;
+
+
+/**
+ * Simple test using the WicketTester
+ */
+public class TogglePageTests extends WicketTestCase
+{
+
+
+       /**
+        * 
+        */
+       public void testNoAjaxPage()
+       {
+               {
+                       // On
+                       FullReloadPage noAjaxPage = 
(FullReloadPage)tester.startPage(FullReloadPage.class);
+                       assertVisible(noAjaxPage.getToggleable());
+                       
tester.clickLink(noAjaxPage.getLink().getPageRelativePath());
+               }
+               {
+                       // Off
+                       FullReloadPage noAjaxPage = 
(FullReloadPage)tester.getLastRenderedPage();
+                       assertInvisible(noAjaxPage.getToggleable());
+                       
tester.clickLink(noAjaxPage.getLink().getPageRelativePath());
+               }
+               {
+                       // On
+                       FullReloadPage noAjaxPage = 
(FullReloadPage)tester.getLastRenderedPage();
+                       assertVisible(noAjaxPage.getToggleable());
+                       
tester.clickLink(noAjaxPage.getLink().getPageRelativePath());
+               }
+               {
+                       // Off
+                       FullReloadPage noAjaxPage = 
(FullReloadPage)tester.getLastRenderedPage();
+                       assertInvisible(noAjaxPage.getToggleable());
+               }
+       }
+
+       /**
+        * 
+        */
+       public void testTraditionalAjaxEnclosurePage()
+       {
+               {
+                       // On
+                       TraditionalEnclosureAjaxPage ajaxPage = 
(TraditionalEnclosureAjaxPage)tester.startPage(TraditionalEnclosureAjaxPage.class);
+                       assertVisible(ajaxPage.getToggleable());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // Off
+                       TraditionalEnclosureAjaxPage ajaxPage = 
(TraditionalEnclosureAjaxPage)tester.getLastRenderedPage();
+                       
tester.assertComponentOnAjaxResponse(ajaxPage.getTraditionalAjaxVisibilityToggleRequiresPlaceholder());
+                       assertInvisible(ajaxPage.getToggleable());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // On
+                       TraditionalEnclosureAjaxPage ajaxPage = 
(TraditionalEnclosureAjaxPage)tester.getLastRenderedPage();
+                       
tester.assertComponentOnAjaxResponse(ajaxPage.getTraditionalAjaxVisibilityToggleRequiresPlaceholder());
+                       assertVisible(ajaxPage.getToggleable());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // Off
+                       TraditionalEnclosureAjaxPage ajaxPage = 
(TraditionalEnclosureAjaxPage)tester.getLastRenderedPage();
+                       
tester.assertComponentOnAjaxResponse(ajaxPage.getTraditionalAjaxVisibilityToggleRequiresPlaceholder());
+                       assertInvisible(ajaxPage.getToggleable());
+               }
+       }
+
+       /**
+        * 
+        */
+       public void testInlineEnclosureWithAdditionalAjaxTarget()
+       {
+               {
+                       // On
+                       InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = 
(InlineEnclosureWithAdditionalAjaxTargetPage)tester.startPage(InlineEnclosureWithAdditionalAjaxTargetPage.class);
+                       assertVisible(ajaxPage.getLabel1());
+                       assertVisible(ajaxPage.getLabel2());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // Off
+                       InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = 
(InlineEnclosureWithAdditionalAjaxTargetPage)tester.getLastRenderedPage();
+                       
tester.assertComponentOnAjaxResponse(ajaxPage.getLabel2());
+                       assertInVisible(ajaxPage.getLabel1());
+                       assertInVisible(ajaxPage.getLabel2());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // On
+                       InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = 
(InlineEnclosureWithAdditionalAjaxTargetPage)tester.getLastRenderedPage();
+                       
tester.assertComponentOnAjaxResponse(ajaxPage.getLabel1());
+                       
tester.assertComponentOnAjaxResponse(ajaxPage.getLabel2());
+                       assertVisible(ajaxPage.getLabel1());
+                       assertVisible(ajaxPage.getLabel2());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // Off
+                       InlineEnclosureWithAdditionalAjaxTargetPage ajaxPage = 
(InlineEnclosureWithAdditionalAjaxTargetPage)tester.getLastRenderedPage();
+                       
tester.assertComponentOnAjaxResponse(ajaxPage.getLabel2());
+                       assertInVisible(ajaxPage.getLabel1());
+                       assertInVisible(ajaxPage.getLabel2());
+               }
+       }
+
+       /**
+        * 
+        */
+       public void testInlineEnclosureAjaxPage()
+       {
+               String inlineEnclosureIdPrefix = "InlineEnclosure-";
+
+               String inlineEnclosureHiddenPattern = "<tr id=\"" + 
inlineEnclosureIdPrefix +
+                       "1\" style=\"display:none\"></tr>";
+
+               String inlineEnclosureVisiblePattern = "<tr bgcolor=\"red\" 
id=\"" +
+                       inlineEnclosureIdPrefix + "1\">";
+
+               {
+                       // On
+                       InlineEnclosureAjaxPage ajaxPage = 
(InlineEnclosureAjaxPage)tester.startPage(InlineEnclosureAjaxPage.class);
+                       assertVisible(ajaxPage.getToggleable());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // Off
+                       InlineEnclosureAjaxPage ajaxPage = 
(InlineEnclosureAjaxPage)tester.getLastRenderedPage();
+                       tester.assertContains(inlineEnclosureHiddenPattern);
+                       assertInvisible(ajaxPage.getToggleable());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // On
+                       InlineEnclosureAjaxPage ajaxPage = 
(InlineEnclosureAjaxPage)tester.getLastRenderedPage();
+                       tester.assertContains(inlineEnclosureVisiblePattern);
+                       assertVisible(ajaxPage.getToggleable());
+                       
tester.clickLink(ajaxPage.getLink().getPageRelativePath(), true);
+               }
+               {
+                       // Off
+                       InlineEnclosureAjaxPage ajaxPage = 
(InlineEnclosureAjaxPage)tester.getLastRenderedPage();
+                       tester.assertContains(inlineEnclosureHiddenPattern);
+                       assertInvisible(ajaxPage.getToggleable());
+               }
+       }
+
+       private final String toggledText = "This button (and red border) should 
appear and disappear by pressing toggle";
+
+
+       /**
+        * @param toggleable
+        */
+       protected void assertInvisible(Component toggleable)
+       {
+               tester.assertInvisible(toggleable.getPageRelativePath());
+               assertDoesNotContain(toggledText);
+               assertDoesNotContain("Also this");
+       }
+
+       /**
+        * @param toggleable
+        */
+       protected void assertVisible(Component toggleable)
+       {
+               tester.assertVisible(toggleable.getPageRelativePath());
+               tester.assertContains(Pattern.quote(toggledText));
+               tester.assertContains(Pattern.quote("Also this"));
+       }
+
+
+       /**
+        * @param label
+        */
+       protected void assertVisible(Label label)
+       {
+               tester.assertVisible(label.getPageRelativePath());
+               
tester.assertContains(Pattern.quote(label.getInnermostModel().getObject().toString()));
+       }
+
+       /**
+        * @param label
+        */
+       protected void assertInVisible(Label label)
+       {
+               tester.assertInvisible(label.getPageRelativePath());
+       }
+
+       /**
+        * @param string
+        */
+       private void assertDoesNotContain(String string)
+       {
+               assertFalse("Should not contain: " + string,
+                       tester.getLastResponseAsString().contains(string));
+       }
+
+
+}
\ No newline at end of file

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.html?rev=1090127&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.html
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.html
 Fri Apr  8 06:08:05 2011
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+</head>
+<body>
+<table border="1" cellpadding="1" cellspacing="1">
+<tr><th>Header row</th></tr>
+<tr><td><a wicket:id="link">Toggle</a></td></tr>
+<wicket:enclosure child="toggleable-placeholder:toggleable">
+<tr wicket:id="toggleable-placeholder" bgcolor="red"><td><input 
wicket:id="toggleable" type="button" 
+       value="This button (and red border) should appear and disappear by 
pressing toggle"  
+style="border: 1px solid black; background: lightblue;"/>
+                       (Also this)</td></tr>
+</wicket:enclosure>
+</table>
+<br clear="all"/>
+<br clear="all"/>
+With ajax toggle is also possible, but it requires extra work: when component 
is invisible, we need to manually create a dummy placeholder.  
+
+</body>
+</html>
\ No newline at end of file

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.java?rev=1090127&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/internal/TraditionalEnclosureAjaxPage.java
 Fri Apr  8 06:08:05 2011
@@ -0,0 +1,102 @@
+/*
+ * 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.wicket.markup.html.internal;
+
+import junit.framework.Assert;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+
+
+/**
+ */
+public class TraditionalEnclosureAjaxPage extends WebPage
+{
+       /** */
+       private static final long serialVersionUID = 1L;
+       private final WebMarkupContainer 
traditionalAjaxVisibilityToggleRequiresPlaceholder;
+       private final String toggleableChildId;
+       private final WebMarkupContainer toggleable;
+       private final AjaxLink<Void> link;
+
+       /** 
+        * 
+        */
+       @SuppressWarnings("serial")
+       public TraditionalEnclosureAjaxPage()
+       {
+               add((traditionalAjaxVisibilityToggleRequiresPlaceholder = new 
WebMarkupContainer(
+                       "toggleable-placeholder")
+               {
+                       @Override
+                       public boolean isVisible()
+                       {
+                               return get(toggleableChildId).isVisible();
+                       }
+               }).setOutputMarkupPlaceholderTag(true));
+               Assert.assertEquals("Ajax requires tag to remain in DOM even if 
not visible", true,
+                       
traditionalAjaxVisibilityToggleRequiresPlaceholder.getOutputMarkupPlaceholderTag());
+               {
+                       
traditionalAjaxVisibilityToggleRequiresPlaceholder.add((toggleable = new 
WebMarkupContainer(
+                               toggleableChildId = 
"toggleable")).setOutputMarkupPlaceholderTag(true));
+                       add(link = new AjaxLink<Void>("link")
+                       {
+                               @Override
+                               public void onClick(AjaxRequestTarget target)
+                               {
+                                       
toggleable.setVisible(!toggleable.isVisible());
+                                       
ajaxRepaintOnlyToggleableComponentsContainer(target);
+                               }
+                       });
+               }
+       }
+
+       /**
+        * @param target
+        */
+       private void 
ajaxRepaintOnlyToggleableComponentsContainer(AjaxRequestTarget target)
+       {
+               
target.addComponent(traditionalAjaxVisibilityToggleRequiresPlaceholder); // 
This is what we
+// repaint and toggleable is inside it
+       }
+
+       /**
+        * @return toggleable webmarkupcontainer
+        */
+       public WebMarkupContainer getToggleable()
+       {
+               return toggleable;
+       }
+
+       /**
+        * @return toggle link
+        */
+       public AjaxLink<Void> getLink()
+       {
+               return link;
+       }
+
+       /**
+        * @return the traditional placeholder
+        */
+       public WebMarkupContainer 
getTraditionalAjaxVisibilityToggleRequiresPlaceholder()
+       {
+               return traditionalAjaxVisibilityToggleRequiresPlaceholder;
+       }
+}
\ No newline at end of file


Reply via email to