Merge pull request #1638 from gitbucket/feature/repository-header-plugin

Add repositoryHeaderComponent extension point
This commit is contained in:
Naoki Takezoe
2017-07-08 14:00:15 +09:00
committed by GitHub
4 changed files with 27 additions and 4 deletions

View File

@@ -121,6 +121,16 @@ abstract class Plugin {
*/ */
def pullRequestHooks(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Seq[PullRequestHook] = Nil def pullRequestHooks(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Seq[PullRequestHook] = Nil
/**
* Override to add repository headers.
*/
val repositoryHeaders: Seq[(RepositoryInfo, Context) => Option[Html]] = Nil
/**
* Override to add repository headers.
*/
def repositoryHeaders(registry: PluginRegistry, context: ServletContext, settings: SystemSettings): Seq[(RepositoryInfo, Context) => Option[Html]] = Nil
/** /**
* Override to add global menus. * Override to add global menus.
*/ */
@@ -266,6 +276,9 @@ abstract class Plugin {
(pullRequestHooks ++ pullRequestHooks(registry, context, settings)).foreach { pullRequestHook => (pullRequestHooks ++ pullRequestHooks(registry, context, settings)).foreach { pullRequestHook =>
registry.addPullRequestHook(pullRequestHook) registry.addPullRequestHook(pullRequestHook)
} }
(repositoryHeaders ++ repositoryHeaders(registry, context, settings)).foreach { repositoryHeader =>
registry.addRepositoryHeader(repositoryHeader)
}
(globalMenus ++ globalMenus(registry, context, settings)).foreach { globalMenu => (globalMenus ++ globalMenus(registry, context, settings)).foreach { globalMenu =>
registry.addGlobalMenu(globalMenu) registry.addGlobalMenu(globalMenu)
} }
@@ -287,8 +300,8 @@ abstract class Plugin {
(dashboardTabs ++ dashboardTabs(registry, context, settings)).foreach { dashboardTab => (dashboardTabs ++ dashboardTabs(registry, context, settings)).foreach { dashboardTab =>
registry.addDashboardTab(dashboardTab) registry.addDashboardTab(dashboardTab)
} }
(issueSidebars ++ issueSidebars(registry, context, settings)).foreach { issueSidebar => (issueSidebars ++ issueSidebars(registry, context, settings)).foreach { issueSidebarComponent =>
registry.addIssueSidebar(issueSidebar) registry.addIssueSidebar(issueSidebarComponent)
} }
(assetsMappings ++ assetsMappings(registry, context, settings)).foreach { assetMapping => (assetsMappings ++ assetsMappings(registry, context, settings)).foreach { assetMapping =>
registry.addAssetsMapping((assetMapping._1, assetMapping._2, getClass.getClassLoader)) registry.addAssetsMapping((assetMapping._1, assetMapping._2, getClass.getClassLoader))

View File

@@ -44,6 +44,7 @@ class PluginRegistry {
private val pullRequestHooks = new ListBuffer[PullRequestHook] private val pullRequestHooks = new ListBuffer[PullRequestHook]
pullRequestHooks += new gitbucket.core.util.Notifier.PullRequestHook() pullRequestHooks += new gitbucket.core.util.Notifier.PullRequestHook()
private val repositoryHeaders = new ListBuffer[(RepositoryInfo, Context) => Option[Html]]
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 repositoryMenus = new ListBuffer[(RepositoryInfo, Context) => Option[Link]]
private val repositorySettingTabs = new ListBuffer[(RepositoryInfo, Context) => Option[Link]] private val repositorySettingTabs = new ListBuffer[(RepositoryInfo, Context) => Option[Link]]
@@ -128,6 +129,10 @@ class PluginRegistry {
def getPullRequestHooks: Seq[PullRequestHook] = pullRequestHooks.toSeq def getPullRequestHooks: Seq[PullRequestHook] = pullRequestHooks.toSeq
def addRepositoryHeader(repositoryHeader: (RepositoryInfo, Context) => Option[Html]): Unit = repositoryHeaders += repositoryHeader
def getRepositoryHeaders: Seq[(RepositoryInfo, Context) => Option[Html]] = repositoryHeaders.toSeq
def addGlobalMenu(globalMenu: (Context) => Option[Link]): Unit = globalMenus += globalMenu def addGlobalMenu(globalMenu: (Context) => Option[Link]): Unit = globalMenus += globalMenu
def getGlobalMenus: Seq[(Context) => Option[Link]] = globalMenus.toSeq def getGlobalMenus: Seq[(Context) => Option[Link]] = globalMenus.toSeq

View File

@@ -148,8 +148,8 @@
<input type="hidden" name="assignedUserName" value=""/> <input type="hidden" name="assignedUserName" value=""/>
} }
@issue.map { issue => @issue.map { issue =>
@gitbucket.core.plugin.PluginRegistry().getIssueSidebars.map { sidebar => @gitbucket.core.plugin.PluginRegistry().getIssueSidebars.map { sidebarComponent =>
@sidebar(issue, repository, context) @sidebarComponent(issue, repository, context)
} }
<hr/> <hr/>
<div style="margin-bottom: 14px;"> <div style="margin-bottom: 14px;">

View File

@@ -74,6 +74,11 @@
@gitbucket.core.helper.html.information(info) @gitbucket.core.helper.html.information(info)
@gitbucket.core.helper.html.error(error) @gitbucket.core.helper.html.error(error)
<div class="head"> <div class="head">
<div class="pull-right">
@gitbucket.core.plugin.PluginRegistry().getRepositoryHeaders.map { repositoryHeaderComponent =>
@repositoryHeaderComponent(repository, context)
}
</div>
@gitbucket.core.helper.html.repositoryicon(repository, true) @gitbucket.core.helper.html.repositoryicon(repository, true)
<a href="@helpers.url(repository.owner)">@repository.owner</a> / <a href="@helpers.url(repository)" class="strong">@repository.name</a> <a href="@helpers.url(repository.owner)">@repository.owner</a> / <a href="@helpers.url(repository)" class="strong">@repository.name</a>