(refs #464)Add Fragment rendering support for Ajax

This commit is contained in:
Naoki Takezoe
2014-08-24 13:56:32 +09:00
parent ffd10122ed
commit 95a8649f79
2 changed files with 10 additions and 2 deletions

View File

@@ -1,10 +1,12 @@
import java.sql.PreparedStatement import java.sql.PreparedStatement
import play.twirl.api.Html
import util.ControlUtil._ import util.ControlUtil._
import scala.collection.mutable.ListBuffer import scala.collection.mutable.ListBuffer
package object plugin { package object plugin {
case class Redirect(path: String) case class Redirect(path: String)
case class Fragment(html: Html)
object db { object db {
// TODO labelled place holder support // TODO labelled place holder support

View File

@@ -7,10 +7,9 @@ import play.twirl.api.Html
import service.{AccountService, RepositoryService, SystemSettingsService} import service.{AccountService, RepositoryService, SystemSettingsService}
import model.{Account, Session} import model.{Account, Session}
import util.{JGitUtil, Keys} import util.{JGitUtil, Keys}
import plugin.PluginConnectionHolder import plugin.{Fragment, PluginConnectionHolder, Redirect}
import service.RepositoryService.RepositoryInfo import service.RepositoryService.RepositoryInfo
import plugin.Security._ import plugin.Security._
import plugin.Redirect
class PluginActionInvokeFilter extends Filter with SystemSettingsService with RepositoryService with AccountService { class PluginActionInvokeFilter extends Filter with SystemSettingsService with RepositoryService with AccountService {
@@ -50,6 +49,7 @@ class PluginActionInvokeFilter extends Filter with SystemSettingsService with Re
result match { result match {
case x: String => renderGlobalHtml(request, response, context, x) case x: String => renderGlobalHtml(request, response, context, x)
case x: Html => renderGlobalHtml(request, response, context, x.toString) 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: Redirect => response.sendRedirect(x.path)
case x: AnyRef => renderJson(request, response, x) case x: AnyRef => renderJson(request, response, x)
} }
@@ -84,6 +84,7 @@ class PluginActionInvokeFilter extends Filter with SystemSettingsService with Re
result match { result match {
case x: String => renderRepositoryHtml(request, response, context, repository, x) case x: String => renderRepositoryHtml(request, response, context, repository, x)
case x: Html => renderGlobalHtml(request, response, context, x.toString) 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: Redirect => response.sendRedirect(x.path)
case x: AnyRef => renderJson(request, response, x) case x: AnyRef => renderJson(request, response, x)
} }
@@ -156,6 +157,11 @@ class PluginActionInvokeFilter extends Filter with SystemSettingsService with Re
IOUtils.write(html.toString.getBytes("UTF-8"), response.getOutputStream) 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 = { private def renderJson(request: HttpServletRequest, response: HttpServletResponse, obj: AnyRef): Unit = {
import org.json4s._ import org.json4s._
import org.json4s.jackson.Serialization import org.json4s.jackson.Serialization