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');

});

}