|
|
Line 1: |
Line 1: |
| | | |
− |
| |
− | $(document).ready(function() {
| |
− |
| |
− | (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));
| |
− |
| |
− |
| |
− | // 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() + ' }}';
| |
− | });
| |