(refs #1161)Add new extension point to add repository menu

This commit is contained in:
Naoki Takezoe
2016-04-04 23:31:05 +09:00
parent 8ed0c8a170
commit e44fed09fa
3 changed files with 31 additions and 4 deletions

View File

@@ -3,6 +3,7 @@ package gitbucket.core.plugin
import javax.servlet.ServletContext import javax.servlet.ServletContext
import gitbucket.core.controller.{Context, ControllerBase} import gitbucket.core.controller.{Context, ControllerBase}
import gitbucket.core.model.Account import gitbucket.core.model.Account
import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.service.SystemSettingsService.SystemSettings import gitbucket.core.service.SystemSettingsService.SystemSettings
import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.ControlUtil._
import gitbucket.core.util.Version import gitbucket.core.util.Version
@@ -88,6 +89,16 @@ abstract class Plugin {
*/ */
def globalMenus(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Seq[(Context) => Option[Link]] = Nil def globalMenus(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Seq[(Context) => Option[Link]] = Nil
/**
* Override to add repository menus.
*/
val repositoryMenus: Seq[(RepositoryInfo, Context) => Option[Link]] = Nil
/**
* Override to add repository menus.
*/
def repositoryMenus(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Seq[(RepositoryInfo, Context) => Option[Link]] = Nil
/** /**
* Override to add profile tabs. * Override to add profile tabs.
*/ */
@@ -124,6 +135,9 @@ abstract class Plugin {
(globalMenus ++ globalMenus(registry, context, settings)).foreach { globalMenu => (globalMenus ++ globalMenus(registry, context, settings)).foreach { globalMenu =>
registry.addGlobalMenu(globalMenu) registry.addGlobalMenu(globalMenu)
} }
(repositoryMenus ++ repositoryMenus(registry, context, settings)).foreach { repositoryMenu =>
registry.addRepositoryMenu(repositoryMenu)
}
(profileTabs ++ profileTabs(registry, context, settings)).foreach { profileTab => (profileTabs ++ profileTabs(registry, context, settings)).foreach { profileTab =>
registry.addProfileTab(profileTab) registry.addProfileTab(profileTab)
} }

View File

@@ -7,6 +7,7 @@ import javax.servlet.ServletContext
import gitbucket.core.controller.{Context, ControllerBase} import gitbucket.core.controller.{Context, ControllerBase}
import gitbucket.core.model.Account import gitbucket.core.model.Account
import gitbucket.core.service.ProtectedBranchService.ProtectedBranchReceiveHook import gitbucket.core.service.ProtectedBranchService.ProtectedBranchReceiveHook
import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.service.SystemSettingsService.SystemSettings import gitbucket.core.service.SystemSettingsService.SystemSettings
import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.ControlUtil._
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
@@ -33,6 +34,7 @@ class PluginRegistry {
receiveHooks += new ProtectedBranchReceiveHook() receiveHooks += new ProtectedBranchReceiveHook()
private val globalMenus = new ListBuffer[(Context) => Option[Link]] private val globalMenus = new ListBuffer[(Context) => Option[Link]]
private val repositoryMenus = new ListBuffer[(RepositoryInfo, Context) => Option[Link]]
private val profileTabs = new ListBuffer[(Account, Context) => Option[Link]] private val profileTabs = new ListBuffer[(Account, Context) => Option[Link]]
def addPlugin(pluginInfo: PluginInfo): Unit = { def addPlugin(pluginInfo: PluginInfo): Unit = {
@@ -109,14 +111,20 @@ class PluginRegistry {
def getReceiveHooks: Seq[ReceiveHook] = receiveHooks.toSeq def getReceiveHooks: Seq[ReceiveHook] = receiveHooks.toSeq
def addGlobalMenu(menu: (Context) => Option[Link]): Unit = { def addGlobalMenu(globalMenu: (Context) => Option[Link]): Unit = {
globalMenus += menu globalMenus += globalMenu
} }
def getGlobalMenus: Seq[(Context) => Option[Link]] = globalMenus.toSeq def getGlobalMenus: Seq[(Context) => Option[Link]] = globalMenus.toSeq
def addProfileTab(tab: (Account, Context) => Option[Link]): Unit = { def addRepositoryMenu(repositoryMenu: (RepositoryInfo, Context) => Option[Link]): Unit = {
profileTabs += tab repositoryMenus += repositoryMenu
}
def getRepositoryMenus: Seq[(RepositoryInfo, Context) => Option[Link]] = repositoryMenus.toSeq
def addProfileTab(profileTab: (Account, Context) => Option[Link]): Unit = {
profileTabs += profileTab
} }
def getProfileTabs: Seq[(Account, Context) => Option[Link]] = profileTabs.toSeq def getProfileTabs: Seq[(Account, Context) => Option[Link]] = profileTabs.toSeq

View File

@@ -55,6 +55,11 @@
@if(loginAccount.isDefined && (loginAccount.get.isAdmin || repository.managers.contains(loginAccount.get.userName))){ @if(loginAccount.isDefined && (loginAccount.get.isAdmin || repository.managers.contains(loginAccount.get.userName))){
@menuitem("/settings" , "settings" , "Settings") @menuitem("/settings" , "settings" , "Settings")
} }
@gitbucket.core.plugin.PluginRegistry().getRepositoryMenus.map { menu =>
@menu(repository, context).map { link =>
@menuitem(link.path, link.id, link.label)
}
}
</ul> </ul>
</div> </div>
<div class="main-content"> <div class="main-content">