diff options
author | Henri Sara <henri.sara@gmail.com> | 2017-03-20 17:10:32 +0200 |
---|---|---|
committer | Ilia Motornyi <elmot@vaadin.com> | 2017-03-20 17:10:32 +0200 |
commit | 1d127a0c7f16324ef30806c41dc7c5261105eb38 (patch) | |
tree | 17588742560ebe79e64f079c2bcd9fbf2dfe7546 | |
parent | 2618b8e2cc592a773396a16fd7dccc8b1a0fcd9d (diff) | |
download | vaadin-framework-1d127a0c7f16324ef30806c41dc7c5261105eb38.tar.gz vaadin-framework-1d127a0c7f16324ef30806c41dc7c5261105eb38.zip |
Support data-location attribute in CustomLayout (#8866)
Fixes #8416
6 files changed, 105 insertions, 6 deletions
diff --git a/client/src/main/java/com/vaadin/client/ui/VCustomLayout.java b/client/src/main/java/com/vaadin/client/ui/VCustomLayout.java index 374c241409..d92a17f4b8 100644 --- a/client/src/main/java/com/vaadin/client/ui/VCustomLayout.java +++ b/client/src/main/java/com/vaadin/client/ui/VCustomLayout.java @@ -212,6 +212,10 @@ public class VCustomLayout extends ComplexPanel { final String location = elem.getAttribute("location"); locationToElement.put(location, elem); elem.setInnerHTML(""); + } else if (elem.hasAttribute("data-location")) { + final String location = elem.getAttribute("data-location"); + locationToElement.put(location, elem); + elem.setInnerHTML(""); } else { final int len = DOM.getChildCount(elem); for (int i = 0; i < len; i++) { diff --git a/documentation/layout/layout-customlayout.asciidoc b/documentation/layout/layout-customlayout.asciidoc index d10d6309fc..d091ea0853 100644 --- a/documentation/layout/layout-customlayout.asciidoc +++ b/documentation/layout/layout-customlayout.asciidoc @@ -26,9 +26,9 @@ folder under the [filename]#/VAADIN/themes/# folder, for example, (Notice that the root path [filename]#/VAADIN/themes/# for themes is fixed.) A template can also be provided dynamically from an [classname]#InputStream#, as explained below. A template includes -[literal]#++<div>++# elements with a [parameter]#location# attribute that -defines the location identifier. All custom layout HTML-files must be saved -using UTF-8 character encoding. +[literal]#++<div>++# elements with a [parameter]#data-location# or +[parameter]#location# attribute that defines the location identifier. All +custom layout HTML-files must be saved using UTF-8 character encoding. [subs="normal"] ---- @@ -38,18 +38,18 @@ using UTF-8 character encoding. <table align="center"> <tr> <td align="right">User&nbsp;name:</td> - <td>**<div location="username"></div>**</td> + <td>**<div data-location="username"></div>**</td> </tr> <tr> <td align="right">Password:</td> - <td>**<div location="password"></div>**</td> + <td>**<div data-location="password"></div>**</td> </tr> </table> </td> </tr> <tr> <td align="right" colspan="2"> - **<div location="okbutton">**</div> + **<div data-location="okbutton">**</div> </td> </tr> </table> diff --git a/server/src/main/java/com/vaadin/ui/CustomLayout.java b/server/src/main/java/com/vaadin/ui/CustomLayout.java index 79146b9cc8..b2eb675c56 100644 --- a/server/src/main/java/com/vaadin/ui/CustomLayout.java +++ b/server/src/main/java/com/vaadin/ui/CustomLayout.java @@ -52,6 +52,11 @@ import com.vaadin.ui.declarative.DesignContext; * </p> * * <p> + * A location is identified with the attribute "data-location" or "location" + * which has the location name as its value. + * </p> + * + * <p> * The default theme handles the styles that are not defined by drawing the * subcomponents just as in OrderedLayout. * </p> diff --git a/uitest/src/main/java/com/vaadin/tests/layouts/customlayout/DataLocationInCustomLayout.java b/uitest/src/main/java/com/vaadin/tests/layouts/customlayout/DataLocationInCustomLayout.java new file mode 100644 index 0000000000..31f6968279 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/layouts/customlayout/DataLocationInCustomLayout.java @@ -0,0 +1,49 @@ +/* + * Copyright 2000-2016 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.layouts.customlayout; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractReindeerTestUI; +import com.vaadin.ui.Button; +import com.vaadin.ui.CustomLayout; + +@SuppressWarnings("serial") +public class DataLocationInCustomLayout extends AbstractReindeerTestUI { + + protected static final String BUTTON_ID = "DataLocationInCustomLayoutTestButtonId"; + + @Override + protected Integer getTicketNumber() { + return 8416; + } + + @Override + protected String getTestDescription() { + return "A test for adding a component with the data-location attribute in a " + + "CustomLayout: a button should be visible."; + } + + @Override + protected void setup(VaadinRequest request) { + setTheme("tests-tickets"); + CustomLayout customLayout = new CustomLayout("Github8416"); + final Button button = new Button("Button"); + button.setId(BUTTON_ID); + customLayout.addComponent(button, "dataloc"); + addComponent(customLayout); + } + +} diff --git a/uitest/src/main/webapp/VAADIN/themes/tests-tickets/layouts/Github8416.html b/uitest/src/main/webapp/VAADIN/themes/tests-tickets/layouts/Github8416.html new file mode 100644 index 0000000000..7f6727d638 --- /dev/null +++ b/uitest/src/main/webapp/VAADIN/themes/tests-tickets/layouts/Github8416.html @@ -0,0 +1,2 @@ +<div data-location="dataloc" style="height: 100px"></div> + diff --git a/uitest/src/test/java/com/vaadin/tests/layouts/customlayout/DataLocationInCustomLayoutTest.java b/uitest/src/test/java/com/vaadin/tests/layouts/customlayout/DataLocationInCustomLayoutTest.java new file mode 100644 index 0000000000..6a4243beef --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/layouts/customlayout/DataLocationInCustomLayoutTest.java @@ -0,0 +1,39 @@ +/* + * Copyright 2000-2016 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.layouts.customlayout; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +import org.junit.Test; +import org.openqa.selenium.By; + +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class DataLocationInCustomLayoutTest extends SingleBrowserTest { + + @Test + public void buttonExistsInLayout() { + openTestURL(); + + // We don't use TestBench's ElementQuery here because we need to check + // the DOM for buttons existence. + assertThat( + driver.findElements(By.id(DataLocationInCustomLayout.BUTTON_ID)) + .size(), + is(1)); + } +} |