MediaWiki:Gadget-2006-toolbar.js: differenze tra le versioni

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Contenuto cancellato Contenuto aggiunto
recupero della callback quando definita prima dello script (ovvero sempre. asd)...
ripristino versione senza callback (script integrato in Gadgets Definition); aggiungo controllo e tasti di default
Riga 4: Riga 4:
* Adapted from MediaWiki Core, before it was removed from it on 2018-10-17
* Adapted from MediaWiki Core, before it was removed from it on 2018-10-17
*/
*/
// importato da https://fr.wikipedia.org/w/index.php?title=MediaWiki:Gadget-mediawiki.toolbar.js&oldid=153480700

( function () {
( function () {
// abort execution if the enhanced editing toolbar is enabled
if ( mw.user.options.get( 'usebetatoolbar' ) ) {
return;
}
var toolbar, isReady, $toolbar, queue, slice, $currentFocused;
var toolbar, isReady, $toolbar, queue, slice, $currentFocused;


Riga 161: Riga 169:
// For backwards compatibility. Used to be called from EditPage.php, maybe other places as well.
// For backwards compatibility. Used to be called from EditPage.php, maybe other places as well.
toolbar.init = $.noop;
toolbar.init = $.noop;

// Eventually recover the callback that may be defined before this script
toolbar.callback = mw.toolbar && mw.toolbar.callback;


// Expose API publicly
// Expose API publicly
Riga 185: Riga 190:
$toolbar.insertBefore( $textBox );
$toolbar.insertBefore( $textBox );
}
}
var rootpath = '//upload.wikimedia.org/wikipedia/commons/';
toolbar.addButtons(
{ imageFile: rootpath + "e/e2/Button_bold.png", speedTip: "Grassetto", tagOpen: "'''", tagClose: "'''", sampleText: "testo in grassetto", imageId: "mw-editbutton-bold" },
{ imageFile: rootpath + "1/1d/Button_italic.png", speedTip: "Corsivo", tagOpen: "''", tagClose: "''", sampleText: "testo in corsivo", imageId: "mw-editbutton-italic" },
{ imageFile: rootpath + "c/c0/Button_link.png", speedTip: "Link interno", tagOpen: "[[", tagClose: "]]", sampleText: "titolo della pagina", imageId: "mw-editbutton-link" },
{ imageFile: rootpath + "e/ec/Button_extlink.png", speedTip: "Link esterno", tagOpen: "[", tagClose: "]", sampleText: "http://www.example.com titolo del link", imageId: "mw-editbutton-extlink" },
{ imageFile: rootpath + "7/78/Button_head_A2.png", speedTip: "Sezione di livello 2", tagOpen: "== ", tagClose: " ==", sampleText: "Titolo sezione", imageId: "mw-editbutton-headline" },
{ imageFile: rootpath + "d/de/Button_image.png", speedTip: "Immagine", tagOpen: "[[File:", tagClose: "|thumb|Descrizione dell'immagine]]", sampleText: "Exemple.jpg", imageId: "mw-editbutton-image" },
{ imageFile: rootpath + "1/19/Button_media.png", speedTip: "File multimediale", tagOpen: "[[Media:", tagClose: "|thumb|Descrizione del file multimediale]]", sampleText: "Exemple.ogg", imageId: "mw-editbutton-media" },
{ imageFile: rootpath + "8/82/Nowiki_icon.png", speedTip: "Ignora formattazione wiki", tagOpen: "<nowiki"+">", tagClose: "</"+"nowiki>", sampleText: "", imageId: "mw-editbutton-nowiki" },
{ imageFile: rootpath + "6/6d/Button_sig.png", speedTip: "Firma utente, data e ora", tagOpen: "--~~"+"~~", tagClose: "", sampleText: "", imageId: "mw-editbutton-signature" },
{ imageFile: rootpath + "0/0d/Button_hr.png", speedTip: "Linea orizzontale", tagOpen: "--"+"--", tagClose: "", sampleText: "", imageId: "mw-editbutton-hr" },
{ imageFile: rootpath + "c/c8/Button_redirect.png", speedTip: "Redirect", tagOpen: "#REDIRECT [[", tagClose: "]]", sampleText: "", imageId: "mw-editbutton-redirect" }
);


for ( i = 0; i < queue.length; i++ ) {
for ( i = 0; i < queue.length; i++ ) {
Riga 205: Riga 225:
// the queue
// the queue
isReady = true;
isReady = true;

// alert other scripts that this toolbar is ready
if( toolbar.callback ) {
toolbar.callback();
}


// Apply to dynamically created textboxes as well as normal ones
// Apply to dynamically created textboxes as well as normal ones
Riga 217: Riga 232:
} );
} );


}( mw ) );
}() );

