Refactored main menu to use another base

This commit is contained in:
Robin Eklund 2011-07-28 16:44:59 +02:00
parent 0ad3de60b6
commit 7eb784eda3
12 changed files with 68 additions and 474 deletions

@ -1,13 +1,19 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<html
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<header id="main-header" class="span-24">
<div class="prepend-1 span-5">
<h1 id="logo"><a href="#" wicket:id="homeLink" title="SciPro">SciPro</a></h1>
</div>
<div wicket:id="mainMenuPanel"></div>
</header>
</wicket:panel>
<wicket:panel>
<header id="main-header" class="span-24">
<div class="prepend-1 span-5">
<h1 id="logo">
<a href="#" wicket:id="homeLink" title="SciPro">SciPro</a>
</h1>
</div>
<div class="prepend-2 span-15 last user-links"
wicket:id="userLinksPanel"></div>
<div wicket:id="mainMenuPanel" class="main-menu prepend-6"></div>
<div wicket:id="serviceMenuPanel" class="service-menu"></div>
</header>
</wicket:panel>
</body>
</html>

@ -1,9 +1,7 @@
package se.su.dsv.scipro.basepanels;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.Panel;
import se.su.dsv.scipro.SciProApplication;
@ -14,17 +12,13 @@ import se.su.dsv.scipro.SciProApplication;
*
*/
public class HeaderPanel extends Panel {
private static final long serialVersionUID = 1L;
public HeaderPanel(String id, Class<? extends Page> containerClass) {
super(id);
add(new BookmarkablePageLink<Void>("homeLink", SciProApplication.get().getHomePage()));
MainMenuPanel mainMenuPanel = new MainMenuPanel("mainMenuPanel", containerClass);
add(mainMenuPanel);
add(new MainMenuPanel("mainMenuPanel", containerClass));
add(new ServiceMenuPanel("serviceMenuPanel", containerClass));
add(new UserLinksPanel("userLinksPanel"));
}
}

@ -1,23 +0,0 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<nav id="main-nav">
<div class="span-18 last">
<div class="prepend-2 span-15 last" id="user-links" wicket:id="userLinksPanel"></div>
<div class="span-18 last">
<ul id="nav-list">
<li class="nav-list-item" id="home-menu-item" wicket:id="homeMenuItem"></li>
<li class="nav-list-item" id="messages-menu-item" wicket:id="messagesMenuItem"></li>
<li class="nav-list-item" id="project-menu-item" wicket:id="projectMenuItem"></li>
<li class="nav-list-item" id="supervisor-menu-item" wicket:id="supervisorMenuItem"></li>
<li class="nav-list-item" id="resources-menu-item" wicket:id="resourcesMenuItem"></li>
<li class="nav-list-item" id="admin-menu-item" wicket:id="adminMenuItem"></li>
</ul>
</div>
</div>
</nav>
</wicket:panel>
</body>
</html>

