summaryrefslogtreecommitdiff
path: root/resources/mediawiki.action/mediawiki.action.edit.js
diff options
context:
space:
mode:
Diffstat (limited to 'resources/mediawiki.action/mediawiki.action.edit.js')
-rw-r--r--resources/mediawiki.action/mediawiki.action.edit.js165
1 files changed, 99 insertions, 66 deletions
diff --git a/resources/mediawiki.action/mediawiki.action.edit.js b/resources/mediawiki.action/mediawiki.action.edit.js
index b121d34f..e685ca94 100644
--- a/resources/mediawiki.action/mediawiki.action.edit.js
+++ b/resources/mediawiki.action/mediawiki.action.edit.js
@@ -1,101 +1,134 @@
-(function( $ ) {
- // currentFocus is used to determine where to insert tags
- var currentFocused = $( '#wpTextbox1' );
-
- mw.toolbar = {
- $toolbar : $( '#toolbar' ),
- buttons : [],
- // If you want to add buttons, use
- // mw.toolbar.addButton( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId, selectText );
- addButton : function() {
- this.buttons.push( [].slice.call( arguments ) );
+( function ( $, mw ) {
+ var isReady, toolbar, currentFocused;
+
+ isReady = false;
+
+ toolbar = {
+ $toolbar: false,
+ buttons: [],
+ /**
+ * If you want to add buttons, use
+ * mw.toolbar.addButton( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId, selectText );
+ */
+ addButton: function () {
+ if ( isReady ) {
+ toolbar.insertButton.apply( toolbar, arguments );
+ } else {
+ toolbar.buttons.push( [].slice.call( arguments ) );
+ }
},
- insertButton : function( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId, selectText ) {
+ insertButton: function ( imageFile, speedTip, tagOpen, tagClose, sampleText, imageId, selectText ) {
var image = $('<img>', {
- width : 23,
- height : 22,
- src : imageFile,
- alt : speedTip,
- title : speedTip,
- id : imageId || '',
+ width : 23,
+ height: 22,
+ src : imageFile,
+ alt : speedTip,
+ title : speedTip,
+ id : imageId || '',
'class': 'mw-toolbar-editbutton'
- } ).click( function() {
+ } ).click( function () {
mw.toolbar.insertTags( tagOpen, tagClose, sampleText, selectText );
return false;
} );
- this.$toolbar.append( image );
+ toolbar.$toolbar.append( image );
return true;
},
- // apply tagOpen/tagClose to selection in textarea,
- // use sampleText instead of selection if there is none
- insertTags : function( tagOpen, tagClose, sampleText, selectText) {
- if ( currentFocused.length ) {
+ /**
+ * apply tagOpen/tagClose to selection in textarea,
+ * use sampleText instead of selection if there is none.
+ */
+ insertTags: function ( tagOpen, tagClose, sampleText, selectText ) {
+ if ( currentFocused && currentFocused.length ) {
currentFocused.textSelection(
- 'encapsulateSelection', { 'pre': tagOpen, 'peri': sampleText, 'post': tagClose }
+ 'encapsulateSelection', {
+ 'pre': tagOpen,
+ 'peri': sampleText,
+ 'post': tagClose
+ }
);
}
- },
- init : function() {
- // Legacy
- // Merge buttons from mwCustomEditButtons
- var buttons = [].concat( this.buttons, window.mwCustomEditButtons );
- for ( var i = 0; i < buttons.length; i++ ) {
- if ( $.isArray( buttons[i] ) ) {
- // Passes our button array as arguments
- mw.toolbar.insertButton.apply( this, buttons[i] );
- } else {
- // Legacy mwCustomEditButtons is an object
- var c = buttons[i];
- mw.toolbar.insertButton( c.imageFile, c.speedTip, c.tagOpen, c.tagClose, c.sampleText, c.imageId, c.selectText );
- }
+ },
+
+ // For backwards compatibility
+ init: function () {}
+ };
+
+ // Legacy (for compatibility with the code previously in skins/common.edit.js)
+ window.addButton = toolbar.addButton;
+ window.insertTags = toolbar.insertTags;
+
+ // Explose publicly
+ mw.toolbar = toolbar;
+
+ $( document ).ready( function () {
+ var buttons, i, c, iframe;
+
+ // currentFocus is used to determine where to insert tags
+ currentFocused = $( '#wpTextbox1' );
+
+ // Populate the selector cache for $toolbar
+ toolbar.$toolbar = $( '#toolbar' );
+
+ // Legacy: Merge buttons from mwCustomEditButtons
+ buttons = [].concat( toolbar.buttons, window.mwCustomEditButtons );
+ for ( i = 0; i < buttons.length; i++ ) {
+ if ( $.isArray( buttons[i] ) ) {
+ // Passes our button array as arguments
+ toolbar.insertButton.apply( toolbar, buttons[i] );
+ } else {
+ // Legacy mwCustomEditButtons is an object
+ c = buttons[i];
+ toolbar.insertButton( c.imageFile, c.speedTip, c.tagOpen,
+ c.tagClose, c.sampleText, c.imageId, c.selectText );
}
- return true;
}
- };
- //Legacy
- window.addButton = mw.toolbar.addButton;
- window.insertTags = mw.toolbar.insertTags;
+ // This causes further calls to addButton to go to insertion directly
+ // instead of to the toolbar.buttons queue.
+ // It is important that this is after the one and only loop through
+ // the the toolbar.buttons queue
+ isReady = true;
+
+ // Make sure edit summary does not exceed byte limit
+ $( '#wpSummary' ).byteLimit( 250 );
- //make sure edit summary does not exceed byte limit
- $( '#wpSummary' ).byteLimit( 250 );
-
- $( document ).ready( function() {
/**
* Restore the edit box scroll state following a preview operation,
* and set up a form submission handler to remember this state
*/
- var scrollEditBox = function() {
- var editBox = document.getElementById( 'wpTextbox1' );
- var scrollTop = document.getElementById( 'wpScrolltop' );
- var $editForm = $( '#editform' );
- if( $editForm.length && editBox && scrollTop ) {
- if( scrollTop.value ) {
+ ( function scrollEditBox() {
+ var editBox, scrollTop, $editForm;
+
+ editBox = document.getElementById( 'wpTextbox1' );
+ scrollTop = document.getElementById( 'wpScrolltop' );
+ $editForm = $( '#editform' );
+ if ( $editForm.length && editBox && scrollTop ) {
+ if ( scrollTop.value ) {
editBox.scrollTop = scrollTop.value;
}
- $editForm.submit( function() {
+ $editForm.submit( function () {
scrollTop.value = editBox.scrollTop;
});
}
- };
- scrollEditBox();
-
- // Create button bar
- mw.toolbar.init();
-
- $( 'textarea, input:text' ).focus( function() {
+ }() );
+
+ $( 'textarea, input:text' ).focus( function () {
currentFocused = $(this);
});
// HACK: make currentFocused work with the usability iframe
// With proper focus detection support (HTML 5!) this'll be much cleaner
- var iframe = $( '.wikiEditor-ui-text iframe' );
+ iframe = $( '.wikiEditor-ui-text iframe' );
if ( iframe.length > 0 ) {
$( iframe.get( 0 ).contentWindow.document )
- .add( iframe.get( 0 ).contentWindow.document.body ) // for IE
- .focus( function() { currentFocused = iframe; } );
+ // for IE
+ .add( iframe.get( 0 ).contentWindow.document.body )
+ .focus( function () {
+ currentFocused = iframe;
+ } );
}
});
-})(jQuery);
+
+}( jQuery, mediaWiki ) );