mirror of https://github.com/zlatinb/muwire
175 lines
5.6 KiB
JavaScript
175 lines
5.6 KiB
JavaScript
class Persona {
|
|
constructor(xmlNode) {
|
|
this.user = xmlNode.getElementsByTagName("User")[0].childNodes[0].nodeValue
|
|
this.userB64 = xmlNode.getElementsByTagName("UserB64")[0].childNodes[0].nodeValue
|
|
this.reason = xmlNode.getElementsByTagName("Reason")[0].childNodes[0].nodeValue
|
|
}
|
|
|
|
getTrustedLink() {
|
|
return "<a herf='#' onclick='window.markTrusted(\"" + this.userB64 + "\"); return false;'>Mark Trusted</a>"
|
|
}
|
|
|
|
getNeutralLink() {
|
|
return "<a herf='#' onclick='window.markNeutral(\"" + this.userB64 + "\"); return false;'>Mark Neutral</a>"
|
|
}
|
|
|
|
getDistrustedLink() {
|
|
return "<a herf='#' onclick='window.markDistrusted(\"" + this.userB64 + "\"); return false;'>Mark Distrusted</a>"
|
|
}
|
|
}
|
|
|
|
var trusted = new Map()
|
|
var distrusted = new Map()
|
|
var revision = -1
|
|
|
|
function markTrusted(host) {
|
|
var linkSpan = document.getElementById("trusted-link-"+host)
|
|
linkSpan.innerHTML = ""
|
|
|
|
var textAreaSpan = document.getElementById("trusted-"+host)
|
|
|
|
var textbox = "<textarea id='trust-reason-" + host + "'></textarea>"
|
|
var submitLink = "<a href='#' onclick='window.submitTrust(\"" + host + "\");return false;'>Submit</a>"
|
|
var cancelLink = "<a href='#' onclick='window.cancelTrust(\"" + host + "\");return false;'>Cancel</a>"
|
|
|
|
var html = "<br/>" + textbox + "<br/>" + submitLink + " " + cancelLink + "<br/>"
|
|
|
|
textAreaSpan.innerHTML = html
|
|
}
|
|
|
|
function markNeutral(host) {
|
|
publishTrust(host, "", "neutral")
|
|
}
|
|
|
|
function markDistrusted(host) {
|
|
var linkSpan = document.getElementById("distrusted-link-"+host)
|
|
linkSpan.innerHTML = ""
|
|
|
|
var textAreaSpan = document.getElementById("distrusted-"+host)
|
|
|
|
var textbox = "<textarea id='distrust-reason-" + host + "'></textarea>"
|
|
var submitLink = "<a href='#' onclick='window.submitDistrust(\"" + host + "\");return false;'>Submit</a>"
|
|
var cancelLink = "<a href='#' onclick='window.cancelDistrust(\"" + host + "\");return false;'>Cancel</a>"
|
|
|
|
var html = "<br/>" + textbox + "<br/>" + submitLink + " " + cancelLink + "<br/>"
|
|
|
|
textAreaSpan.innerHTML = html
|
|
}
|
|
|
|
function submitTrust(host) {
|
|
var reason = document.getElementById("trust-reason-"+host).value
|
|
publishTrust(host, reason, "trust")
|
|
}
|
|
|
|
function submitDistrust(host) {
|
|
var reason = document.getElementById("distrust-reason-"+host).value
|
|
publishTrust(host, reason, "distrust")
|
|
}
|
|
|
|
|
|
function publishTrust(host, reason, trust) {
|
|
var xmlhttp = new XMLHttpRequest()
|
|
xmlhttp.onreadystatechange = function() {
|
|
if (this.readyState == 4 && this.status == 200) {
|
|
refreshUsers()
|
|
}
|
|
}
|
|
xmlhttp.open("POST","/MuWire/Trust", true)
|
|
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
|
xmlhttp.send("action=" + trust + "&reason=" + reason + "&persona=" + host)
|
|
}
|
|
|
|
function cancelTrust(host) {
|
|
var textAreaSpan = document.getElementById("trusted-" + host)
|
|
textAreaSpan.innerHTML = ""
|
|
|
|
var linkSpan = document.getElementById("trusted-link-"+host)
|
|
var html = "<a href='#' onclick='markTrusted(\"" + host + "\"); return false;'>Mark Trusted</a>"
|
|
linkSpan.innerHTML = html
|
|
}
|
|
|
|
function cancelDistrust(host) {
|
|
var textAreaSpan = document.getElementById("distrusted-" + host)
|
|
textAreaSpan.innerHTML = ""
|
|
|
|
var linkSpan = document.getElementById("distrusted-link-"+host)
|
|
var html = "<a href='#' onclick='markDistrusted(\"" + host + "\"); return false;'>Mark Distrusted</a>"
|
|
linkSpan.innerHTML = html
|
|
}
|
|
|
|
function updateTable(map, divId) {
|
|
var divElement = document.getElementById(divId)
|
|
var tableHtml = "<table><thead><tr><th>User</th><th>Reason</th><th>Actions</th></tr></thead><tbody>"
|
|
|
|
var isTrusted = (map == trusted)
|
|
for (var [ignored, user] of map) {
|
|
tableHtml += "<tr>"
|
|
tableHtml += "<td>" + user.user + "</td>"
|
|
tableHtml += "<td>" + user.reason + "</td>"
|
|
|
|
tableHtml += "<td>"
|
|
if (isTrusted) {
|
|
tableHtml += user.getNeutralLink() + " <span id='distrusted-link-" + user.userB64 + "'>" + user.getDistrustedLink() + "</span>" +
|
|
"<span id='distrusted-" + user.userB64 + "'></span>"
|
|
} else {
|
|
tableHtml += user.getNeutralLink() + " <span id='trusted-link-" + user.userB64 + "'>" + user.getTrustedLink() + "</span>" +
|
|
"<span id='trusted-" + user.userB64 + "'></span>"
|
|
}
|
|
tableHtml += "</td>"
|
|
|
|
tableHtml += "</tr>"
|
|
}
|
|
tableHtml += "</tbody></table>"
|
|
divElement.innerHTML = tableHtml
|
|
}
|
|
|
|
function refreshUsers() {
|
|
var xmlhttp = new XMLHttpRequest()
|
|
xmlhttp.onreadystatechange = function() {
|
|
if (this.readyState == 4 && this.status == 200) {
|
|
trusted.clear()
|
|
distrusted.clear()
|
|
var trustedElement = this.responseXML.getElementsByTagName("Trusted")[0]
|
|
var trustedUsers = trustedElement.getElementsByTagName("Persona")
|
|
var i
|
|
for (i = 0; i < trustedUsers.length; i++) {
|
|
var persona = new Persona(trustedUsers[i])
|
|
trusted.set(persona.user, persona)
|
|
}
|
|
|
|
var distrustedElement = this.responseXML.getElementsByTagName("Distrusted")[0]
|
|
var distrustedUsers = distrustedElement.getElementsByTagName("Persona")
|
|
for (i = 0; i < distrustedUsers.length; i++) {
|
|
var persona = new Persona(distrustedUsers[i])
|
|
distrusted.set(persona.user, persona)
|
|
}
|
|
|
|
updateTable(trusted, "trustedUsers")
|
|
updateTable(distrusted, "distrustedUsers")
|
|
|
|
}
|
|
}
|
|
xmlhttp.open("GET", "/MuWire/Trust?section=users", true)
|
|
xmlhttp.send()
|
|
}
|
|
|
|
function fetchRevision() {
|
|
var xmlhttp = new XMLHttpRequest()
|
|
xmlhttp.onreadystatechange = function() {
|
|
if (this.readyState == 4 && this.status == 200) {
|
|
var xmlDoc = this.responseXML
|
|
var newRevision = xmlDoc.childNodes[0].childNodes[0].nodeValue
|
|
if (newRevision > revision) {
|
|
revision = newRevision
|
|
refreshUsers()
|
|
}
|
|
}
|
|
}
|
|
xmlhttp.open("GET", "/MuWire/Trust?section=revision", true)
|
|
xmlhttp.send()
|
|
}
|
|
|
|
function initTrustUsers() {
|
|
setTimeout(fetchRevision, 1)
|
|
setInterval(fetchRevision, 3000)
|
|
} |