浏览代码

Make FormLayout work with HTML captions (#17143)

Change-Id: I880dda9cd25dbd8d6313c1b73b5998679d63aecb
tags/7.4.7
Leif Åstrand 9 年前
父节点
当前提交
e6ad86225d

+ 12
- 8
client/src/com/vaadin/client/ui/VFormLayout.java 查看文件

@@ -223,7 +223,7 @@ public class VFormLayout extends SimplePanel {

private Icon icon;

private Element captionText;
private Element captionContent;

/**
*
@@ -274,13 +274,13 @@ public class VFormLayout extends SimplePanel {
}

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 class VFormLayout extends SimplePanel {
} 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");

+ 43
- 0
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 <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());
}
}));
}
}

+ 59
- 0
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<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());
}

}

正在加载...
取消
保存