Skip to content

Commit

Permalink
Make FormLayout work with HTML captions (#17143)
Browse files Browse the repository at this point in the history
Change-Id: I334441fd2f8d5f6d9e0629f5d7b564e9008f3fe5
  • Loading branch information
Legioth authored and Vaadin Code Review committed May 15, 2015
1 parent faeabd7 commit 3a5cd8e
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 8 deletions.
20 changes: 12 additions & 8 deletions client/src/com/vaadin/client/ui/VFormLayout.java
Expand Up @@ -223,7 +223,7 @@ public class Caption extends HTML {


private Icon icon; private Icon icon;


private Element captionText; private Element captionContent;


/** /**
* *
Expand Down Expand Up @@ -274,26 +274,30 @@ public void updateCaption(AbstractComponentState state, boolean enabled) {
} }


if (state.caption != null) { if (state.caption != null) {
if (captionText == null) { if (captionContent == null) {
captionText = DOM.createSpan(); captionContent = DOM.createSpan();


AriaHelper.bindCaption(owner.getWidget(), captionText); AriaHelper.bindCaption(owner.getWidget(), captionContent);


DOM.insertChild(getElement(), captionText, icon == null ? 0 DOM.insertChild(getElement(), captionContent,
: 1); icon == null ? 0 : 1);
} }
String c = state.caption; String c = state.caption;
if (c == null) { if (c == null) {
c = ""; c = "";
} else { } else {
isEmpty = false; isEmpty = false;
} }
DOM.setInnerText(captionText, c); if (state.captionAsHtml) {
captionContent.setInnerHTML(c);
} else {
captionContent.setInnerText(c);
}
} else { } else {
// TODO should span also be removed // TODO should span also be removed
} }


if (state.description != null && captionText != null) { if (state.description != null && captionContent != null) {
addStyleDependentName("hasdescription"); addStyleDependentName("hasdescription");
} else { } else {
removeStyleDependentName("hasdescription"); removeStyleDependentName("hasdescription");
Expand Down
@@ -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 <b>HTML</b>");
asHtml.setCaptionAsHtml(true);

final TextField asText = new TextField("Contains <b>HTML</b>");

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());
}
}));
}
}
@@ -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<WebElement> 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 <b>HTML</b>", captions.get(1).getText());
}

@Test
public void testHtmlCaptionToggle() {
openTestURL();

$(ButtonElement.class).caption("Toggle").first().click();

List<WebElement> captions = getDriver().findElements(
By.cssSelector(".v-formlayout-captioncell span"));

Assert.assertEquals("Should be two formlayout captions", 2,
captions.size());

Assert.assertEquals("Contains <b>HTML</b>", captions.get(0).getText());
Assert.assertEquals("Contains HTML", captions.get(1).getText());
}

}

0 comments on commit 3a5cd8e

Please sign in to comment.