(refs #508)Start to add search filter box

This commit is contained in:
Naoki Takezoe
2014-11-11 03:19:51 +09:00
parent 2293030d4e
commit 65a1ca7146
3 changed files with 65 additions and 24 deletions

View File

@@ -368,13 +368,34 @@ object IssuesService {
def nonEmpty: Boolean = !isEmpty def nonEmpty: Boolean = !isEmpty
def toFilterString: String =
(List(
Some(s"is:${state}"),
author.map(author => s"author:${author}"),
assigned.map(assignee => s"assignee:${assignee}")
).flatten ++ labels.map(label => s"label:${label}") ++
List(
milestoneId.map { _ match {
case Some(x) => s"milestone:${milestoneId}"
case None => "no:milestone"
}},
(sort, direction) match {
case ("created" , "desc") => None
case ("created" , "asc" ) => Some("sort:created-asc")
case ("comments", "desc") => Some("sort:comments-desc")
case ("comments", "asc" ) => Some("sort:comments-asc")
case ("updated" , "desc") => Some("sort:updated-desc")
case ("updated" , "asc" ) => Some("sort:updated-asc")
}
).flatten).mkString(" ")
def toURL: String = def toURL: String =
"?" + List( "?" + List(
if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(","))), if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(","))),
milestoneId.map { id => "milestone=" + (id match { milestoneId.map { _ match {
case Some(x) => x.toString case Some(x) => "milestone=" + x
case None => "none" case None => "milestone=none"
})}, }},
author .map(x => "author=" + urlEncode(x)), author .map(x => "author=" + urlEncode(x)),
assigned.map(x => "assigned=" + urlEncode(x)), assigned.map(x => "assigned=" + urlEncode(x)),
repo.map("for=" + urlEncode(_)), repo.map("for=" + urlEncode(_)),

View File

@@ -13,7 +13,7 @@
@import view.helpers._ @import view.helpers._
@html.main((if(target == "issues") "Issues" else "Pull requests") + s" - ${repository.owner}/${repository.name}", Some(repository)){ @html.main((if(target == "issues") "Issues" else "Pull requests") + s" - ${repository.owner}/${repository.name}", Some(repository)){
@html.menu(target, repository){ @html.menu(target, repository){
@tab(target, true, repository) @tab(target, true, repository, Some(condition))
@listparts(target, issues, page, openCount, closedCount, condition, collaborators, milestones, labels, Some(repository), hasWritePermission) @listparts(target, issues, page, openCount, closedCount, condition, collaborators, milestones, labels, Some(repository), hasWritePermission)
@if(hasWritePermission){ @if(hasWritePermission){
<form id="batcheditForm" method="POST"> <form id="batcheditForm" method="POST">

View File

@@ -1,5 +1,7 @@
@(active: String, newButton: Boolean, @(active: String,
repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) newButton: Boolean,
repository: service.RepositoryService.RepositoryInfo,
condition: Option[service.IssuesService.IssueSearchCondition] = None)(implicit context: app.Context)
@import context._ @import context._
@import view.helpers._ @import view.helpers._
<ul class="nav nav-pills-group pull-left fill-width"> <ul class="nav nav-pills-group pull-left fill-width">
@@ -7,24 +9,42 @@
<li class="@if(active == "pulls" ){active}"><a href="@url(repository)/pulls">Pull requests</a></li> <li class="@if(active == "pulls" ){active}"><a href="@url(repository)/pulls">Pull requests</a></li>
<li class="@if(active == "labels" ){active}"><a href="@url(repository)/issues/labels">Labels</a></li> <li class="@if(active == "labels" ){active}"><a href="@url(repository)/issues/labels">Labels</a></li>
<li class="@if(active == "milestones"){active} last"><a href="@url(repository)/issues/milestones">Milestones</a></li> <li class="@if(active == "milestones"){active} last"><a href="@url(repository)/issues/milestones">Milestones</a></li>
@if(loginAccount.isDefined){
<li class="pull-right"> <li class="pull-right">
<div class="btn-group"> @condition.map { condition =>
@if(newButton){ <div class="input-prepend" style="margin-bottom: 0px;">
@if(active == "issues"){ <div class="btn-group">
<a class="btn btn-success" href="@url(repository)/issues/new">New issue</a> <button class="btn dropdown-toggle" data-toggle="dropdown" style="height: 34px;">
Filter
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">Open issues and pull requests</a></li>
<li><a href="#">Your issues</a></li>
<li><a href="#">Your pull requests</a></li>
<li><a href="#">Everything assigned to you</a></li>
<li><a href="#">Everything mentioning you</a></li>
</ul>
</div>
<input type="text" class="input-xlarge" style="height: 24px;" value="@condition.toFilterString"/>
</div>
}
@if(loginAccount.isDefined){
<div class="btn-group">
@if(newButton){
@if(active == "issues"){
<a class="btn btn-success" href="@url(repository)/issues/new" style="height: 24px;">New issue</a>
}
@if(active == "pulls"){
<a class="btn btn-success" href="@url(repository)/compare" style="height: 24px;">New pull request</a>
}
@if(active == "labels"){
<a class="btn btn-success" href="javascript:void(0);" id="new-label-button" style="height: 24px;">New label</a>
}
@if(active == "milestones"){
<a class="btn btn-success" href="@url(repository)/issues/milestones/new" style="height: 24px;">New milestone</a>
}
} }
@if(active == "pulls"){ </div>
<a class="btn btn-success" href="@url(repository)/compare">New pull request</a> }
}
@if(active == "labels"){
<a class="btn btn-success" href="javascript:void(0);" id="new-label-button">New label</a>
}
@if(active == "milestones"){
<a class="btn btn-success" href="@url(repository)/issues/milestones/new">New milestone</a>
}
}
</div>
</li> </li>
}
</ul> </ul>