return WidgetUtil.getTouchOrMouseClientY(event) - relativeTop;
}
+ /**
+ * 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.
*
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;
}
}
--- /dev/null
+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);
+ }
+}
--- /dev/null
+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();
+ }
+}