--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/webapp/WEB-INF/jsp/issue-view.jsp Fri Oct 23 13:29:33 2020 +0200 @@ -0,0 +1,186 @@ +<%-- +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2018 Mike Becker. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--%> +<%@page pageEncoding="UTF-8" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + +<jsp:useBean id="viewmodel" type="de.uapcore.lightpit.viewmodel.IssueDetailView" scope="request"/> +<c:set var="issue" scope="page" value="${viewmodel.issue}" /> + +<table class="formtable fullwidth"> + <colgroup> + <col> + <col style="width: 100%"> + </colgroup> + <tbody> + <c:if test="${viewmodel.issue.id ge 0}"> + <tr> + <th><fmt:message key="issue.id"/></th> + <td>${issue.id}</td> + </tr> + </c:if> + <tr> + <th><fmt:message key="issue.project"/></th> + <td> + <c:out value="${issue.project.name}" /> + </td> + </tr> + <tr> + <th><fmt:message key="issue.created"/></th> + <td><fmt:formatDate value="${issue.created}" /></td> + </tr> + <tr> + <th><fmt:message key="issue.updated"/></th> + <td><fmt:formatDate value="${issue.updated}" /></td> + </tr> + <tr> + <th><fmt:message key="issue.component"/></th> + <td> + <c:if test="${not empty issue.component}"> + <c:out value="${issue.component.name}"/> + </c:if> + <c:if test="${empty issue.component}"> + <fmt:message key="placeholder.null-component"/> + </c:if> + </td> + </tr> + <tr> + <th><fmt:message key="issue.category"/></th> + <td> + <div class="issue-tag ${issue.category}" style="width: auto"> + <fmt:message key="issue.category.${issue.category}" /> + </div> + </td> + </tr> + <tr> + <th><fmt:message key="issue.status"/></th> + <td> + <div class="issue-tag phase-${issue.status.phase}" style="width: auto"> + <fmt:message key="issue.status.${issue.status}" /> + </div> + </td> + </tr> + <tr> + <th><fmt:message key="issue.subject"/></th> + <td><c:out value="${issue.subject}"/></td> + </tr> + <tr> + <th class="vtop"><fmt:message key="issue.description"/></th> + <td> + <textarea readonly rows="10"><c:out value="${issue.description}"/></textarea> + </td> + </tr> + <tr> + <th><fmt:message key="issue.assignee"/></th> + <td> + <c:if test="${not empty issue.assignee}"> + <c:out value="${issue.assignee.displayname}"/> + </c:if> + <c:if test="${empty issue.assignee}"> + <fmt:message key="placeholder.null-assignee" /> + </c:if> + </td> + </tr> + <tr> + <th class="vtop"><fmt:message key="issue.affected-versions"/></th> + <td> + <c:forEach var="version" items="${issue.affectedVersions}"> + <c:out value="${version.name}"/> + </c:forEach> + </td> + </tr> + <tr> + <th class="vtop"><fmt:message key="issue.resolved-versions"/></th> + <td> + <c:forEach var="version" items="${issue.resolvedVersions}"> + <c:out value="${version.name}"/> + </c:forEach> + </td> + </tr> + <tr> + <th><fmt:message key="issue.eta"/></th> + <td><fmt:formatDate value="${issue.eta}" /></td> + </tr> + </tbody> + <tfoot> + <tr> + <td colspan="2"> + <%-- TODO: fix #14 --%> + <a href="./projects/${issue.project.node}/all-components/all-versions/issues/" class="button"> + <fmt:message bundle="${lightpit_bundle}" key="button.cancel"/> + </a> + <a href="./projects/${issue.project.node}/issues/${issue.id}/edit" class="button submit"> + <fmt:message key="button.issue.edit"/> + </a> + </td> + </tr> + </tfoot> +</table> + +<hr class="comments-separator"/> +<h2><fmt:message key="issue.comments"/></h2> +<c:if test="${viewmodel.issue.id ge 0}"> +<form id="comment-form" action="./projects/commit-issue-comment" method="post"> + <table class="formtable fullwidth"> + <tbody> + <tr> + <td><textarea rows="5" name="comment" required></textarea></td> + </tr> + </tbody> + <tfoot> + <tr> + <td> + <input type="hidden" name="issueid" value="${issue.id}"/> + <button type="submit"><fmt:message key="button.comment"/></button> + </td> + </tr> + </tfoot> + </table> +</form> + <c:forEach var="comment" items="${viewmodel.comments}"> + <div class="comment"> + <div class="caption"> + <c:if test="${not empty comment.author}"> + <c:out value="${comment.author.displayname}"/> + </c:if> + <c:if test="${empty comment.author}"> + <fmt:message key="issue.comments.anonauthor"/> + </c:if> + </div> + <div class="smalltext"> + <fmt:formatDate type="BOTH" value="${comment.created}" /> + <c:if test="${comment.updateCount gt 0}"> + <!-- TODO: update count --> + </c:if> + </div> + <div class="medskip"> + <c:out value="${comment.comment}"/> + </div> + </div> + </c:forEach> +</c:if> +