79 lines
2.4 KiB
JavaScript
79 lines
2.4 KiB
JavaScript
|
// insert a backlink for a post given its short hash
|
||
|
function nntpchan_backlink(shorthash) {
|
||
|
var elem = document.getElementById("postform_message");
|
||
|
if ( elem )
|
||
|
{
|
||
|
elem.value += ">>" + shorthash.substr(0,10) + "\n";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// inject post hover behavior
|
||
|
function inject_hover(prefix, el, parent) {
|
||
|
if (!prefix) { throw "prefix is not defined"; }
|
||
|
var linkhash = el.getAttribute("backlinkhash");
|
||
|
if (!linkhash) { throw "linkhash undefined"; }
|
||
|
console.log("rewrite linkhash "+linkhash);
|
||
|
|
||
|
var elem = document.createElement("span");
|
||
|
elem.setAttribute("class", "backlink_rewritten");
|
||
|
elem.appendChild(document.createTextNode(">>"+linkhash.substr(0,10)));
|
||
|
if (!parent) {
|
||
|
parent = el.parentNode;
|
||
|
}
|
||
|
parent.removeChild(el);
|
||
|
parent.appendChild(elem);
|
||
|
|
||
|
elem.onclick = function(ev) {
|
||
|
if(parent.backlink) {
|
||
|
nntpchan_apicall(prefix+"api/find?hash="+linkhash, function(j) {
|
||
|
var wrapper = document.createElement("div");
|
||
|
wrapper.setAttribute("class", "hover "+linkhash);
|
||
|
if (j == null) {
|
||
|
// not found?
|
||
|
wrapper.setAttribute("class", "hover notfound-hover "+linkhash);
|
||
|
wrapper.appendChild(document.createTextNode("not found"));
|
||
|
} else {
|
||
|
// wrap backlink
|
||
|
nntpchan_buildpost(wrapper, j);
|
||
|
}
|
||
|
parent.appendChild(wrapper);
|
||
|
parent.backlink = false;
|
||
|
}, function(msg) {
|
||
|
var wrapper = document.createElement("div");
|
||
|
wrapper.setAttribute("class", "hover "+linkhash);
|
||
|
wrapper.appendChild(document.createTextNode(msg));
|
||
|
parent.appendChild(wrapper);
|
||
|
parent.backlink = false;
|
||
|
});
|
||
|
} else {
|
||
|
var elems = document.getElementsByClassName(linkhash);
|
||
|
if (!elems) throw "bad state, no backlinks open?";
|
||
|
for (var idx = 0 ; idx < elems.length; idx ++ ) {
|
||
|
elems[idx].parentNode.removeChild(elems[idx]);
|
||
|
}
|
||
|
parent.backlink = true;
|
||
|
}
|
||
|
};
|
||
|
parent.backlink = true;
|
||
|
}
|
||
|
|
||
|
// inject post hover for all backlinks in an element
|
||
|
function inject_hover_for_element(elem) {
|
||
|
var elems = elem.getElementsByClassName("backlink");
|
||
|
var ls = [];
|
||
|
var l = elems.length;
|
||
|
for ( var idx = 0 ; idx < l ; idx ++ ) {
|
||
|
var e = elems[idx];
|
||
|
ls.push(e);
|
||
|
}
|
||
|
for( var elem in ls ) {
|
||
|
inject_hover(prefix, ls[elem]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function init(prefix) {
|
||
|
// inject posthover ...
|
||
|
inject_hover_for_element(document);
|
||
|
}
|
||
|
|