mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 22:15:51 +01:00
Implementing search condition behavior.
This commit is contained in:
@@ -75,16 +75,16 @@ object IssuesService {
|
|||||||
import java.net.URLEncoder
|
import java.net.URLEncoder
|
||||||
import javax.servlet.http.HttpServletRequest
|
import javax.servlet.http.HttpServletRequest
|
||||||
|
|
||||||
case class IssueSearchCondition(labels: Set[String], milestoneId: Option[Int], state: String, sort: Option[String], direction: Option[String]){
|
case class IssueSearchCondition(labels: Set[String], milestoneId: Option[Int], state: String, sort: String, direction: String){
|
||||||
import IssueSearchCondition._
|
import IssueSearchCondition._
|
||||||
|
|
||||||
def toURL(repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context): String = {
|
def toURL(repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context): String = {
|
||||||
val params = List(
|
val params = List(
|
||||||
if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(" "))),
|
if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(" "))),
|
||||||
milestoneId.map("milestone=" + _),
|
milestoneId.map("milestone=" + _),
|
||||||
Some("state=" + urlEncode(state)),
|
Some("state=" + urlEncode(state)),
|
||||||
sort.map("sort=" + urlEncode(_)),
|
Some("sort=" + urlEncode(sort)),
|
||||||
direction.map("direction=" + urlEncode(_))
|
Some("direction=" + urlEncode(direction))
|
||||||
)
|
)
|
||||||
"%s/%s/%s/issues?%s".format(context.path, repository.owner, repository.name, params.flatten.mkString("&"))
|
"%s/%s/%s/issues?%s".format(context.path, repository.owner, repository.name, params.flatten.mkString("&"))
|
||||||
}
|
}
|
||||||
@@ -94,17 +94,17 @@ object IssuesService {
|
|||||||
|
|
||||||
private def urlEncode(value: String): String = URLEncoder.encode(value, "UTF-8")
|
private def urlEncode(value: String): String = URLEncoder.encode(value, "UTF-8")
|
||||||
|
|
||||||
private def param(request: HttpServletRequest, name: String): Option[String] = {
|
private def param(request: HttpServletRequest, name: String, allow: Seq[String] = Nil): Option[String] = {
|
||||||
val value = request.getParameter(name)
|
val value = request.getParameter(name)
|
||||||
if(value == null || value.isEmpty) None else Some(value)
|
if(value == null || value.isEmpty || (allow.nonEmpty && !allow.contains(value))) None else Some(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
def apply(request: HttpServletRequest): IssueSearchCondition =
|
def apply(request: HttpServletRequest): IssueSearchCondition =
|
||||||
IssueSearchCondition(
|
IssueSearchCondition(
|
||||||
param(request, "labels").map(_.split(" ").toSet).getOrElse(Set.empty),
|
param(request, "labels").map(_.split(" ").toSet).getOrElse(Set.empty),
|
||||||
param(request, "milestone").map(_.toInt),
|
param(request, "milestone").map(_.toInt),
|
||||||
param(request, "state").getOrElse("open"),
|
param(request, "state", Seq("open", "closed")).getOrElse("open"),
|
||||||
param(request, "sort"),
|
param(request, "sort", Seq("created", "comments", "updated")).getOrElse("created"),
|
||||||
param(request, "direction"))
|
param(request, "direction", Seq("asc", "desc")).getOrElse("desc"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -89,16 +89,24 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button class="btn dropdown-toggle" data-toggle="dropdown">
|
<button class="btn dropdown-toggle" data-toggle="dropdown">
|
||||||
Sort: <strong>Newest</strong>
|
Sort:
|
||||||
|
<strong>
|
||||||
|
@if(condition.sort == "created" && condition.direction == "desc"){ Newest }
|
||||||
|
@if(condition.sort == "created" && condition.direction == "asc" ){ Oldest }
|
||||||
|
@if(condition.sort == "comments" && condition.direction == "desc"){ Most commented }
|
||||||
|
@if(condition.sort == "comments" && condition.direction == "asc" ){ Least commented }
|
||||||
|
@if(condition.sort == "updated" && condition.direction == "desc"){ Recently updated }
|
||||||
|
@if(condition.sort == "updated" && condition.direction == "asc" ){ Least recently updated }
|
||||||
|
</strong>
|
||||||
<span class="caret"></span>
|
<span class="caret"></span>
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a href="#">Newest</a></li>
|
<li><a href="@condition.copy(sort="created", direction="desc").toURL(repository)">Newest</a></li>
|
||||||
<li><a href="#">Oldest</a></li>
|
<li><a href="@condition.copy(sort="created", direction="asc" ).toURL(repository)">Oldest</a></li>
|
||||||
<li><a href="#">Most commented</a></li>
|
<li><a href="@condition.copy(sort="comments", direction="desc").toURL(repository)">Most commented</a></li>
|
||||||
<li><a href="#">Least commented</a></li>
|
<li><a href="@condition.copy(sort="comments", direction="asc" ).toURL(repository)">Least commented</a></li>
|
||||||
<li><a href="#">Recently updated</a></li>
|
<li><a href="@condition.copy(sort="updated", direction="desc").toURL(repository)">Recently updated</a></li>
|
||||||
<li><a href="#">Least recently updated</a></li>
|
<li><a href="@condition.copy(sort="updated", direction="asc" ).toURL(repository)">Least recently updated</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<table class="table table-bordered table-hover">
|
<table class="table table-bordered table-hover">
|
||||||
|
|||||||
Reference in New Issue
Block a user