sortable trust list tables
This commit is contained in:
@ -92,7 +92,7 @@ public class TrustServlet extends HttpServlet {
|
||||
subs.forEach(sub -> sub.toXML(sb));
|
||||
sb.append("</Subscriptions>");
|
||||
|
||||
} else if (section.equals("list")) {
|
||||
} else if (section.equals("listTrusted")) {
|
||||
String userB64 = req.getParameter("user");
|
||||
Persona p;
|
||||
try {
|
||||
@ -106,20 +106,49 @@ public class TrustServlet extends HttpServlet {
|
||||
if (list == null)
|
||||
return;
|
||||
|
||||
List<TrustListEntry> entries = new ArrayList<>();
|
||||
list.getGood().forEach(good -> {
|
||||
String reason = good.getReason() == null ? "" : good.getReason();
|
||||
TrustListEntry entry = new TrustListEntry(
|
||||
good.getPersona(),
|
||||
reason,
|
||||
core.getTrustService().getLevel(good.getPersona().getDestination()));
|
||||
entries.add(entry);
|
||||
});
|
||||
|
||||
TRUST_LIST_ENTRY_COMPARATORS.sort(entries, req);
|
||||
|
||||
sb.append("<List>");
|
||||
|
||||
sb.append("<Trusted>");
|
||||
for (TrustEntry te : list.getGood()) {
|
||||
TEtoXML(te, sb, core.getTrustService());
|
||||
entries.forEach(entry -> entry.toXML(sb));
|
||||
sb.append("</List>");
|
||||
} else if (section.equals("listDistrusted")) {
|
||||
String userB64 = req.getParameter("user");
|
||||
Persona p;
|
||||
try {
|
||||
p = new Persona(new ByteArrayInputStream(Base64.decode(userB64)));
|
||||
} catch (Exception bad) {
|
||||
resp.sendError(403, "Bad param");
|
||||
return;
|
||||
}
|
||||
sb.append("</Trusted>");
|
||||
|
||||
sb.append("<Distrusted>");
|
||||
for (TrustEntry te : list.getBad()) {
|
||||
TEtoXML(te, sb, core.getTrustService());
|
||||
}
|
||||
sb.append("</Distrusted>");
|
||||
RemoteTrustList list = core.getTrustSubscriber().getRemoteTrustLists().get(p.getDestination());
|
||||
if (list == null)
|
||||
return;
|
||||
|
||||
List<TrustListEntry> entries = new ArrayList<>();
|
||||
list.getBad().forEach(bad -> {
|
||||
String reason = bad.getReason() == null ? "" : bad.getReason();
|
||||
TrustListEntry entry = new TrustListEntry(
|
||||
bad.getPersona(),
|
||||
reason,
|
||||
core.getTrustService().getLevel(bad.getPersona().getDestination()));
|
||||
entries.add(entry);
|
||||
});
|
||||
|
||||
TRUST_LIST_ENTRY_COMPARATORS.sort(entries, req);
|
||||
|
||||
sb.append("<List>");
|
||||
entries.forEach(entry -> entry.toXML(sb));
|
||||
sb.append("</List>");
|
||||
}
|
||||
|
||||
@ -190,18 +219,6 @@ public class TrustServlet extends HttpServlet {
|
||||
trustManager = (TrustManager) config.getServletContext().getAttribute("trustManager");
|
||||
}
|
||||
|
||||
private static void TEtoXML(TrustEntry te, StringBuilder sb, TrustService trustService) {
|
||||
sb.append("<Persona>");
|
||||
sb.append("<User>").append(Util.escapeHTMLinXML(te.getPersona().getHumanReadableName())).append("</User>");
|
||||
sb.append("<UserB64>").append(te.getPersona().toBase64()).append("</UserB64>");
|
||||
String reason = "";
|
||||
if (te.getReason() != null)
|
||||
reason = te.getReason();
|
||||
sb.append("<Reason>").append(Util.escapeHTMLinXML(reason)).append("</Reason>");
|
||||
sb.append("<Status>").append(trustService.getLevel(te.getPersona().getDestination())).append("</Status>");
|
||||
sb.append("</Persona>");
|
||||
}
|
||||
|
||||
private static class TrustUser {
|
||||
private final Persona persona;
|
||||
private final String reason;
|
||||
@ -299,4 +316,45 @@ public class TrustServlet extends HttpServlet {
|
||||
SUBSCRIPTION_COMPARATORS.add("Trusted", SUBSCRIPTION_BY_TRUSTED);
|
||||
SUBSCRIPTION_COMPARATORS.add("Distrusted", SUBSCRIPTION_BY_DISTRUSTED);
|
||||
}
|
||||
|
||||
private static class TrustListEntry {
|
||||
private final Persona persona;
|
||||
private final String reason;
|
||||
private final TrustLevel status;
|
||||
|
||||
TrustListEntry(Persona persona, String reason, TrustLevel status) {
|
||||
this.persona = persona;
|
||||
this.reason = reason;
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
void toXML(StringBuilder sb) {
|
||||
sb.append("<Persona>");
|
||||
sb.append("<User>").append(Util.escapeHTMLinXML(persona.getHumanReadableName())).append("</User>");
|
||||
sb.append("<UserB64>").append(persona.toBase64()).append("</UserB64>");
|
||||
sb.append("<Reason>").append(Util.escapeHTMLinXML(reason)).append("</Reason>");
|
||||
sb.append("<Status>").append(status).append("</Status>");
|
||||
sb.append("</Persona>");
|
||||
}
|
||||
}
|
||||
|
||||
private static final Comparator<TrustListEntry> TRUST_LIST_ENTRY_BY_USER = (l, r) -> {
|
||||
return l.persona.getHumanReadableName().compareTo(r.persona.getHumanReadableName());
|
||||
};
|
||||
|
||||
private static final Comparator<TrustListEntry> TRUST_LIST_ENTRY_BY_REASON = (l, r) -> {
|
||||
return l.reason.compareTo(r.reason);
|
||||
};
|
||||
|
||||
private static final Comparator<TrustListEntry> TRUST_LIST_ENTRY_BY_STATUS = (l, r) -> {
|
||||
return l.status.toString().compareTo(r.status.toString());
|
||||
};
|
||||
|
||||
private static final ColumnComparators<TrustListEntry> TRUST_LIST_ENTRY_COMPARATORS = new ColumnComparators<>();
|
||||
static {
|
||||
TRUST_LIST_ENTRY_COMPARATORS.add("User", TRUST_LIST_ENTRY_BY_USER);
|
||||
TRUST_LIST_ENTRY_COMPARATORS.add("Reason", TRUST_LIST_ENTRY_BY_REASON);
|
||||
TRUST_LIST_ENTRY_COMPARATORS.add("Your Trust", TRUST_LIST_ENTRY_BY_STATUS);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -37,6 +37,17 @@ class Persona {
|
||||
this.status = xmlNode.getElementsByTagName("Status")[0].childNodes[0].nodeValue
|
||||
}
|
||||
|
||||
getMapping() {
|
||||
var mapping = new Map()
|
||||
|
||||
var userHtml = this.user + this.getTrustActions().join(" ")
|
||||
mapping.set("User", userHtml)
|
||||
mapping.set("Reason", this.reason)
|
||||
mapping.set("Your Trust", this.status)
|
||||
|
||||
return mapping
|
||||
}
|
||||
|
||||
getTrustBlock() {
|
||||
return "<span id='trusted-link-" + this.userB64 + "'>" + this.getTrustLink() + "</span>" +
|
||||
"<span id='trusted-" + this.userB64 + "'></span>"
|
||||
@ -77,6 +88,11 @@ var currentUser = null
|
||||
var listsSortKey
|
||||
var listsSortOrder
|
||||
|
||||
var trustedSortKey
|
||||
var trustedSortOrder
|
||||
var distrustedSortKey
|
||||
var distrustedSortOrder
|
||||
|
||||
function markTrusted(user) {
|
||||
var linkSpan = document.getElementById("trusted-link-" + user)
|
||||
linkSpan.innerHTML = ""
|
||||
@ -175,21 +191,16 @@ function forceUpdate(user) {
|
||||
xmlhttp.send("action=subscribe&persona=" + user)
|
||||
}
|
||||
|
||||
function updateDiv(name, list) {
|
||||
|
||||
var html = "<table><thead><tr><th>" + _t("User") + "</th><th>" + _t("Reason") + "</th><th>" + _t("Your Trust") + "</th><th>" + _t("Actions") + "</th></tr></thead><tbody>"
|
||||
|
||||
var i
|
||||
for (i = 0; i < list.length; i++) {
|
||||
html += "<tr>"
|
||||
html += "<td>" + list[i].user + "</td>"
|
||||
html += "<td>" + list[i].reason + "</td>" // maybe in <pre>
|
||||
html += "<td>" + list[i].status + "</td>"
|
||||
html += "<td>" + list[i].getTrustActions().join(" ") + "</td>"
|
||||
html += "</tr>"
|
||||
}
|
||||
|
||||
document.getElementById(name).innerHTML = html
|
||||
function sortTrustedList(key, order) {
|
||||
trustedSortKey = key
|
||||
trustedSortOrder = order
|
||||
displayTrustedList(currentUser)
|
||||
}
|
||||
|
||||
function sortDistrustedList(key, order) {
|
||||
distrustedSortKey = key
|
||||
distrustedSortOrder = order
|
||||
displayDistrustedList(currentUser)
|
||||
}
|
||||
|
||||
function parse(xmlNode, list) {
|
||||
@ -199,33 +210,71 @@ function parse(xmlNode, list) {
|
||||
list.push(new Persona(users[i]))
|
||||
}
|
||||
|
||||
function displayList(user) {
|
||||
currentUser = user
|
||||
|
||||
var currentList = lists.get(currentUser)
|
||||
|
||||
function displayTrustedList(user) {
|
||||
var b64 = lists.get(currentUser).userB64
|
||||
var xmlhttp = new XMLHttpRequest()
|
||||
xmlhttp.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
var trusted = []
|
||||
var distrusted = []
|
||||
parse(this.responseXML, trusted)
|
||||
|
||||
var xmlNode = this.responseXML.getElementsByTagName("Trusted")[0]
|
||||
parse(xmlNode, trusted)
|
||||
xmlNode = this.responseXML.getElementsByTagName("Distrusted")[0]
|
||||
parse(xmlNode, distrusted)
|
||||
var newOrder
|
||||
if (trustedSortOrder == "descending")
|
||||
newOrder = "ascending"
|
||||
else if (trustedSortOrder == "ascending")
|
||||
newOrder = "descending"
|
||||
|
||||
var table = new Table(["User", "Reason", "Your Trust"], "sortTrustedList", trustedSortKey, newOrder)
|
||||
var i
|
||||
for(i = 0; i < trusted.length; i++) {
|
||||
table.addRow(trusted[i].getMapping())
|
||||
}
|
||||
|
||||
var currentListDiv = document.getElementById("currentList")
|
||||
currentListDiv.innerHTML = "Trust List Of " + user
|
||||
|
||||
updateDiv("trusted", trusted)
|
||||
updateDiv("distrusted", distrusted)
|
||||
var trustedDiv = document.getElementById("trusted")
|
||||
trustedDiv.innerHTML = table.render()
|
||||
}
|
||||
}
|
||||
xmlhttp.open("GET", "/MuWire/Trust?section=list&user=" + currentList.userB64)
|
||||
var sortParam = "&key=" + trustedSortKey + "&order=" + trustedSortOrder
|
||||
xmlhttp.open("GET", encodeURI("/MuWire/Trust?section=listTrusted&user=" + b64 + sortParam))
|
||||
xmlhttp.send()
|
||||
}
|
||||
|
||||
function displayDistrustedList(user) {
|
||||
var b64 = lists.get(currentUser).userB64
|
||||
var xmlhttp = new XMLHttpRequest()
|
||||
xmlhttp.onreadystatechange = function() {
|
||||
if (this.readyState == 4 && this.status == 200) {
|
||||
var distrusted = []
|
||||
parse(this.responseXML, distrusted)
|
||||
|
||||
var newOrder
|
||||
if (distrustedSortOrder == "descending")
|
||||
newOrder = "ascending"
|
||||
else if (distrustedSortOrder == "ascending")
|
||||
newOrder = "descending"
|
||||
|
||||
var table = new Table(["User", "Reason", "Your Trust"], "sortDistrustedList", distrustedSortKey, newOrder)
|
||||
var i
|
||||
for(i = 0; i < distrusted.length; i++) {
|
||||
table.addRow(distrusted[i].getMapping())
|
||||
}
|
||||
|
||||
var distrustedDiv = document.getElementById("distrusted")
|
||||
distrustedDiv.innerHTML = table.render()
|
||||
}
|
||||
}
|
||||
var sortParam = "&key=" + distrustedSortKey + "&order=" + distrustedSortOrder
|
||||
xmlhttp.open("GET", encodeURI("/MuWire/Trust?section=listDistrusted&user=" + b64 + sortParam))
|
||||
xmlhttp.send()
|
||||
|
||||
}
|
||||
|
||||
function displayList(user) {
|
||||
currentUser = user
|
||||
displayTrustedList(user)
|
||||
displayDistrustedList(user)
|
||||
}
|
||||
|
||||
function sortSubscriptions(key, order) {
|
||||
listsSortKey = key
|
||||
listsSortOrder = order
|
||||
|
Reference in New Issue
Block a user