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)
92 lines
2.7 KiB
JavaScript
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);
|