blob: 2fe94d93f892546f49f8f3a68edef6de181a65c6 [file] [log] [blame]
<%--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. The ASF licenses this file to You
under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. For additional information regarding
copyright in this work, please see the NOTICE file in the top level
directory of this distribution.
--%>
<%@ include file="/WEB-INF/jsps/taglibs-struts2.jsp" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%-- are we on a blog's comment management page or the global admin's comment management page? --%>
<s:if test="actionName == 'comments'">
<s:set var="mainAction">comments</s:set>
</s:if>
<s:else>
<s:set var="mainAction">globalCommentManagement</s:set>
</s:else>
<p class="subtitle">
<s:if test="actionName == 'comments'">
<s:if test="bean.entryId != null && !bean.entryId.equals('') ">
<s:text name="commentManagement.entry.subtitle">
<s:param value="queryEntry.title"/>
</s:text>
</s:if>
<s:else>
<s:text name="commentManagement.website.subtitle">
<s:param value="%{actionWeblog.handle}"/>
</s:text>
</s:else>
</s:if>
<s:else>
<s:text name="commentManagement.subtitle"/>
</s:else>
</p>
<s:if test="pager.items.isEmpty">
<s:text name="commentManagement.noCommentsFound"/>
</s:if>
<s:else>
<p class="pagetip">
<s:if test="actionName == 'comments'">
<s:text name="commentManagement.tip"/>
</s:if>
<s:else>
<s:text name="commentManagement.globalTip"/>
</s:else>
</p>
<%-- ============================================================= --%>
<%-- Comment table / form with checkboxes --%>
<s:form action="%{#mainAction}!update">
<s:hidden name="salt"/>
<s:hidden name="bean.ids"/>
<s:hidden name="bean.startDateString"/>
<s:hidden name="bean.endDateString"/>
<s:if test="actionName == 'comments'">
<s:hidden name="bean.entryId"/>
<s:hidden name="bean.searchString"/>
<s:hidden name="bean.approvedString"/>
<s:hidden name="weblog"/>
</s:if>
<s:else>
<s:hidden name="bean.offset"/>
<s:hidden name="bean.count"/>
<s:hidden name="bean.pendingString"/>
</s:else>
<%-- ============================================================= --%>
<%-- Number of comments and date message --%>
<div class="tablenav">
<div style="float:left;">
<s:text name="commentManagement.nowShowing">
<s:param value="pager.items.size()"/>
</s:text>
</div>
<div style="float:right;">
<s:if test="firstComment.postTime != null">
<s:text name="commentManagement.date.toStringFormat">
<s:param value="firstComment.postTime"/>
</s:text>
</s:if>
---
<s:if test="lastComment.postTime != null">
<s:text name="commentManagement.date.toStringFormat">
<s:param value="lastComment.postTime"/>
</s:text>
</s:if>
</div>
<br/>
<%-- ============================================================= --%>
<%-- Next / previous links --%>
<nav>
<ul class="pager">
<s:if test="pager.prevLink != null">
<li class="previous">
<a href='<s:property value="pager.prevLink" />'>
<span aria-hidden="true">&larr;</span>Newer</a>
</li>
</s:if>
<s:if test="pager.nextLink != null">
<li class="next">
<a href='<s:property value="pager.nextLink"/>'>Older
<span aria-hidden="true">&rarr;</span></a>
</li>
</s:if>
</ul>
</nav>
</div> <%-- class="tablenav" --%>
<%-- ============================================================= --%>
<%-- Bulk comment delete link --%>
<%-- ============================================================= --%>
<s:if test="bulkDeleteCount > 0">
<p>
<s:text name="commentManagement.bulkDeletePrompt1">
<s:param value="bulkDeleteCount"/>
</s:text>
<a href="#" onclick="bulkDelete()">
<s:text name="commentManagement.bulkDeletePrompt2"/>
</a>
</p>
</s:if>
<table class="rollertable table table-striped" width="100%">
<%-- ======================================================== --%>
<%-- Comment table header --%>
<tr>
<s:if test="actionName == 'comments'">
<th class="rollertable" width="5%">
<s:text name="commentManagement.columnApproved"/>
</th>
</s:if>
<th class="rollertable" width="5%">
<s:text name="commentManagement.columnSpam"/>
</th>
<th class="rollertable" width="5%">
<s:text name="generic.delete"/>
</th>
<th class="rollertable">
<s:text name="commentManagement.columnComment"/>
</th>
</tr>
<%-- ======================================================== --%>
<%-- Select ALL and NONE buttons --%>
<tr class="actionrow">
<s:if test="actionName == 'comments'">
<td align="center">
<s:text name="commentManagement.select"/><br/>
<span id="checkallapproved"><a href="#"><s:text name="generic.all"/></a></span><br/>
<span id="clearallapproved"><a href="#"><s:text name="generic.none"/></a></span>
</td>
</s:if>
<td align="center">
<s:text name="commentManagement.select"/><br/>
<span id="checkallspam"><a href="#"><s:text name="generic.all"/></a></span><br/>
<span id="clearallspam"><a href="#"><s:text name="generic.none"/></a></span>
</td>
<td align="center">
<s:text name="commentManagement.select"/><br/>
<span id="checkalldelete"><a href="#"><s:text name="generic.all"/></a></span><br/>
<span id="clearalldelete"><a href="#"><s:text name="generic.none"/></a></span>
</td>
<td align="right">
<br/>
<span class="pendingCommentBox">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<s:text name="commentManagement.pending"/>&nbsp;&nbsp;
<span class="spamCommentBox">&nbsp;&nbsp;&nbsp;&nbsp;</span>
<s:text name="commentManagement.spam"/>&nbsp;&nbsp;
</td>
</tr>
<%-- ========================================================= --%>
<%-- Loop through comments --%>
<%-- it is a bit funky to use checkbox list here, but using checkbox didn't work for me :(
we are effectively just creating a checkbox list of 1 item for each iteration of our collection. --%>
<s:iterator var="comment" value="pager.items" status="rowstatus">
<tr>
<s:if test="actionName == 'comments'">
<%-- only blog admins (not the global admin) can approve blog comments --%>
<td>
<s:checkboxlist name="bean.approvedComments" cssClass="comment-select"
list="#comment" listKey="id" listValue="emptyString" />
</td>
</s:if>
<td>
<s:checkboxlist name="bean.spamComments" cssClass="comment-select"
list="#comment" listKey="id" listValue="emptyString" />
</td>
<td>
<s:checkboxlist name="bean.deleteComments" cssClass="comment-select"
list="#comment" listKey="id" listValue="emptyString" />
</td>
<%-- ======================================================== --%>
<%-- Display comment details and text --%>
<%-- <td> with style if comment is spam or pending --%>
<s:if test="#comment.status.name() == 'SPAM'">
<td class="spamcomment">
</s:if>
<s:elseif test="#comment.status.name() == 'PENDING'">
<td class="pendingcomment">
</s:elseif>
<s:else>
<td>
</s:else>
<%-- comment details table in table --%>
<table class="innertable">
<tr>
<td class="viewbody">
<div class="viewdetails bot">
<div class="details">
<s:text name="commentManagement.entryTitled"/>&nbsp;:&nbsp;
<a href='<s:property value="#comment.weblogEntry.permalink" />'>
<s:property value="#comment.weblogEntry.title"/></a>
</div>
<div class="details">
<s:text name="commentManagement.commentBy"/>&nbsp;:&nbsp;
<s:if test="#comment.email != null && #comment.name != null">
<s:text name="commentManagement.commentByBoth">
<s:param><s:property value="#comment.name"/></s:param>
<s:param><s:property value="#comment.email"/></s:param>
<s:param><s:property value="#comment.email"/></s:param>
<s:param><s:property value="#comment.remoteHost"/></s:param>
</s:text>
</s:if>
<s:elseif test="#comment.email == null && #comment.name == null">
<s:text name="commentManagement.commentByIP">
<s:param><s:property value="#comment.remoteHost"/></s:param>
</s:text>
</s:elseif>
<s:else>
<s:text name="commentManagement.commentByName">
<s:param><s:property value="#comment.name"/></s:param>
<s:param><s:property value="#comment.remoteHost"/></s:param>
</s:text>
</s:else>
</div>
<s:if test="#comment.url != null && !#comment.url.equals('')">
<div class="details">
<s:text name="commentManagement.commentByURL"/>&nbsp;:&nbsp;
<a href='<s:property value="#comment.url" />'>
<str:truncateNicely upper="60" appendToEnd="..."><s:property
value="#comment.url"/></str:truncateNicely></a>
</div>
</s:if>
<div class="details">
<s:text name="commentManagement.postTime"/>&nbsp;:&nbsp;
<s:date name="#comment.postTime"/>
</div>
</div>
<div class="viewdetails bot">
<div class="details bot">
<s:if test="#comment.content.length() > 1000">
<div class="bot" id="comment-<s:property value="#comment.id"/>">
<str:truncateNicely upper="1000" appendToEnd="...">
<s:property value="#comment.content" escapeHtml="true"/>
</str:truncateNicely>
</div>
<div id="link-<s:property value="#comment.id"/>">
<a onclick='readMoreComment("<s:property
value="#comment.id"/>")'><s:text
name="commentManagement.readmore"/></a>
</div>
</s:if>
<s:else>
<span width="200px"
id="comment-<s:property value="#comment.id"/>"><s:property
value="#comment.content" escapeHtml="true"/></span>
</s:else>
</div>
<s:if test="actionName == 'comments'">
<div class="details">
<a id="editlink-<s:property value="#comment.id"/>"
onclick='editComment("<s:property value="#comment.id"/>")'>
<s:text name="generic.edit"/>
</a>
</div>
<div class="details">
<span id="savelink-<s:property value="#comment.id"/>"
style="display: none">
<a onclick='saveComment("<s:property value="#comment.id"/>")'><s:text
name="generic.save"/></a> &nbsp;|&nbsp;
</span>
<span id="cancellink-<s:property value="#comment.id"/>"
style="display: none">
<a onclick='editCommentCancel("<s:property
value="#comment.id"/>")'><s:text name="generic.cancel"/></a>
</span>
</div>
</s:if>
</div>
</tr>
</table>
<%-- end comment details table in table --%>
</td>
</tr>
</s:iterator>
</table>
<%-- ============================================================= --%>
<%-- Next / previous links --%>
<nav>
<ul class="pager">
<s:if test="pager.prevLink != null">
<li class="previous">
<a href='<s:property value="pager.prevLink" />'>
<span aria-hidden="true">&larr;</span>Newer</a>
</li>
</s:if>
<s:if test="pager.nextLink != null">
<li class="next">
<a href='<s:property value="pager.nextLink"/>'>Older
<span aria-hidden="true">&rarr;</span></a>
</li>
</s:if>
</ul>
</nav>
<%-- ========================================================= --%>
<%-- Save changes and cancel buttons --%>
<hr size="1" noshade="noshade"/>
<s:submit cssClass="btn btn-primary" value="%{getText('commentManagement.update')}"/>
</s:form>
</s:else>
<script>
<%-- setup check all/none checkbox controls --%>
<s:if test="pager.items != null">
$(document).ready(function () {
$('#checkallapproved').click(function () {
toggleFunction(true, "bean.approvedComments");
});
$('#clearallapproved').click(function () {
toggleFunction(false, "bean.approvedComments");
});
$('#checkallspam').click(function () {
toggleFunction(true, "bean.spamComments");
});
$('#clearallspam').click(function () {
toggleFunction(false, "bean.spamComments");
});
$('#checkalldelete').click(function () {
toggleFunction(true, "bean.deleteComments");
});
$('#clearalldelete').click(function () {
toggleFunction(false, "bean.deleteComments");
});
});
</s:if>
<%-- TODO: hook this up; it is currently not working in Roller trunk either --%>
function bulkDelete() {
if (window.confirm('<s:text name="commentManagement.confirmBulkDelete"><s:param value="bulkDeleteCount" /></s:text>')) {
document.commentQueryForm.method.value = "bulkDelete";
document.commentQueryForm.submit();
}
}
var comments = {};
function editComment(id) {
// make sure we have the full comment
if ($("#link-" + id).length > 0) readMoreComment(id, editComment);
// save the original comment value
comments[id] = $("#comment-" + id).html();
$("#editlink-" + id).hide();
$("#savelink-" + id).show();
$("#cancellink-" + id).show();
// put comment in a textarea for editing
$("#comment-" + id).html("<textarea style='width:100%' rows='10'>" + comments[id] + "</textarea>");
}
function saveComment(id) {
var content = $("#comment-" + id).children()[0].value;
var salt = $("#comments_salt").val();
$.ajax({
type: "POST",
url: '<%= request.getContextPath()%>/roller-ui/authoring/commentdata?id=' + id + '&salt=' + salt,
data: content,
dataType: "text",
processData: "false",
contentType: "text/plain",
success: function (rdata) {
if (status != "success") {
var cdata = eval("(" + rdata + ")");
$("#editlink-" + id).show();
$("#savelink-" + id).hide();
$("#cancellink-" + id).hide();
$("#comment-" + id).html(cdata.content);
} else {
alert('<s:text name="commentManagement.saveError" />');
}
}
});
}
function editCommentCancel(id) {
$("#editlink-" + id).show();
$("#savelink-" + id).hide();
$("#cancellink-" + id).hide();
if (comments[id]) {
$("#comment-" + id).html(comments[id]);
comments[id] = null;
}
}
function readMoreComment(id, callback) {
$.ajax({
type: "GET",
url: '<%= request.getContextPath()%>/roller-ui/authoring/commentdata?id=' + id,
success: function (data) {
var cdata = eval("(" + data + ")");
$("#comment-" + cdata.id).html(cdata.content);
$("#link-" + id).detach();
if (callback) callback(id);
}
});
}
</script>