| 295 <fmt:message key="issue.comments"/> |
295 <fmt:message key="issue.comments"/> |
| 296 <c:if test="${not empty viewmodel.comments}"> |
296 <c:if test="${not empty viewmodel.comments}"> |
| 297 (${fn:length(viewmodel.comments)}) |
297 (${fn:length(viewmodel.comments)}) |
| 298 </c:if> |
298 </c:if> |
| 299 </h2> |
299 </h2> |
| 300 <c:if test="${viewmodel.issue.id ge 0}"> |
|
| 301 <form id="comment-form" action="${issuesHref}${issue.id}/comment" method="post"> |
300 <form id="comment-form" action="${issuesHref}${issue.id}/comment" method="post"> |
| 302 <table class="formtable fullwidth"> |
301 <table class="formtable fullwidth"> |
| 303 <tbody> |
302 <tbody> |
| 304 <tr> |
303 <tr> |
| 305 <td><textarea rows="3" name="comment" required></textarea></td> |
304 <td><textarea rows="3" name="comment" required></textarea></td> |
| 312 </td> |
311 </td> |
| 313 </tr> |
312 </tr> |
| 314 </tfoot> |
313 </tfoot> |
| 315 </table> |
314 </table> |
| 316 </form> |
315 </form> |
| 317 <c:forEach var="comment" items="${viewmodel.comments}"> |
316 <c:forEach var="comment" items="${viewmodel.comments}"> |
| 318 <div class="comment"> |
317 <div class="comment"> |
| 319 <div class="comment-author"> |
318 <div class="comment-author"> |
| 320 <c:if test="${not empty comment.author}"> |
319 <c:if test="${not empty comment.author}"> |
| 321 <c:if test="${not empty comment.author.mail}"> |
320 <c:if test="${not empty comment.author.mail}"> |
| 322 <a class="comment-author-name" href="mailto:${comment.author.mail}"> |
321 <a class="comment-author-name" href="mailto:${comment.author.mail}"> |
| 323 </c:if> |
322 </c:if> |
| 324 <c:out value="${comment.author.displayname}"/> |
323 <c:out value="${comment.author.displayname}"/> |
| 325 <c:if test="${not empty comment.author.mail}"> |
324 <c:if test="${not empty comment.author.mail}"> |
| 326 </a> |
325 </a> |
| 327 </c:if> |
326 </c:if> |
| 328 <c:if test="${comment.author.username eq pageContext.request.remoteUser}"> |
327 <c:if test="${comment.author.username eq pageContext.request.remoteUser}"> |
| 329 <a class="comment-edit-icon" onclick="showCommentEditor(${comment.id})">✎</a> |
328 <a class="comment-edit-icon" onclick="showCommentEditor(${comment.id})">✎</a> |
| 330 </c:if> |
329 </c:if> |
| 331 </c:if> |
330 </c:if> |
| 332 <c:if test="${empty comment.author}"> |
331 <c:if test="${empty comment.author}"> |
| 333 <fmt:message key="issue.comments.anonauthor"/> |
332 <fmt:message key="issue.comments.anonauthor"/> |
| 334 </c:if> |
333 </c:if> |
| 335 </div> |
|
| 336 <div class="smalltext"> |
|
| 337 <fmt:formatDate type="BOTH" value="${comment.created}" timeZone="${timezone}" /> |
|
| 338 <c:if test="${comment.updateCount gt 0}"> |
|
| 339 <span class="comment-edit-info"> |
|
| 340 (<fmt:message key="issue.comments.lastupdate"/> <fmt:formatDate type="BOTH" value="${comment.updated}" timeZone="${timezone}" />, ${comment.updateCount} <fmt:message key="issue.comments.updateCount"/>) |
|
| 341 </span> |
|
| 342 </c:if> |
|
| 343 </div> |
|
| 344 <div id="comment-view-${comment.id}" class="medskip markdown-styled"> |
|
| 345 ${comment.commentFormatted} |
|
| 346 </div> |
|
| 347 <div id="comment-editor-${comment.id}" style="display: none"> |
|
| 348 <form id="comment-form-${comment.id}" action="${issuesHref}${issue.id}/comment" method="post"> |
|
| 349 <input type="hidden" name="commentid" value="${comment.id}"> |
|
| 350 <table class="formtable fullwidth"> |
|
| 351 <tbody> |
|
| 352 <tr> |
|
| 353 <td> |
|
| 354 <textarea rows="5" name="comment" required><c:out value="${comment.comment}"/></textarea> |
|
| 355 </td> |
|
| 356 </tr> |
|
| 357 </tbody> |
|
| 358 <tfoot> |
|
| 359 <tr> |
|
| 360 <td> |
|
| 361 <button type="reset" onclick="cancelCommentEditor(${comment.id})"><fmt:message key="button.cancel"/></button> |
|
| 362 <button type="submit"><fmt:message key="button.comment.edit"/></button> |
|
| 363 </td> |
|
| 364 </tr> |
|
| 365 </tfoot> |
|
| 366 </table> |
|
| 367 </form> |
|
| 368 </div> |
|
| 369 </div> |
334 </div> |
| 370 </c:forEach> |
335 <div class="smalltext"> |
| 371 </c:if> |
336 <fmt:formatDate type="BOTH" value="${comment.created}" timeZone="${timezone}" /> |
| 372 |
337 <c:if test="${comment.updateCount gt 0}"> |
| |
338 <span class="comment-edit-info"> |
| |
339 (<fmt:message key="issue.comments.lastupdate"/> <fmt:formatDate type="BOTH" value="${comment.updated}" timeZone="${timezone}" />, ${comment.updateCount} <fmt:message key="issue.comments.updateCount"/>) |
| |
340 </span> |
| |
341 </c:if> |
| |
342 </div> |
| |
343 <div id="comment-view-${comment.id}" class="medskip markdown-styled"> |
| |
344 ${comment.commentFormatted} |
| |
345 </div> |
| |
346 <div id="comment-editor-${comment.id}" style="display: none"> |
| |
347 <form id="comment-form-${comment.id}" action="${issuesHref}${issue.id}/comment" method="post"> |
| |
348 <input type="hidden" name="commentid" value="${comment.id}"> |
| |
349 <table class="formtable fullwidth"> |
| |
350 <tbody> |
| |
351 <tr> |
| |
352 <td> |
| |
353 <textarea rows="5" name="comment" required><c:out value="${comment.comment}"/></textarea> |
| |
354 </td> |
| |
355 </tr> |
| |
356 </tbody> |
| |
357 <tfoot> |
| |
358 <tr> |
| |
359 <td> |
| |
360 <button type="reset" onclick="cancelCommentEditor(${comment.id})"><fmt:message key="button.cancel"/></button> |
| |
361 <button type="submit"><fmt:message key="button.comment.edit"/></button> |
| |
362 </td> |
| |
363 </tr> |
| |
364 </tfoot> |
| |
365 </table> |
| |
366 </form> |
| |
367 </div> |
| |
368 </div> |
| |
369 </c:forEach> |
| |
370 |