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));