User:SoledadKabocha/HarvErrors.js

Source: Wikipedia, the free encyclopedia.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
if(window.checkLinksToCitations === undefined)
    window.checkLinksToCitations = true;

function checkHarv() {
    var errorFound = false;
    var anchorName = 'firstHarvErr-' + Math.random( ).toString( ).substr( 2, 5 );
    // first check: do links in Harvard citations point to a valid citation?
    links = document.links;
    for (i=0; i < links.length; i++)
    {
        href = links[i].getAttribute('href');
        if (href.indexOf('#CITEREF') == 0)
            if (document.getElementById(href.substring(1)) == null) {
                var htmlToAdd1 = 
                    ' <img src="//upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Note_icon.svg/15px-Note_icon.svg.png" alt="Harv error: link to ' +
                    href + ' doesn\'t point to any citation." title="Harv error: link to ' +
                    href + ' doesn\'t point to any citation." />';
                if ( !errorFound && !document.getElementById( 'ca-firstharverror' ) ) {
                    htmlToAdd1 = '<span id="' + anchorName + '">' + htmlToAdd1 + '</span>';
                    addPortletLink( 'p-tb', '#' + anchorName, 'Go to first harv error', 'ca-firstharverror' );
                    errorFound = true;
                }
                links[i].parentNode.innerHTML += htmlToAdd1;
            }
    }
 
    // second check: do CITEREF IDs have Harvard citations pointing to them?
    if(window.checkLinksToCitations) {
        cites = $('.citation');
        for(i=0; i < cites.length; i++) {
            id = cites[i].getAttribute('id');
            // we only need to check citations with a
            if(!id || id.indexOf('CITEREF') !== 0)
                continue;
            // don't do cites that are inside a ref
            parentid = cites[i].parentNode.parentNode.getAttribute('id');
            if(parentid && parentid.indexOf('cite_note') === 0)
                continue;
            // check for links to this citation
            query = 'a[href|="#' + id + '"]';
            if($(query).length == 0) {
                var htmlToAdd2 = ' <img src="//upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Ambox_question.svg/15px-Ambox_question.svg.png" alt="Harv error: There is no link pointing to this citation." title="Harv error: There is no link pointing to this citation (' + id + ')."/>';
                if ( !errorFound && !document.getElementById( 'ca-firstharverror' ) ) {
                    htmlToAdd2 = '<span id="' + anchorName + '">' + htmlToAdd2 + '</span>';
                    addPortletLink( 'p-tb', '#' + anchorName, 'Go to first harv error', 'ca-firstharverror' );
                    errorFound = true;
                }
                cites[i].innerHTML += htmlToAdd2;
            }
        }
    }
}

$(document).ready(checkHarv);