مدیاویکی:Gadget-Edittools.js

    از ویکی‌نور

    نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

    • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
    • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
    • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
    • اپرا: Ctrl-F5 را بفشارید.
    /**
     * EditTools support: add a selector, change <a> into buttons.
     * The special characters to insert are defined at [[MediaWiki:Edittools]].
     *
     * @author Arnomane, 2006 (on the commons.wikimedia.org/wiki/MediaWiki:Edittools.js)
     * @author Kaganer, 2007 (adapting to www.mediawiki.org)
     * @author Krinkle, 2012
     * @source www.mediawiki.org/wiki/MediaWiki:Gadget-Edittools.js
     * @revision 2012-02-29
     */
    /*jslint browser: true*/
    /*global jQuery, mediaWiki*/
    (function ($, mw) {
    	"use strict";
    
    	var conf, editTools, $sections;
    
    	conf = {
    		initialSubset: window.EditTools_initial_subset === undefined ? window.EditTools_initial_subset : 0
    	};
    
    	editTools = {
    
    		/**
    		 * Creates the selector
    		 */
    		setup: function () {
    			var $container, $select, initial;
    
    			$container = $('#mw-edittools-charinsert');
    			if (!$container.length) {
    				return;
    			}
    			$sections = $container.find('.mw-edittools-section');
    			if ($sections.length <= 1) {
    				// Only care if there is more than one
    				return;
    			}
    
    			$select = $('<select>').css('display', 'inline');
    
    			initial = conf.initialSubset;
    			if (isNaN(initial) || initial < 0 || initial >= $select.length) {
    				initial = 0;
    			}
    
    			$sections.each(function (i, el) {
    				var $section, sectionTitle, $option;
    
    				$section = $(el);
    				sectionTitle = $section.data('sectionTitle');
    
    				$option = $('<option>')
    					.text(sectionTitle)
    					.prop('value', i)
    					.prop('selected', i === initial);
    
    				$select.append($option);
    			});
    
    			$select.change(editTools.handleOnchange);
    			$container.prepend($select);
    
    			editTools.chooseSection(initial);
    		},
    
    		/**
    		 * Handle onchange event of the <select>
    		 *
    		 * @context {Element}
    		 * @param e {jQuery.Event}
    		 */
    		handleOnchange: function () {
    			editTools.chooseSection(Number($(this).val()));
    
    			return true;
    		},
    
    		/**
    		 * Toggle the currently visible section
    		 *
    		 * @param sectionNr {Number}
    		 * @param setFocus {Boolean}
    		 */
    		chooseSection: function (sectionNr) {
    			var $choise = $sections.eq(sectionNr);
    			if ($choise.length !== 1) {
    				return;
    			}
    
    			// Making these buttons is a little slow,
    			// If we made them all at once the browser would hang
    			// for over 2 seconds, so instead we're doing it on-demand
    			// for each section. No need to do it twice thoguh, so remember
    			// in data whether it was done already
    			if (!$choise.data('charInsert.buttonsMade')) {
    				$choise.data('charInsert.buttonsMade', true);
    				editTools.makeButtons($choise);
    			}
    
    			$choise.show();
    			$sections.not($choise).hide();
    		},
    
    		/**
    		 * Convert the <a onclick> links to buttons in a given section.
    		 *
    		 * @param $section {jQuery}
    		 */
    		makeButtons: function ($section) {
    			var $links;
    
    			if (!$section.length) {
    				return;
    			}
    
    			$links = $section.find('a');
    			$links.each(function (i, a) {
    				var $a, $button, start, end;
    				$a = $(a);
    				$button = $( '<input>' ).attr( 'type', 'button' );
    				start = $a.data( 'mw-charinsert-start' );
    				end = $a.data( 'mw-charinsert-end' );
    				if ( start !== undefined && end !== undefined ) {
    					$button.click( function( e ) {
    						e.preventDefault();
    						editTools.insertTags( start, '', end )
    					} );
    				} else {
    					$button[0].onclick = a.onclick;
                                    }
    				$button[0].value = $a.text();
    				$a.replaceWith($button);
    			});
    		},
    
    		insertTags: function ( pre, peri, post ) {
    			var current = $( '#wpTextbox1' );
    			if ( current && current.length ) {
    				current.textSelection(
    					'encapsulateSelection', { pre: pre, peri: peri, post: post }
    				);
    			}
    		}
    
    	};
    
    	$(document).ready(editTools.setup);
    
    }(jQuery, mediaWiki));