From 3a738f8f62009834b2bb84a323f9ec301d9bb613 Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Thu, 12 Dec 2019 17:26:56 +0000 Subject: [PATCH] sorting downloads table --- webui/src/main/js/download.js | 69 +++++++++++++++++++++-------- webui/src/main/webapp/Downloads.jsp | 1 + 2 files changed, 51 insertions(+), 19 deletions(-) diff --git a/webui/src/main/js/download.js b/webui/src/main/js/download.js index f7d73a49..6fe4e0b5 100644 --- a/webui/src/main/js/download.js +++ b/webui/src/main/js/download.js @@ -7,6 +7,30 @@ class Downloader { this.progress = xmlNode.getElementsByTagName("Progress")[0].childNodes[0].nodeValue; this.infoHash = xmlNode.getElementsByTagName("InfoHash")[0].childNodes[0].nodeValue; } + + getMapping() { + var mapping = new Map() + mapping.set("Name", this.getNameBlock()) + mapping.set("State", this.state) + mapping.set("Speed", this.speed) + mapping.set("ETA", this.ETA) + mapping.set("Progress", this.progress) + mapping.set("Cancel", this.getCancelBlock()) + return mapping + } + + getNameBlock() { + return "" + this.name + "" + } + + getCancelBlock() { + if (this.state == "CANCELLED" || this.state == "FINISHED") + return "" + var linkText = _t("Cancel") + var link = "" + linkText + "" + var block = "" + link + "" + return block + } } var downloader = null; @@ -38,42 +62,49 @@ function refreshDownloader() { xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var xmlDoc = this.responseXML; + + var downloaderList = [] downloaders.clear(); var i; var x = xmlDoc.getElementsByTagName("Download"); for (i = 0; i < x.length; i ++) { var download = new Downloader(x[i]); + downloaderList.push(download) downloaders.set(download.infoHash, download); } - var table = ""; - var downloadsDiv = document.getElementById("downloads"); - for (var [infoHash, download] of downloaders) { - table += ""; - table += ""; - table += ""; - table += ""; - table += ""; - - if (download.state != "CANCELLED") - table += ""; - else - table += ""; - table += ""; + var newOrder + if (downloadsSortOrder == "descending") + newOrder = "ascending" + else if (downloadsSortOrder == "ascending") + newOrder = "descending" + var table = new Table(["Name","State","Speed","ETA","Progress","Cancel"], "sortDownloads", downloadsSortKey, newOrder) + + for(i = 0; i < downloaderList.length; i++) { + table.addRow(downloaderList[i].getMapping()) } - table += "
" + _t("Name") + "" + _t("State") + "" + _t("Speed") + "" + _t("ETA") + "" + _t("Progress") + "" + _t("Cancel") + "
"; - table += download.name; - table += ""+download.state+""+download.speed+""+download.ETA+""+download.progress+"" + _t("Cancel") + "
"; + + var downloadsDiv = document.getElementById("downloads"); if (downloaders.size > 0) - downloadsDiv.innerHTML = table; + downloadsDiv.innerHTML = table.render(); if (downloader != null) updateDownloader(downloader); } } - xmlhttp.open("GET", "/MuWire/Download", true); + var sortParam = "key=" + downloadsSortKey + "&order=" + downloadsSortOrder + xmlhttp.open("GET", "/MuWire/Download?" + sortParam, true); xmlhttp.send(); } +var downloadsSortKey +var downloadsSortOrder + +function sortDownloads(key, order) { + downloadsSortKey = key + downloadsSortOrder = order + refreshDownloader() +} + function initDownloads() { setInterval(refreshDownloader, 3000) setTimeout(refreshDownloader,1); diff --git a/webui/src/main/webapp/Downloads.jsp b/webui/src/main/webapp/Downloads.jsp index 9ed0d622..1a413251 100644 --- a/webui/src/main/webapp/Downloads.jsp +++ b/webui/src/main/webapp/Downloads.jsp @@ -15,6 +15,7 @@ <%@include file="css.jsi"%> +