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 = "" 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 += ""; table += ""; } table += "
NameSizeDownload
"; - 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 += x[i].size; + table += result.size; 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 += "
"; - 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 = ""; var i; - for (i = 0; i < searchResults.results.length; i++) { + for (var [senderName, result] of searchResults.results) { table += ""; table += ""; table += ""; } table += "
Sender
"; - 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 += "
"; - 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;