(refs #488)Start to apply new issue UI to the issue list.

This commit is contained in:
Naoki Takezoe
2014-09-16 00:46:38 +09:00
parent 287a0b6669
commit f4e4506517
4 changed files with 113 additions and 91 deletions

View File

@@ -19,6 +19,7 @@
@html.menu("issues", repository){ @html.menu("issues", repository){
@tab("issues", false, repository) @tab("issues", false, repository)
<div class="row-fluid"> <div class="row-fluid">
@*
<div class="span3"> <div class="span3">
<ul class="nav nav-pills nav-stacked"> <ul class="nav nav-pills nav-stacked">
<li@if(filter == "all"){ class="active"}> <li@if(filter == "all"){ class="active"}>
@@ -131,6 +132,7 @@
@_root_.issues.labels.html.edit(None, repository) @_root_.issues.labels.html.edit(None, repository)
} }
</div> </div>
*@
@***** show issue list *****@ @***** show issue list *****@
@listparts(issues, page, openCount, closedCount, condition, collaborators, milestones, labels, Some(repository), hasWritePermission) @listparts(issues, page, openCount, closedCount, condition, collaborators, milestones, labels, Some(repository), hasWritePermission)
</div> </div>

View File

@@ -11,7 +11,8 @@
@import context._ @import context._
@import view.helpers._ @import view.helpers._
<div class="span9"> <div class="span12">
@*
@if(condition.labels.nonEmpty || condition.milestoneId.isDefined){ @if(condition.labels.nonEmpty || condition.milestoneId.isDefined){
<a href="@condition.copy(labels = Set.empty, milestoneId = None).toURL" id="clear-filter"> <a href="@condition.copy(labels = Set.empty, milestoneId = None).toURL" id="clear-filter">
<i class="icon-remove-circle"></i> Clear milestone and label filters <i class="icon-remove-circle"></i> Clear milestone and label filters
@@ -72,110 +73,117 @@
</a> </a>
</li> </li>
} }
*@
<table class="table table-bordered table-hover table-issues"> <table class="table table-bordered table-hover table-issues">
@if(issues.isEmpty){
<tr> <tr>
<td style="padding: 20px; background-color: #eee; text-align: center;"> <th style="padding-top: 10px; padding-bottom: 10px; background-color: #eee;">
No issues to show. <input type="checkbox"/>
@if(condition.labels.nonEmpty || condition.milestoneId.isDefined){ <a class="button-link@if(condition.state == "open" ){ selected}" href="@condition.copy(state = "open" ).toURL">@openCount Open</a>
<a href="@condition.copy(labels = Set.empty, milestoneId = None).toURL">Clear active filters.</a> <a class="button-link@if(condition.state == "closed"){ selected}" href="@condition.copy(state = "closed").toURL">@closedCount Closed</a>
} else { </th>
@if(repository.isDefined){
<a href="@url(repository.get)/issues/new">Create a new issue.</a>
}
}
</td>
</tr> </tr>
} else { @if(issues.isEmpty){
@if(hasWritePermission){ <tr>
<tr> <td style="padding: 20px; background-color: #eee; text-align: center;">
<td style="background-color: #eee;"> No issues to show.
<div class="btn-group"> @if(condition.labels.nonEmpty || condition.milestoneId.isDefined){
<button class="btn btn-mini strong" id="state">@{if(condition.state == "open") "Close" else "Reopen"}</button> <a href="@condition.copy(labels = Set.empty, milestoneId = None).toURL">Clear active filters.</a>
</div>
@helper.html.dropdown("Label") {
@labels.map { label =>
<li>
<a href="javascript:void(0);" class="toggle-label" data-id="@label.labelId">
<i class="icon-white"></i>
<span class="label" style="background-color: #@label.color;">&nbsp;</span>
@label.labelName
</a>
</li>
}
}
@helper.html.dropdown("Assignee") {
<li><a href="javascript:void(0);" class="toggle-assign" data-name=""><i class="icon-remove-circle"></i> Clear assignee</a></li>
@collaborators.map { collaborator =>
<li><a href="javascript:void(0);" class="toggle-assign" data-name="@collaborator"><i class="icon-white"></i>@avatar(collaborator, 20) @collaborator</a></li>
}
}
@helper.html.dropdown("Milestone") {
<li><a href="javascript:void(0);" class="toggle-milestone" data-id=""><i class="icon-remove-circle"></i> Clear this milestone</a></li>
@milestones.map { milestone =>
<li>
<a href="javascript:void(0);" class="toggle-milestone" data-id="@milestone.milestoneId">
<i class="icon-white"></i> @milestone.title
<div class="small" style="padding-left: 20px;">
@milestone.dueDate.map { dueDate =>
@if(isPast(dueDate)){
<img src="@assets/common/images/alert_mono.png"/>Due in @date(dueDate)
} else {
<span class="muted">Due in @date(dueDate)</span>
}
}.getOrElse {
<span class="muted">No due date</span>
}
</div>
</a>
</li>
}
}
</td>
</tr>
}
}
@issues.map { case (issue, labels, commentCount) =>
<tr>
<td>
@if(hasWritePermission){
<label class="checkbox" style="cursor: default;">
<input type="checkbox" value="@issue.issueId"/>
}
@if(issue.isPullRequest){
<img src="@assets/common/images/pullreq-@(if(issue.closed) "closed" else "open").png"/>
} else { } else {
<img src="@assets/common/images/issue-@(if(issue.closed) "closed" else "open").png"/> @if(repository.isDefined){
<a href="@url(repository.get)/issues/new">Create a new issue.</a>
}
}
</td>
</tr>
} else {
@*
@if(hasWritePermission){
<tr>
<td style="background-color: #eee;">
<div class="btn-group">
<button class="btn btn-mini strong" id="state">@{if(condition.state == "open") "Close" else "Reopen"}</button>
</div>
@helper.html.dropdown("Label") {
@labels.map { label =>
<li>
<a href="javascript:void(0);" class="toggle-label" data-id="@label.labelId">
<i class="icon-white"></i>
<span class="label" style="background-color: #@label.color;">&nbsp;</span>
@label.labelName
</a>
</li>
}
}
@helper.html.dropdown("Assignee") {
<li><a href="javascript:void(0);" class="toggle-assign" data-name=""><i class="icon-remove-circle"></i> Clear assignee</a></li>
@collaborators.map { collaborator =>
<li><a href="javascript:void(0);" class="toggle-assign" data-name="@collaborator"><i class="icon-white"></i>@avatar(collaborator, 20) @collaborator</a></li>
}
}
@helper.html.dropdown("Milestone") {
<li><a href="javascript:void(0);" class="toggle-milestone" data-id=""><i class="icon-remove-circle"></i> Clear this milestone</a></li>
@milestones.map { milestone =>
<li>
<a href="javascript:void(0);" class="toggle-milestone" data-id="@milestone.milestoneId">
<i class="icon-white"></i> @milestone.title
<div class="small" style="padding-left: 20px;">
@milestone.dueDate.map { dueDate =>
@if(isPast(dueDate)){
<img src="@assets/common/images/alert_mono.png"/>Due in @date(dueDate)
} else {
<span class="muted">Due in @date(dueDate)</span>
}
}.getOrElse {
<span class="muted">No due date</span>
}
</div>
</a>
</li>
}
}
</td>
</tr>
}
*@
}
@issues.map { case (issue, labels, commentCount) =>
<tr>
<td style="padding-top: 15px; padding-bottom: 15px;">
@if(hasWritePermission){
<label class="checkbox" style="cursor: default;">
<input type="checkbox" value="@issue.issueId"/>
}
@if(issue.isPullRequest){
<img src="@assets/common/images/pullreq-@(if(issue.closed) "closed" else "open").png" style="margin-right: 20px;"/>
} else {
<img src="@assets/common/images/issue-@(if(issue.closed) "closed" else "open").png" style="margin-right: 20px;"/>
} }
@if(repository.isEmpty){ @if(repository.isEmpty){
<a href="@path/@issue.userName/@issue.repositoryName">@issue.repositoryName</a>&nbsp;&#xFF65; <a href="@path/@issue.userName/@issue.repositoryName">@issue.repositoryName</a>&nbsp;&#xFF65;
} }
@if(issue.isPullRequest){ @if(issue.isPullRequest){
<a href="@path/@issue.userName/@issue.repositoryName/pull/@issue.issueId" class="issue-title">@issue.title</a> <a href="@path/@issue.userName/@issue.repositoryName/pull/@issue.issueId" class="issue-title">@issue.title</a>
} else { } else {
<a href="@path/@issue.userName/@issue.repositoryName/issues/@issue.issueId" class="issue-title">@issue.title</a> <a href="@path/@issue.userName/@issue.repositoryName/issues/@issue.issueId" class="issue-title">@issue.title</a>
} }
@labels.map { label => @labels.map { label =>
<span class="label-color small" style="background-color: #@label.color; color: #@label.fontColor; padding-left: 4px; padding-right: 4px">@label.labelName</span> <span class="label-color small" style="background-color: #@label.color; color: #@label.fontColor; padding-left: 4px; padding-right: 4px">@label.labelName</span>
} }
<span class="pull-right muted"> <span class="pull-right muted">
@issue.assignedUserName.map { userName => @issue.assignedUserName.map { userName =>
@avatar(userName, 20, tooltip = true) @avatar(userName, 20, tooltip = true)
} }
#@issue.issueId <a href="@path/@issue.userName/@issue.repositoryName/issues/@issue.issueId" class="issue-comment-count"><i class="icon-comment"></i>@commentCount</a>
</span> </span>
<div class="small muted" style="margin-left: 20px;"> <div class="small muted" style="margin-left: 40px; margin-top: 5px;">
Opened by @user(issue.openedUserName, styleClass="username") @datetime(issue.registeredDate)&nbsp; #@issue.issueId opened by @user(issue.openedUserName, styleClass="username") @datetime(issue.registeredDate)
@if(commentCount > 0){
<i class="icon-comment"></i><a href="@path/@issue.userName/@issue.repositoryName/issues/@issue.issueId" class="issue-comment-count">@commentCount @plural(commentCount, "comment")</a>
}
</div> </div>
@if(hasWritePermission){ @if(hasWritePermission){
</label> </label>
} }
</td> </td>
</tr> </tr>
} }
</table> </table>
<div class="pull-right"> <div class="pull-right">
@helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.IssuesService.IssueLimit, 10, condition.toURL) @helper.html.paginator(page, (if(condition.state == "open") openCount else closedCount), service.IssuesService.IssueLimit, 10, condition.toURL)

