]> source.dussan.org Git - vaadin-framework.git/commitdiff
Keeping MenuItem custom classes when updating styles (#17427)
authorAlexey Fansky <alexey.fansky@effective-soft.com>
Wed, 15 Apr 2015 19:12:11 +0000 (12:12 -0700)
committerVaadin Code Review <review@vaadin.com>
Thu, 16 Apr 2015 09:42:39 +0000 (09:42 +0000)
Change-Id: I54b7e700148797f0145c4ec5f1802ea999142ab3

client/src/com/vaadin/client/ui/VMenuBar.java
uitest/src/com/vaadin/tests/components/menubar/MenuItemStyleRemoved.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/menubar/MenuItemStyleRemovedTest.java [new file with mode: 0644]

index 08f70f4dde86865da9115e727a57d6827b7b8705..823861534dafca6cc2ac1928fecdf4dcb9c90f1d 100644 (file)
@@ -912,12 +912,24 @@ public class VMenuBar extends SimpleFocusablePanel implements
                         SUBMENU_CLASSNAME_PREFIX, "");
             }
 
+            String currentStyles = super.getStyleName();
+            List<String> customStyles = new ArrayList<String>();
+            for(String style : currentStyles.split(" ")) {
+                if(!style.isEmpty() && !style.startsWith(primaryStyleName)) {
+                    customStyles.add(style);
+                }
+            }
+
             if (isSeparator) {
                 super.setStyleName(primaryStyleName + "-separator");
             } else {
                 super.setStyleName(primaryStyleName + "-menuitem");
             }
 
+            for (String customStyle : customStyles) {
+                super.addStyleName(customStyle);
+            }
+
             if (styleName != null) {
                 addStyleDependentName(styleName);
             }
diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuItemStyleRemoved.java b/uitest/src/com/vaadin/tests/components/menubar/MenuItemStyleRemoved.java
new file mode 100644 (file)
index 0000000..ea8bf5a
--- /dev/null
@@ -0,0 +1,43 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.JavaScript;
+import com.vaadin.ui.MenuBar;
+
+public class MenuItemStyleRemoved extends AbstractTestUI {
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        MenuBar menuBar = new MenuBar();
+
+        MenuBar.MenuItem first = menuBar.addItem("first", null, null);
+        first.addItem("first sub-item 1", null, null);
+        first.addItem("first sub-item 2", null, null);
+        MenuBar.MenuItem second = menuBar.addItem("second", null, null);
+        second.addItem("second sub-item 2", null, null);
+        second.addItem("second sub-item 2", null, null);
+
+        addComponent(menuBar);
+        addButton("Add styles", new Button.ClickListener() {
+            @Override
+            public void buttonClick(Button.ClickEvent event) {
+                JavaScript.getCurrent().execute(
+                        "var x=document.getElementsByClassName('v-menubar-menuitem');" +
+                        " var i; for(i=0; i < x.length; i++)" +
+                        " {x[i].className += ' custom-menu-item'};");
+            }
+        });
+    }
+
+    @Override
+    protected Integer getTicketNumber() {
+        return 17242;
+    }
+
+    @Override
+    public String getDescription() {
+        return "MenuItem's custom class names removed when hovering";
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/components/menubar/MenuItemStyleRemovedTest.java b/uitest/src/com/vaadin/tests/components/menubar/MenuItemStyleRemovedTest.java
new file mode 100644 (file)
index 0000000..2ba6358
--- /dev/null
@@ -0,0 +1,30 @@
+package com.vaadin.tests.components.menubar;
+
+import com.vaadin.testbench.By;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.MenuBarElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public class MenuItemStyleRemovedTest extends MultiBrowserTest {
+
+    @Test
+    public void testCustomStyleShouldStayAfterMenuSelect() {
+        openTestURL();
+
+        $(ButtonElement.class).caption("Add styles").first().click();
+
+        MenuBarElement menu = $(MenuBarElement.class).first();
+        List<WebElement> elements = menu.findElements(By.className("custom-menu-item"));
+        Assert.assertEquals(2, elements.size());
+
+        menu.clickItem("first");
+        menu.clickItem("second");
+        elements = menu.findElements(By.className("custom-menu-item"));
+        Assert.assertEquals(2, elements.size());
+    }
+}