/* | |||||
* Copyright 2014 gitblit.com. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package com.gitblit.extensions; | |||||
import java.util.List; | |||||
import ro.fortsoft.pf4j.ExtensionPoint; | |||||
import com.gitblit.models.Menu.MenuItem; | |||||
import com.gitblit.models.UserModel; | |||||
/** | |||||
* Extension point to contribute user menu items. | |||||
* | |||||
* @author James Moger | |||||
* @since 1.6.0 | |||||
* | |||||
*/ | |||||
public abstract class UserMenuExtension implements ExtensionPoint { | |||||
/** | |||||
* @param user | |||||
* @since 1.6.0 | |||||
* @return a list of menu items | |||||
*/ | |||||
public abstract List<MenuItem> getMenuItems(UserModel user); | |||||
} |
import com.gitblit.wicket.pages.SummaryPage; | import com.gitblit.wicket.pages.SummaryPage; | ||||
import com.gitblit.wicket.pages.TagPage; | import com.gitblit.wicket.pages.TagPage; | ||||
import com.gitblit.wicket.pages.TagsPage; | import com.gitblit.wicket.pages.TagsPage; | ||||
import com.gitblit.wicket.pages.TeamsPage; | |||||
import com.gitblit.wicket.pages.TicketsPage; | import com.gitblit.wicket.pages.TicketsPage; | ||||
import com.gitblit.wicket.pages.TreePage; | import com.gitblit.wicket.pages.TreePage; | ||||
import com.gitblit.wicket.pages.UserPage; | import com.gitblit.wicket.pages.UserPage; | ||||
mount("/metrics", MetricsPage.class, "r"); | mount("/metrics", MetricsPage.class, "r"); | ||||
mount("/blame", BlamePage.class, "r", "h", "f"); | mount("/blame", BlamePage.class, "r", "h", "f"); | ||||
mount("/users", UsersPage.class); | mount("/users", UsersPage.class); | ||||
mount("/teams", TeamsPage.class); | |||||
mount("/logout", LogoutPage.class); | mount("/logout", LogoutPage.class); | ||||
// setup ticket urls | // setup ticket urls |
gb.overdue = overdue | gb.overdue = overdue | ||||
gb.openMilestones = open milestones | gb.openMilestones = open milestones | ||||
gb.closedMilestones = closed milestones | gb.closedMilestones = closed milestones | ||||
gb.adminMenuItem = admin | |||||
gb.administration = administration | |||||
gb.plugins = plugins | |||||
gb.extensions = extensions | |||||
public final String url; | public final String url; | ||||
public OtherPageLink(String translationKey, String url) { | |||||
super(translationKey, null); | |||||
public OtherPageLink(String keyOrText, String url) { | |||||
super(keyOrText, null); | |||||
this.url = url; | this.url = url; | ||||
} | } | ||||
public OtherPageLink(String translationKey, String url, boolean hiddenPhone) { | |||||
super(translationKey, null, null, hiddenPhone); | |||||
public OtherPageLink(String keyOrText, String url, boolean hiddenPhone) { | |||||
super(keyOrText, null, null, hiddenPhone); | |||||
this.url = url; | this.url = url; | ||||
} | } | ||||
} | } | ||||
public final List<MenuItem> menuItems; | public final List<MenuItem> menuItems; | ||||
public DropDownMenuRegistration(String translationKey, Class<? extends WebPage> pageClass) { | |||||
super(translationKey, pageClass); | |||||
public DropDownMenuRegistration(String keyOrText, Class<? extends WebPage> pageClass) { | |||||
super(keyOrText, pageClass); | |||||
menuItems = new ArrayList<MenuItem>(); | menuItems = new ArrayList<MenuItem>(); | ||||
} | } | ||||
} | } |
<li class="dropdown"> | <li class="dropdown"> | ||||
<a data-toggle="dropdown" class="dropdown-toggle" style="text-decoration: none;" href="#"><span wicket:id="username"></span> <b class="caret"></b></a> | <a data-toggle="dropdown" class="dropdown-toggle" style="text-decoration: none;" href="#"><span wicket:id="username"></span> <b class="caret"></b></a> | ||||
<ul class="dropdown-menu"> | <ul class="dropdown-menu"> | ||||
<li style="color:#ccc;padding-left:15px;font-weight:bold;"><span wicket:id="displayName"></span></li> | |||||
<li class="divider"></li> | |||||
<li><a wicket:id="newRepository"><wicket:message key="gb.newRepository"></wicket:message></a></li> | |||||
<li><a wicket:id="myProfile"><wicket:message key="gb.myProfile"></wicket:message></a></li> | |||||
<li><a wicket:id="changePassword"><wicket:message key="gb.changePassword"></wicket:message></a></li> | |||||
<li class="divider"></li> | |||||
<span wicket:id="standardMenu"></span> | |||||
<span wicket:id="adminMenu"></span> | |||||
<span wicket:id="extensionsMenu"></span> | |||||
<li><a wicket:id="logout"><wicket:message key="gb.logout"></wicket:message></a></li> | <li><a wicket:id="logout"><wicket:message key="gb.logout"></wicket:message></a></li> | ||||
</ul> | </ul> | ||||
</li> | </li> | ||||
</wicket:fragment> | </wicket:fragment> | ||||
<wicket:fragment wicket:id="submenuFragment"> | |||||
<li style="color:#ccc;padding-left:15px;font-weight:bold;"><span wicket:id="submenuTitle"></span></li> | |||||
<li wicket:id="submenuItem"><span wicket:id="submenuLink"></span></li> | |||||
</wicket:fragment> | |||||
</wicket:extend> | </wicket:extend> | ||||
</body> | </body> |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |||||
<html xmlns="http://www.w3.org/1999/xhtml" | |||||
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" | |||||
xml:lang="en" | |||||
lang="en"> | |||||
<body> | |||||
<wicket:extend> | |||||
<div class="container"> | |||||
<div wicket:id="teamsPanel">[teams panel]</div> | |||||
</div> | |||||
</wicket:extend> | |||||
</body> | |||||
</html> |
/* | |||||
* Copyright 2011 gitblit.com. | |||||
* | |||||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||||
* you may not use this file except in compliance with the License. | |||||
* You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
package com.gitblit.wicket.pages; | |||||
import com.gitblit.wicket.RequiresAdminRole; | |||||
import com.gitblit.wicket.panels.TeamsPanel; | |||||
@RequiresAdminRole | |||||
public class TeamsPage extends RootPage { | |||||
public TeamsPage() { | |||||
super(); | |||||
setupPage("", ""); | |||||
add(new TeamsPanel("teamsPanel", showAdmin).setVisible(showAdmin)); | |||||
} | |||||
} |
<body> | <body> | ||||
<wicket:extend> | <wicket:extend> | ||||
<div class="container"> | <div class="container"> | ||||
<div wicket:id="teamsPanel">[teams panel]</div> | |||||
<div wicket:id="usersPanel">[users panel]</div> | <div wicket:id="usersPanel">[users panel]</div> | ||||
</div> | </div> | ||||
</wicket:extend> | </wicket:extend> |
package com.gitblit.wicket.pages; | package com.gitblit.wicket.pages; | ||||
import com.gitblit.wicket.RequiresAdminRole; | import com.gitblit.wicket.RequiresAdminRole; | ||||
import com.gitblit.wicket.panels.TeamsPanel; | |||||
import com.gitblit.wicket.panels.UsersPanel; | import com.gitblit.wicket.panels.UsersPanel; | ||||
@RequiresAdminRole | @RequiresAdminRole | ||||
super(); | super(); | ||||
setupPage("", ""); | setupPage("", ""); | ||||
add(new TeamsPanel("teamsPanel", showAdmin).setVisible(showAdmin)); | |||||
add(new UsersPanel("usersPanel", showAdmin).setVisible(showAdmin)); | add(new UsersPanel("usersPanel", showAdmin).setVisible(showAdmin)); | ||||
} | } | ||||
} | } |
@Override | @Override | ||||
public void populateItem(final Item<PageRegistration> item) { | public void populateItem(final Item<PageRegistration> item) { | ||||
PageRegistration entry = item.getModelObject(); | PageRegistration entry = item.getModelObject(); | ||||
String linkText = entry.translationKey; | |||||
try { | |||||
// try to lookup translation key | |||||
linkText = getString(entry.translationKey); | |||||
} catch (Exception e) { | |||||
} | |||||
if (entry.hiddenPhone) { | if (entry.hiddenPhone) { | ||||
WicketUtils.setCssClass(item, "hidden-phone"); | WicketUtils.setCssClass(item, "hidden-phone"); | ||||
} | } | ||||
if (entry instanceof OtherPageLink) { | if (entry instanceof OtherPageLink) { | ||||
// other link | // other link | ||||
OtherPageLink link = (OtherPageLink) entry; | OtherPageLink link = (OtherPageLink) entry; | ||||
Component c = new LinkPanel("link", null, getString(entry.translationKey), link.url); | |||||
Component c = new LinkPanel("link", null, linkText, link.url); | |||||
c.setRenderBodyOnly(true); | c.setRenderBodyOnly(true); | ||||
item.add(c); | item.add(c); | ||||
} else if (entry instanceof DropDownMenuRegistration) { | } else if (entry instanceof DropDownMenuRegistration) { | ||||
// drop down menu | // drop down menu | ||||
DropDownMenuRegistration reg = (DropDownMenuRegistration) entry; | DropDownMenuRegistration reg = (DropDownMenuRegistration) entry; | ||||
Component c = new DropDownMenu("link", getString(entry.translationKey), reg); | |||||
Component c = new DropDownMenu("link", linkText, reg); | |||||
c.setRenderBodyOnly(true); | c.setRenderBodyOnly(true); | ||||
item.add(c); | item.add(c); | ||||
WicketUtils.setCssClass(item, "dropdown"); | WicketUtils.setCssClass(item, "dropdown"); | ||||
} else { | } else { | ||||
// standard page link | // standard page link | ||||
Component c = new LinkPanel("link", null, getString(entry.translationKey), | |||||
Component c = new LinkPanel("link", null, linkText, | |||||
entry.pageClass, entry.params); | entry.pageClass, entry.params); | ||||
c.setRenderBodyOnly(true); | c.setRenderBodyOnly(true); | ||||
if (entry.pageClass.equals(pageClass)) { | if (entry.pageClass.equals(pageClass)) { |
} | } | ||||
``` | ``` | ||||
### Admin Menu Items | |||||
### User Menu Items | |||||
*SINCE 1.6.0* | *SINCE 1.6.0* | ||||
You can provide your own admin menu items by subclassing the *AdminMenuExtension* class. | |||||
You can provide your own user menu items by subclassing the *UserMenuExtension* class. | |||||
```java | ```java | ||||
import java.util.Arrays; | import java.util.Arrays; | ||||
import java.util.List; | import java.util.List; | ||||
import ro.fortsoft.pf4j.Extension; | import ro.fortsoft.pf4j.Extension; | ||||
import com.gitblit.extensions.AdminMenuExtension; | |||||
import com.gitblit.extensions.UserMenuExtension; | |||||
import com.gitblit.models.Menu.ExternalLinkMenuItem; | import com.gitblit.models.Menu.ExternalLinkMenuItem; | ||||
import com.gitblit.models.Menu.MenuItem; | import com.gitblit.models.Menu.MenuItem; | ||||
import com.gitblit.models.UserModel; | import com.gitblit.models.UserModel; | ||||
@Extension | @Extension | ||||
public class MyAdminMenuContributor extends AdminMenuExtension { | |||||
public class MyUserMenuContributor extends UserMenuExtension { | |||||
@Override | @Override | ||||
public List<MenuItem> getMenuItems(UserModel user) { | public List<MenuItem> getMenuItems(UserModel user) { | ||||
} | } | ||||
} | } | ||||
``` | ``` | ||||