diff --git a/src/main/scala/plugin/package.scala b/src/main/scala/plugin/package.scala index 56c1b4a..ffb519b 100644 --- a/src/main/scala/plugin/package.scala +++ b/src/main/scala/plugin/package.scala @@ -1,10 +1,12 @@ import java.sql.PreparedStatement +import play.twirl.api.Html import util.ControlUtil._ import scala.collection.mutable.ListBuffer package object plugin { case class Redirect(path: String) + case class Fragment(html: Html) object db { // TODO labelled place holder support diff --git a/src/main/scala/servlet/PluginActionInvokeFilter.scala b/src/main/scala/servlet/PluginActionInvokeFilter.scala index a3273ab..cc5c957 100644 --- a/src/main/scala/servlet/PluginActionInvokeFilter.scala +++ b/src/main/scala/servlet/PluginActionInvokeFilter.scala @@ -7,10 +7,9 @@ import service.{AccountService, RepositoryService, SystemSettingsService} import model.{Account, Session} import util.{JGitUtil, Keys} -import plugin.PluginConnectionHolder +import plugin.{Fragment, PluginConnectionHolder, Redirect} import service.RepositoryService.RepositoryInfo import plugin.Security._ -import plugin.Redirect class PluginActionInvokeFilter extends Filter with SystemSettingsService with RepositoryService with AccountService { @@ -50,6 +49,7 @@ result match { case x: String => renderGlobalHtml(request, response, context, x) case x: Html => renderGlobalHtml(request, response, context, x.toString) + case x: Fragment => renderFragmentHtml(request, response, context, x.html.toString) case x: Redirect => response.sendRedirect(x.path) case x: AnyRef => renderJson(request, response, x) } @@ -84,6 +84,7 @@ result match { case x: String => renderRepositoryHtml(request, response, context, repository, x) case x: Html => renderGlobalHtml(request, response, context, x.toString) + case x: Fragment => renderFragmentHtml(request, response, context, x.html.toString) case x: Redirect => response.sendRedirect(x.path) case x: AnyRef => renderJson(request, response, x) } @@ -156,6 +157,11 @@ IOUtils.write(html.toString.getBytes("UTF-8"), response.getOutputStream) } + private def renderFragmentHtml(request: HttpServletRequest, response: HttpServletResponse, context: app.Context, body: String): Unit = { + response.setContentType("text/html; charset=UTF-8") + IOUtils.write(body.getBytes("UTF-8"), response.getOutputStream) + } + private def renderJson(request: HttpServletRequest, response: HttpServletResponse, obj: AnyRef): Unit = { import org.json4s._ import org.json4s.jackson.Serialization