Khác biệt giữa các bản “MediaWiki:Gadget-Edittools.js”
Từ ChipFC Wiki
(Đã tẩy trống trang) |
|||
Dòng 1: | Dòng 1: | ||
+ | /** | ||
+ | * 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(); | ||
+ | mw.toolbar.insertTags( start, end, '' ); | ||
+ | } ); | ||
+ | } else { | ||
+ | $button[0].onclick = a.onclick; | ||
+ | } | ||
+ | $button[0].value = $a.text(); | ||
+ | $a.replaceWith($button); | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | }; | ||
+ | |||
+ | $(document).ready(editTools.setup); | ||
+ | |||
+ | }(jQuery, mediaWiki)); |
Phiên bản lúc 15:18, ngày 15 tháng 3 năm 2018
/**
* 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();
mw.toolbar.insertTags( start, end, '' );
} );
} else {
$button[0].onclick = a.onclick;
}
$button[0].value = $a.text();
$a.replaceWith($button);
});
}
};
$(document).ready(editTools.setup);
}(jQuery, mediaWiki));