Add search condition behavior to the issues page.

This commit is contained in:
takezoe
2013-06-25 13:54:58 +09:00
parent 34b71c10cb
commit 0547532113
4 changed files with 72 additions and 11 deletions

View File

@@ -64,4 +64,42 @@ trait IssuesService {
currentDate) ).bind
} firstOption
}
object IssuesService {
import java.net.URLEncoder
import javax.servlet.http.HttpServletRequest
case class IssueSearchCondition(labels: Set[String], milestoneId: Option[Int], state: Option[String], sort: Option[String], direction: Option[String]){
import IssueSearchCondition._
def toURL(repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context): String = {
val params = List(
if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(" "))),
milestoneId.map("milestone=" + _),
state.map("state=" + urlEncode(_)),
sort.map("sort=" + urlEncode(_)),
direction.map("direction=" + urlEncode(_))
)
"%s/%s/%s/issues?%s".format(context.path, repository.owner, repository.name, params.flatten.mkString("&"))
}
}
object IssueSearchCondition {
private def urlEncode(value: String): String = URLEncoder.encode(value, "UTF-8")
private def param(request: HttpServletRequest, name: String): Option[String] = {
val value = request.getParameter(name)
if(value == null || value.isEmpty) None else Some(value)
}
def apply(request: HttpServletRequest): IssueSearchCondition =
IssueSearchCondition(
param(request, "labels").map(_.split(" ").toSet).getOrElse(Set.empty),
param(request, "milestone").map(_.toInt),
param(request, "state"),
param(request, "sort"),
param(request, "direction"))
}
}