I've been working on a hover-preview Tampermonkey script. It's always bugged me that r3v doesn't even have title attribute tooltips.

You can has. Just install Tampermonkey and paste it in.
Version 0.2 - 3/2/13 - Features added:

You can has. Just install Tampermonkey and paste it in.
Version 0.2 - 3/2/13 - Features added:
- Smart hover placement
- Image scaling
- Ability to flip through current page of posts (N and P keys)
- "Last post" view (hover over the arrow image)
Code:
// ==UserScript==
// @name r3vlimited hover tips
// @namespace http://www.r3vlimited.com/
// @version 0.2
// @description does neat things
// @match http://www.r3vlimited.com/board/*
// @copyright 2013+, Fourbanger
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// ==/UserScript==
var scaleFactor = .75;
var delay = 375;
$(document).ready(function(){
var html = '\
<div id="hoverBoundary">\
<div id="hoverContainer">\
</div>\
<div>';
var styles = '<style>\
#hoverBoundary {\
-webkit-touch-callout: none;\
-webkit-user-select: none;\
user-select: none;\
pointer-events: none;\
position: fixed;\
top: 0;\
left: 0;\
height: auto;\
width: 50%;\
border-radius: 25px;\
display: none;\
z-index: 999;\
/*border: 1px solid red;*/\
}\
#hoverContainer{\
width: '+ ((1/scaleFactor)*100) +'%;\
-webkit-transform: scale(' + scaleFactor + ');\
-webkit-transform-origin: 0 0 0;\
}\
#hoverContainer table {\
table-layout: fixed;\
overflow: hidden;\
}\
#hoverContainer table td:first-of-type{\
width: 20%;\
overflow: hidden;\
}\
#hoverContainer .bigusername {\
font-size: 115%;\
}\
#hoverContainer .page > div,\
#hoverContainer .page > div > div {\
padding: 0 !important;\
}\
#hoverContainer .page img {\
max-width: 100%;\
}\
</style>';
$('body').append(html);
$('head').append(styles);
var hoverBoundary = $('#hoverBoundary');
var hoverContainer = $('#hoverContainer');
$(document).mousemove(function(event){
mouseX = event.pageX;
mouseY = event.pageY;
if ($(hoverBoundary).is(':visible')) {
positionHover();
}
});
$(document).on('keyup', function(event){
if ($(hoverBoundary).is(':visible')) {
event.preventDefault();
switch (event.which) {
case 78:
if ($(hoverContainer).find('> div:visible').next().length > 0 && !$(hoverContainer).find('div').is(':animated')) {
$(hoverContainer).find('> div:visible').next().slideDown();
$(hoverContainer).find('> div:visible:first').slideUp();
}
break;
case 80:
if ($(hoverContainer).find('> div:visible').prev().length > 0 && !$(hoverContainer).find('div').is(':animated')) {
$(hoverContainer).find('> div:visible').prev().slideDown();
$(hoverContainer).find('> div:visible:last').slideUp();
}
break;
}
}
});
function positionHover(){
var scrollPos = $('body').scrollTop();
if ((mouseY - scrollPos) + ($(hoverBoundary).height() * scaleFactor) > $(window).height()) {
var top = $(window).height() - ($(hoverBoundary).height() * scaleFactor);
if (top < 0) var top = 0;
}
else {
var percentY = (mouseY - scrollPos) / $(window).height();
var offsetY = percentY * $(hoverBoundary).height() * scaleFactor;
var top = Math.round((mouseY - scrollPos) - offsetY);
}
var percentX = mouseX / $(window).width();
var offsetX = percentX * $(hoverBoundary).width();
var left = Math.round(mouseX - offsetX);
$(hoverBoundary).css({'top':top, 'left':left});
}
var hoverDelay = null;
var request;
$('a[href*="showthread.php"]').not('[href*="page="]').hover(function(){
var context = $(this);
hoverDelay = setTimeout(function(){
var href = $(context).attr('href');
var last = false;
if (href.indexOf('#post') !== -1 || href.indexOf('goto=newpost') !== -1) var last = true;
/*var post = href.match(/\#(.*)/)[1];*/
request = $.ajax({
type: "GET",
url: href,
dataType: 'html',
success: function(data){
$(hoverContainer).empty();
var scripts = '<script>function vbmenu_register(){return null;}</script>'
var content = scripts + $(data).filter('#posts').html().replace('<div id="lastpost"></div>', '');
$(hoverContainer).html(content);
if (!last) $(hoverContainer).find('> div:not(:first-of-type)').hide();
else $(hoverContainer).find('> div:not(:last-of-type)').hide();
$(hoverBoundary).show().promise().done(function(){
positionHover();
});
$(hoverContainer).find('img').load(function(){positionHover();});
}
});
}, delay);
}, function(){
if (request) request.abort();
clearTimeout(hoverDelay);
$(hoverBoundary).hide();
});
});






Comment