]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix tooltip error when loading Javascript (#14028)
authorJuuso Valli <juuso@vaadin.com>
Tue, 24 Jun 2014 08:52:24 +0000 (11:52 +0300)
committerJuuso Valli <juuso@vaadin.com>
Fri, 27 Jun 2014 08:20:09 +0000 (08:20 +0000)
Change-Id: Ic596c0428bc3a59f9fe0ad82276dacb4b23c0d99

client/src/com/vaadin/client/ApplicationConnection.java
client/src/com/vaadin/client/VTooltip.java
uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascript.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascriptTest.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/tooltip/tooltipandjavascript.js [new file with mode: 0644]

index c39beffd871ba55253ddfb22ca791a812ef9a440..94fa3c3c012501ee982040bb0b9b10126281ceaf 100644 (file)
@@ -66,6 +66,7 @@ import com.google.gwt.user.client.Window.ClosingHandler;
 import com.google.gwt.user.client.ui.HasWidgets;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.client.ApplicationConfiguration.ErrorMessage;
+import com.vaadin.client.ApplicationConnection.ApplicationStoppedEvent;
 import com.vaadin.client.ResourceLoader.ResourceLoadEvent;
 import com.vaadin.client.ResourceLoader.ResourceLoadListener;
 import com.vaadin.client.communication.HasJavaScriptConnectorHelper;
@@ -471,6 +472,8 @@ public class ApplicationConnection implements HasHandlers {
 
     private Heartbeat heartbeat = GWT.create(Heartbeat.class);
 
+    private boolean tooltipInitialized = false;
+
     public static class MultiStepDuration extends Duration {
         private int previousStep = elapsedMillis();
 
@@ -580,10 +583,19 @@ public class ApplicationConnection implements HasHandlers {
 
             // initial UIDL provided in DOM, continue as if returned by request
             handleJSONText(jsonText, -1);
+        }
 
-            // Tooltip can't be created earlier because the necessary fields are
-            // not setup to add it in the correct place in the DOM
-            getVTooltip().showAssistive(new TooltipInfo(" "));
+        // Tooltip can't be created earlier because the
+        // necessary fields are not setup to add it in the
+        // correct place in the DOM
+        if (!tooltipInitialized) {
+            tooltipInitialized = true;
+            ApplicationConfiguration.runWhenDependenciesLoaded(new Command() {
+                @Override
+                public void execute() {
+                    getVTooltip().initializeAssistiveTooltips();
+                }
+            });
         }
     }
 
index d1a2c395f7fd405065a72e48e1bd0c768b7d0220..b1315a0d8b42016dad3608edfd28d0718d4da929 100644 (file)
@@ -108,6 +108,20 @@ public class VTooltip extends VWindowOverlay {
         showTooltip();
     }
 
+    /**
+     * Initialize the tooltip overlay for assistive devices.
+     * 
+     * @param info
+     *            with the content of the tooltip
+     */
+    public void initializeAssistiveTooltips() {
+        updatePosition(null, true);
+        setTooltipText(new TooltipInfo(" "));
+        showTooltip();
+        hideTooltip();
+        description.getParentElement().getStyle().clearWidth();
+    }
+
     private void setTooltipText(TooltipInfo info) {
         if (info.getErrorMessage() != null && !info.getErrorMessage().isEmpty()) {
             em.setVisible(true);
diff --git a/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascript.java b/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascript.java
new file mode 100644 (file)
index 0000000..2ada6e8
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2000-2014 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.tooltip;
+
+import com.vaadin.annotations.JavaScript;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+
+public class TooltipAndJavascript extends AbstractTestUI {
+
+    @JavaScript("tooltipandjavascript.js")
+    public static class MyButton extends Button {
+
+    }
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        MyButton b = new MyButton();
+        b.setCaption("Hover for tooltip");
+        b.setDescription("Tooltip for the button");
+        addComponent(b);
+    }
+
+    @Override
+    protected String getTestDescription() {
+        return "Hover the button for a tooltip. It should be styled correctly";
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 14028;
+    }
+
+}
diff --git a/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascriptTest.java b/uitest/src/com/vaadin/tests/tooltip/TooltipAndJavascriptTest.java
new file mode 100644 (file)
index 0000000..cc9309a
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2000-2014 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.tooltip;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebElement;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class TooltipAndJavascriptTest extends MultiBrowserTest {
+
+    @Test
+    public void ensureTooltipInOverlay() throws InterruptedException {
+        openTestURL();
+        $(ButtonElement.class).first().showTooltip();
+        WebElement tooltip = findElement(By
+                .cssSelector(".v-overlay-container .v-tooltip"));
+        WebElement overlayContainer = getParent(tooltip);
+        Assert.assertTrue("v-overlay-container did not receive theme",
+                hasClass(overlayContainer, "reindeer"));
+    }
+
+    private boolean hasClass(WebElement element, String classname) {
+        String[] classes = element.getAttribute("class").split(" ");
+        for (String classString : classes) {
+            if (classname.equals(classString)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private WebElement getParent(WebElement element) {
+        return (WebElement) ((JavascriptExecutor) getDriver()).executeScript(
+                "return arguments[0].parentNode;", element);
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/tooltip/tooltipandjavascript.js b/uitest/src/com/vaadin/tests/tooltip/tooltipandjavascript.js
new file mode 100644 (file)
index 0000000..f6aea09
--- /dev/null
@@ -0,0 +1 @@
+window.console.log("tooltipandjavascript.js executing")
\ No newline at end of file