From 62c4579bbd07eeb3f880cd4148ae8eb7f9531997 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Wed, 11 Dec 2019 21:47:03 +0000 Subject: [PATCH] preserve expanded comment state during updates --- webui/src/main/js/search.js | 130 ++++++++++++++++++++++++++---------- 1 file changed, 96 insertions(+), 34 deletions(-) diff --git a/webui/src/main/js/search.js b/webui/src/main/js/search.js index 54904a93..10c2bd04 100644 --- a/webui/src/main/js/search.js +++ b/webui/src/main/js/search.js @@ -77,10 +77,13 @@ class Sender { class Senders { constructor(xmlNode) { this.senders = [] + this.sendersMap = new Map() var senderNodes = xmlNode.getElementsByTagName("Sender") var i for (i = 0; i < senderNodes.length; i++) { - this.senders.push(new Sender(senderNodes[i])) + var sender = new Sender(senderNodes[i]) + this.senders.push(sender) + this.sendersMap.set(sender.b64, sender) } } @@ -129,13 +132,25 @@ class ResultFromSender { getCommentBlock() { if (this.comment == null) return "" - var html = "" - html += "
" - return html + if (expandedComments.get(this.infoHash)) { + var html = "" + html += "
" + html += "
" + this.comment + "
" + html += "
" + return html + } else { + var html = "" + html += "
" + return html + } } getCertificatesBlock() { @@ -156,10 +171,13 @@ class ResultFromSender { class ResultsFromSender { constructor(xmlNode) { this.resultsFromSender = [] + this.resultsMap = new Map() var resultNodes = xmlNode.getElementsByTagName("Result") var i for (i = 0; i < resultNodes.length; i++) { - this.resultsFromSender.push(new ResultFromSender(resultNodes[i])) + var result = new ResultFromSender(resultNodes[i]) + this.resultsFromSender.push(result) + this.resultsMap.set(result.infoHash, result) } } @@ -210,10 +228,13 @@ class Result { class Results { constructor(xmlNode) { this.results = [] + this.resultsMap = new Map() var resultNodes = xmlNode.getElementsByTagName("Result") var i for (i = 0; i < resultNodes.length; i++) { - this.results.push(new Result(resultNodes[i])) + var result = new Result(resultNodes[i]) + this.results.push(result) + this.resultsMap.set(result.infoHash, result) } } @@ -256,7 +277,34 @@ class SenderForResult { } getNameBlock() { - return this.name + return this.name + this.getCommentBlock() + this.getCertificatesBlock() + } + + getCommentBlock() { + if (this.comment == null) + return "" + if (expandedComments.get(this.b64)) { + var html = "" + html += "
" + html += "
" + this.comment + "
" + html += "
" + return html + } else { + var link = "" + _t("Show Comment") + "" + var block = "" + block += "
" + return block + } + } + + getCertificatesBlock() { + if (this.certificates == "0") + return "" + return _t("View {0} Certificates", this.certificates) } getBrowseBlock() { @@ -304,10 +352,13 @@ class SenderForResult { class SendersForResult { constructor(xmlNode) { this.sendersForResult = [] + this.sendersMap = new Map() var senderNodes = xmlNode.getElementsByTagName("Sender") var i for (i = 0; i < senderNodes.length; i++) { - this.sendersForResult.push(new SenderForResult(senderNodes[i])) + var sender = new SenderForResult(senderNodes[i]) + this.sendersForResult.push(sender) + this.sendersMap.set(sender.b64, sender) } } @@ -350,45 +401,56 @@ var results var currentResult var sendersForResult +// expanded comments +var expandedComments = new Map() + // status fields var uuid = null; var statusByUUID = new Map() -// expanded comments -var expandedComments = new Map(); - // pointers based on current view type var refreshFunction = null var refreshType = null -function showCommentBySender(divId, spanId) { - var split = divId.split("_"); - var commentDiv = document.getElementById(divId); - var comment = "
"+ currentSearchBySender.resultBatches.get(split[2]).results.get(split[3]).comment + "
"; +function showCommentBySender(infoHash) { + + expandedComments.set(infoHash, true) + + var commentText = resultsFromSender.resultsMap.get(infoHash).comment + + var commentDiv = document.getElementById("comment-" + infoHash); + var comment = "
"+ commentText + "
"; commentDiv.innerHTML = comment - expandedComments.set(divId, comment); - var hideLink = "" + _t("Hide Comment") + ""; - var linkSpan = document.getElementById(spanId); + + + var hideLink = "" + _t("Hide Comment") + ""; + var linkSpan = document.getElementById("comment-link-" + infoHash); linkSpan.innerHTML = hideLink; } -function showCommentByFile(divId, spanId) { - var split = divId.split("_"); - var commentDiv = document.getElementById(divId); - var comment = "
"+currentSearchByFile.resultBatches.get(split[2]).results.get(split[3]).comment + "
"; +function showCommentByFile(b64) { + + expandedComments.set(b64, true) + + var commentText = sendersForResult.sendersMap.get(b64).comment + + var commentDiv = document.getElementById("comment-" + b64) + var comment = "
" + commentText + "
" commentDiv.innerHTML = comment - expandedComments.set(divId, comment); - var hideLink = "" + _t("Hide Comment") + ""; - var linkSpan = document.getElementById(spanId); + + var hideLink = "" + _t("Hide Comment") + ""; + var linkSpan = document.getElementById("comment-link-" + b64); linkSpan.innerHTML = hideLink; } -function hideComment(divId, spanId, byFile) { - expandedComments.delete(divId); - var commentDiv = document.getElementById(divId); +function hideComment(id) { + expandedComments.delete(id) + + var commentDiv = document.getElementById("comment-" + id); commentDiv.innerHTML = "" - var showLink = "" + _t("Show Comment") + ""; - var linkSpan = document.getElementById(spanId); + + var showLink = "" + _t("Show Comment") + ""; + var linkSpan = document.getElementById("comment-link-"+id); linkSpan.innerHTML = showLink; }