MediaWiki:Gadget-Edittools — различия между версиями

Материал из Dradipedia
Перейти к: навигация, поиск
(Новая страница: «/** * EditTools support: add a selector, change <a> into buttons. * The special characters to insert are defined at MediaWiki:Edittools. * * @author Arnom…»)
 
 
(не показаны 2 промежуточные версии 2 участников)
Строка 1: Строка 1:
/**
+
Edittools: Enhance the edittools section (grouping into section with a dropdown menu and converting static links to buttons)
* 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;
+
$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));
+

Текущая версия на 08:44, 1 июля 2015

Edittools: Enhance the edittools section (grouping into section with a dropdown menu and converting static links to buttons)