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);
}
--- /dev/null
+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";
+ }
+}
--- /dev/null
+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());
+ }
+}