MediaWiki:Gadget-EtymologySectionFragment.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.
/**
 * Enlaza correctamente a la sección de etimología indicada en el URI
 * Basado en mediawiki.action.view.redirect.js de mediawiki/core
 * Autor: [[User:Peter Bowman]]
 */

var m;

function extractEtymologyFragment( hash ) {
	if ( !hash ) {
		return false;
	}
	
	m = hash.match( /^#(.+)_(\d)$/ );
	return ( m !== null );
}

if ( extractEtymologyFragment( location.hash ) ) {
	$( function () {
		var fragment, $section, $target,
			profile = $.client.profile(),
			langName = decodeURIComponent( m[ 1 ] ),
			etymId = m[ 2 ],
			normalized = location.href.replace( /#.*$/, '' );
		
		if ( $( '.lemma' ).length ) {
			return; // antigua estructura
		}
		
		// Detecta la versión para móviles
		if ( document.body.classList.contains('mw-mf') ) {
			$section = $( mw.format( 'h2:has(#$1)', langName ) ).next();
		} else {
			$section = $( document.getElementById( langName ) )
				.parents( 'h2' )
				.nextUntil( 'h2' );
		}
		
		if ( !$section.length ) {
			return;
		}
		
		$target = $section.find( mw.format( '.mw-headline[id^="Etimología_$1"]', etymId ) );
		fragment = $target.attr( 'id' ) || langName;
		
		history.replaceState( history.state, document.title, normalized + '#' + fragment );
		
		if ( $target.length ) {
			$target.get( 0 ).scrollIntoView();
		}
	} );
}