User:Ucucha/HarvErrors2.js

if(window.checkLinksToCitations === undefined) { window.checkLinksToCitations = true; }

jQuery(document).ready(function($) {   // keep track of whether there are any Harv citations; if there are none,    // the second check is useless.    var hasHarvs = false;

// first check: do links in Harvard citations point to a valid citation? var links = document.links; for (var i = 0; i < links.length; i++) { var href = links[i].getAttribute('href'); if (href.indexOf('#CITEREF') === 0) { hasHarvs = true; if (document.getElementById(href.substring(1)) === null) { links[i].parentNode.innerHTML += " Harv error: link to " + href + " doesn't point to any citation. "; }       }    }

// second check: do CITEREF IDs have Harvard citations pointing to them? if(hasHarvs && window.checkLinksToCitations) { // limit ourselves to citations inside reference sections var refheaders = [ "References", "Bibliography", "Literature cited", "Works cited", "Citations", "Sources", "Notes" ];       var query = refheaders .map(function(val) { return "#" + val; }) .join(", "); var refsection = jQuery(query).parent.next; var cites = refsection.find('.citation'); for(var i = 0; i < cites.length; i++) { var id = cites[i].getAttribute('id'); // we only need to check citations with a CITEREF if(!id || id.indexOf('CITEREF') !== 0) { continue; }           // don't do cites that are inside a ref var parentid = cites[i].parentNode.parentNode.getAttribute('id'); if(parentid && parentid.indexOf('cite_note') === 0) { continue; }           // check for links to this citation var query = 'a[href|="#' + id + '"]'; if(jQuery(query).length === 0) { cites[i].innerHTML += " Harv warning: There is no link pointing to this citation. "; }       }    } });