summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/main/java/com/vaadin/client/WidgetUtil.java13
-rwxr-xr-xclient/src/main/java/com/vaadin/client/widgets/Grid.java7
-rw-r--r--uitest/src/main/java/com/vaadin/tests/components/grid/GridSvgInCell.java40
-rw-r--r--uitest/src/test/java/com/vaadin/tests/components/grid/GridSvgInCellTest.java24
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();
+ }
+}