@** * Yona, 21st Century Project Hosting SW * * Copyright Yona & Yobi Authors & NAVER Corp. & NAVER LABS Corp. * https://yona.io **@ @(title:String, issue:Issue, issueForm: play.data.Form[Issue], commentForm: play.data.Form[Comment],project:Project) @import scala.collection.mutable.ArrayBuffer @import org.apache.commons.lang.StringUtils @import models.enumeration.ResourceType @import models.enumeration.Operation @import models.Milestone @import utils.JodaDateUtil @import utils.TemplateHelper._ @import utils.AccessControl._ @import play.libs.Json.toJson @import utils.Markdown @import models.enumeration.State @import controllers.api.IssueApi @import org.apache.commons.codec.digest.DigestUtils @getTitle(issue:Issue) = @{ issue.title } @isFirstState(state:State) = {@if(issue.state.state == Issue.availableStates.get(0).state()){dirty}} @urlToIssues = @{ requestHeader.headers.get("Referer") match { case Some(u) => urlToList(u, routes.IssueApp.issues(project.owner, project.name, issue.state.state()).toString()) case _ => routes.IssueApp.issues(project.owner, project.name, "open").toString() } } @isVotedByCurrentUser = @{ issue.isVotedBy(UserApp.currentUser) } @urlToVote = @{ if(isVotedByCurrentUser){ routes.VoteApp.unvote(project.owner, project.name, issue.getNumber).toString } else { routes.VoteApp.vote(project.owner, project.name, issue.getNumber).toString } } @getVoteButtonTitle = { @if(isVotedByCurrentUser){ @Messages("issue.unvote.description") } else { @Messages("issue.vote.description") } } @titleForOGTag = @{getTitle(issue) + " |:| " + issue.body.substring(0, Math.min(issue.body.length, 200))} @parentIssueId = @{ if(issue.parent != null){ issue.parent.id } else { issue.id } } @hasAssignee = @{ issue.assigneeName != null } @hasSharer = @{ issue.sharers.size > 0 } @sharers = @{ var sharerIds = ArrayBuffer[String]() for( sharedUser <- issue.sharers ) { sharerIds += sharedUser.loginId } sharerIds.mkString(",") } @VOTER_AVATAR_SHOW_LIMIT = @{ 5 } @conatinsCurrentUserInWatchers = @{Watch.isWatching(UserApp.currentUser(), issue.asResource())} @isThisParentIssue() = @{ issue.parent == null } @amIShared() = @{ var found = false for(sharer <- issue.sharers) { if(sharer.user.id.equals(UserApp.currentUser().id)) { found = true } } found } @isFavoriteIssue = @{ FavoriteIssue.findByIssueId(UserApp.currentUser().id, issue.id) != null } @isAllowedUpdate = @{ isAllowed(UserApp.currentUser(), issue.asResource(), Operation.UPDATE) } @projectLayout(titleForOGTag, project, utils.MenuType.ISSUE){ @projectMenu(project, utils.MenuType.ISSUE, "main-menu-only")