View File

@@ -1,9 +1,11 @@
@(active: String, create: Boolean, repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context) @(active: String, create: Boolean, repository: service.RepositoryService.RepositoryInfo)(implicit context: app.Context)
@import context._ @import context._
@import view.helpers._ @import view.helpers._
<ul class="nav nav-tabs pull-left fill-width"> <ul class="nav nav-pills pull-left fill-width" style="margin-bottom: 0px;">
<li@if(active == "issues"){ class="active"}><a href="@url(repository)/issues">Browse Issues</a></li> <li@if(active == "issues" ){ class="active"}><a href="@url(repository)/issues">Issues</a></li>
<li@if(active == "milestones"){ class="active"}><a href="@url(repository)/issues/milestones">Milestones</a></li> <li@if(active == "pulls" ){ class="active"}><a href="@url(repository)/pulls">Pull requests</a></li>
<li@if(active == "labels" ){ class="active"}><a href="@url(repository)/labels">Labels</a></li>
<li@if(active == "milestones"){ class="active"}><a href="@url(repository)/milestones">Milestones</a></li>
@if(loginAccount.isDefined){ @if(loginAccount.isDefined){
<li class="pull-right"> <li class="pull-right">
<div class="btn-group"> <div class="btn-group">

View File

@@ -620,6 +620,16 @@ span.simplified-path {
/****************************************************************************/ /****************************************************************************/
/* Issues */ /* Issues */
/****************************************************************************/ /****************************************************************************/
a.button-link {
font-weight: normal;
color: gray;
}
a.selected {
font-weight: bold;
color: black;
}
span.issue-status { span.issue-status {
display: block; display: block;
font-size: large; font-size: large;
@@ -634,7 +644,7 @@ table.table-issues {
a.issue-title { a.issue-title {
color: #333; color: #333;
font-weight: bold; font-weight: bold;
size: 110%; font-size: 120%;
} }
ul.label-list { ul.label-list {