MediaWiki:Edittools.js

Vikipediya saydından

Not: Yayımladıktan sonra değişiklikleri görmek için tarayıcınızın önbelleğini temizlemeniz gerekebilir.

  • Firefox / Safari: Shift tuşuna basılıyken Yeniden Yükle'ye tıklayın ya da Ctrl-F5 ya da Ctrl-R tıklayın (Mac için ⌘-R).
  • Google Chrome: Ctrl-Shift-R'ye basın. (Mac için ⌘-Shift-R)
  • Internet Explorer / Edge: Ctrl basılıyken Yenile'ye tıklayın ya da Ctrl-F5 yapın.
  • Opera: Ctrl-F5 tıklayın.
/*!
 * EditTools support
 *
 * Add a selector, change into true buttons, enable for all text input fields
 * If enabled in preferences, the script puts the buttons into the WikiEditor Toolbar
 * The special characters to insert are defined at [[MediaWiki:Edittools]].
 */
// <nowiki>
/* global mediaWiki */
( function ( $, mw ) {
	'use strict';
	var EditTools;

	mw.loader.load( '//commons.wikimedia.org/?title=MediaWiki:Edittools.css&action=raw&ctype=text/css', 'text/css' );
	window.insertTags = function ( tagOpen, tagClose, sampleText ) {
		var $txtarea = EditTools.getTextArea();
		if ( $txtarea.length !== 1 ) { return; }

		/* Usability initiative compatibility */
		if ( typeof $.fn.textSelection !== 'undefined' ) {
			$txtarea.textSelection( 'encapsulateSelection', {
				pre: tagOpen,
				peri: sampleText,
				post: tagClose
			} );
			return;
		}
	};
	window.EditTools = EditTools = {
		createSelector: function () {
			var $sel,
				$spec = $( '#specialchars' ),
				$sb = $( '#specialchars p.specialbasic' );

			// Only care if there is more than one
			if ( !$spec.length || $sb.length <= 1 ) { return; }

			$sel = $( '<select>' );

			$sel.change( function () {
				EditTools.chooseCharSubset();
			} );

			$sb.each( function ( i ) {
				var id = $( this ).attr( 'id' ).replace( /.([0-9A-F][0-9A-F])/g, '%$1' ).replace( /_/g, ' ' );
				$sel.append(
					$( '<option value="' + i + '"></option>' ).text( decodeURIComponent( id ) )
				);
			} );

			$spec.prepend( $sel );

			this.chooseCharSubset();
		},

		chooseCharSubset: function () {
			var $sb = $( '#specialchars p.specialbasic' ),
				id = $( '#specialchars select' ).val(),
				$wanted = $sb.eq( id );

			this.makeButtons( $wanted );

			$sb.hide();

			$wanted.css( 'display', 'inline' );

		},

		bindOnClick: function ( $button, self ) {
			var onclick = self.getAttribute( 'onclick' );

			// if onclick is not a function, it's not IE7, so use setAttribute
			if ( typeof onclick !== 'function' ) {
				$button[ 0 ].setAttribute( 'onclick', onclick ); // for FF,IE8,Chrome
				// if onclick is a function, use the IE7 method and call onclick() in the anonymous function
			} else {
				$button[ 0 ].onclick = function () {
					onclick();
				}; // for IE7
			}
		},

		makeButtons: function ( $wanted ) {
			var $links = $wanted.find( 'a' ),
				self = this;

			$links.each( function () {
				var $button = $( '<button type="button">' );
				$button.text( $( this ).text() );

				self.bindOnClick( $button, this );

				$( this ).replaceWith( $button );
				$( this ).blur();
			} );
			$wanted.contents().not( 'button' ).remove();
		},

		makeToolbarButtons: function () {
			var $section, $links,
				self = this;

			// Add  Edittool section
			$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
				sections: {
					Edittools: {
						type: 'booklet',
						label: 'Edittools',
						pages: {
							Edittools1: {
								layout: 'characters',
								label: 'Edittools2'
							}
						}
					}
				}
			} );

			$section = $( '.page-Edittools1 div' );
			$links = $( '#specialchars p.specialbasic' ).eq( 0 ).find( 'a' );
			$links.each( function () {
				var $button = $( '<span>' );
				$button.text( $( this ).text() );

				self.bindOnClick( $button, this );
				$section.append( $button );
			} );
			$( '.mw-editTools' ).remove();
		},

		// eslint-disable-next-line camelcase
		last_active_textfield: null,

		enableForAllFields: function () {
			$( 'textarea, input' ).focus( function () {
				// eslint-disable-next-line camelcase
				EditTools.last_active_textfield = this.id;
			} );
		},

		getTextArea: function () {
			var $txtarea = {};
			if ( EditTools.last_active_textfield !== null ) { $txtarea = $( '#' + EditTools.last_active_textfield ).eq( 0 ); }
			if ( $txtarea.length !== 1 ) {
				$txtarea = $( '#bodyContent textarea' ).eq( 0 );
			}
			return $txtarea;
		},

		registerTextField: function ( evt ) {
			var e = evt || window.event,
				node = e.target || e.srcElement;
			if ( !node ) { return; }
			// eslint-disable-next-line camelcase
			EditTools.last_active_textfield = node.id;
			return true;
		},

		setup: function () {
			// Decide whether to use the toolbar or the bottom div
			if ( window.oldEdittools || mw.user.options.get( 'gadget-OldEdittools' ) === '1' || $( '#wpUploadDescription' ).length || !$.wikiEditor ) {
				EditTools.createSelector();
				EditTools.enableForAllFields();
			} else {
				EditTools.makeToolbarButtons();
				EditTools.enableForAllFields();
			}
		}
	};
	$( function () {
		// Don't do anything if no edittools present.
		if ( !$( '#specialchars' ).length ) { return; }

		mw.loader.using( 'mediawiki.user', function () {
			// Check user preferences
			if ( mw.user.options.get( 'usebetatoolbar' ) === 1 && mw.user.options.get( 'gadget-OldEdittools' ) !== '1' ) {
				mw.loader.using( [ 'ext.wikiEditor' ], EditTools.setup );
			} else {
				EditTools.setup();
			}
		} );
	} );
}( jQuery, mediaWiki ) );
// </nowiki>