Difference between revisions of "MediaWiki:Common.js"

Jump to: navigation, search

Difference between revisions of "MediaWiki:Common.js"

Line 4: Line 4:
 
    
 
    
  
$.ajax({
 
url: 'https://meta.wikimedia.org/w/index.php?title=User:Krinkle/Scripts/InsertWikiEditorButton.js&action=raw&ctype=text/javascript',
 
dataType: 'script',
 
cache: true
 
}).done(function () {
 
  
 
// 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));