From b3830611c4a1ad60e43a5b7293eeed8512cb6828 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Sat, 20 Sep 2014 20:06:58 -0700 Subject: [PATCH] Split mediawiki.toolbar from mediawiki.action.edit Follows-up 285c52039bf4d2f9b. Get rid of mediawiki.mediawiki.action.toolbar. Not keeping a backwards-compat alias since this module is not supposed to be used publicly in its current form. Change-Id: I403216c6916e1f4d29216a55c3fe6c92eb68400b --- includes/EditPage.php | 2 +- maintenance/jsduck/config.json | 1 + resources/Resources.php | 11 +- .../mediawiki.action/mediawiki.action.edit.js | 196 +---------------- .../images/ar/button_bold.png | Bin .../images/ar/button_headline.png | Bin .../images/ar/button_italic.png | Bin .../images/ar/button_link.png | Bin .../images/ar/button_nowiki.png | Bin .../images/be-tarask/button_bold.png | Bin .../images/be-tarask/button_italic.png | Bin .../images/be-tarask/button_link.png | Bin .../images/de/button_bold.png | Bin .../images/de/button_italic.png | Bin .../images/en/button_bold.png | Bin .../images/en/button_extlink.png | Bin .../images/en/button_headline.png | Bin .../images/en/button_hr.png | Bin .../images/en/button_image.png | Bin .../images/en/button_italic.png | Bin .../images/en/button_link.png | Bin .../images/en/button_media.png | Bin .../images/en/button_nowiki.png | Bin .../images/en/button_sig.png | Bin .../images/fa/button_bold.png | Bin .../images/fa/button_headline.png | Bin .../images/fa/button_italic.png | Bin .../images/fa/button_link.png | Bin .../images/fa/button_nowiki.png | Bin .../images/ksh/LICENSE | 0 .../images/ksh/button_italic.png | Bin .../images/ru/LICENSE | 0 .../images/ru/button_bold.png | Bin .../images/ru/button_italic.png | Bin .../images/ru/button_link.png | Bin resources/src/mediawiki.toolbar/toolbar.js | 200 ++++++++++++++++++ .../toolbar.less} | 0 37 files changed, 211 insertions(+), 199 deletions(-) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ar/button_bold.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ar/button_headline.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ar/button_italic.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ar/button_link.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ar/button_nowiki.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/be-tarask/button_bold.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/be-tarask/button_italic.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/be-tarask/button_link.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/de/button_bold.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/de/button_italic.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_bold.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_extlink.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_headline.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_hr.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_image.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_italic.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_link.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_media.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_nowiki.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/en/button_sig.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/fa/button_bold.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/fa/button_headline.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/fa/button_italic.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/fa/button_link.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/fa/button_nowiki.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ksh/LICENSE (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ksh/button_italic.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ru/LICENSE (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ru/button_bold.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ru/button_italic.png (100%) rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar => mediawiki.toolbar}/images/ru/button_link.png (100%) create mode 100644 resources/src/mediawiki.toolbar/toolbar.js rename resources/src/{mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less => mediawiki.toolbar/toolbar.less} (100%) diff --git a/includes/EditPage.php b/includes/EditPage.php index 8a55b1df6d..fab5c14d42 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -3636,7 +3636,7 @@ HTML ) ); - $script = 'mw.loader.using("mediawiki.action.edit", function() {'; + $script = 'mw.loader.using("mediawiki.toolbar", function () {'; foreach ( $toolarray as $tool ) { if ( !$tool ) { continue; diff --git a/maintenance/jsduck/config.json b/maintenance/jsduck/config.json index e97f2923fb..3a748046bd 100644 --- a/maintenance/jsduck/config.json +++ b/maintenance/jsduck/config.json @@ -17,6 +17,7 @@ "../../resources/src/mediawiki.language", "../../resources/src/mediawiki.page", "../../resources/src/mediawiki.special", + "../../resources/src/mediawiki.toolbar", "../../resources/src/jquery/jquery.accessKeyLabel.js", "../../resources/src/jquery/jquery.arrowSteps.js", "../../resources/src/jquery/jquery.autoEllipsis.js", diff --git a/resources/Resources.php b/resources/Resources.php index 28be1df5ae..4b3e356d95 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -985,6 +985,11 @@ return array( 'jquery.cookie', ), ), + 'mediawiki.toolbar' => array( + 'class' => 'ResourceLoaderEditToolbarModule', + 'scripts' => 'resources/src/mediawiki.toolbar/toolbar.js', + 'styles' => 'resources/src/mediawiki.toolbar/toolbar.less', + ), /* MediaWiki Action */ @@ -993,7 +998,7 @@ return array( 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.css', 'dependencies' => array( 'mediawiki.action.edit.styles', - 'mediawiki.action.edit.toolbar', + 'mediawiki.toolbar', 'jquery.textSelection', 'jquery.byteLimit', ), @@ -1003,10 +1008,6 @@ return array( 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css', 'position' => 'top', ), - 'mediawiki.action.edit.toolbar' => array( - 'class' => 'ResourceLoaderEditToolbarModule', - 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less', - ), 'mediawiki.action.edit.collapsibleFooter' => array( 'scripts' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js', 'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.css', diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.js b/resources/src/mediawiki.action/mediawiki.action.edit.js index 4519b04927..f88b83667d 100644 --- a/resources/src/mediawiki.action/mediawiki.action.edit.js +++ b/resources/src/mediawiki.action/mediawiki.action.edit.js @@ -1,195 +1,10 @@ -/** - * Interface for the classic edit toolbar. - * - * @class mw.toolbar - * @singleton +/*! + * Scripts for action=edit */ ( function ( mw, $ ) { - var toolbar, isReady, $toolbar, queue, slice, $currentFocused; - - /** - * Internal helper that does the actual insertion of the button into the toolbar. - * - * See #addButton for parameter documentation. - * - * @private - */ - function insertButton( b, speedTip, tagOpen, tagClose, sampleText, imageId ) { - var $button; - - // Backwards compatibility - if ( typeof b !== 'object' ) { - b = { - imageFile: b, - speedTip: speedTip, - tagOpen: tagOpen, - tagClose: tagClose, - sampleText: sampleText, - imageId: imageId - }; - } - - if ( b.imageFile ) { - $button = $( '' ).attr( { - src: b.imageFile, - alt: b.speedTip, - title: b.speedTip, - id: b.imageId || undefined, - 'class': 'mw-toolbar-editbutton' - } ); - } else { - $button = $( '
' ).attr( { - title: b.speedTip, - id: b.imageId || undefined, - 'class': 'mw-toolbar-editbutton' - } ); - } - - $button.click( function ( e ) { - if ( b.onClick !== undefined ) { - b.onClick( e ); - } else { - toolbar.insertTags( b.tagOpen, b.tagClose, b.sampleText ); - } - - return false; - } ); - - $toolbar.append( $button ); - } - - isReady = false; - $toolbar = false; - - /** - * @private - * @property {Array} - * Contains button objects (and for backwards compatibilty, it can - * also contains an arguments array for insertButton). - */ - queue = []; - slice = queue.slice; - - toolbar = { - - /** - * Add buttons to the toolbar. - * - * Takes care of race conditions and time-based dependencies - * by placing buttons in a queue if this method is called before - * the toolbar is created. - * - * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`, - * `sampleText` and `imageId` as separate arguments (in this order) is also supported. - * - * @param {Object} button Object with the following properties. - * You are required to provide *either* the `onClick` parameter, or the three parameters - * `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive). - * @param {string} [button.imageFile] Image to use for the button. - * @param {string} button.speedTip Tooltip displayed when user mouses over the button. - * @param {Function} [button.onClick] Function to be executed when the button is clicked. - * @param {string} [button.tagOpen] - * @param {string} [button.tagClose] - * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and - * `sampleText` together provide the markup that should be inserted into page text at - * current cursor position. - * @param {string} [button.imageId] `id` attribute of the button HTML element. Can be - * used to define the image with CSS if it's not provided as `imageFile`. - */ - addButton: function () { - if ( isReady ) { - insertButton.apply( toolbar, arguments ); - } else { - // Convert arguments list to array - queue.push( slice.call( arguments ) ); - } - }, - /** - * Add multiple buttons to the toolbar (see also #addButton). - * - * Example usage: - * - * addButtons( [ { .. }, { .. }, { .. } ] ); - * addButtons( { .. }, { .. } ); - * - * @param {Object|Array...} [buttons] An array of button objects or the first - * button object in a list of variadic arguments. - */ - addButtons: function ( buttons ) { - if ( !$.isArray( buttons ) ) { - buttons = slice.call( arguments ); - } - if ( isReady ) { - $.each( buttons, function () { - insertButton( this ); - } ); - } else { - // Push each button into the queue - queue.push.apply( queue, buttons ); - } - }, - - /** - * Apply tagOpen/tagClose to selection in currently focused textarea. - * - * Uses `sampleText` if selection is empty. - * - * @param {string} tagOpen - * @param {string} tagClose - * @param {string} sampleText - */ - insertTags: function ( tagOpen, tagClose, sampleText ) { - if ( $currentFocused && $currentFocused.length ) { - $currentFocused.textSelection( - 'encapsulateSelection', { - pre: tagOpen, - peri: sampleText, - post: tagClose - } - ); - } - }, - - // For backwards compatibility, - // Called from EditPage.php, maybe in other places as well. - init: function () {} - }; - - // Legacy (for compatibility with the code previously in skins/common.edit.js) - mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead.' ); - mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead.' ); - - // Expose API publicly - mw.toolbar = toolbar; $( function () { - var i, b, editBox, scrollTop, $editForm; - - // Used to determine where to insert tags - $currentFocused = $( '#wpTextbox1' ); - - // Populate the selector cache for $toolbar - $toolbar = $( '#toolbar' ); - - for ( i = 0; i < queue.length; i++ ) { - b = queue[i]; - if ( $.isArray( b ) ) { - // Forwarded arguments array from mw.toolbar.addButton - insertButton.apply( toolbar, b ); - } else { - // Raw object from mw.toolbar.addButtons - insertButton( b ); - } - } - - // Clear queue - queue.length = 0; - - // This causes further calls to addButton to go to insertion directly - // instead of to the queue. - // It is important that this is after the one and only loop through - // the the queue - isReady = true; + var editBox, scrollTop, $editForm; // Make sure edit summary does not exceed byte limit $( '#wpSummary' ).byteLimit( 255 ); @@ -207,11 +22,6 @@ scrollTop.value = editBox.scrollTop; } ); } - - // Apply to dynamically created textboxes as well as normal ones - $( document ).on( 'focus', 'textarea, input:text', function () { - $currentFocused = $( this ); - } ); } ); }( mediaWiki, jQuery ) ); diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_bold.png b/resources/src/mediawiki.toolbar/images/ar/button_bold.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_bold.png rename to resources/src/mediawiki.toolbar/images/ar/button_bold.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_headline.png b/resources/src/mediawiki.toolbar/images/ar/button_headline.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_headline.png rename to resources/src/mediawiki.toolbar/images/ar/button_headline.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_italic.png b/resources/src/mediawiki.toolbar/images/ar/button_italic.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_italic.png rename to resources/src/mediawiki.toolbar/images/ar/button_italic.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_link.png b/resources/src/mediawiki.toolbar/images/ar/button_link.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_link.png rename to resources/src/mediawiki.toolbar/images/ar/button_link.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_nowiki.png b/resources/src/mediawiki.toolbar/images/ar/button_nowiki.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ar/button_nowiki.png rename to resources/src/mediawiki.toolbar/images/ar/button_nowiki.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_bold.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_bold.png rename to resources/src/mediawiki.toolbar/images/be-tarask/button_bold.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_italic.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_italic.png rename to resources/src/mediawiki.toolbar/images/be-tarask/button_italic.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_link.png b/resources/src/mediawiki.toolbar/images/be-tarask/button_link.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/be-tarask/button_link.png rename to resources/src/mediawiki.toolbar/images/be-tarask/button_link.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_bold.png b/resources/src/mediawiki.toolbar/images/de/button_bold.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_bold.png rename to resources/src/mediawiki.toolbar/images/de/button_bold.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_italic.png b/resources/src/mediawiki.toolbar/images/de/button_italic.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/de/button_italic.png rename to resources/src/mediawiki.toolbar/images/de/button_italic.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_bold.png b/resources/src/mediawiki.toolbar/images/en/button_bold.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_bold.png rename to resources/src/mediawiki.toolbar/images/en/button_bold.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_extlink.png b/resources/src/mediawiki.toolbar/images/en/button_extlink.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_extlink.png rename to resources/src/mediawiki.toolbar/images/en/button_extlink.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_headline.png b/resources/src/mediawiki.toolbar/images/en/button_headline.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_headline.png rename to resources/src/mediawiki.toolbar/images/en/button_headline.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_hr.png b/resources/src/mediawiki.toolbar/images/en/button_hr.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_hr.png rename to resources/src/mediawiki.toolbar/images/en/button_hr.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_image.png b/resources/src/mediawiki.toolbar/images/en/button_image.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_image.png rename to resources/src/mediawiki.toolbar/images/en/button_image.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_italic.png b/resources/src/mediawiki.toolbar/images/en/button_italic.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_italic.png rename to resources/src/mediawiki.toolbar/images/en/button_italic.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_link.png b/resources/src/mediawiki.toolbar/images/en/button_link.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_link.png rename to resources/src/mediawiki.toolbar/images/en/button_link.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_media.png b/resources/src/mediawiki.toolbar/images/en/button_media.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_media.png rename to resources/src/mediawiki.toolbar/images/en/button_media.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_nowiki.png b/resources/src/mediawiki.toolbar/images/en/button_nowiki.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_nowiki.png rename to resources/src/mediawiki.toolbar/images/en/button_nowiki.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_sig.png b/resources/src/mediawiki.toolbar/images/en/button_sig.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/en/button_sig.png rename to resources/src/mediawiki.toolbar/images/en/button_sig.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_bold.png b/resources/src/mediawiki.toolbar/images/fa/button_bold.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_bold.png rename to resources/src/mediawiki.toolbar/images/fa/button_bold.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_headline.png b/resources/src/mediawiki.toolbar/images/fa/button_headline.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_headline.png rename to resources/src/mediawiki.toolbar/images/fa/button_headline.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_italic.png b/resources/src/mediawiki.toolbar/images/fa/button_italic.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_italic.png rename to resources/src/mediawiki.toolbar/images/fa/button_italic.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_link.png b/resources/src/mediawiki.toolbar/images/fa/button_link.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_link.png rename to resources/src/mediawiki.toolbar/images/fa/button_link.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_nowiki.png b/resources/src/mediawiki.toolbar/images/fa/button_nowiki.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/fa/button_nowiki.png rename to resources/src/mediawiki.toolbar/images/fa/button_nowiki.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/LICENSE b/resources/src/mediawiki.toolbar/images/ksh/LICENSE similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/LICENSE rename to resources/src/mediawiki.toolbar/images/ksh/LICENSE diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/button_italic.png b/resources/src/mediawiki.toolbar/images/ksh/button_italic.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ksh/button_italic.png rename to resources/src/mediawiki.toolbar/images/ksh/button_italic.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/LICENSE b/resources/src/mediawiki.toolbar/images/ru/LICENSE similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/LICENSE rename to resources/src/mediawiki.toolbar/images/ru/LICENSE diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_bold.png b/resources/src/mediawiki.toolbar/images/ru/button_bold.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_bold.png rename to resources/src/mediawiki.toolbar/images/ru/button_bold.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_italic.png b/resources/src/mediawiki.toolbar/images/ru/button_italic.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_italic.png rename to resources/src/mediawiki.toolbar/images/ru/button_italic.png diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_link.png b/resources/src/mediawiki.toolbar/images/ru/button_link.png similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/images/ru/button_link.png rename to resources/src/mediawiki.toolbar/images/ru/button_link.png diff --git a/resources/src/mediawiki.toolbar/toolbar.js b/resources/src/mediawiki.toolbar/toolbar.js new file mode 100644 index 0000000000..77938db12c --- /dev/null +++ b/resources/src/mediawiki.toolbar/toolbar.js @@ -0,0 +1,200 @@ +/** + * Interface for the classic edit toolbar. + * + * @class mw.toolbar + * @singleton + */ +( function ( mw, $ ) { + var toolbar, isReady, $toolbar, queue, slice, $currentFocused; + + /** + * Internal helper that does the actual insertion of the button into the toolbar. + * + * See #addButton for parameter documentation. + * + * @private + */ + function insertButton( b, speedTip, tagOpen, tagClose, sampleText, imageId ) { + var $button; + + // Backwards compatibility + if ( typeof b !== 'object' ) { + b = { + imageFile: b, + speedTip: speedTip, + tagOpen: tagOpen, + tagClose: tagClose, + sampleText: sampleText, + imageId: imageId + }; + } + + if ( b.imageFile ) { + $button = $( '' ).attr( { + src: b.imageFile, + alt: b.speedTip, + title: b.speedTip, + id: b.imageId || undefined, + 'class': 'mw-toolbar-editbutton' + } ); + } else { + $button = $( '
' ).attr( { + title: b.speedTip, + id: b.imageId || undefined, + 'class': 'mw-toolbar-editbutton' + } ); + } + + $button.click( function ( e ) { + if ( b.onClick !== undefined ) { + b.onClick( e ); + } else { + toolbar.insertTags( b.tagOpen, b.tagClose, b.sampleText ); + } + + return false; + } ); + + $toolbar.append( $button ); + } + + isReady = false; + $toolbar = false; + + /** + * @private + * @property {Array} + * Contains button objects (and for backwards compatibilty, it can + * also contains an arguments array for insertButton). + */ + queue = []; + slice = queue.slice; + + toolbar = { + + /** + * Add buttons to the toolbar. + * + * Takes care of race conditions and time-based dependencies + * by placing buttons in a queue if this method is called before + * the toolbar is created. + * + * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`, + * `sampleText` and `imageId` as separate arguments (in this order) is also supported. + * + * @param {Object} button Object with the following properties. + * You are required to provide *either* the `onClick` parameter, or the three parameters + * `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive). + * @param {string} [button.imageFile] Image to use for the button. + * @param {string} button.speedTip Tooltip displayed when user mouses over the button. + * @param {Function} [button.onClick] Function to be executed when the button is clicked. + * @param {string} [button.tagOpen] + * @param {string} [button.tagClose] + * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and + * `sampleText` together provide the markup that should be inserted into page text at + * current cursor position. + * @param {string} [button.imageId] `id` attribute of the button HTML element. Can be + * used to define the image with CSS if it's not provided as `imageFile`. + */ + addButton: function () { + if ( isReady ) { + insertButton.apply( toolbar, arguments ); + } else { + // Convert arguments list to array + queue.push( slice.call( arguments ) ); + } + }, + /** + * Add multiple buttons to the toolbar (see also #addButton). + * + * Example usage: + * + * addButtons( [ { .. }, { .. }, { .. } ] ); + * addButtons( { .. }, { .. } ); + * + * @param {Object|Array...} [buttons] An array of button objects or the first + * button object in a list of variadic arguments. + */ + addButtons: function ( buttons ) { + if ( !$.isArray( buttons ) ) { + buttons = slice.call( arguments ); + } + if ( isReady ) { + $.each( buttons, function () { + insertButton( this ); + } ); + } else { + // Push each button into the queue + queue.push.apply( queue, buttons ); + } + }, + + /** + * Apply tagOpen/tagClose to selection in currently focused textarea. + * + * Uses `sampleText` if selection is empty. + * + * @param {string} tagOpen + * @param {string} tagClose + * @param {string} sampleText + */ + insertTags: function ( tagOpen, tagClose, sampleText ) { + if ( $currentFocused && $currentFocused.length ) { + $currentFocused.textSelection( + 'encapsulateSelection', { + pre: tagOpen, + peri: sampleText, + post: tagClose + } + ); + } + }, + + // For backwards compatibility, + // Called from EditPage.php, maybe in other places as well. + init: function () {} + }; + + // Legacy (for compatibility with the code previously in skins/common.edit.js) + mw.log.deprecate( window, 'addButton', toolbar.addButton, 'Use mw.toolbar.addButton instead.' ); + mw.log.deprecate( window, 'insertTags', toolbar.insertTags, 'Use mw.toolbar.insertTags instead.' ); + + // Expose API publicly + mw.toolbar = toolbar; + + $( function () { + var i, b; + + // Used to determine where to insert tags + $currentFocused = $( '#wpTextbox1' ); + + // Populate the selector cache for $toolbar + $toolbar = $( '#toolbar' ); + + for ( i = 0; i < queue.length; i++ ) { + b = queue[i]; + if ( $.isArray( b ) ) { + // Forwarded arguments array from mw.toolbar.addButton + insertButton.apply( toolbar, b ); + } else { + // Raw object from mw.toolbar.addButtons + insertButton( b ); + } + } + + // Clear queue + queue.length = 0; + + // This causes further calls to addButton to go to insertion directly + // instead of to the queue. + // It is important that this is after the one and only loop through + // the the queue + isReady = true; + + // Apply to dynamically created textboxes as well as normal ones + $( document ).on( 'focus', 'textarea, input:text', function () { + $currentFocused = $( this ); + } ); + } ); + +}( mediaWiki, jQuery ) ); diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less b/resources/src/mediawiki.toolbar/toolbar.less similarity index 100% rename from resources/src/mediawiki.action/mediawiki.action.edit.toolbar/mediawiki.action.edit.toolbar.less rename to resources/src/mediawiki.toolbar/toolbar.less -- 2.20.1