##// END OF EJS Templates
Load reflink previews of posts that are not present on the current page
Load reflink previews of posts that are not present on the current page

File last commit:

r354:34225dd7 default
r354:34225dd7 default
Show More
refpopup.js
104 lines | 2.8 KiB | application/javascript | JavascriptLexer
neko259
Added post preview popups
r352 function $X(path, root) {
return document.evaluate(path, root || document, null, 6, null);
}
function $x(path, root) {
return document.evaluate(path, root || document, null, 8, null).singleNodeValue;
}
function $del(el) {
if(el) el.parentNode.removeChild(el);
}
function $each(list, fn) {
if(!list) return;
var i = list.snapshotLength;
if(i > 0) while(i--) fn(list.snapshotItem(i), i);
}
function addRefLinkPreview(node) {
$each($X('.//a[starts-with(text(),">>")]', node || document), function(link) {
link.addEventListener('mouseover', showPostPreview, false);
link.addEventListener('mouseout', delPostPreview, false);
});
}
function showPostPreview(e) {
var doc = document;
//ref id
var pNum = $(this).text().match(/\d+/);
//position
//var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) - doc.documentElement.clientLeft + 1;
//var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop) - doc.documentElement.clientTop;
var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) + 2;
var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop);
var cln = doc.createElement('div');
cln.id = 'pstprev_' + pNum;
cln.className = 'post_preview post';
cln.style.cssText = 'top:' + y + 'px;' + (x < doc.body.clientWidth/2 ? 'left:' + x + 'px' : 'right:' + parseInt(doc.body.clientWidth - x + 1) + 'px');
cln.addEventListener('mouseout', delPostPreview, false);
var mkPreview = function(cln, html) {
cln.innerHTML = html;
addRefLinkPreview(cln);
//if(!$x('.//small', cln)) showRefMap(post, p_num, refMap)
};
cln.innerHTML = 'Загрузка...';
//если пост найден в дереве.
if($('div[id='+pNum+']').length > 0) {
var postdata = $('div[id='+pNum+']').html();
//TODO: временно
//funcInit(postdata);
//make preview
mkPreview(cln, postdata);
}
//ajax api
neko259
Load reflink previews of posts that are not present on the current page
r354 else {
$.ajax({
url: '/api/post/' + pNum
})
.success(function(data) {
// TODO get a json, not post itself
var postdata = $(data).html();
//make preview
mkPreview(cln, postdata);
})
.error(function() {
cln.innerHTML = 'Пост не найден.';
});
}
neko259
Added post preview popups
r352
$del(doc.getElementById(cln.id));
neko259
Load reflink previews of posts that are not present on the current page
r354 //add preview
$('body').append(cln);
neko259
Added post preview popups
r352 }
function delPostPreview(e) {
var el = $x('ancestor-or-self::*[starts-with(@id,"pstprev")]', e.relatedTarget);
if(!el) $each($X('.//div[starts-with(@id,"pstprev")]'), function(clone) {
$del(clone)
});
else while(el.nextSibling) $del(el.nextSibling);
}
function addPreview() {
$('.post').find('a').each(function() {
showPostPreview($(this));
});
}