MediaWiki:Edittools.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/*
EditTools support: add a selector, change into true buttons, enable for all text input fields
The special characters to insert are defined at [[MediaWiki:Edittools]]. Based on code from
[[Commons:MediaWiki:Edittools.js]].
*/
(function () {
mw.loader.load('//commons.wikimedia.org/w/index.php?title=MediaWiki:Edittools.css&action=raw&ctype=text/css', 'text/css');
var insertTags = function (tagOpen, tagClose, sampleText) {
var $textarea = EditTools.getTextArea ();
if ($textarea.length !== 1) return;
/* Usability initiative compatibility */
if (typeof $.fn.textSelection != 'undefined') {
$textarea.textSelection('encapsulateSelection', {
'pre': tagOpen,
'peri': sampleText,
'post': tagClose
});
}
return;
},
EditTools = {
createSelector : function () {
var $spec = $('#specialchars'),
$sb = $spec.find('.specialbasic');
if ( !$spec.length || $sb.length <= 1 ) return;
var $sel = $('<select title="select special character set">').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 + '">' + decodeURIComponent(id) + '</option>');
});
$spec.prepend($sel);
this.chooseCharSubset();
},
chooseCharSubset : function() {
var $sb = $('#specialchars .specialbasic'),
id = $('#specialchars select').val(),
$wanted = $sb.eq(id);
this.makeButtons($wanted);
$sb.hide();
$wanted.css('display', 'inline');
},
makeButtons : function ($wanted) {
var $button;
$wanted.find('a').each( function() {
$button = $('<button type="button"></button>');
$button.text( $(this).text() );
// FIXME: Don't use onclick attribute strings. Use function callbacks instead.
// See https://phabricator.wikimedia.org/T11424
$button.attr('onclick', $(this).attr('onclick') );
$(this).replaceWith($button);
$(this).blur();
});
$wanted.contents().not('button').remove();
},
last_active_textfield : null,
enableForAllFields : function () {
$('textarea, input').focus( function() { EditTools.last_active_textfield = this.id; } );
},
getTextArea : function () {
var $textarea = {};
if (EditTools.last_active_textfield !== null) {
$textarea = $('#' + EditTools.last_active_textfield).eq(0);
}
if ($textarea.length !== 1) {
$textarea = mw.util.$content.find('textarea:first');
}
return $textarea;
},
setup : function () {
EditTools.createSelector();
EditTools.enableForAllFields();
}
};
$(document).ready(function () {
// Don't do anything if no edittools present.
if ( $('#specialchars').length === 0 ) return;
EditTools.setup();
});
}());