ISIS-537: minor fixes for menus. 1. scrollable menu if long 2. adding "top-menu-xxx" class to each top menu to allow application.css to apply targetted fixes if required (eg <ul class="pull-right" ...> if require right-align) 3. use Isis' CssClassAppender rather than Wicket's CssClassNameAppender (consistency in codebase) 4. removing unused code from PageAbstract
Project: http://git-wip-us.apache.org/repos/asf/isis/repo Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/07b42358 Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/07b42358 Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/07b42358 Branch: refs/heads/master Commit: 07b42358756655e88e084f6847e5bfadcda4b122 Parents: b1e34c3 Author: Dan Haywood <[email protected]> Authored: Thu Nov 20 12:16:34 2014 +0100 Committer: Dan Haywood <[email protected]> Committed: Thu Nov 20 12:18:58 2014 +0100 ---------------------------------------------------------------------- .../widgets/cssmenu/ApplicationActionsPanel.css | 7 ++++ .../cssmenu/ApplicationActionsPanel.html | 2 +- .../cssmenu/ApplicationActionsPanel.java | 15 ++++--- .../viewer/wicket/ui/pages/PageAbstract.java | 41 +++++++------------- .../viewer/wicket/ui/util/CssClassAppender.java | 3 ++ .../wicket/ui/pages/PageAbstractTest.java | 6 ++- 6 files changed, 39 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/isis/blob/07b42358/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css index b777dcd..9367e66 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.css @@ -95,3 +95,10 @@ border-radius: 0; color: initial; } + +.scrollable-menu { + min-width: 250px; + height: auto; + max-height: 600px; + overflow-x: hidden; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/isis/blob/07b42358/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.html ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.html index 0562067..3a6dd5d 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.html +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.html @@ -4,7 +4,7 @@ <wicket:panel> <li class="dropdown" wicket:id="menuItems"> <a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown"><span wicket:id="name"></span> <span class="caret"></span></a> - <ul class="dropdown-menu multi-level" role="menu"> + <ul wicket:id="topMenu" class="dropdown-menu scrollable-menu multi-level" role="menu"> <li wicket:id="subMenuItems"> <wicket:container wicket:id="content"></wicket:container> </li> http://git-wip-us.apache.org/repos/asf/isis/blob/07b42358/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java index 48b34d4..d2c3f05 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/cssmenu/ApplicationActionsPanel.java @@ -1,16 +1,17 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.cssmenu; -import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameAppender; import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipBehavior; import de.agilecoders.wicket.extensions.markup.html.bootstrap.button.DropdownAutoOpenJavaScriptReference; import java.util.List; import com.google.common.base.Strings; import com.google.common.collect.Lists; +import org.apache.wicket.MarkupContainer; import org.apache.wicket.markup.head.CssHeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; +import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.AbstractLink; import org.apache.wicket.markup.html.list.ListItem; @@ -50,6 +51,10 @@ public class ApplicationActionsPanel extends Panel { CssMenuItem menuItem = listItem.getModelObject(); listItem.add(new Label("name", menuItem.getName())); + MarkupContainer topMenu = new WebMarkupContainer("topMenu"); + + topMenu.add(new CssClassAppender("top-menu-" + CssClassAppender.asCssStyle(menuItem.getName()))); + listItem.add(topMenu); List<CssMenuItem> subMenuItems = withSeparators(menuItem); // fake data to test multi-level menus @@ -75,7 +80,7 @@ public class ApplicationActionsPanel extends Panel { } } }; - listItem.add(subMenuItemsView); + topMenu.add(subMenuItemsView); } }; add(menuItemsView); @@ -139,13 +144,13 @@ public class ApplicationActionsPanel extends Panel { subMenuItemLink.addOrReplace(menuItemLabel); if (!menuItem.isEnabled()) { - listItem.add(new CssClassNameAppender("disabled")); + listItem.add(new CssClassAppender("disabled")); subMenuItemLink.setEnabled(false); TooltipBehavior tooltipBehavior = new TooltipBehavior(Model.of(menuItem.getDisabledReason())); listItem.add(tooltipBehavior); } if (menuItem.isPrototyping()) { - subMenuItemLink.add(new CssClassNameAppender("prototype")); + subMenuItemLink.add(new CssClassAppender("prototype")); } leafItem.add(subMenuItemLink); @@ -160,7 +165,7 @@ public class ApplicationActionsPanel extends Panel { } } else { leafItem = new Fragment("content", "empty", ApplicationActionsPanel.this); - listItem.add(new CssClassNameAppender("divider")); + listItem.add(new CssClassAppender("divider")); } listItem.add(leafItem); http://git-wip-us.apache.org/repos/asf/isis/blob/07b42358/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java index 8c94106..b12fa60 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java @@ -35,7 +35,12 @@ import org.apache.wicket.MarkupContainer; import org.apache.wicket.Page; import org.apache.wicket.RestartResponseAtInterceptPageException; import org.apache.wicket.event.Broadcast; -import org.apache.wicket.markup.head.*; +import org.apache.wicket.markup.head.CssHeaderItem; +import org.apache.wicket.markup.head.CssReferenceHeaderItem; +import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.head.JavaScriptHeaderItem; +import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem; +import org.apache.wicket.markup.head.PriorityHeaderItem; import org.apache.wicket.markup.head.filter.HeaderResponseContainer; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.WebPage; @@ -66,7 +71,13 @@ import org.apache.isis.core.runtime.system.context.IsisContext; import org.apache.isis.core.runtime.system.persistence.PersistenceSession; import org.apache.isis.viewer.wicket.model.hints.IsisEnvelopeEvent; import org.apache.isis.viewer.wicket.model.hints.IsisEventLetterAbstract; -import org.apache.isis.viewer.wicket.model.models.*; +import org.apache.isis.viewer.wicket.model.models.ActionPrompt; +import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider; +import org.apache.isis.viewer.wicket.model.models.ApplicationActionsModel; +import org.apache.isis.viewer.wicket.model.models.BookmarkableModel; +import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel; +import org.apache.isis.viewer.wicket.model.models.EntityModel; +import org.apache.isis.viewer.wicket.model.models.PageType; import org.apache.isis.viewer.wicket.ui.ComponentFactory; import org.apache.isis.viewer.wicket.ui.ComponentType; import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry; @@ -105,13 +116,6 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid public static final String ID_MENU_LINK = "menuLink"; private static final String ID_THEME_PICKER = "themePicker"; - - // TODO mgrigorov: are those used somewhere else ? since they are public - public static final String ID_LOGOUT_LINK = "logoutLink"; - public static final String ID_LOGOUT_TEXT = "logoutText"; - public static final String ID_ABOUT_LINK = "aboutLink"; - - private static final String ID_COPY_LINK = "copyLink"; private static final String ID_BREADCRUMBS = "breadcrumbs"; @@ -164,7 +168,7 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid themeDiv = new WebMarkupContainer(ID_THEME); add(themeDiv); if(applicationName != null) { - themeDiv.add(new CssClassAppender(asCssStyle(applicationName))); + themeDiv.add(new CssClassAppender(CssClassAppender.asCssStyle(applicationName))); } addApplicationActions(themeDiv); @@ -222,23 +226,6 @@ public abstract class PageAbstract extends WebPage implements ActionPromptProvid return pageClassRegistry.getPageClass(PageType.SIGN_IN); } - static String asCssStyle(final String str) { - return str.toLowerCase().replaceAll("[^A-Za-z0-9 ]", "").replaceAll("\\s+", "-"); - } - - // TODO mgrigorov this method is not used - protected ExceptionModel recognizeException(Exception ex) { - List<ExceptionRecognizer> exceptionRecognizers; - try { - exceptionRecognizers = getServicesInjector().lookupServices(ExceptionRecognizer.class); - } catch(Exception ex2) { - LOG.warn("Unable to obtain exceptionRecognizers (no session?)"); - exceptionRecognizers = Collections.emptyList(); - } - final String recognizedMessageIfAny = new ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex); - return ExceptionModel.create(recognizedMessageIfAny, ex); - } - @Override public void renderHead(IHeaderResponse response) { http://git-wip-us.apache.org/repos/asf/isis/blob/07b42358/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java index 1fef4f6..8c4e1c0 100644 --- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java +++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/CssClassAppender.java @@ -39,4 +39,7 @@ public class CssClassAppender extends AttributeAppender { this(Model.of(append)); } + public static String asCssStyle(final String str) { + return str.toLowerCase().replaceAll("[^A-Za-z0-9- ]", "").replaceAll("\\s+", "-"); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/isis/blob/07b42358/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstractTest.java ---------------------------------------------------------------------- diff --git a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstractTest.java b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstractTest.java index 8a354d3..fccbca6 100644 --- a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstractTest.java +++ b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstractTest.java @@ -20,6 +20,8 @@ package org.apache.isis.viewer.wicket.ui.pages; import org.junit.Test; +import org.apache.isis.viewer.wicket.ui.util.CssClassAppender; + import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -29,12 +31,12 @@ public abstract class PageAbstractTest { @Test public void withSpacesAndCapitals() throws Exception { - assertThat(PageAbstract.asCssStyle("Simple App"), is("simple-app")); + assertThat(CssClassAppender.asCssStyle("Simple App"), is("simple-app")); } @Test public void withOtherCharacters() throws Exception { - assertThat(PageAbstract.asCssStyle("Kitchen Sink (Demo) App"), is("kitchen-sink-demo-app")); + assertThat(CssClassAppender.asCssStyle("Kitchen Sink (Demo) App"), is("kitchen-sink-demo-app")); } }
