Fixes #8416tags/8.1.0.alpha2
final String location = elem.getAttribute("location"); | final String location = elem.getAttribute("location"); | ||||
locationToElement.put(location, elem); | locationToElement.put(location, elem); | ||||
elem.setInnerHTML(""); | elem.setInnerHTML(""); | ||||
} else if (elem.hasAttribute("data-location")) { | |||||
final String location = elem.getAttribute("data-location"); | |||||
locationToElement.put(location, elem); | |||||
elem.setInnerHTML(""); | |||||
} else { | } else { | ||||
final int len = DOM.getChildCount(elem); | final int len = DOM.getChildCount(elem); | ||||
for (int i = 0; i < len; i++) { | for (int i = 0; i < len; i++) { |
(Notice that the root path [filename]#/VAADIN/themes/# for themes is | (Notice that the root path [filename]#/VAADIN/themes/# for themes is | ||||
fixed.) A template can also be provided dynamically from an | fixed.) A template can also be provided dynamically from an | ||||
[classname]#InputStream#, as explained below. A template includes | [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"] | [subs="normal"] | ||||
---- | ---- | ||||
<table align="center"> | <table align="center"> | ||||
<tr> | <tr> | ||||
<td align="right">User&nbsp;name:</td> | <td align="right">User&nbsp;name:</td> | ||||
<td>**<div location="username"></div>**</td> | |||||
<td>**<div data-location="username"></div>**</td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td align="right">Password:</td> | <td align="right">Password:</td> | ||||
<td>**<div location="password"></div>**</td> | |||||
<td>**<div data-location="password"></div>**</td> | |||||
</tr> | </tr> | ||||
</table> | </table> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td align="right" colspan="2"> | <td align="right" colspan="2"> | ||||
**<div location="okbutton">**</div> | |||||
**<div data-location="okbutton">**</div> | |||||
</td> | </td> | ||||
</tr> | </tr> | ||||
</table> | </table> |
* </p> | * </p> | ||||
* | * | ||||
* <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 | * The default theme handles the styles that are not defined by drawing the | ||||
* subcomponents just as in OrderedLayout. | * subcomponents just as in OrderedLayout. | ||||
* </p> | * </p> |
/* | |||||
* 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); | |||||
} | |||||
} |
<div data-location="dataloc" style="height: 100px"></div> | |||||
/* | |||||
* 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)); | |||||
} | |||||
} |