Files
muwire/webui/src/main/js/upload.js
zzz 2d3e843d64 Plugin headers and CSP (Gitlab issue #44)
Prep for stricter script-src:
Add headers, remove js onload, move init call to the js
Add nonces to all scripts, can't use yet due to innerHTML (see Gitlab issue #45)
2020-05-11 07:50:36 -04:00

92 lines
2.7 KiB
JavaScript

class Upload {
constructor(xmlNode) {
this.name = xmlNode.getElementsByTagName("Name")[0].childNodes[0].nodeValue;
this.progress = xmlNode.getElementsByTagName("Progress")[0].childNodes[0].nodeValue;
this.speed = xmlNode.getElementsByTagName("Speed")[0].childNodes[0].nodeValue;
this.downloader = xmlNode.getElementsByTagName("Downloader")[0].childNodes[0].nodeValue
this.remotePieces = xmlNode.getElementsByTagName("RemotePieces")[0].childNodes[0].nodeValue
}
getMapping() {
var mapping = new Map()
mapping.set("Name", this.name)
mapping.set("Speed", this.speed)
mapping.set("Progress", this.progress)
mapping.set("Downloader", this.downloader)
mapping.set("Remote Pieces", this.remotePieces)
return mapping
}
}
function refreshUploads() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var xmlDoc = this.responseXML;
var uploaderList = []
var i;
var x = xmlDoc.getElementsByTagName("Upload");
for (i = 0; i < x.length; i ++) {
var upload = new Upload(x[i]);
uploaderList.push(upload)
}
var newOrder
if (uploadsSortOrder == "descending")
newOrder = "ascending"
else if (uploadsSortOrder == "ascending")
newOrder = "descending"
var table = new Table(["Name","Progress","Downloader","Remote Pieces","Speed"], "sortUploads", uploadsSortKey, newOrder, null)
for(i = 0; i < uploaderList.length; i++) {
table.addRow(uploaderList[i].getMapping())
}
var uploadsDiv = document.getElementById("uploads");
var clearDiv = document.getElementById("clearFinished")
if (uploaderList.length > 0) {
uploadsDiv.innerHTML = table.render();
var clearLink = new Link(_t("Clear Finished"), "clear", ["ignored"])
clearDiv.innerHTML = clearLink.render()
} else {
uploadsDiv.innerHTML = ""
clearDiv.innerHTML = ""
}
}
}
var sortParam = "key=" + uploadsSortKey + "&order=" + uploadsSortOrder
xmlhttp.open("GET", "/MuWire/Upload?" + sortParam, true);
xmlhttp.send();
}
function clear(ignored) {
var xmlhttp = new XMLHttpRequest()
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
refreshUploads()
}
}
xmlhttp.open("POST", "/MuWire/Upload")
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send(encodeURI("action=clear"));
}
var uploadsSortKey = "Name"
var uploadsSortOrder = "descending"
function sortUploads(key, order) {
uploadsSortKey = key
uploadsSortOrder = order
refreshUploads()
}
function initUploads() {
setInterval(refreshUploads, 3000)
setTimeout(refreshUploads,1);
}
document.addEventListener("DOMContentLoaded", function() {
initUploads();
}, true);