all repos — honk @ b43a082fc8b506d304041f87161ded5f6d335181

my fork of honk

views/honkpage.js (view raw)

  1function encode(hash) {
  2        var s = []
  3        for (var key in hash) {
  4                var val = hash[key]
  5                s.push(escape(key) + "=" + escape(val))
  6        }
  7        return s.join("&")
  8}
  9function post(url, data) {
 10	var x = new XMLHttpRequest()
 11	x.open("POST", url)
 12	x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
 13	x.send(data)
 14}
 15function get(url, whendone) {
 16	var x = new XMLHttpRequest()
 17	x.open("GET", url)
 18	x.responseType = "document"
 19	x.onload = function() { whendone(x) }
 20	x.send()
 21}
 22function bonk(el, xid) {
 23	el.innerHTML = "bonked"
 24	el.disabled = true
 25	post("/bonk", encode({"CSRF": csrftoken, "xid": xid}))
 26}
 27function unbonk(el, xid) {
 28	el.innerHTML = "unbonked"
 29	el.disabled = true
 30	post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "unbonk", "what": xid}))
 31}
 32function muteit(el, convoy) {
 33	el.innerHTML = "muted"
 34	el.disabled = true
 35	post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "zonvoy", "what": convoy}))
 36	var els = document.querySelectorAll('article.honk')
 37	for (var i = 0; i < els.length; i++) {
 38		var e = els[i]
 39		if (e.getAttribute("data-convoy") == convoy) {
 40			e.remove()
 41		}
 42	}
 43}
 44function zonkit(el, xid) {
 45	el.innerHTML = "zonked"
 46	el.disabled = true
 47	post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "zonk", "what": xid}))
 48	var p = el
 49	while (p && p.tagName != "ARTICLE") {
 50		p = p.parentElement
 51	}
 52	if (p) {
 53		p.remove()
 54	}
 55}
 56function ackit(el, xid) {
 57	el.innerHTML = "acked"
 58	el.disabled = true
 59	post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "ack", "what": xid}))
 60}
 61function deackit(el, xid) {
 62	el.innerHTML = "deacked"
 63	el.disabled = true
 64	post("/zonkit", encode({"CSRF": csrftoken, "wherefore": "deack", "what": xid}))
 65}
 66function fillinhonks(xhr) {
 67	var doc = xhr.responseXML
 68	topxid[thispagename] = doc.children[0].children[1].children[0].innerText
 69	var honks = doc.children[0].children[1].children[1].children
 70	var honksonpage = document.getElementById("honksonpage")
 71	var holder = honksonpage.children[0]
 72	var lenhonks = honks.length
 73	for (var i = honks.length; i > 0; i--) {
 74		holder.prepend(honks[i-1])
 75	}
 76	relinkconvoys()
 77	return lenhonks
 78}
 79function refreshhonks(btn) {
 80	btn.innerHTML = "refreshing"
 81	btn.disabled = true
 82	var args = { "page" : thispagename }
 83	args["topxid"] = topxid[thispagename]
 84	get("/hydra?" + encode(args), function(xhr) {
 85		var lenhonks = fillinhonks(xhr)
 86		btn.innerHTML = "refresh"
 87		btn.disabled = false
 88		btn.parentElement.children[1].innerHTML = " " + lenhonks + " new"
 89	})
 90}
 91function statechanger(evt) {
 92	var name = evt.state
 93	if (!name) {
 94		return
 95	}
 96	switchtopage(name)
 97}
 98function switchtopage(name, evt) {
 99	var honksonpage = document.getElementById("honksonpage")
100	var holder = honksonpage.children[0]
101	holder.remove()
102	if (thispagename != "convoy") {
103		honksforpage[thispagename] = holder
104	}
105	thispagename = name
106	holder = honksforpage[name]
107	if (holder) {
108		honksonpage.prepend(holder)
109	} else {
110		honksonpage.prepend(document.createElement("div"))
111		var args = { "page" : name }
112		if (name == "convoy") {
113			var c = evt.srcElement.text
114			args["c"] = c
115		} else {
116			args["topxid"] = topxid[name]
117		}
118		get("/hydra?" + encode(args), fillinhonks)
119	}
120}
121function pageswitcher(name) {
122	return function(evt) {
123		if (name == thispagename) {
124			return false
125		}
126		switchtopage(name, evt)
127		var url = evt.srcElement.href
128		history.pushState(name, "some title", url)
129		return false
130	}
131}
132function relinkconvoys() {
133	var els = document.getElementsByClassName("convoylink")
134	for (var i = 0; i < els.length; i++) {
135		els[i].onclick = pageswitcher("convoy")
136	}
137}
138(function() {
139	var el = document.getElementById("homelink")
140	el.onclick = pageswitcher("home")
141	var el = document.getElementById("atmelink")
142	el.onclick = pageswitcher("atme")
143	relinkconvoys()
144	window.onpopstate = statechanger
145	history.replaceState(thispagename, "some title", "")
146})();
147(function() {
148	var el = document.getElementById("donkdescriptor")
149	el.style.display = "none"
150})();
151function showhonkform(elem, rid, hname) {
152	var form = document.getElementById("honkform")
153	form.style = "display: block"
154	if (elem) {
155		form.remove()
156		elem.parentElement.insertAdjacentElement('beforebegin', form)
157	} else {
158		elem = document.getElementById("honkformhost")
159		elem.insertAdjacentElement('afterend', form)
160	}
161	var ridinput = document.getElementById("ridinput")
162	var honknoise = document.getElementById("honknoise")
163	if (rid) {
164		ridinput.value = rid
165		honknoise.value = "@" + hname + " "
166	}
167	document.getElementById("honknoise").focus()
168}
169function updatedonker() {
170	var el = document.getElementById("donker")
171	el.children[1].textContent = el.children[0].value.slice(-20)
172	var el = document.getElementById("donkdescriptor")
173	el.style.display = ""
174}