Versione delle 00:53, 8 nov 2018

/**
 * Interface for the classic edit toolbar.
 *
 * Adapted from MediaWiki Core, before it was removed from it on 2018-10-17
 */
 
 // importato da https://fr.wikipedia.org/w/index.php?title=MediaWiki:Gadget-mediawiki.toolbar.js&oldid=153480700

( function () {
	// abort execution if the enhanced editing toolbar is enabled
	if ( mw.user.options.get( 'usebetatoolbar' ) ) {
		return;
	}
	
	var toolbar, isReady, $toolbar, queue, slice, $currentFocused;

	/**
	 * Internal helper that does the actual insertion of the button into the toolbar.
	 *
	 * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
	 * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
	 *
	 * @private
	 *
	 * @param {Object} button Object with the following properties.
	 *  You are required to provide *either* the `onClick` parameter, or the three parameters
	 *  `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive).
	 * @param {string} [button.imageFile] Image to use for the button.
	 * @param {string} button.speedTip Tooltip displayed when user mouses over the button.
	 * @param {Function} [button.onClick] Function to be executed when the button is clicked.
	 * @param {string} [button.tagOpen]
	 * @param {string} [button.tagClose]
	 * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and
	 *  `sampleText` together provide the markup that should be inserted into page text at
	 *  current cursor position.
	 * @param {string} [button.imageId] `id` attribute of the button HTML element. Can be
	 *  used to define the image with CSS if it's not provided as `imageFile`.
	 * @param {string} [speedTip]
	 * @param {string} [tagOpen]
	 * @param {string} [tagClose]
	 * @param {string} [sampleText]
	 * @param {string} [imageId]
	 */
	function insertButton( button, speedTip, tagOpen, tagClose, sampleText, imageId ) {
		var $button;

		// Backwards compatibility
		if ( typeof button !== 'object' ) {
			button = {
				imageFile: button,
				speedTip: speedTip,
				tagOpen: tagOpen,
				tagClose: tagClose,
				sampleText: sampleText,
				imageId: imageId
			};
		}

		if ( button.imageFile ) {
			$button = $( '<img>' ).attr( {
				src: button.imageFile,
				alt: button.speedTip,
				title: button.speedTip,
				id: button.imageId || undefined,
				'class': 'mw-toolbar-editbutton'
			} );
		} else {
			$button = $( '<div>' ).attr( {
				title: button.speedTip,
				id: button.imageId || undefined,
				'class': 'mw-toolbar-editbutton'
			} );
		}

		$button.click( function ( e ) {
			if ( button.onClick !== undefined ) {
				button.onClick( e );
			} else {
				toolbar.insertTags( button.tagOpen, button.tagClose, button.sampleText );
			}

			return false;
		} );

		$toolbar.append( $button );
	}

	isReady = false;
	$toolbar = false;

	/**
	 * @private
	 * @property {Array}
	 * Contains button objects (and for backwards compatibility, it can
	 * also contains an arguments array for insertButton).
	 */
	queue = [];
	slice = queue.slice;

	toolbar = {

		/**
		 * Add buttons to the toolbar.
		 *
		 * Takes care of race conditions and time-based dependencies by placing buttons in a queue if
		 * this method is called before the toolbar is created.
		 *
		 * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
		 * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
		 *
		 * @inheritdoc #insertButton
		 */
		addButton: function () {
			if ( isReady ) {
				insertButton.apply( toolbar, arguments );
			} else {
				// Convert arguments list to array
				queue.push( slice.call( arguments ) );
			}
		},

		/**
		 * Add multiple buttons to the toolbar (see also #addButton).
		 *
		 * Example usage:
		 *
		 *     addButtons( [ { .. }, { .. }, { .. } ] );
		 *     addButtons( { .. }, { .. } );
		 *
		 * @param {...Object|Array} [buttons] An array of button objects or the first
		 *  button object in a list of variadic arguments.
		 */
		addButtons: function ( buttons ) {
			if ( !Array.isArray( buttons ) ) {
				buttons = slice.call( arguments );
			}
			if ( isReady ) {
				buttons.forEach( function ( button ) {
					insertButton( button );
				} );
			} else {
				// Push each button into the queue
				queue.push.apply( queue, buttons );
			}
		},

		/**
		 * Apply tagOpen/tagClose to selection in currently focused textarea.
		 *
		 * Uses `sampleText` if selection is empty.
		 *
		 * @param {string} tagOpen
		 * @param {string} tagClose
		 * @param {string} sampleText
		 */
		insertTags: function ( tagOpen, tagClose, sampleText ) {
			if ( $currentFocused && $currentFocused.length ) {
				$currentFocused.textSelection(
					'encapsulateSelection', {
						pre: tagOpen,
						peri: sampleText,
						post: tagClose
					}
				);
			}
		}
	};

	// For backwards compatibility. Used to be called from EditPage.php, maybe other places as well.
	toolbar.init = $.noop;

	// Expose API publicly
	mw.toolbar = toolbar;

	$( function () {
		var $textBox, i, button;

		// Used to determine where to insert tags
		$currentFocused = $( '#wpTextbox1' );

		// Populate the selector cache for $toolbar
		$toolbar = $( '#toolbar' );

		if ( $toolbar.length === 0 ) {
			$textBox = $( '#wpTextbox1' );
			if ( $textBox.length === 0 ) {
				return;
			}
			$toolbar = $( '<div>' ).attr( { id: 'toolbar' } );
			$toolbar.insertBefore( $textBox );
		}
		
		var rootpath = '//upload.wikimedia.org/wikipedia/commons/';
		toolbar.addButtons(
			{ imageFile: rootpath + "e/e2/Button_bold.png", speedTip: "Grassetto", tagOpen: "'''", tagClose: "'''", sampleText: "testo in grassetto", imageId: "mw-editbutton-bold" },
			{ imageFile: rootpath + "1/1d/Button_italic.png", speedTip: "Corsivo", tagOpen: "''", tagClose: "''", sampleText: "testo in corsivo", imageId: "mw-editbutton-italic" },
			{ imageFile: rootpath + "c/c0/Button_link.png", speedTip: "Link interno", tagOpen: "[[", tagClose: "]]", sampleText: "titolo della pagina", imageId: "mw-editbutton-link" },
			{ imageFile: rootpath + "e/ec/Button_extlink.png", speedTip: "Link esterno", tagOpen: "[", tagClose: "]", sampleText: "http://www.example.com titolo del link", imageId: "mw-editbutton-extlink" },
			{ imageFile: rootpath + "7/78/Button_head_A2.png", speedTip: "Sezione di livello 2", tagOpen: "== ", tagClose: " ==", sampleText: "Titolo sezione", imageId: "mw-editbutton-headline" },
			{ imageFile: rootpath + "d/de/Button_image.png", speedTip: "Immagine", tagOpen: "[[File:", tagClose: "|thumb|Descrizione dell'immagine]]", sampleText: "Exemple.jpg", imageId: "mw-editbutton-image" },
			{ imageFile: rootpath + "1/19/Button_media.png", speedTip: "File multimediale", tagOpen: "[[Media:", tagClose: "|thumb|Descrizione del file multimediale]]", sampleText: "Exemple.ogg", imageId: "mw-editbutton-media" },
			{ imageFile: rootpath + "8/82/Nowiki_icon.png", speedTip: "Ignora formattazione wiki", tagOpen: "<nowiki"+">", tagClose: "</"+"nowiki>", sampleText: "", imageId: "mw-editbutton-nowiki" },
			{ imageFile: rootpath + "6/6d/Button_sig.png", speedTip: "Firma utente, data e ora", tagOpen: "--~~"+"~~", tagClose: "", sampleText: "", imageId: "mw-editbutton-signature" },
			{ imageFile: rootpath + "0/0d/Button_hr.png", speedTip: "Linea orizzontale", tagOpen: "--"+"--", tagClose: "", sampleText: "", imageId: "mw-editbutton-hr" },
			{ imageFile: rootpath + "c/c8/Button_redirect.png", speedTip: "Redirect", tagOpen: "#REDIRECT [[", tagClose: "]]", sampleText: "", imageId: "mw-editbutton-redirect" }
		);

		for ( i = 0; i < queue.length; i++ ) {
			button = queue[ i ];
			if ( Array.isArray( button ) ) {
				// Forwarded arguments array from mw.toolbar.addButton
				insertButton.apply( toolbar, button );
			} else {
				// Raw object from mw.toolbar.addButtons
				insertButton( button );
			}
		}

		// Clear queue
		queue.length = 0;

		// This causes further calls to addButton to go to insertion directly
		// instead of to the queue.
		// It is important that this is after the one and only loop through
		// the queue
		isReady = true;

		// Apply to dynamically created textboxes as well as normal ones
		$( document ).on( 'focus', 'textarea, input:text', function () {
			$currentFocused = $( this );
		} );
	} );

}() );