@ -4,123 +4,30 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.Panel;
import org.odlabs.wiquery.core.commons.IWiQueryPlugin;
import org.odlabs.wiquery.core.commons.WiQueryResourceManager;
import org.odlabs.wiquery.core.javascript.JsStatement;
import se.su.dsv.scipro.HomePage;
import se.su.dsv.scipro.SciProApplication;
import se.su.dsv.scipro.admin.pages.AdminScheduleTemplatesPage;
import se.su.dsv.scipro.admin.pages.AdminStartPage;
import se.su.dsv.scipro.admin.pages.ProjectManagementPage;
import se.su.dsv.scipro.admin.pages.SystemMaintenancePage;
import se.su.dsv.scipro.basepages.MenuPage;
import se.su.dsv.scipro.basepanels.mainmenu.MainMenuItem;
import se.su.dsv.scipro.basepanels.mainmenu.MenuItem;
import se.su.dsv.scipro.knol.resource.page.ResourcePage;
import se.su.dsv.scipro.message.pages.PrivateMessagesPage;
import se.su.dsv.scipro.peer.pages.PeerReviewTemplatePage;
import se.su.dsv.scipro.project.pages.FinalSeminarProjectListPage;
import se.su.dsv.scipro.project.pages.ProjectOppositionPage;
import se.su.dsv.scipro.project.pages.ProjectPartnerPage;
import se.su.dsv.scipro.components.AbstractMenuPanel;
import se.su.dsv.scipro.project.pages.ProjectStartPage;
import se.su.dsv.scipro.project.pages.ProjectChecklistPage;
import se.su.dsv.scipro.security.auth.MetaDataActionStrategy;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.supervisor.pages.SupervisorProjectsFinalSeminarPage;
import se.su.dsv.scipro.supervisor.pages.SupervisorStartPage;
import se.su.dsv.scipro.wiquery.mainmenu.MainMenuJavascriptResourceReference;
public class MainMenuPanel extends Panel implements IWiQueryPlugin {
public class MainMenuPanel extends AbstractMenuPanel {
private static final long serialVersionUID = 3738086567246191811L;
public MainMenuPanel(String id, Class<? extends Page> containerClass) {
super(id);
add(new MainMenuItem("homeMenuItem", HomePage.MAIN_MENU_LABEL, HomePage.class, containerClass, null));
/*
* Messages
*/
MainMenuItem messagesMenuItem = new MainMenuItem("messagesMenuItem", PrivateMessagesPage.MAIN_MENU_LABEL, PrivateMessagesPage.class, containerClass, null);
MetaDataActionStrategy.authorize(messagesMenuItem, Roles.SYSADMIN); // TODO: Hidden for initial deployment
add(messagesMenuItem);
/*
* Project/Author
*/
List<MenuItem> projectMenuSubItems = new ArrayList<MenuItem>();
projectMenuSubItems.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class));
projectMenuSubItems.add(new MenuItem(ProjectOppositionPage.MAIN_MENU_LABEL, ProjectOppositionPage.class));
projectMenuSubItems.add(new MenuItem(FinalSeminarProjectListPage.MAIN_MENU_LABEL, FinalSeminarProjectListPage.class));
MainMenuItem projectMenuItem = new MainMenuItem("projectMenuItem", ProjectStartPage.MAIN_MENU_LABEL, ProjectStartPage.class, containerClass, projectMenuSubItems);
add(projectMenuItem);
/*
* Supervisor
*/
List<MenuItem> supervisorMenuSubItems = new ArrayList<MenuItem>();
//supervisorMenuSubItems.add(new MenuItem("Schedule Templates", SupervisorProjectsFinalSeminarPage.class));
supervisorMenuSubItems.add(new MenuItem(SupervisorStartPage.MAIN_MENU_LABEL, SupervisorStartPage.class));
supervisorMenuSubItems.add(new MenuItem(SupervisorProjectsFinalSeminarPage.MAIN_MENU_LABEL, SupervisorProjectsFinalSeminarPage.class));
MainMenuItem supervisorMenuItem = new MainMenuItem("supervisorMenuItem", SupervisorStartPage.MAIN_MENU_LABEL, SupervisorStartPage.class, containerClass, supervisorMenuSubItems);
MetaDataActionStrategy.authorize(supervisorMenuItem, new Roles[]{Roles.EXTERNAL, Roles.EMPLOYEE});
add(supervisorMenuItem);
/*
* Resource
*/
MainMenuItem resourcesMenuItem = new MainMenuItem("resourcesMenuItem", ResourcePage.MAIN_MENU_LABEL, ResourcePage.class, containerClass, null);
MetaDataActionStrategy.authorize(resourcesMenuItem, Roles.SYSADMIN ); // TODO: Hidden for initial deployment
add(resourcesMenuItem);
/*
* Admin
*/
List<MenuItem> adminMenuSubItems = new ArrayList<MenuItem>();
adminMenuSubItems.add(new MenuItem(AdminScheduleTemplatesPage.MAIN_MENU_LABEL, AdminScheduleTemplatesPage.class));
adminMenuSubItems.add(new MenuItem(SystemMaintenancePage.MAIN_MENU_LABEL, SystemMaintenancePage.class));
adminMenuSubItems.add(new MenuItem(ProjectManagementPage.MAIN_MENU_LABEL, ProjectManagementPage.class));
adminMenuSubItems.add(new MenuItem(PeerReviewTemplatePage.MAIN_MENU_LABEL, PeerReviewTemplatePage.class));
MainMenuItem adminMenuItem = new MainMenuItem("adminMenuItem", AdminStartPage.MAIN_MENU_LABEL, AdminStartPage.class, containerClass, adminMenuSubItems);
MetaDataActionStrategy.authorize(adminMenuItem, Roles.ADMIN);
add(adminMenuItem);
UserLinksPanel userLinksPanel = new UserLinksPanel("userLinksPanel");
add(userLinksPanel);
super(id,HomePage.class,containerClass);
}
@Override
public void contribute(WiQueryResourceManager wiQueryResourceManager) {
wiQueryResourceManager.addJavaScriptResource(MainMenuJavascriptResourceReference.get());
}
@Override
public JsStatement statement() {
return null;
}
/**
* @deprecated see {@link se.su.dsv.scipro.basepanels.mainmenu.AbstractMainMenuItem#getMenuLink(String)}
*/
@SuppressWarnings("unused")
private BookmarkablePageLink<Void> getMenuLink(String id, final Class<? extends Page> targetPageClass, final Class<? extends Page> containerClass){
return getMenuLink(id, targetPageClass, null, containerClass);
protected List<MenuItem> getItemList(){
List<MenuItem> list = new ArrayList<MenuItem>();
list.add(new MenuItem(ProjectStartPage.MAIN_MENU_LABEL,ProjectStartPage.class));
list.add(new MenuItem(SupervisorStartPage.MAIN_MENU_LABEL,SupervisorStartPage.class));
list.add(new MenuItem(AdminStartPage.MAIN_MENU_LABEL,AdminStartPage.class));
return list;
}
/**
* @deprecated see {@link se.su.dsv.scipro.basepanels.mainmenu.AbstractMainMenuItem#getMenuLink(String, PageParameters)}
*/
private BookmarkablePageLink<Void> getMenuLink(String id, final Class<? extends Page> targetPageClass, final PageParameters pp, final Class<? extends Page> containerClass){
BookmarkablePageLink<Void> result = new BookmarkablePageLink<Void>(id, targetPageClass, pp);
result.setOutputMarkupId(true);
if(targetPageClass == containerClass || (targetPageClass.getSuperclass().isAssignableFrom(containerClass) && targetPageClass.getSuperclass() != MenuPage.class) ){
result.setMarkupId("current");
}
return result;
@Override
protected MenuType getMenuType() {
return MenuType.HORIZONTAL;
}
}

@ -0,0 +1,29 @@
package se.su.dsv.scipro.basepanels;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Page;
import se.su.dsv.scipro.basepages.MenuPage;
import se.su.dsv.scipro.components.AbstractMenuPanel;
import se.su.dsv.scipro.knol.resource.page.ResourcePage;
import se.su.dsv.scipro.message.pages.PrivateMessagesPage;
public class ServiceMenuPanel extends AbstractMenuPanel {
private static final long serialVersionUID = 3738086567246191811L;
public ServiceMenuPanel(String id, Class<? extends Page> containerClass) {
super(id,MenuPage.class,containerClass);
}
@Override
protected List<MenuItem> getItemList(){
List<MenuItem> list = new ArrayList<MenuItem>();
list.add(new MenuItem(ResourcePage.MAIN_MENU_LABEL,ResourcePage.class));
list.add(new MenuItem(PrivateMessagesPage.MAIN_MENU_LABEL,PrivateMessagesPage.class));
return list;
}
@Override
protected MenuType getMenuType() {
return MenuType.HORIZONTAL;
}
}

@ -1,62 +0,0 @@
package se.su.dsv.scipro.basepanels.mainmenu;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.Panel;
import se.su.dsv.scipro.basepages.MenuPage;
/**
* Abstract Class for Main Menu Items
*
* @author patrick
*
*/
public abstract class AbstractMainMenuItem extends Panel {
private static final long serialVersionUID = 2849283400267381932L;
protected Class<? extends Page> targetPageClass;
protected Class<? extends Page> containerPageClass;
private String menuLabel;
protected BookmarkablePageLink<Void> menuItemLink;
public AbstractMainMenuItem(String id, String label, Class<? extends Page> targetPageClass, Class<? extends Page> containerPageClass) {
super(id);
this.menuLabel = label;
this.targetPageClass = targetPageClass;
this.containerPageClass = containerPageClass;
}
public String getMenuLabel() {
return menuLabel;
}
/**
* {@link #getMenuLink(String, PageParameters)}
*/
protected BookmarkablePageLink<Void> getMenuLink(String id) {
return getMenuLink(id, null);
}
/**
* Creates a bookmarkable page link for the main menu.
*
* @param id
* @param pp
* @return
* @author Martin Peters
*/
protected BookmarkablePageLink<Void> getMenuLink(String id, final PageParameters pp) {
BookmarkablePageLink<Void> result = new BookmarkablePageLink<Void>(id, targetPageClass, pp);
result.setOutputMarkupId(true);
if(targetPageClass == containerPageClass || (targetPageClass.getSuperclass().isAssignableFrom(containerPageClass) && targetPageClass.getSuperclass() != MenuPage.class) ){
//TODO Should prefereably be replaced with the line below because repeating id's aren't valid html. I couldn't get the CSS to work though //mpeters
result.setMarkupId("current");
//result.add(new AttributeAppender("class", new Model<String>("current"), " "));
}
return result;
}
}

@ -1,12 +0,0 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<span class="menu-item">
<a wicket:id="mainMenuItemLink"><span wicket:id="mainMenuItemLabel"></span></a>
<img class="nav-arrow" wicket:id="mainMenuItemArrow" />
</span>
<div class="submenu rounded-bl rounded-br"><span wicket:id="mainMenuListItemSubMenu"><span wicket:id="subMenuItem"></span></span></div>
</wicket:panel>
</body>
</html>

@ -1,79 +0,0 @@
package se.su.dsv.scipro.basepanels.mainmenu;
import java.util.List;
import org.apache.wicket.Page;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.image.ContextImage;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;
/**
* Main Menu Item, the upper level of the main menu hierarchy.
*
* @author patrick
*
*/
public class MainMenuItem extends AbstractMainMenuItem {
private static final long serialVersionUID = 6103131868992599100L;
@SuppressWarnings("unused")
private List<MenuItem> subItems;
public MainMenuItem(String id, String label, final Class<? extends Page> targetPageClass, final Class<? extends Page> containerClass, final List<MenuItem> subItems) {
super(id, label, targetPageClass, containerClass);
this.subItems = subItems;
if (subItems != null)
this.add(new AttributeAppender("class", true, new Model<String>("parent"), " "));
menuItemLink = getMenuLink("mainMenuItemLink");
menuItemLink.add(new Label("mainMenuItemLabel", getMenuLabel()));
add(menuItemLink);
ContextImage mainMenuItemArrow = new ContextImage("mainMenuItemArrow", "images/site_nav_arrow2.png") {
private static final long serialVersionUID = 1793336840409311960L;
/* (non-Javadoc)
* @see org.apache.wicket.Component#isVisible()
*/
@Override
public boolean isVisible() {
return subItems != null;
}
};
mainMenuItemArrow.setOutputMarkupPlaceholderTag(true);
add(mainMenuItemArrow);
ListView<MenuItem> subItemListView = new ListView<MenuItem>("mainMenuListItemSubMenu", subItems) {
private static final long serialVersionUID = -1444218885819118389L;
@Override
protected void populateItem(ListItem<MenuItem> item) {
MenuItem obj = item.getModelObject();
item.add(obj.createSubItem("subMenuItem", containerClass));
add(item);
}
/* (non-Javadoc)
* @see org.apache.wicket.Component#isVisible()
*/
@Override
public boolean isVisible() {
return subItems != null;
}
};
subItemListView.setOutputMarkupPlaceholderTag(true);
add(subItemListView);
}
}

@ -1,8 +0,0 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:panel>
<a href="#" wicket:id="mainMenuSubItemLink"><span wicket:id="mainMenuSubItemLabel">[Link]</span></a>
</wicket:panel>
</body>
</html>

@ -1,27 +0,0 @@
package se.su.dsv.scipro.basepanels.mainmenu;
import org.apache.wicket.Page;
import org.apache.wicket.markup.html.basic.Label;
/**
* Main Menu Sub Items
*
* @author patrick
*
*/
public class MainMenuSubItem extends AbstractMainMenuItem {
private static final long serialVersionUID = 8903203088965767242L;
public MainMenuSubItem(String id, String label, Class<? extends Page> targetPageClass,
Class<? extends Page> containerPageClass) {
super(id, label, targetPageClass, containerPageClass);
menuItemLink = getMenuLink("mainMenuSubItemLink");
menuItemLink.add(new Label("mainMenuSubItemLabel", getMenuLabel()));
add(menuItemLink);
}
}

@ -1,47 +0,0 @@
package se.su.dsv.scipro.basepanels.mainmenu;
import java.util.List;
import org.apache.wicket.IClusterable;
import org.apache.wicket.Page;
/**
* Helper Class for preparing the creation of main menu items
* @author patrick
*
*/
public class MenuItem implements IClusterable {
private static final long serialVersionUID = -5341715569517881163L;
private String menuLabel;
private Class<? extends Page> targetPageClass;
public MenuItem(String menuLabel, Class<? extends Page> targetPageClass) {
this.menuLabel = menuLabel;
this.targetPageClass = targetPageClass;
}
/**
* Creates a Main Menu Sub Item
*
* @param id
* @param containerPageClass
* @return
*/
public MainMenuSubItem createSubItem(String id, Class<? extends Page> containerPageClass) {
return new MainMenuSubItem(id, menuLabel, targetPageClass, containerPageClass);
}
/**
* Creates a Main Menu Item
*
* @param id
* @param containerPageClass
* @param subItems
* @return
*/
public MainMenuItem createMenuItem(String id, Class<? extends Page> containerPageClass, List<MenuItem> subItems) {
return new MainMenuItem(id, menuLabel, targetPageClass, containerPageClass, subItems);
}
}

@ -1,98 +1,14 @@
#main-nav {
}
#nav-list {
margin-top: 4px;
z-index: 8001;
}
#nav-list li.nav-list-item {
float: left;
display: inline;
margin: 5px 8px 0 8px;
position: relative;
}
#nav-list li.nav-list-item .menu-item {
display: block;
height: 23px;
padding: 4px 2px 3px 2px;
}
#nav-list li.nav-list-item .menu-item a {
color: #fff;
font: 1.1em/1.5 arial, sans-serif;
font-weight: bold;
text-decoration: none;
padding: 0px 4px;
}
#nav-list li.nav-list-item .menu-item > a#current {
/* padding: 0 10px 7px 10px;
border-bottom: 5px solid #ccc; */
}
.menu-item img.nav-arrow {
vertical-align: middle;
width: 23px;
height: 23px;
margin-left: 4px;
margin-right: -3px;
}
#nav-list a#current {
/* Feel free to replace with something nicer */
/* padding-bottom: 7px; */
/* border-bottom: 5px solid #ccc; */
}
#nav-list li.current .menu-item,
#nav-list li.nav-list-item:hover .menu-item {
background-color: #fff;
-webkit-border-top-left-radius: 4px;
-moz-border-radius-topleft: 4px;
border-top-left-radius: 4px;
-webkit-border-top-right-radius: 4px;
-moz-border-radius-topright: 4px;
border-top-right-radius: 4px;
text-decoration: none;
}
#nav-list li.current .menu-item a,
#nav-list li.nav-list-item:hover .menu-item a {
color: #002f5f;
}
#nav-list li.nav-list-item.parent .submenu {
position: absolute;
top: 30px;
left: -1px;
width: 140px;
background: #fff;
padding: 5px;
display: none;
border-bottom: 1px solid #ccc;
border-left: 1px solid #ccc;
border-right: 1px solid #ccc;
z-index: 8000;
}
#nav-list li.nav-list-item.parent .over {
display: block;
}
#nav-list li.nav-list-item.parent .submenu {
font-size: 0.9em;
}
#nav-list li.nav-list-item.parent .submenu a:link,
#nav-list li.nav-list-item.parent .submenu a:visited,
#nav-list li.nav-list-item.parent .submenu a:hover {
display: block;
padding: 4px;
text-decoration: none;
}
#main-nav #user-links {
margin-top: 5px;
.user-links{
margin-top:5px;
font-size: 0.9em;
text-align: right;
}
#main-nav #user-links a {
.user-links a{
color: #99acbf;
}
.main-menu{
float:left;
}
.service-menu{
float: right;
}