MediaWiki:Edittools.js

Бикипиэдьийэ диэн сиртэн ылыллыбыт

Болҕой: Уларыппыт сирэйгин сөпкө көрөргө браузер кээһин ыраастыаххын наада буолуо.

  • Firefox / Safari. Shift тимэҕи тутан туран Саҥардыы баттаа, эбэтэр Ctrl-F5, Ctrl-R дуу (Mac-ка ⌘-R) баттаа;
  • Google Chrome: Ctrl-Shift-R баттаа (Mac-ка ⌘-Shift-R)
  • Internet Explorer / Edge: Ctrl тутан туран Саҥардыы баттаа, эбэтэр Ctrl-F5 баттаа.
  • Opera: Баттаа Ctrl-F5.
/*
  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>
/* jshint curly:false, white:true, indent:2 */
/* global jQuery:false, mediaWiki:false */

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

	mw.loader.load( '//sah.wikipedia.org/w/index.php?title=MediaWiki:Edittools.css&action=raw&ctype=text/css', 'text/css' );
	window.insertTasg = 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 ( typeof onclick !== 'function' ) {
				// if onclick is not a function, it's not IE7, so use setAttribute
				// for FF,IE8,Chrome
				$button[ 0 ].setAttribute( 'onclick', onclick );
			} else {
				// if onclick is a function, use the IE7 method and call onclick() in the anonymous function
				// for IE7
				$button[ 0 ].onclick = function () {
					onclick();
				};
			}
		},

		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 self = this;

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

			var $section = $( '.page-Edittools1 div' );
			var $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();
		},

		last_active_textfield: null,

		enableForAllFields: function () {
			$( 'textarea, input' ).focus( function () {
				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; }
			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>