|
|
| 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() + ' }}';
| |
| − | });
| |