File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date

2013-05-07

2013-05-08

2013-05-09

2013-05-08

2013-05-08

2013-05-08

2013-05-08

2013-05-08

2013-05-09
2012-08-28
File name
Commit message
Commit date

2013-05-08

2013-05-08

2013-05-08
@(title:String, issue:Issue, issueForm:Form[Issue], commentForm:Form[Comment],project:Project)
@import helper._
@import scala.collection.mutable.Map
@import models.enumeration.ResourceType
@import models.enumeration.Operation
@import models.Milestone
@import java.text.SimpleDateFormat
@import java.security.MessageDigest
@import utils.TemplateHelper._
@import utils.AccessControl._
@implicitFieldConstructor = @{ FieldConstructor(twitterBootstrapInput.render) }
@getTitle(issue:Issue, project:Project) = {
#@issue.getNumber @issue.title (@project.name)
@** Messages(title) **@
}
@main(getTitle(issue, project).toString(), project, utils.MenuType.ISSUE){
<div class="page board-view">
@prjmenu(project, utils.MenuType.ISSUE, "main-menu-only")
@** Post Info **@
<div class="board-header issue">
<div class="board-id div"><strong class="secondary-txt">#@issue.getNumber</strong></div>
<h1 class="title div">@issue.title</h1>
<div class="date div">@agoString(issue.ago)</div>
<div class="div">
<span class="badge badge-issue-@issue.state.state.toLowerCase">@Messages("issue.state." + issue.state.state)</span>
</div>
</div>
@** Content body **@
<div class="board-body">
<div class="author-info">
<a href="@routes.UserApp.userInfo(issue.authorLoginId)" class="avatar-wrap pull-left">
<img src="@User.findByLoginId(issue.authorLoginId).avatarUrl" width="32" height="32" alt="@issue.authorName">
</a>
<div class="media-body">
<p>
@**<!-- author -->**@
@Messages("issue.author")
<a href="@routes.IssueApp.newIssueForm(project.owner, project.name)" @if(issue.assigneeName != null){ class="gray-txt" }>
<strong>@Option(issue.authorLoginId).orElse(Option(Messages("issue.noAuthor"))).get</strong>
</a>
·
@**<!-- assignee -->**@
@Messages("issue.assignee")
@if(issue.assigneeName == null){
<a href="@if(isAllowed(UserApp.currentUser(), issue.asResource(), Operation.UPDATE)) {@routes.IssueApp.editIssueForm(project.owner, project.name, issue.id)#options} else {#}" class="gray-txt">
<strong>@Messages("issue.noAssignee")</strong>
</a>
} else {
<a href="@routes.IssueApp.issues(project.owner, project.name, "open")&assigneeId=@issue.assignee.user.id">
<strong>@issue.assigneeName</strong>
</a>
}
</p>
@** status **@
<p>
@**<!-- comment
@Messages("comment") <strong class="num">@issue.comments.size</strong>
-->**@
@**<!-- milestone -->**@
@Messages("milestone")
@if(issue.milestone != null) {
<strong class="num">@issue.milestone.title</strong>
} else {
<a href="@if(isAllowed(UserApp.currentUser(), issue.asResource(), Operation.UPDATE)) {@routes.IssueApp.editIssueForm(project.owner, project.name, issue.id)#options} else {#}" class="gray-txt"><strong>@Messages("none")</strong></a>
}
</p>
</div>
</div>
<div class="content" markdown="true">@issue.body</div>
<div class="attachments" resourceType="@ResourceType.ISSUE_POST" resourceId="@issue.id"></div>
</div>
<div class="board-footer board-actrow">
@** labels **@
<p class="labels-wrap pull-left">
@for(label <- issue.labels.toList.sortBy(r => (r.category, r.name))) {
<button class="issue-label" data-labelId="@label.id" style="background-color:@label.color">@label.name</button>
}
</p>
@if(isAllowed(UserApp.currentUser(), issue.asResource(), Operation.UPDATE)) {
<a href="@routes.IssueApp.editIssueForm(project.owner, project.name, issue.id)" class="nbtn medium orange">@Messages("button.edit")</a>
}
@if(isAllowed(UserApp.currentUser(), issue.asResource(), Operation.DELETE)) {
<a href="#deleteConfirm" data-toggle="modal" class="nbtn medium black">@Messages("button.delete")</a>
}
<a href="@routes.IssueApp.issues(project.owner, project.name,"open")" class="nbtn medium last">@Messages("button.list")</a>
</div>
@** Comment **@
<div class="board-comment-wrap">
<div class="comment-header"><strong>@Messages("comment")</strong> <strong class="num">@issue.comments.size</strong></div>
@if(issue.comments.size > 0) {
<ul class="comments">
@for(comment <- issue.comments){
<li class="comment">
<a href="@routes.UserApp.userInfo(comment.authorLoginId)" class="avatar-wrap pull-left">
<img src="@User.findByLoginId(comment.authorLoginId).avatarUrl" width="32" height="32" alt="@comment.authorLoginId">
</a>
<div class="media-body">
@if(isAllowed(UserApp.currentUser(), comment.asResource(), Operation.DELETE)){
<a class="pull-right close" href="@routes.IssueApp.deleteComment(project.owner, project.name, issue.id, comment.id)">×</a>
}
<p class="commenter">
<a href="@routes.UserApp.userInfo(comment.authorLoginId)"><strong>@comment.authorLoginId</strong></a>
<span class="date"> @utils.TemplateHelper.agoString(comment.ago())</span>
</p>
<div class="comment-body" markdown="true">@comment.contents</div>
<div class="attachments" resourceType="@ResourceType.ISSUE_COMMENT" resourceId="@comment.id"></div>
</div>
</li>
}
</ul>
}
@if(isCreatable(User.findByLoginId(session.get("loginId")), project, models.enumeration.ResourceType.BOARD_POST)){
@form(routes.IssueApp.newComment(project.owner, project.name, issue.id), 'id -> "comment-form", 'enctype -> "multipart/form-data"){
<div class="write-comment-box">
<div class="write-comment-wrap">
<textarea id="comment-editor" name="contents" class="text comment" markdown="true"></textarea>
<button class="comment-btn">@Messages("button.comment.new")</button>
</div>
@** fileUploader **@
@if(UserApp.currentUser() != UserApp.anonymous) {
<div class="attach-wrap">
<div class="avatar-wrap">
<img src="@User.findByLoginId(session.get("loginId")).avatarUrl" width="32" height="32">
</div>
<div id="upload" class="attach-info-wrap" resourceType="@ResourceType.ISSUE_COMMENT">
<div>
<span class="progress-num">0%</span> <span class="sp-line"> </span>
<strong>total</strong> <span class="total-num">0Mb</span>
</div>
<div class="progress-wrap">
<div class="progress n4">
<div class="bar orange" style="width: 0%;"></div>
</div>
</div>
</div>
<div class="btn-wrap">
<div class="nbtn medium white fake-file-wrap">
<i class="ico ico-plus-blue"></i>@Messages("button.upload")<!--
--> <input type="file" class="file" name="filePath">
</div>
</div>
</div>
<div class="attached-files-wrap">
<ul class="attached-files"></ul>
</div>
}
@** end of fileUploader **@
</div>
}
@** end of form **@
} else {
<div class="write-comment-box">
<div class="write-comment-wrap">
<textarea class="text comment disabled" disabled="disabled">@Messages("auth.unauthorized.comment")</textarea>
<button class="comment-btn disabled">@Messages("button.comment.new")</button>
</div>
</div>
}
</div>
@** // Comment **@
</div>
<script type="text/template" id="tplAttachedFile"><!--
--><li class="attached-file" data-name="${fileName}" data-href="${fileHref}" data-mime="${mimeType}" data-size="${fileSize}">
<strong>${fileName}(${fileSizeReadable})</strong><!--
--><a class="attached-delete"><i class="ico btn-delete"></i></a></li>
</script>
@**<!--
<div class="board-footer">
@if(isAllowed(UserApp.currentUser(), issue.asResource(), Operation.UPDATE)) {
<a href="@routes.IssueApp.editIssueForm(project.owner, project.name, issue.id)" class="nbtn orange medium">@Messages("button.edit")</a>
}
@if(isAllowed(UserApp.currentUser(), issue.asResource(), Operation.DELETE)) {
<a href="#deleteConfirm" data-toggle="modal" class="nbtn medium black">@Messages("button.delete")</a>
}
<a href="@routes.IssueApp.issues(project.owner, project.name,"open")" class="nbtn medium">@Messages("button.list")</a>
</div>
-->**@
@** Confirm to delete post **@
<div id="deleteConfirm" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3>@Messages("issue.delete.window")</h3>
</div>
<div class="modal-body">
<p>@Messages("post.delete.confirm")</p>
</div>
<div class="modal-footer">
<a class="btn btn-danger med" href="@routes.IssueApp.deleteIssue(project.owner, project.name, issue.id)">@Messages("button.yes")</a>
<a href="#" class="btn med" data-dismiss="modal">@Messages("button.no")</a>
</div>
</div>
@markdown()
<script type="text/javascript">
$(document).ready(function(){
// hive.Label
var htOptLabel = {
"bEditable" : false,
"sURLLabels" : "@routes.IssueLabelApp.labels(project.owner, project.name)",
"sURLPost" : "@routes.IssueLabelApp.newLabel(project.owner, project.name)"
};
// hive.issue.View
$hive.loadModule("issue.View", {
"sAction" : "@routes.AttachmentApp.newFile",
"htOptLabel" : htOptLabel
});
});
</script>
}