##// END OF EJS Templates
Fixed thread max posts to not create new migration each time it changes in settings
Fixed thread max posts to not create new migration each time it changes in settings

File last commit:

r1065:eb6bb3e8 default
r1136:f6ecb53d default
Show More
refpopup.js
120 lines | 3.4 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);
}
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 function mkPreview(cln, html) {
cln.innerHTML = html;
highlightCode($(cln));
addRefLinkPreview(cln);
};
function isElementInViewport (el) {
//special bonus for those using jQuery
if (typeof jQuery === "function" && el instanceof jQuery) {
el = el[0];
}
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}
neko259
Added post preview popups
r352 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+/);
neko259
Fixed NPE in reflink previews
r376 if (pNum == null || pNum.length == 0) {
neko259
Added thread autoupdate. Currently has some bugs, not ready for merge with the main branch
r361 return;
neko259
Fixed reply links on page that trigger ajax
r355 }
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 var post = $('#' + pNum);
if (post.length > 0 && isElementInViewport(post)) {
post.addClass('highlight');
} else {
var x = e.clientX + (doc.documentElement.scrollLeft || doc.body.scrollLeft) + 2;
var y = e.clientY + (doc.documentElement.scrollTop || doc.body.scrollTop);
neko259
Added post preview popups
r352
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 var cln = doc.createElement('div');
cln.id = 'pstprev_' + pNum;
cln.className = 'post_preview';
neko259
Added post preview popups
r352
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 cln.style.cssText = 'top:' + y + 'px;' + (x < doc.body.clientWidth/2 ? 'left:' + x + 'px' : 'right:' + parseInt(doc.body.clientWidth - x + 1) + 'px');
neko259
Added post preview popups
r352
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 cln.addEventListener('mouseout', delPostPreview, false);
neko259
Added post preview popups
r352
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 cln.innerHTML = "<div class=\"post\">" + gettext('Loading...') + "</div>";
neko259
Added post preview popups
r352
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 if(post.length > 0) {
var postdata = post.clone().wrap("<div/>").parent().html();
neko259
Added post preview popups
r352
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 mkPreview(cln, postdata);
} else {
$.ajax({
url: '/api/post/' + pNum + '/?truncated'
})
.success(function(data) {
var postdata = $(data).wrap("<div/>").parent().html();
neko259
Added post preview popups
r352
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 //make preview
mkPreview(cln, postdata);
neko259
Load reflink previews of posts that are not present on the current page
r354
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 })
.error(function() {
cln.innerHTML = "<div class=\"post\">"
+ gettext('Post not found') + "</div>";
});
}
neko259
Load reflink previews of posts that are not present on the current page
r354
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 $del(doc.getElementById(cln.id));
//add preview
$(cln).fadeIn(200);
$('body').append(cln);
neko259
Load reflink previews of posts that are not present on the current page
r354 }
neko259
Added post preview popups
r352 }
function delPostPreview(e) {
var el = $x('ancestor-or-self::*[starts-with(@id,"pstprev")]', e.relatedTarget);
neko259
Highlight post instead of showing popup if the post is visible on page....
r1035 if(!el) {
$each($X('.//div[starts-with(@id,"pstprev")]'), function(clone) {
$del(clone)
});
} else {
while(el.nextSibling) $del(el.nextSibling);
}
$('.highlight').removeClass('highlight');
neko259
Added post preview popups
r352 }
function addPreview() {
$('.post').find('a').each(function() {
showPostPreview($(this));
});
}