From fd8130ed6e6f93ced6ee1c7576efde31b9f768c0 Mon Sep 17 00:00:00 2001
From: Marc Englund
Date: Mon, 28 Sep 2015 14:11:07 +0300
Subject: [PATCH] Add valo-menu-hover stylename to make responsive menu appear
w/o adding code (#19019)
Adding the optional "valo-menu-hover" style to the "valo-menu" element
will make the menu appear on hover - i.e when mousing over on desktop,
when tapping on touch devices (which also triggers hover).
Backported from master branch (vaadin 8).
Change-Id: I8344234a20aa93216b0116608d81e30e86d8b309
---
.../java/com/vaadin/ui/themes/ValoTheme.java | 26 ++++++++-
.../themes/valo/components/_valo-menu.scss | 3 +-
.../tests/themes/valo/ResponsiveStyles.java | 9 ++-
.../themes/valo/ResponsiveStylesDesign.java | 5 ++
.../themes/valo/ResponsiveStylesDesign.html | 58 ++++++++++++++-----
.../themes/valo/ResponsiveStylesTest.java | 32 ++++++++++
6 files changed, 113 insertions(+), 20 deletions(-)
diff --git a/server/src/main/java/com/vaadin/ui/themes/ValoTheme.java b/server/src/main/java/com/vaadin/ui/themes/ValoTheme.java
index 335c9daee8..d26860991e 100644
--- a/server/src/main/java/com/vaadin/ui/themes/ValoTheme.java
+++ b/server/src/main/java/com/vaadin/ui/themes/ValoTheme.java
@@ -1033,15 +1033,13 @@ public class ValoTheme {
* Set the primary style name of a Label or a Button to this
* style name to create an application logo. The logo is designed to be
* placed inside a {@link #MENU_PART} layout.
- *
*
*
* The text content of the logo should be very short, since the logo area
* only shows approximately three letters. Using one of the
* {@link FontAwesome} icons is a good way to quickly create a logo for your
* application.
- *
- *
+ *
*
*
Example
*
@@ -1053,4 +1051,26 @@ public class ValoTheme {
*/
public static final String MENU_LOGO = "valo-menu-logo";
+ /**
+ * Add this style name to your {@link #UI_WITH_MENU responsive}
+ * {@link #MENU_ROOT valo menu} element to make it appear automatically on
+ * hover - without adding any code.
+ *
+ * The menu will appear on mouse over on desktop, or when tapping on touch
+ * devices.
+ *
+ *
Example
+ *
+ *
+ * HorizontalLayout menu = new HorizontalLayout();
+ * Responsive.makeResponsive(menu);
+ * menu.addStyleName(ValoTheme.UI_WITH_MENU);
+ *
+ * CssLayout menuArea = new CssLayout();
+ * menuArea.setPrimaryStyleName(ValoTheme.MENU_ROOT);
+ * menuArea.addStyleName(ValoTheme.MENU_APPEAR_ON_HOVER);
+ * menu.addComponent(menuArea);
+ *
+ */
+ public static final String MENU_APPEAR_ON_HOVER = "valo-menu-hover";
}
diff --git a/themes/src/main/themes/VAADIN/themes/valo/components/_valo-menu.scss b/themes/src/main/themes/VAADIN/themes/valo/components/_valo-menu.scss
index 48ba22174b..084f97cac6 100644
--- a/themes/src/main/themes/VAADIN/themes/valo/components/_valo-menu.scss
+++ b/themes/src/main/themes/VAADIN/themes/valo/components/_valo-menu.scss
@@ -237,7 +237,8 @@ $valo-menu-background-color: scale-color($v-app-background-color, $lightness: if
@include transition(all 300ms);
}
- .valo-menu-visible .valo-menuitems {
+ .valo-menu-visible .valo-menuitems,
+ .valo-menu-hover:hover .valo-menuitems {
@include transform(translatex(0%));
}
}
diff --git a/uitest/src/main/java/com/vaadin/tests/themes/valo/ResponsiveStyles.java b/uitest/src/main/java/com/vaadin/tests/themes/valo/ResponsiveStyles.java
index f8474ef9c2..ed645002d8 100644
--- a/uitest/src/main/java/com/vaadin/tests/themes/valo/ResponsiveStyles.java
+++ b/uitest/src/main/java/com/vaadin/tests/themes/valo/ResponsiveStyles.java
@@ -24,7 +24,14 @@ public class ResponsiveStyles extends UI {
@Override
protected void init(VaadinRequest request) {
- setContent(new ResponsiveStylesDesign());
+ ResponsiveStylesDesign design = new ResponsiveStylesDesign();
+ setContent(design);
+
+ boolean collapsed = request.getParameter("collapsed") != null;
+
+ design.collapsed.setVisible(collapsed);
+ design.narrow.setVisible(!collapsed);
+ design.wide.setVisible(!collapsed);
}
}
diff --git a/uitest/src/main/java/com/vaadin/tests/themes/valo/ResponsiveStylesDesign.java b/uitest/src/main/java/com/vaadin/tests/themes/valo/ResponsiveStylesDesign.java
index f7ee5068f0..57c00caf32 100644
--- a/uitest/src/main/java/com/vaadin/tests/themes/valo/ResponsiveStylesDesign.java
+++ b/uitest/src/main/java/com/vaadin/tests/themes/valo/ResponsiveStylesDesign.java
@@ -16,6 +16,7 @@
package com.vaadin.tests.themes.valo;
import com.vaadin.annotations.DesignRoot;
+import com.vaadin.ui.Component;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.declarative.Design;
@@ -23,6 +24,10 @@ import com.vaadin.ui.declarative.Design;
@SuppressWarnings("serial")
public class ResponsiveStylesDesign extends VerticalLayout {
+ protected Component collapsed;
+ protected Component narrow;
+ protected Component wide;
+
public ResponsiveStylesDesign() {
Design.read(this);
}
diff --git a/uitest/src/main/resources/com/vaadin/tests/themes/valo/ResponsiveStylesDesign.html b/uitest/src/main/resources/com/vaadin/tests/themes/valo/ResponsiveStylesDesign.html
index 60da28d843..330bad00d3 100644
--- a/uitest/src/main/resources/com/vaadin/tests/themes/valo/ResponsiveStylesDesign.html
+++ b/uitest/src/main/resources/com/vaadin/tests/themes/valo/ResponsiveStylesDesign.html
@@ -1,56 +1,84 @@
-
-
+
+
+
+
-
-
+
+
The
Application
-
+
Menu
-
-
+
+
Inbox
-
+
-
+
-
-
+
+
The
Application
-
+
Menu
-
-
+
+
Inbox
-
+
+
+
+
+
+
+
+
+ The
+ Application
+
+
+
+ Menu
+
+
+
+ Inbox
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uitest/src/test/java/com/vaadin/tests/themes/valo/ResponsiveStylesTest.java b/uitest/src/test/java/com/vaadin/tests/themes/valo/ResponsiveStylesTest.java
index 5de3b5aaa7..4d007e10bd 100644
--- a/uitest/src/test/java/com/vaadin/tests/themes/valo/ResponsiveStylesTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/themes/valo/ResponsiveStylesTest.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.junit.Test;
import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
import com.vaadin.tests.tb3.MultiBrowserTest;
@@ -30,12 +31,19 @@ import com.vaadin.tests.tb3.MultiBrowserTest;
*/
public class ResponsiveStylesTest extends MultiBrowserTest {
+ /**
+ * Use this parameter to test the collapsed menu state.
+ */
+ public static final String COLLAPSED_MENU_TEST_PARAM = "collapsed";
+
private static final String MENU_STYLENAME = "valo-menu";
private static final int NARROW_ELEMENT_INDEX = 0;
private static final int NARROW_WIDTH = 112;
private static final int WIDE_ELEMENT_INDEX = 1;
private static final int WIDE_WIDTH = 146;
+ private static final String TOGGLE_STYLENAME = "valo-menu-toggle";
+
/**
* Tests that valo-menu-responsive can be used in any element on the page,
* not just as top-level component.
@@ -59,4 +67,28 @@ public class ResponsiveStylesTest extends MultiBrowserTest {
compareScreen("defaultMenuWidths");
}
+
+ /**
+ * Tests that the valo-menu-hover style makes the menu appear on mouseover.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testValoMenuResponsiveHover() throws Exception {
+ openTestURL(COLLAPSED_MENU_TEST_PARAM);
+
+ compareScreen("collapsedMenu");
+
+ List toggles = findElements(
+ com.vaadin.testbench.By.className(TOGGLE_STYLENAME));
+
+ // Only one menu in the collapsed example
+ WebElement toggle = toggles.get(0);
+
+ Actions actions = new Actions(getDriver());
+ actions.moveToElement(toggle);
+ actions.perform();
+
+ compareScreen("expandedMenu");
+ }
}
--
2.39.5