diff --git a/src/main/scala/plugin/PluginSystem.scala b/src/main/scala/plugin/PluginSystem.scala new file mode 100644 index 0000000..2733333 --- /dev/null +++ b/src/main/scala/plugin/PluginSystem.scala @@ -0,0 +1,35 @@ +package plugin + +import app.Context + +/** + * Provides extension points to plug-ins. + */ +object PluginSystem { + + private val repositoryMenuList = scala.collection.mutable.ListBuffer[Menu]() + private val globalMenuList = scala.collection.mutable.ListBuffer[Menu]() + + case class Menu(label: String, url: String, icon: String, condition: Context => Boolean) + + def addRepositoryMenu(label: String, url: String, icon: String = "")(condition: Context => Boolean): Unit = { + repositoryMenuList += Menu(label, url, icon, condition) + } + + def addGlobalMenu(label: String, url: String, icon: String = "")(condition: Context => Boolean): Unit = { + globalMenuList += Menu(label, url, icon, condition) + } + + def addAction(path: String): Unit = { + // TODO + } + + def repositoryMenus: List[Menu] = repositoryMenuList.toList + def globalMenus: List[Menu] = globalMenuList.toList + + // TODO This is a test + addGlobalMenu("Google", "http://www.google.co.jp/"){ context => context.loginAccount.isDefined } + +} + + diff --git a/src/main/twirl/main.scala.html b/src/main/twirl/main.scala.html index 5d66445..7df46c5 100644 --- a/src/main/twirl/main.scala.html +++ b/src/main/twirl/main.scala.html @@ -60,11 +60,21 @@
  • New group
  • + @plugin.PluginSystem.globalMenus.map { menu => + @if(menu.condition(context)){ + @menu.label + } + } @if(loginAccount.get.isAdmin){ } } else { + @plugin.PluginSystem.globalMenus.map { menu => + @if(menu.condition(context)){ + @menu.label + } + } Sign in }