diff --git a/webui/src/main/java/com/muwire/webui/SearchServlet.java b/webui/src/main/java/com/muwire/webui/SearchServlet.java
index fa5de4cd..451acf98 100644
--- a/webui/src/main/java/com/muwire/webui/SearchServlet.java
+++ b/webui/src/main/java/com/muwire/webui/SearchServlet.java
@@ -75,6 +75,8 @@ public class SearchServlet extends HttpServlet {
sb.append(infohash);
sb.append("");
sb.append("").append(downloadManager.isDownloading(result.getInfohash())).append("");
+ if (result.getComment() != null)
+ sb.append("").append(DataHelper.escapeHTML(result.getComment())).append("");
sb.append("");
});
sb.append("");
@@ -105,6 +107,8 @@ public class SearchServlet extends HttpServlet {
resultSet.forEach(result -> {
sb.append("");
sb.append("").append(DataHelper.escapeHTML(result.getSender().getHumanReadableName())).append("");
+ if (result.getComment() != null)
+ sb.append("").append(DataHelper.escapeHTML(result.getComment())).append("");
sb.append("");
});
sb.append("");
diff --git a/webui/src/main/js/search.js b/webui/src/main/js/search.js
index fa795486..32dd0b8a 100644
--- a/webui/src/main/js/search.js
+++ b/webui/src/main/js/search.js
@@ -33,12 +33,12 @@ class SearchByFile {
class ResultsBySender {
constructor(xmlNode) {
this.sender = xmlNode.getElementsByTagName("Sender")[0].childNodes[0].nodeValue;
- this.results = [];
+ this.results = new Map();
var resultNodes = xmlNode.getElementsByTagName("Result");
var i;
for (i = 0 ; i < resultNodes.length; i ++) {
var result = new ResultBySender(resultNodes[i]);
- this.results.push(result);
+ this.results.set(result.infoHash,result);
}
}
}
@@ -49,12 +49,12 @@ class ResultsByFile {
this.infoHash = xmlNode.getElementsByTagName("InfoHash")[0].childNodes[0].nodeValue;
this.size = xmlNode.getElementsByTagName("Size")[0].childNodes[0].nodeValue;
this.downloading = xmlNode.getElementsByTagName("Downloading")[0].childNodes[0].nodeValue;
- this.results = [];
+ this.results = new Map();
var resultNodes = xmlNode.getElementsByTagName("Result");
var i;
for (i = 0; i < resultNodes.length; i++) {
var result = new ResultByFile(resultNodes[i]);
- this.results.push(result);
+ this.results.set(result.sender, result);
}
}
}
@@ -65,22 +65,62 @@ class ResultBySender {
this.size = xmlNode.getElementsByTagName("Size")[0].childNodes[0].nodeValue;
this.infoHash = xmlNode.getElementsByTagName("InfoHash")[0].childNodes[0].nodeValue;
this.downloading = xmlNode.getElementsByTagName("Downloading")[0].childNodes[0].nodeValue;
+ this.comment = null;
+ var comment = xmlNode.getElementsByTagName("Comment")
+ if (comment.length == 1)
+ this.comment = comment[0].childNodes[0].nodeValue;
}
}
class ResultByFile {
constructor(xmlNode) {
this.sender = xmlNode.getElementsByTagName("Sender")[0].childNodes[0].nodeValue;
+ this.comment = null;
+ var comment = xmlNode.getElementsByTagName("Comment")
+ if (comment.length == 1)
+ this.comment = comment[0].childNodes[0].nodeValue;
}
}
var searches = new Map();
+var expandedComments = new Map();
var uuid = null;
var sender = null;
var lastXML = null;
var infoHash = null;
+function showCommentBySender(divId, spanId) {
+ var split = divId.split("_");
+ var commentDiv = document.getElementById(divId);
+ var comment = "
"+ searches.get(split[1]).resultBatches.get(split[2]).results.get(split[3]).comment + "
";
+ commentDiv.innerHTML = comment
+ expandedComments.set(divId, comment);
+ var hideLink = "Hide Comment";
+ var linkSpan = document.getElementById(spanId);
+ linkSpan.innerHTML = hideLink;
+}
+
+function showCommentByFile(divId, spanId) {
+ var split = divId.split("_");
+ var commentDiv = document.getElementById(divId);
+ var comment = ""+searches.get(split[1]).resultBatches.get(split[2]).results.get(split[3]).comment + "
";
+ commentDiv.innerHTML = comment
+ expandedComments.set(divId, comment);
+ var hideLink = "Hide Comment";
+ var linkSpan = document.getElementById(spanId);
+ linkSpan.innerHTML = hideLink;
+}
+
+function hideComment(divId, spanId, byFile) {
+ expandedComments.delete(divId);
+ var commentDiv = document.getElementById(divId);
+ commentDiv.innerHTML = ""
+ var showLink = "Show Comment";
+ var linkSpan = document.getElementById(spanId);
+ linkSpan.innerHTML = showLink;
+}
+
function download(resultInfoHash) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
@@ -104,18 +144,33 @@ function updateSender(senderName) {
var table = "| Name | Size | Download |
"
var x = searches.get(uuid)
x = x.resultBatches.get(sender).results;
- var i;
- for (i = 0; i < x.length; i++) {
+ for (var [resultInfoHash, result] of x) {
table += "";
table += "";
- table += x[i].name;
+ table += result.name;
+ if (result.comment != null) {
+ var divId = "comment_" + uuid + "_" + senderName + "_" + resultInfoHash;
+ var spanId = "comment-link-"+resultInfoHash + senderName + uuid;
+ var comment = expandedComments.get(divId);
+ if (comment != null) {
+ var link = "Hide Comment";
+ table += " " + link + " ";
+ table += ""+comment+" ";
+ } else {
+ var link = "Show Comment";
+ table += " "+link+"";
+ table += "";
+ }
+ }
table += " | ";
table += "";
- table += x[i].size;
+ table += result.size;
table += " | ";
table += "";
- if (x[i].downloading == "false") {
- table += "Download";
+ if (result.downloading == "false") {
+ table += "Download";
} else {
table += "Downloading";
}
@@ -123,7 +178,7 @@ function updateSender(senderName) {
table += " |
";
}
table += "
";
- if (x.length > 0)
+ if (x.size > 0)
resultsDiv.innerHTML = table;
}
@@ -138,15 +193,31 @@ function updateFile(fileInfoHash) {
var resultsDiv = document.getElementById("bottomTable");
var table = "| Sender |
";
var i;
- for (i = 0; i < searchResults.results.length; i++) {
+ for (var [senderName, result] of searchResults.results) {
table += "";
table += "";
- table += searchResults.results[i].sender;
+ table += senderName
+ if (result.comment != null) {
+ var divId = "comment_" + uuid + "_" + fileInfoHash + "_" + senderName;
+ var spanId = "comment-link-" + fileInfoHash + senderName + uuid;
+ var comment = expandedComments.get(divId);
+ if (comment != null) {
+ var link = "Hide Comment";
+ table += " " + link + " ";
+ table += ""+comment+" ";
+ } else {
+ var link = "Show Comment";
+ table += " "+link+"";
+ table += "";
+ }
+ }
table += " | ";
table += "
";
}
table += "
";
- if (searchResults.results.length > 0)
+ if (searchResults.results.size > 0)
resultsDiv.innerHTML = table;
}
@@ -227,7 +298,8 @@ function refreshGroupBySender() {
var map = new Map();
for ( var [sender, results] of search.resultBatches ) {
- results.results.forEach(result => map.set(result.infoHash, 1));
+ for (var [fileInfoHash, resultFromSender] of results.results)
+ map.set(resultFromSender.infoHash, 1);
}
table += "";
table += map.size;
@@ -269,7 +341,8 @@ function refreshGroupByFile() {
var map = new Map()
for (var [fileInfoHash, result] of search.resultBatches) {
- result.results.forEach(sender => map.set(sender.sender, 1));
+ for (var [senderName, resultFromSender] of result.results)
+ map.set(senderName, 1)
}
table += " | "
table += map.size;
|