Difference between revisions of "MediaWiki:Gadget-Edittools.js"

From Securipedia
Jump to navigation Jump to search
(Created page with "/** * EditTools support: add a selector, change <a> into buttons. * The special characters to insert are defined at MediaWiki:Edittools. * * @author Arnomane, 2006 (on...")
 
Line 27: Line 27:
 
setup: function () {
 
setup: function () {
 
var $container, $select, initial;
 
var $container, $select, initial;
  +
  +
var _this = this;
 
 
  +
// Add Edittool section
  +
$('#wpTextbox1').wikiEditor('addToToolbar', {
  +
'sections': {
  +
'Edittools': {
  +
'type': 'booklet',
  +
'label': 'Securipedia',
  +
'pages': {
  +
'Edittools1': {
  +
'layout': 'characters',
  +
'label': 'Category'
  +
}
  +
}
  +
}
  +
}
  +
});
  +
 
$container = $('#mw-edittools-charinsert');
 
$container = $('#mw-edittools-charinsert');
 
if (!$container.length) {
 
if (!$container.length) {

Revision as of 22:36, 19 July 2012

/**
 * 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;
          
                        var _this = this;
 
                        // Add  Edittool section
                        $('#wpTextbox1').wikiEditor('addToToolbar', {
                         'sections': {
                             'Edittools': {
                                  'type': 'booklet',
                                  'label': 'Securipedia',
                                  'pages': {
                                      'Edittools1': {
                                          'layout': 'characters',
                                          'label': 'Category'
                                      }
                                  }
                              }
                          }
                        });

			$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;
				$a = $(a);
				button = document.createElement('input');
				button.type = 'button';
				button.onclick = a.onclick;
				button.value = $a.text();
				$a.replaceWith(button);
			});
		}
 
	};
 
	$(document).ready(editTools.setup);
 
}(jQuery, mediaWiki));