diff --git a/src/main/scala/gitbucket/core/plugin/Plugin.scala b/src/main/scala/gitbucket/core/plugin/Plugin.scala index 8d4a046..67ad664 100644 --- a/src/main/scala/gitbucket/core/plugin/Plugin.scala +++ b/src/main/scala/gitbucket/core/plugin/Plugin.scala @@ -3,6 +3,7 @@ import javax.servlet.ServletContext import gitbucket.core.controller.{Context, ControllerBase} import gitbucket.core.model.Account +import gitbucket.core.service.RepositoryService.RepositoryInfo import gitbucket.core.service.SystemSettingsService.SystemSettings import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.Version @@ -89,6 +90,16 @@ 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. */ val profileTabs: Seq[(Account, Context) => Option[Link]] = Nil @@ -124,6 +135,9 @@ (globalMenus ++ globalMenus(registry, context, settings)).foreach { globalMenu => registry.addGlobalMenu(globalMenu) } + (repositoryMenus ++ repositoryMenus(registry, context, settings)).foreach { repositoryMenu => + registry.addRepositoryMenu(repositoryMenu) + } (profileTabs ++ profileTabs(registry, context, settings)).foreach { profileTab => registry.addProfileTab(profileTab) } diff --git a/src/main/scala/gitbucket/core/plugin/PluginRegistory.scala b/src/main/scala/gitbucket/core/plugin/PluginRegistory.scala index e11e7d3..b506908 100644 --- a/src/main/scala/gitbucket/core/plugin/PluginRegistory.scala +++ b/src/main/scala/gitbucket/core/plugin/PluginRegistory.scala @@ -7,6 +7,7 @@ import gitbucket.core.controller.{Context, ControllerBase} import gitbucket.core.model.Account import gitbucket.core.service.ProtectedBranchService.ProtectedBranchReceiveHook +import gitbucket.core.service.RepositoryService.RepositoryInfo import gitbucket.core.service.SystemSettingsService.SystemSettings import gitbucket.core.util.ControlUtil._ import gitbucket.core.util.Directory._ @@ -33,6 +34,7 @@ receiveHooks += new ProtectedBranchReceiveHook() 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]] def addPlugin(pluginInfo: PluginInfo): Unit = { @@ -109,14 +111,20 @@ def getReceiveHooks: Seq[ReceiveHook] = receiveHooks.toSeq - def addGlobalMenu(menu: (Context) => Option[Link]): Unit = { - globalMenus += menu + def addGlobalMenu(globalMenu: (Context) => Option[Link]): Unit = { + globalMenus += globalMenu } def getGlobalMenus: Seq[(Context) => Option[Link]] = globalMenus.toSeq - def addProfileTab(tab: (Account, Context) => Option[Link]): Unit = { - profileTabs += tab + def addRepositoryMenu(repositoryMenu: (RepositoryInfo, Context) => Option[Link]): Unit = { + 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 diff --git a/src/main/twirl/gitbucket/core/menu.scala.html b/src/main/twirl/gitbucket/core/menu.scala.html index 02f8bc0..b451b1a 100644 --- a/src/main/twirl/gitbucket/core/menu.scala.html +++ b/src/main/twirl/gitbucket/core/menu.scala.html @@ -55,6 +55,11 @@ @if(loginAccount.isDefined && (loginAccount.get.isAdmin || repository.managers.contains(loginAccount.get.userName))){ @menuitem("/settings" , "settings" , "Settings") } + @gitbucket.core.plugin.PluginRegistry().getRepositoryMenus.map { menu => + @menu(repository, context).map { link => + @menuitem(link.path, link.id, link.label) + } + }