mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-08 22:45:51 +01:00
(refs #464)Add new extension point to add buttons
This commit is contained in:
@@ -9,6 +9,7 @@ import util.Implicits._
|
||||
import util.ControlUtil._
|
||||
import org.scalatra.Ok
|
||||
import model.Issue
|
||||
import plugin.PluginSystem
|
||||
|
||||
class IssuesController extends IssuesControllerBase
|
||||
with IssuesService with RepositoryService with AccountService with LabelsService with MilestonesService with ActivityService
|
||||
@@ -396,7 +397,8 @@ trait IssuesControllerBase extends ControllerBase {
|
||||
condition,
|
||||
filter,
|
||||
repository,
|
||||
hasWritePermission(owner, repoName, context.loginAccount))
|
||||
hasWritePermission(owner, repoName, context.loginAccount),
|
||||
PluginSystem.buttons("issues"))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,11 @@ trait Plugin {
|
||||
val url: String
|
||||
val description: String
|
||||
|
||||
def repositoryMenus : List[RepositoryMenu]
|
||||
def globalMenus : List[GlobalMenu]
|
||||
def repositoryActions : List[RepositoryAction]
|
||||
def globalActions : List[Action]
|
||||
def repositoryMenus : List[RepositoryMenu]
|
||||
def globalMenus : List[GlobalMenu]
|
||||
def repositoryActions : List[RepositoryAction]
|
||||
def globalActions : List[Action]
|
||||
def buttons(name: String) : List[Button]
|
||||
}
|
||||
|
||||
object PluginConnectionHolder {
|
||||
|
||||
@@ -81,10 +81,11 @@ object PluginSystem {
|
||||
}
|
||||
}
|
||||
|
||||
def repositoryMenus : List[RepositoryMenu] = pluginsMap.values.flatMap(_.repositoryMenus).toList
|
||||
def globalMenus : List[GlobalMenu] = pluginsMap.values.flatMap(_.globalMenus).toList
|
||||
def repositoryActions : List[RepositoryAction] = pluginsMap.values.flatMap(_.repositoryActions).toList
|
||||
def globalActions : List[Action] = pluginsMap.values.flatMap(_.globalActions).toList
|
||||
def repositoryMenus : List[RepositoryMenu] = pluginsMap.values.flatMap(_.repositoryMenus).toList
|
||||
def globalMenus : List[GlobalMenu] = pluginsMap.values.flatMap(_.globalMenus).toList
|
||||
def repositoryActions : List[RepositoryAction] = pluginsMap.values.flatMap(_.repositoryActions).toList
|
||||
def globalActions : List[Action] = pluginsMap.values.flatMap(_.globalActions).toList
|
||||
def buttons(name: String) : List[Button] = pluginsMap.values.flatMap(_.buttons(name)).toList
|
||||
|
||||
// Case classes to hold plug-ins information internally in GitBucket
|
||||
case class PluginRepository(id: String, url: String)
|
||||
@@ -92,6 +93,7 @@ object PluginSystem {
|
||||
case class RepositoryMenu(label: String, name: String, url: String, icon: String, condition: Context => Boolean)
|
||||
case class Action(path: String, function: (HttpServletRequest, HttpServletResponse) => Any)
|
||||
case class RepositoryAction(path: String, function: (HttpServletRequest, HttpServletResponse, RepositoryInfo) => Any)
|
||||
case class Button(label: String, href: String)
|
||||
|
||||
/**
|
||||
* Checks whether the plugin is updatable.
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package plugin
|
||||
|
||||
import scala.collection.mutable.ListBuffer
|
||||
import scala.collection.mutable.{Map => MutableMap}
|
||||
import javax.servlet.http.{HttpServletResponse, HttpServletRequest}
|
||||
import plugin.PluginSystem.GlobalMenu
|
||||
import plugin.PluginSystem.Action
|
||||
import plugin.PluginSystem.RepositoryAction
|
||||
import plugin.PluginSystem._
|
||||
import app.Context
|
||||
import plugin.PluginSystem.RepositoryMenu
|
||||
import service.RepositoryService.RepositoryInfo
|
||||
@@ -19,11 +18,13 @@ class ScalaPlugin(val id: String, val version: String,
|
||||
private val globalMenuList = ListBuffer[GlobalMenu]()
|
||||
private val repositoryActionList = ListBuffer[RepositoryAction]()
|
||||
private val globalActionList = ListBuffer[Action]()
|
||||
private val buttonMap = MutableMap[String, ListBuffer[Button]]()
|
||||
|
||||
def repositoryMenus : List[RepositoryMenu] = repositoryMenuList.toList
|
||||
def globalMenus : List[GlobalMenu] = globalMenuList.toList
|
||||
def repositoryActions : List[RepositoryAction] = repositoryActionList.toList
|
||||
def globalActions : List[Action] = globalActionList.toList
|
||||
def repositoryMenus : List[RepositoryMenu] = repositoryMenuList.toList
|
||||
def globalMenus : List[GlobalMenu] = globalMenuList.toList
|
||||
def repositoryActions : List[RepositoryAction] = repositoryActionList.toList
|
||||
def globalActions : List[Action] = globalActionList.toList
|
||||
def buttons(name: String) : List[Button] = buttonMap.get(name).map(_.toList).getOrElse(Nil)
|
||||
|
||||
def addRepositoryMenu(label: String, name: String, url: String, icon: String)(condition: (Context) => Boolean): Unit = {
|
||||
repositoryMenuList += RepositoryMenu(label, name, url, icon, condition)
|
||||
@@ -41,6 +42,14 @@ class ScalaPlugin(val id: String, val version: String,
|
||||
repositoryActionList += RepositoryAction(path, function)
|
||||
}
|
||||
|
||||
def addButton(name: String, label: String, href: String): Unit = {
|
||||
if(!buttonMap.contains(name)){
|
||||
buttonMap.put(name, ListBuffer[Button]())
|
||||
}
|
||||
val list = buttonMap(name)
|
||||
list += Button(label, href)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
object ScalaPlugin {
|
||||
|
||||
Reference in New Issue
Block a user