From 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;



mw.hook( 'wikipage.content' ).add( function( $content ) {

    // first check: do links in Harvard citations point to a valid citation?

    var href,

    	links = $content.find( 'a[href^="#CITEREF"]' );



    links.each( function (i, elem) {

    	href = elem.getAttribute( 'href' ).substring(1); //skip the #

    	// IDs can contain characters like . that have meaning in selectors

    	// use $.escapeSelector to make sure they are escaped

        if ( $content.find( '#' + $.escapeSelector(href) ).length < 1 && elem && elem.parentNode)

            elem.parentNode.innerHTML +=

                " <strong class=error>Harv error: link from " +

                href +

                " doesn't point to any citation.</strong>";

    } );



    // second check: do CITEREF IDs have Harvard citations pointing to them?

    if(window.checkLinksToCitations) {

        var cites = $content.find('.citation');

        for(var i=0; i < cites.length; i++) {

            var id = citesi].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

            var parentid = citesi].parentNode.parentNode.getAttribute('id');

            if(parentid && parentid.indexOf('cite_note') === 0)

                continue;

            // check for links to this citation

            var query = 'a[href|="#' + $.escapeSelector(id) + '"]';

            if($content.find(query).length === 0) {

                citesi].innerHTML +=

                    " <strong class=warning>Harv warning: There is no link pointing to this citation. The anchor is named " + id + ".</strong>";

            }

        }

    }

});