diff options
author | Adam Wagner <wbadam@users.noreply.github.com> | 2017-10-20 10:14:33 +0200 |
---|---|---|
committer | Péter Török <31210544+torok-peter@users.noreply.github.com> | 2017-10-20 11:14:33 +0300 |
commit | df2157ab9f39f7170675c8540a589cdc101d9456 (patch) | |
tree | 34fa8aa72c59813f656f73292dc43b09dd0f908e | |
parent | cb85b628289d35619d512f519624e5b075dfc441 (diff) | |
download | vaadin-framework-df2157ab9f39f7170675c8540a589cdc101d9456.tar.gz vaadin-framework-df2157ab9f39f7170675c8540a589cdc101d9456.zip |
Check class name type on Grid cell mouse over (#10194)
* Check whether className is of type string
* Move string type checker method to widget util
* Fix formatting of WidgetUtil
* Break svg into lines
4 files changed, 83 insertions, 1 deletions
diff --git a/client/src/main/java/com/vaadin/client/WidgetUtil.java b/client/src/main/java/com/vaadin/client/WidgetUtil.java index 94439dc945..e6304343aa 100644 --- a/client/src/main/java/com/vaadin/client/WidgetUtil.java +++ b/client/src/main/java/com/vaadin/client/WidgetUtil.java @@ -1867,6 +1867,19 @@ public class WidgetUtil { } /** + * Returns whether the given object is a string. + * + * @param obj + * the object of which the type is examined + * @return {@code true} if the object is a string; {@code false} if not + * @since + */ + public static native boolean isString(Object obj) + /*-{ + return typeof obj === 'string' || obj instanceof String; + }-*/; + + /** * Utility methods for displaying error message on components. * * @since 8.2 diff --git a/client/src/main/java/com/vaadin/client/widgets/Grid.java b/client/src/main/java/com/vaadin/client/widgets/Grid.java index 43f85a9848..4651c534dc 100755 --- a/client/src/main/java/com/vaadin/client/widgets/Grid.java +++ b/client/src/main/java/com/vaadin/client/widgets/Grid.java @@ -7528,7 +7528,12 @@ public class Grid<T> extends ResizeComposite implements HasSelectionHandlers<T>, boolean isElement = Element.is(n); if (isElement) { String className = Element.as(n).getClassName(); - if (className.contains(getStylePrimaryName() + "-spacer")) { + + // Also check whether className is indeed a string. For + // SVGElement it may be of type SVGAnimatedString. + // https://developer.mozilla.org/en-US/docs/Web/API/Element/className#Notes + if (WidgetUtil.isString(className) && className + .contains(getStylePrimaryName() + "-spacer")) { return true; } } diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridSvgInCell.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridSvgInCell.java new file mode 100644 index 0000000000..fbe59b8a88 --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridSvgInCell.java @@ -0,0 +1,40 @@ +package com.vaadin.tests.components.grid; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.server.VaadinRequest; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Grid; +import com.vaadin.ui.renderers.HtmlRenderer; + +@Widgetset("com.vaadin.DefaultWidgetSet") +public class GridSvgInCell extends AbstractTestUI { + + private static class DataObject { + private String svg; + + public String getSvg() { + return svg; + } + + public void setSvg(String svg) { + this.svg = svg; + } + } + + @Override + protected void setup(VaadinRequest request) { + Grid<DataObject> grid = new Grid<>(); + grid.addColumn(DataObject::getSvg).setCaption("SVG") + .setRenderer(new HtmlRenderer("")); + + DataObject data = new DataObject(); + data.setSvg( + "<svg width=\"100%\" height=\"20px\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">" + + "<polygon id=\"bar_background_blue\" stroke=\"gray\" fill=\"#D6D6D6\" points=\"0 0,59 0,66 7,59 14,0 14\"></polygon>" + + "<rect id=\"bar_blue\" x=\"1\" y=\"1\" width=\"0px\" height=\"13\" fill=\"#7298C0\"></rect>" + + "</svg>"); + grid.setItems(data); + + addComponent(grid); + } +} diff --git a/uitest/src/test/java/com/vaadin/tests/components/grid/GridSvgInCellTest.java b/uitest/src/test/java/com/vaadin/tests/components/grid/GridSvgInCellTest.java new file mode 100644 index 0000000000..ae7174609e --- /dev/null +++ b/uitest/src/test/java/com/vaadin/tests/components/grid/GridSvgInCellTest.java @@ -0,0 +1,24 @@ +package com.vaadin.tests.components.grid; + +import org.junit.Before; +import org.junit.Test; +import org.openqa.selenium.interactions.Actions; + +import com.vaadin.testbench.elements.GridElement; +import com.vaadin.tests.tb3.SingleBrowserTest; + +public class GridSvgInCellTest extends SingleBrowserTest { + + @Before + public void before() { + setDebug(true); + openTestURL(); + } + + @Test + public void moveMouseOverSvgInCell() { + GridElement grid = $(GridElement.class).first(); + new Actions(driver).moveToElement(grid.getCell(0, 0)).perform(); + assertNoErrorNotifications(); + } +} |