Difference between revisions of "MediaWiki:Common.js"
Difference between revisions of "MediaWiki:Common.js"
| Line 4: | Line 4: | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
// Happy face | // Happy face | ||
| Line 37: | Line 32: | ||
var y = ' || ' + x.getFullYear() + '-' + monthNames[(x.getMonth() + 3)] + '-' + x.getDate() + ' }}'; | var y = ' || ' + x.getFullYear() + '-' + monthNames[(x.getMonth() + 3)] + '-' + x.getDate() + ' }}'; | ||
}); | }); | ||
| + | |||
| + | (function ($, mw) { | ||
| + | "use strict"; | ||
| + | |||
| + | var $toolbar, queue = []; | ||
| + | |||
| + | function insertButton(btnObj) { | ||
| + | $toolbar.wikiEditor('addToToolbar', btnObj); | ||
| + | } | ||
| + | |||
| + | function handleQueue() { | ||
| + | for (var i = 0; i < queue.length; i++) { | ||
| + | insertButton(queue[i]); | ||
| + | } | ||
| + | queue = []; | ||
| + | } | ||
| + | |||
| + | function check() { | ||
| + | if ($.wikiEditor && $.fn.wikiEditor && $('#wpTextbox1').length) { | ||
| + | $toolbar = $('#wpTextbox1'); | ||
| + | handleQueue(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Only on editpage | ||
| + | if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit', 'formedit']) !== -1) { | ||
| + | /** | ||
| + | * krInsertWikiEditorButton | ||
| + | * | ||
| + | * @param options {Object} An object with options: | ||
| + | * - section {String} (optional) The name of the section in the WikiEditor. Defaults to 'main' | ||
| + | * - group {String} (optional) The name of the group in the WikiEditor. Defaults to 'insert' | ||
| + | * - id {String} (required) Unique id (ie. 'my-button') | ||
| + | * - icon {String} (recommended) URL to the icon, should be square about 21 to 22px | ||
| + | * - label {String} (required) Tooltip displayed when hovering button | ||
| + | * - insertBefore {String} (optional) Wikitext to be inserted before the cursor on-click | ||
| + | * - sampleText {String} (optional) Text inserted in place of the cursor if no text was selected | ||
| + | * - insertAfter {String} (optional) Wikitext to be inserted after the cursor on-click | ||
| + | * - callback {Function} (optional) Called when the button is clicked | ||
| + | * - autoSummary {mixed} (optional) Null or an Object with the following properties: | ||
| + | * - summary {String} (required) Edit summary that should be used | ||
| + | * - position {String} (optional) 'append', 'prepend' or 'replace' | ||
| + | * - delimiter {String} (optional) delimiter between the (possibly) current summary and the to-be-inserted summary | ||
| + | */ | ||
| + | window.krInsertWikiEditorButton = function (options) { | ||
| + | // Defaults | ||
| + | options = $.extend({ | ||
| + | 'section': 'main', | ||
| + | 'group': 'insert', | ||
| + | 'id': null, | ||
| + | 'icon': '//upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Toolbaricon_bold_!.png/21px-Toolbaricon_bold_!.png', | ||
| + | 'label': '', | ||
| + | 'insertBefore': '', | ||
| + | 'sampleText': '', | ||
| + | 'insertAfter': '', | ||
| + | 'callback': null, | ||
| + | 'autoSummary': { | ||
| + | 'summary': null, | ||
| + | 'position': 'append', | ||
| + | 'delimiter': '; ' | ||
| + | } | ||
| + | }, options); | ||
| + | // Required | ||
| + | if (!options.id || !options.label) { | ||
| + | return false; | ||
| + | } | ||
| + | var btnObj = { | ||
| + | 'section': options.section, | ||
| + | 'group': options.group, | ||
| + | 'tools': {} | ||
| + | }; | ||
| + | btnObj.tools[options.id] = { | ||
| + | label: options.label, | ||
| + | type: 'button', | ||
| + | icon: options.icon, | ||
| + | action: { | ||
| + | type: 'callback', | ||
| + | execute: function () { | ||
| + | // encapsulateSelection | ||
| + | $toolbar.textSelection('encapsulateSelection', { | ||
| + | pre: options.insertBefore, | ||
| + | peri: options.sampleText, | ||
| + | post: options.insertAfter | ||
| + | }); | ||
| + | // Auto summary | ||
| + | if (options.autoSummary && options.autoSummary.summary) { | ||
| + | var $summary = $('#wpSummary'), currentSum = $summary.val(); | ||
| + | if (!$.trim(currentSum)) { | ||
| + | $summary.val(options.autoSummary.summary); | ||
| + | } else { | ||
| + | switch (options.autoSummary.position) { | ||
| + | case 'prepend': | ||
| + | $summary.val( | ||
| + | options.autoSummary.summary + | ||
| + | options.autoSummary.delimiter + | ||
| + | currentSum | ||
| + | ); | ||
| + | break; | ||
| + | case 'replace': | ||
| + | $summary.val(options.autoSummary.summary); | ||
| + | break; | ||
| + | default: // 'append' | ||
| + | $summary.val( | ||
| + | currentSum + | ||
| + | options.autoSummary.delimiter + | ||
| + | options.autoSummary.summary | ||
| + | ); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | // Callback | ||
| + | if ($.isFunction(options.callback)) { | ||
| + | options.callback(); | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | }; | ||
| + | if ($toolbar) { | ||
| + | insertButton(btnObj); | ||
| + | } else { | ||
| + | queue.push(btnObj); | ||
| + | } | ||
| + | }; | ||
| + | $.when( | ||
| + | mw.loader.using( 'ext.wikiEditor.toolbar' ), | ||
| + | $.ready | ||
| + | ).then(check); | ||
| + | } else { | ||
| + | // No-op function to avoid errors on other pages | ||
| + | window.krInsertWikiEditorButton = function () {}; | ||
| + | } | ||
| + | }(jQuery, mediaWiki)); | ||
Revision as of 01:22, 20 November 2015
$(document).ready(function() {
// Happy face
krInsertWikiEditorButton({
id: "mw-customeditbutton-myspecialbutton",
icon: "//upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Gnome-face-smile.svg/22px-Gnome-face-smile.svg.png",
label: 'Insert happy face',
insertBefore: '[[File:Gnome-face-smile.svg|21px|',
insertAfter: ']]',
sampleText: 'Happy face'
});
// Monkey
krInsertWikiEditorButton({
id: 'mw-customeditbutton-anotherspecialbutton',
icon: '//upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Gnome-face-monkey.svg/22px-Gnome-face-monkey.svg.png',
label: 'Insert monkey',
insertBefore: '[[File:Gnome-face-monkey.svg|21px|',
insertAfter: ']]',
sampleText: 'Happy face'
});
});
var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
x = new Date;
var y = ' || ' + x.getFullYear() + '-' + monthNames[(x.getMonth() + 3)] + '-' + x.getDate() + ' }}';
});
(function ($, mw) {
"use strict";
var $toolbar, queue = [];
function insertButton(btnObj) {
$toolbar.wikiEditor('addToToolbar', btnObj);
}
function handleQueue() {
for (var i = 0; i < queue.length; i++) {
insertButton(queue[i]);
}
queue = [];
}
function check() {
if ($.wikiEditor && $.fn.wikiEditor && $('#wpTextbox1').length) {
$toolbar = $('#wpTextbox1');
handleQueue();
}
}
// Only on editpage
if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit', 'formedit']) !== -1) {
/**
* krInsertWikiEditorButton
*
* @param options {Object} An object with options:
* - section {String} (optional) The name of the section in the WikiEditor. Defaults to 'main'
* - group {String} (optional) The name of the group in the WikiEditor. Defaults to 'insert'
* - id {String} (required) Unique id (ie. 'my-button')
* - icon {String} (recommended) URL to the icon, should be square about 21 to 22px
* - label {String} (required) Tooltip displayed when hovering button
* - insertBefore {String} (optional) Wikitext to be inserted before the cursor on-click
* - sampleText {String} (optional) Text inserted in place of the cursor if no text was selected
* - insertAfter {String} (optional) Wikitext to be inserted after the cursor on-click
* - callback {Function} (optional) Called when the button is clicked
* - autoSummary {mixed} (optional) Null or an Object with the following properties:
* - summary {String} (required) Edit summary that should be used
* - position {String} (optional) 'append', 'prepend' or 'replace'
* - delimiter {String} (optional) delimiter between the (possibly) current summary and the to-be-inserted summary
*/
window.krInsertWikiEditorButton = function (options) {
// Defaults
options = $.extend({
'section': 'main',
'group': 'insert',
'id': null,
'icon': '//upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Toolbaricon_bold_!.png/21px-Toolbaricon_bold_!.png',
'label': '',
'insertBefore': '',
'sampleText': '',
'insertAfter': '',
'callback': null,
'autoSummary': {
'summary': null,
'position': 'append',
'delimiter': '; '
}
}, options);
// Required
if (!options.id || !options.label) {
return false;
}
var btnObj = {
'section': options.section,
'group': options.group,
'tools': {}
};
btnObj.tools[options.id] = {
label: options.label,
type: 'button',
icon: options.icon,
action: {
type: 'callback',
execute: function () {
// encapsulateSelection
$toolbar.textSelection('encapsulateSelection', {
pre: options.insertBefore,
peri: options.sampleText,
post: options.insertAfter
});
// Auto summary
if (options.autoSummary && options.autoSummary.summary) {
var $summary = $('#wpSummary'), currentSum = $summary.val();
if (!$.trim(currentSum)) {
$summary.val(options.autoSummary.summary);
} else {
switch (options.autoSummary.position) {
case 'prepend':
$summary.val(
options.autoSummary.summary +
options.autoSummary.delimiter +
currentSum
);
break;
case 'replace':
$summary.val(options.autoSummary.summary);
break;
default: // 'append'
$summary.val(
currentSum +
options.autoSummary.delimiter +
options.autoSummary.summary
);
}
}
}
// Callback
if ($.isFunction(options.callback)) {
options.callback();
}
}
}
};
if ($toolbar) {
insertButton(btnObj);
} else {
queue.push(btnObj);
}
};
$.when(
mw.loader.using( 'ext.wikiEditor.toolbar' ),
$.ready
).then(check);
} else {
// No-op function to avoid errors on other pages
window.krInsertWikiEditorButton = function () {};
}
}(jQuery, mediaWiki));
