diff --git a/client/src/com/vaadin/client/ui/VFormLayout.java b/client/src/com/vaadin/client/ui/VFormLayout.java index 3781305e52b..42dbbde32ab 100644 --- a/client/src/com/vaadin/client/ui/VFormLayout.java +++ b/client/src/com/vaadin/client/ui/VFormLayout.java @@ -223,7 +223,7 @@ public class Caption extends HTML { private Icon icon; - private Element captionText; + private Element captionContent; /** * @@ -274,13 +274,13 @@ public void updateCaption(AbstractComponentState state, boolean enabled) { } if (state.caption != null) { - if (captionText == null) { - captionText = DOM.createSpan(); + if (captionContent == null) { + captionContent = DOM.createSpan(); - AriaHelper.bindCaption(owner.getWidget(), captionText); + AriaHelper.bindCaption(owner.getWidget(), captionContent); - DOM.insertChild(getElement(), captionText, icon == null ? 0 - : 1); + DOM.insertChild(getElement(), captionContent, + icon == null ? 0 : 1); } String c = state.caption; if (c == null) { @@ -288,12 +288,16 @@ public void updateCaption(AbstractComponentState state, boolean enabled) { } else { isEmpty = false; } - DOM.setInnerText(captionText, c); + if (state.captionAsHtml) { + captionContent.setInnerHTML(c); + } else { + captionContent.setInnerText(c); + } } else { // TODO should span also be removed } - if (state.description != null && captionText != null) { + if (state.description != null && captionContent != null) { addStyleDependentName("hasdescription"); } else { removeStyleDependentName("hasdescription"); diff --git a/uitest/src/com/vaadin/tests/components/formlayout/HtmlCaptionInFormLayout.java b/uitest/src/com/vaadin/tests/components/formlayout/HtmlCaptionInFormLayout.java new file mode 100644 index 00000000000..fc90427c793 --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/formlayout/HtmlCaptionInFormLayout.java @@ -0,0 +1,43 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed 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 com.vaadin.tests.components.formlayout; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.Button.ClickEvent; +import com.vaadin.ui.FormLayout; +import com.vaadin.ui.TextField; + +public class HtmlCaptionInFormLayout extends AbstractTestUI { + @Override + protected void setup(VaadinRequest request) { + final TextField asHtml = new TextField("Contains HTML"); + asHtml.setCaptionAsHtml(true); + + final TextField asText = new TextField("Contains HTML"); + + addComponent(new FormLayout(asHtml, asText)); + + addComponent(new Button("Toggle", new Button.ClickListener() { + @Override + public void buttonClick(ClickEvent event) { + asHtml.setCaptionAsHtml(!asHtml.isCaptionAsHtml()); + asText.setCaptionAsHtml(!asText.isCaptionAsHtml()); + } + })); + } +} diff --git a/uitest/src/com/vaadin/tests/components/formlayout/HtmlCaptionInFormLayoutTest.java b/uitest/src/com/vaadin/tests/components/formlayout/HtmlCaptionInFormLayoutTest.java new file mode 100644 index 00000000000..95130e8a0ce --- /dev/null +++ b/uitest/src/com/vaadin/tests/components/formlayout/HtmlCaptionInFormLayoutTest.java @@ -0,0 +1,59 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed 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 com.vaadin.tests.components.formlayout; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; + +import com.vaadin.testbench.elements.ButtonElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class HtmlCaptionInFormLayoutTest extends SingleBrowserTest { + @Test + public void testHtmlCaptions() { + openTestURL(); + + List captions = getDriver().findElements( + By.cssSelector(".v-formlayout-captioncell span")); + + Assert.assertEquals("Should be two formlayout captions", 2, + captions.size()); + + Assert.assertEquals("Contains HTML", captions.get(0).getText()); + Assert.assertEquals("Contains HTML", captions.get(1).getText()); + } + + @Test + public void testHtmlCaptionToggle() { + openTestURL(); + + $(ButtonElement.class).caption("Toggle").first().click(); + + List captions = getDriver().findElements( + By.cssSelector(".v-formlayout-captioncell span")); + + Assert.assertEquals("Should be two formlayout captions", 2, + captions.size()); + + Assert.assertEquals("Contains HTML", captions.get(0).getText()); + Assert.assertEquals("Contains HTML", captions.get(1).getText()); + } + +}