diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala index 9d254f4..85eb936 100644 --- a/src/main/scala/app/IssuesController.scala +++ b/src/main/scala/app/IssuesController.scala @@ -3,6 +3,7 @@ import jp.sf.amateras.scalatra.forms._ import service._ +import IssuesService._ import util.UsersOnlyAuthenticator class IssuesController extends IssuesControllerBase @@ -21,12 +22,15 @@ )(IssueForm.apply) get("/:owner/:repository/issues"){ - val owner = params("owner") + val owner = params("owner") val repository = params("repository") + val condition = IssueSearchCondition(request) + + println(condition) getRepository(owner, repository, baseUrl) match { - case None => NotFound() - case Some(r) => { + case None => NotFound() + case Some(repositoryInfo) => { // search condition val closed = params.get("state") collect { case "closed" => true @@ -35,7 +39,7 @@ issues.html.issues(searchIssue(owner, repository, closed), getLabels(owner, repository), getMilestones(owner, repository).filter(_.closedDate.isEmpty), - r, isWritable(owner, repository, context.loginAccount)) + condition, repositoryInfo, isWritable(owner, repository, context.loginAccount)) } } } diff --git a/src/main/scala/model/Labels.scala b/src/main/scala/model/Labels.scala index b57fa82..162e4a3 100644 --- a/src/main/scala/model/Labels.scala +++ b/src/main/scala/model/Labels.scala @@ -17,4 +17,18 @@ repositoryName: String, labelId: Int, labelName: String, - color: String) \ No newline at end of file + color: String){ + + val fontColor = { + val r = color.substring(0, 2) + val g = color.substring(2, 4) + val b = color.substring(4, 6) + + if(Integer.parseInt(r, 16) + Integer.parseInt(g, 16) + Integer.parseInt(b, 16) > 408){ + "000000" + } else { + "FFFFFF" + } + } + +} \ No newline at end of file diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index 161e82b..448def1 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -64,4 +64,42 @@ 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")) + } } \ No newline at end of file diff --git a/src/main/twirl/issues/issues.scala.html b/src/main/twirl/issues/issues.scala.html index 73e2826..892b755 100644 --- a/src/main/twirl/issues/issues.scala.html +++ b/src/main/twirl/issues/issues.scala.html @@ -1,4 +1,4 @@ -@(issues: List[model.Issue], labels: List[model.Label], milestones: List[model.Milestone], repository: service.RepositoryService.RepositoryInfo, isWrite: Boolean)(implicit context: app.Context) +@(issues: List[model.Issue], labels: List[model.Label], milestones: List[model.Milestone], condition: service.IssuesService.IssueSearchCondition, repository: service.RepositoryService.RepositoryInfo, isWrite: Boolean)(implicit context: app.Context) @import context._ @import view.helpers._ @html.main("Issues - " + repository.owner + "/" + repository.name){ @@ -29,7 +29,11 @@ }
- No milestone selected + @if(condition.milestoneId.isEmpty){ + No milestone selected + } else { + Milestone: @milestones.find(_.milestoneId == condition.milestoneId.get).map(_.title) + }
@@ -48,7 +52,8 @@
- 1 Open - 1 Closed + 1 Open + 1 Closed