User:Gary/highlight nearby links.js
/*
HIGHLIGHT NEARBY LINKS
Description: If two links are next to each other so it's hard to tell if they are one link or two separate ones (such as New York City),
both links will be underlined so that it is clear that they are separate.
- /
if (typeof(unsafeWindow) != 'undefined')
{
mw = unsafeWindow.mw;
}
$(highlightNearbyLinks);
function highlightNearbyLinks()
{
if (!(mw.config.get('wgAction') == 'view' || (mw.config.get('wgPageName') == 'Wikipedia:Sandbox' && mw.config.get('wgAction') == 'submit'))) return false;
mw.util.addCSS('a.highlight-nearby { text-decoration: underline; }');
mw.util.addCSS('a.highlight-nearby:hover { text-decoration: none; }');
var bodyId = mw.config.get('wgPageName') == 'Wikipedia:Sandbox' && mw.config.get('wgAction') == 'submit' ? 'wikiPreview' : 'bodyContent';
var body = $('#' + bodyId);
if (!body.length) return false;
var links = $('a', body);
// loop through links in page body
links.each(function()
{
var link = $(this);
var next = link.next();
// NOT: next node is a link, preceded by spaces
// NOT: next node is a link and is also the next sibling
if (!(next.length && next[0].nodeName == 'A' && ((link[0].nextSibling.nodeType == 3 && link[0].nextSibling.nodeValue.replace(/ /g, ) == ) || link[0].nextSibling == next[0]))) return true;
// NOT: current and next links are not images
if (!(!link.hasClass('image') && !next.hasClass('image'))) return true;
// this is a refname
if ((link.children().length && link.children().first()[0].nodeName == 'SUP') || (next.children().length && next.children().first()[0].nodeName == 'SUP')) return true;
link.addClass('highlight-nearby');
next.addClass('highlight-nearby');
});
}