151 lines
3.9 KiB
JavaScript
151 lines
3.9 KiB
JavaScript
{{ $BonkCSRF := .HonkCSRF }}
|
|
function encode(hash) {
|
|
var s = []
|
|
for (var key in hash) {
|
|
var val = hash[key]
|
|
s.push(escape(key) + "=" + escape(val))
|
|
}
|
|
return s.join("&")
|
|
}
|
|
function post(url, data) {
|
|
var x = new XMLHttpRequest()
|
|
x.open("POST", url)
|
|
x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
|
|
x.send(data)
|
|
}
|
|
function get(url, whendone) {
|
|
var x = new XMLHttpRequest()
|
|
x.open("GET", url)
|
|
x.responseType = "document"
|
|
x.onload = function() { whendone(x) }
|
|
x.send()
|
|
}
|
|
function bonk(el, xid) {
|
|
el.innerHTML = "bonked"
|
|
el.disabled = true
|
|
post("/bonk", "CSRF={{ $BonkCSRF }}&xid=" + escape(xid))
|
|
}
|
|
function unbonk(el, xid) {
|
|
el.innerHTML = "unbonked"
|
|
el.disabled = true
|
|
post("/zonkit", "CSRF={{ $BonkCSRF }}&wherefore=unbonk&what=" + escape(xid))
|
|
}
|
|
function muteit(el, convoy) {
|
|
el.innerHTML = "muted"
|
|
el.disabled = true
|
|
post("/zonkit", "CSRF={{ $BonkCSRF }}&wherefore=zonvoy&what=" + escape(convoy))
|
|
var els = document.querySelectorAll('article.honk')
|
|
for (var i = 0; i < els.length; i++) {
|
|
var e = els[i]
|
|
if (e.getAttribute("data-convoy") == convoy) {
|
|
e.remove()
|
|
}
|
|
}
|
|
}
|
|
function zonkit(el, xid) {
|
|
el.innerHTML = "zonked"
|
|
el.disabled = true
|
|
post("/zonkit", "CSRF={{ $BonkCSRF }}&wherefore=zonk&what=" + escape(xid))
|
|
var p = el
|
|
while (p && p.tagName != "ARTICLE") {
|
|
p = p.parentElement
|
|
}
|
|
if (p) {
|
|
p.remove()
|
|
}
|
|
}
|
|
function ackit(el, xid) {
|
|
el.innerHTML = "acked"
|
|
el.disabled = true
|
|
post("/zonkit", "CSRF={{ $BonkCSRF }}&wherefore=ack&what=" + escape(xid))
|
|
}
|
|
function deackit(el, xid) {
|
|
el.innerHTML = "deacked"
|
|
el.disabled = true
|
|
post("/zonkit", "CSRF={{ $BonkCSRF }}&wherefore=deack&what=" + escape(xid))
|
|
}
|
|
var topxid = { "{{ .PageName }}" : "{{ .TopXID }}" }
|
|
var honksforpage = { }
|
|
var thispagename = "{{ .PageName }}"
|
|
function fillinhonks(xhr) {
|
|
var doc = xhr.responseXML
|
|
topxid[thispagename] = doc.children[0].children[1].children[0].innerText
|
|
var honks = doc.children[0].children[1].children[1].children
|
|
var honksonpage = document.getElementById("honksonpage")
|
|
var holder = honksonpage.children[0]
|
|
var lenhonks = honks.length
|
|
for (var i = honks.length; i > 0; i--) {
|
|
holder.prepend(honks[i-1])
|
|
}
|
|
relinkconvoys()
|
|
return lenhonks
|
|
}
|
|
function refreshhonks(btn) {
|
|
btn.innerHTML = "refreshing"
|
|
btn.disabled = true
|
|
var args = { "page" : thispagename }
|
|
args["topxid"] = topxid[thispagename]
|
|
get("/hydra?" + encode(args), function(xhr) {
|
|
var lenhonks = fillinhonks(xhr)
|
|
btn.innerHTML = "refresh"
|
|
btn.disabled = false
|
|
btn.parentElement.children[1].innerHTML = " " + lenhonks + " new"
|
|
})
|
|
}
|
|
function statechanger(evt) {
|
|
var name = evt.state
|
|
if (!name) {
|
|
return
|
|
}
|
|
switchtopage(name)
|
|
}
|
|
function switchtopage(name, evt) {
|
|
var honksonpage = document.getElementById("honksonpage")
|
|
var holder = honksonpage.children[0]
|
|
holder.remove()
|
|
if (thispagename != "convoy") {
|
|
honksforpage[thispagename] = holder
|
|
}
|
|
thispagename = name
|
|
holder = honksforpage[name]
|
|
if (holder) {
|
|
honksonpage.prepend(holder)
|
|
} else {
|
|
honksonpage.prepend(document.createElement("div"))
|
|
var args = { "page" : name }
|
|
if (name == "convoy") {
|
|
var c = evt.srcElement.text
|
|
args["c"] = c
|
|
} else {
|
|
args["topxid"] = topxid[name]
|
|
}
|
|
get("/hydra?" + encode(args), fillinhonks)
|
|
}
|
|
}
|
|
function pageswitcher(name) {
|
|
return function(evt) {
|
|
if (name == thispagename) {
|
|
return false
|
|
}
|
|
switchtopage(name, evt)
|
|
var url = evt.srcElement.href
|
|
history.pushState(name, "some title", url)
|
|
return false
|
|
}
|
|
}
|
|
function relinkconvoys() {
|
|
var els = document.getElementsByClassName("convoylink")
|
|
for (var i = 0; i < els.length; i++) {
|
|
els[i].onclick = pageswitcher("convoy")
|
|
}
|
|
}
|
|
(function() {
|
|
var el = document.getElementById("homelink")
|
|
el.onclick = pageswitcher("home")
|
|
var el = document.getElementById("atmelink")
|
|
el.onclick = pageswitcher("atme")
|
|
relinkconvoys()
|
|
window.onpopstate = statechanger
|
|
history.replaceState(thispagename, "some title", thispagename)
|
|
})();
|