if(window.checkLinksToCitations === undefined)
window.checkLinksToCitations = true;
mw.loader.using( 'mediawiki.util', function () {
$(document).ready( function () {
// var link = mw.util.addPortletLink( 'p-cactions', 'javascript:void(0)', 'HarvErorrs', 'ca-harv-errors', 'Check for Harvard Errors');
// $( link ).click( function ( event ) {
// event.preventDefault();
HarvErrors();
// } );
} );
} );
function HarvErrors(){
var $content = $( '#mw-content-text' );
var has_errors = false;
// 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)
console.log( "Harv error: link from " + href + " doesn't point to any citation.");
has_errors = true;
} );
// 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 = 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
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|="#' + $.escapeSelector(id) + '"]';
if($content.find(query).length === 0) {
console.log( "Harv warning: There is no link pointing to this citation. The anchor is named " + id + ".");
has_errors = true;
}
}
}
if (has_errors) alert("This page has Harvard errors");
}