Usuario:Peter Bowman/brokenWikilinks.js

Nota: Después de publicar, quizás necesite actualizar la caché de su navegador para ver los cambios.

  • Firefox/Safari: Mantenga presionada la tecla Shift mientras pulsa el botón Actualizar, o presiona Ctrl+F5 o Ctrl+R (⌘+R en Mac)
  • Google Chrome: presione Ctrl+Shift+R (⌘+Shift+R en Mac)
  • Internet Explorer/Edge: mantenga presionada Ctrl mientras pulsa Actualizar, o presione Ctrl+F5
  • Opera: Presiona Ctrl+F5.
( function( $, mw ) {

var wikilinks;

function queryCORS() {
	var titles = [];
	
	for ( var title in wikilinks )
		titles.push( title );
	
	if ( titles.length === 0 )
		return;
	
	$.ajax( {
		url: 'https://es.wikipedia.org/w/api.php',
		dataType: 'json',
		data: {
			action:    'query',
			format:    'json',
			origin:    'https://es.wiktionary.org',
			prop:      'info',
			redirects: 1,
			titles:    titles.join( '|' )
		},
		xhrFields: {
			withCredentials: true
		},
		success: function( data ) {
			if ( !data.query )
				return;
			
			if ( data.query.normalized ) {
				for ( var i = 0; i < data.query.normalized.length; i++ ) {
					var rec = data.query.normalized[ i ];
					
					if ( wikilinks[ rec.from ] )
						wikilinks[ rec.from ].normalized = rec.to;
				}
			}
					
			for ( var pageid in data.query.pages ) {
				var page = data.query.pages[ pageid ];
				
				if ( page.missing === '' ) {
					if ( data.query.normalized && wikilinks[ page.title ] ) {
						wikilinks[ page.title ].missing = true;
					} else {
						for ( var key in wikilinks ) {
							if ( wikilinks[ key ].normalized == page.title ) {
								wikilinks[ key ].missing = true;
								break;
							}
						}
					}
				}
			}
			
			process();
		}
	} );
}

function getHeader( $node ) {
	var $header = null;
	
	if (
		( $header = $node.prev( 'h2' ) ).length === 1 // &&
		//$header.children( '#V.C3.A9ase_tambi.C3.A9n' ).length !== 0
	)
		return $header;
	else
		return null;
}

function process() {
	for ( var title in wikilinks ) {
		if ( !wikilinks[ title ].missing )
			continue;
		
		var $node = wikilinks[ title ].$node;
		var $header = null;
		
		if ( $node.parent().prop( 'nodeName' ) == 'LI' ) {
			$node = $node.parent();
			var $ul = $node.parent();
			
			if ( $ul.children().length === 1 ) {
				$header = getHeader( $node = $ul );
			}
		} else {
			$header = getHeader( $node );
		}
		
		$node.remove();
		
		if ( $header )
			$header.remove();
	}
}

function init() {
	wikilinks = {};
	
	$( 'b>a[href^="//es.wikipedia.org/wiki/"]' ).each( function() {
		var title = this.getAttribute( 'title' );
		
		if ( !title )
			return true;
		
		title = title.substring( title.indexOf( ':' ) + 1 );
		
		if ( title.indexOf( ':' ) > -1 )
			return true;
		
		wikilinks[ title ] = {
			$node: $( this ).parent()
		};
	} );
	
	queryCORS();
}

if (
	mw.config.get( 'wgNamespaceNumber' ) === 0 &&
	mw.config.get( 'wgAction' ) == 'view'
) {
	$( document ).ready( function() {
		init();
	} );
}

} ) ( jQuery, mediaWiki );