MediaWiki:Gadget-CitationTemplatesExtracts.js

De Wikcionario, el diccionario libre

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.
var config = mw.config.get( [
		'wgTitle'
	] ),
	TARGET_TITLE = 'Plantillas de fuentes y autorizaciones';

if ( config.wgTitle.indexOf( TARGET_TITLE ) === config.wgTitle.length - TARGET_TITLE.length ) {
	mw.loader.using( 'mediawiki.api' ).done( function () {
		var API_DELAY = 100,
			api = new mw.Api();
		
		function makeRequest( template ) {
			return api.parse( mw.format( '{' + '{$1}}', template ), {
				title: 'título',
				prop: 'text',
				disablelimitreport: true
			} );
		}
		
		mw.hook( 'wikipage.content' ).add( function ( $content ) {
			$content.find( '#mw-pages' ).find( 'li > a[title^="Plantilla:"]' ).each( function () {
				var popup,
					$el = $( this );
				
				$el.data( 'title', $el.attr( 'title' ) ).removeAttr( 'title' );
				
				$el.on( 'mouseenter.popup-ref', function ( evt ) {
					if ( popup ) {
						popup.toggle( true );
						return;
					}
					
					$el.data( 'timer-id', setTimeout( function () {
						var template = $el.data( 'title' ).replace( /^Plantilla:/, '' ),
							request = makeRequest( template );
						
						$el.data( 'request', request ).removeData( 'timer-id' );
						
						$.when(
							request,
							mw.loader.using( 'oojs-ui-core' )
						).done( function ( wikitext ) {
							$el.removeData( 'request' );
							
							popup = new OO.ui.PopupWidget( {
								$content: $( wikitext ),
								$floatableContainer: $el,
								padded: true
							} );
							
							$( document.body ).append( popup.$element );
							popup.toggle( true );
							
							if ( $el.is( ':hover' ) ) {
								$el.trigger( 'mouseenter' );
							}
						} );
					}, API_DELAY ) );
				} );
				
				$el.on( 'mouseleave.popup-ref', function ( evt ) {
					var timerID = $el.data( 'timer-id' ),
						request = $el.data( 'request' );
					
					if ( timerID !== undefined ) {
						clearTimeout( timerID );
					}
					
					if ( request !== undefined ) {
						request.abort();
					}
					
					$el.removeData( [ 'timer-id', 'request' ] );
					
					if ( popup ) {
						popup.toggle( false );
					}
				} );
			} );
		} );
	} );	
}