diff --git a/src/main/scala/app/IssuesController.scala b/src/main/scala/app/IssuesController.scala
index 88f5937..d2e4082 100644
--- a/src/main/scala/app/IssuesController.scala
+++ b/src/main/scala/app/IssuesController.scala
@@ -256,7 +256,7 @@
}
/**
- * @see [[https://github.com/takezoe/gitbucket/wiki/CommentAction]]
+ * @see [[https://github.com/takezoe/gitbucket/wiki/CommentAction]]
*/
private def handleComment(issueId: Int, content: Option[String], repository: RepositoryService.RepositoryInfo)
(getAction: model.Issue => Option[String] =
@@ -317,7 +317,7 @@
searchIssue(owner, repoName, condition, filter, userName, (page - 1) * IssueLimit, IssueLimit),
page,
(getCollaborators(owner, repoName) :+ owner).sorted,
- getMilestones(owner, repoName).filter(_.closedDate.isEmpty),
+ getMilestones(owner, repoName),
getLabels(owner, repoName),
countIssue(owner, repoName, condition.copy(state = "open"), filter, userName),
countIssue(owner, repoName, condition.copy(state = "closed"), filter, userName),
diff --git a/src/main/scala/view/helpers.scala b/src/main/scala/view/helpers.scala
index 650627c..2d9c0e0 100644
--- a/src/main/scala/view/helpers.scala
+++ b/src/main/scala/view/helpers.scala
@@ -82,6 +82,7 @@
def assets(implicit context: app.Context): String =
s"${context.path}/assets"
+ def isPast(date: Date): Boolean = System.currentTimeMillis > date.getTime
/**
* Implicit conversion to add mkHtml() to Seq[Html].
diff --git a/src/main/twirl/issues/list.scala.html b/src/main/twirl/issues/list.scala.html
index 425e1a8..a80d38f 100644
--- a/src/main/twirl/issues/list.scala.html
+++ b/src/main/twirl/issues/list.scala.html
@@ -65,7 +65,7 @@
@helper.html.checkicon(condition.milestoneId == Some(None)) Issues with no milestone
- @milestones.map { milestone =>
+ @milestones.filter(_.closedDate.isEmpty).map { milestone =>
@helper.html.checkicon(condition.milestoneId == Some(Some(milestone.milestoneId))) @milestone.title
@@ -74,12 +74,27 @@
}
}
@if(condition.milestoneId.isDefined && condition.milestoneId.get.isDefined){
-
- @if(closedCount > 0){
-
+ @milestones.find(_.milestoneId == condition.milestoneId.get.get).map { milestone =>
+
+ @if(closedCount > 0){
+
+ }
+
+
@openCount open issues
+ @if(milestone.closedDate.isDefined){
+ @milestone.closedDate.map { closedDate =>
+
Closed in @date(closedDate)
+ }
+ } else {
+ @milestone.dueDate.map { dueDate =>
+ @if(isPast(dueDate)){
+
Due in @date(dueDate)
+ } else {
+
Due in @date(dueDate)
+ }
+ }
}
-
- @openCount open issues
+ }
}
Labels
diff --git a/src/main/twirl/issues/milestones/list.scala.html b/src/main/twirl/issues/milestones/list.scala.html
index 624d170..6eedb8f 100644
--- a/src/main/twirl/issues/milestones/list.scala.html
+++ b/src/main/twirl/issues/milestones/list.scala.html
@@ -42,9 +42,13 @@
@if(milestone.closedDate.isDefined){
Closed @datetime(milestone.closedDate.get)
} else {
- @if(milestone.dueDate.isDefined){
- Due in @date(milestone.dueDate.get)
- } else {
+ @milestone.dueDate.map { dueDate =>
+ @if(isPast(dueDate)){
+
Due in @date(dueDate)
+ } else {
+ Due in @date(dueDate)
+ }
+ }.getOrElse {
No due date
}
}
diff --git a/src/main/webapp/assets/common/css/gitbucket.css b/src/main/webapp/assets/common/css/gitbucket.css
index 2e7d1a8..6c9c387 100644
--- a/src/main/webapp/assets/common/css/gitbucket.css
+++ b/src/main/webapp/assets/common/css/gitbucket.css
@@ -441,10 +441,16 @@
margin-bottom: 10px;
}
+span.milestone-alert {
+ font-weight: bold;
+ color: #bd2c00;
+}
+
a.milestone-title {
font-size: 120%;
font-weight: bold;
}
+
div.milestone-description {
border-top: 1px solid #eee;
color: #666;
diff --git a/src/main/webapp/assets/common/images/alert.png b/src/main/webapp/assets/common/images/alert.png
new file mode 100644
index 0000000..10545e7
--- /dev/null
+++ b/src/main/webapp/assets/common/images/alert.png
Binary files differ