_ _    _ _____  ___   __                       
 __      _(_) | _(_)___ / ( _ ) / /_   ___ ___  _ __ ___  
 \ \ /\ / / | |/ / | |_ \ / _ \| '_ \ / __/ _ \| '_ ` _ \ 
  \ V  V /| |   <| |___) | (_) | (_) | (_| (_) | | | | | |
   \_/\_/ |_|_|\_\_|____/ \___/ \___(_)___\___/|_| |_| |_|

MediaWiki:Gadget-CompletaTemplate.js

In questo articolo approfondiremo l'affascinante mondo di MediaWiki:Gadget-CompletaTemplate.js, un argomento che ha catturato l'attenzione di accademici, scienziati e hobbisti. Dal suo impatto sulla società alle sue applicazioni nella vita di tutti i giorni, MediaWiki:Gadget-CompletaTemplate.js ha dimostrato di essere un argomento di interesse universale. In questa direzione esploreremo la sua storia, la sua evoluzione e le sue possibili implicazioni future. Unisciti a noi in questo viaggio di scoperta e riflessione su MediaWiki:Gadget-CompletaTemplate.js, un argomento che, senza dubbio, ha lasciato il segno nel mondo di oggi.
/**
 * Gadget-CompletaTemplate.js
 * Funzione di autocompletamento dei template, basato sulla sottopagina /struct dei template.
 * Riscritto da zero a partire da:
 * http://it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-CompletaTemplate.js&oldid=58406391
 * 
 * @author ]
 */
/*jshint unused: false */
/*global mediaWiki, jQuery */

( function ( mw, $ ) {
	'use strict';

	// previene con Firefox l'azione di default del tasto Tab 
	var tabDefault = true;

	function readTemplateStruct( template, readHandler ) {
		$.ajax( {
			url: mw.config.get( 'wgScript' ),
			data: {
				title: 'Template:' + template + '/struct',
				action: 'raw'
			},
			async: false,
			cache: false,
			dataType: 'text'
		} )
			.done( function ( data ) {
				readHandler( data.match( /(<pre>)(*?)(<\/pre>)/ ) );
			} )
			.fail( function ( jqXHR, textStatus, errorThrown ) {
				window.open( mw.config.get( 'wgArticlePath' )
					.replace( '$1', 'Speciale:Ricerca/Template:' + template ), '_blank' );
			} );
	}

	$( function () {
		$( '#wpTextbox1, #wpUploadDescription' ).keydown( function ( event ) {
			var text, cPos, tPos;
			if ( !event.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey && event.keyCode === 9 ) {
				tabDefault = true;
				cPos = $( event.target ).textSelection( 'getCaretPosition' );
				text = $( event.target ).val().substring( 0, cPos );
				tPos = text.lastIndexOf( '{{' );
				text = text.substring( tPos );
				if ( tPos >= 0 && !/\}\r\n\|]/.test( text ) ) {
					tabDefault = false;
					event.preventDefault();
					$( event.target ).textSelection( 'setSelection', { start: tPos, end: cPos } );
				} else {
					text = null;
				}
			} else if ( event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey && event.keyCode === 81 ) {
				event.preventDefault();
				text = $( event.target ).textSelection( 'getSelection' );
				text = text.length > 2 && text.indexOf( '{{' ) === 0 ? text : null;
			}
			if ( text ) {
				readTemplateStruct( text.substring( 2 ), function ( templateStruct ) {
					$( event.target ).textSelection( 'encapsulateSelection', { peri: templateStruct, replace: true } );
				} );
			}
		} );

		$( '#wpTextbox1, #wpUploadDescription' ).keypress( function ( event ) {
			if ( !event.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey && event.keyCode === 9 ) {
				return tabDefault;
			}
		} );
	} );
}( mediaWiki, jQuery ) );