Daniel Werner has uploaded a new change for review. https://gerrit.wikimedia.org/r/78824
Change subject: Minor code restructuring of toolbarcontroller widget ...................................................................... Minor code restructuring of toolbarcontroller widget Moved toolbar event listener handling into its own functions. Change-Id: I8a2d9d636183bf48119d768ffe364fd1b8eecf9a --- M lib/resources/jquery.wikibase/toolbar/toolbarcontroller.js 1 file changed, 46 insertions(+), 27 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/24/78824/1 diff --git a/lib/resources/jquery.wikibase/toolbar/toolbarcontroller.js b/lib/resources/jquery.wikibase/toolbar/toolbarcontroller.js index dca0d1c..944b71b 100644 --- a/lib/resources/jquery.wikibase/toolbar/toolbarcontroller.js +++ b/lib/resources/jquery.wikibase/toolbar/toolbarcontroller.js @@ -78,47 +78,38 @@ var $initNode = self.element.find( def.selector || ':' + def.widget.fullName ); if ( def.events ) { + // Get callbacks for "create" and "destroy": + var defaultCallbacks = createDefaultEventHandlers( type, options ); // Toolbars that shall be created upon certain events. $.each( def.events, function( eventNames, callbackOrKeyword ) { - if ( callbackOrKeyword === 'create' ) { - callbackOrKeyword = function( event ) { - $( event.target )[type]( options ); - }; - } else if ( callbackOrKeyword === 'destroy' ) { - callbackOrKeyword = function( event ) { - var $node = $( event.target ); - if ( $node.data( type ) ) { - $node.data( type ).destroy(); - $node.removeData( type ); - $node.children( - '.' + $.wikibase[type].prototype.widgetBaseClass - ).remove(); - } - }; - } + var callback = + defaultCallbacks[ callbackOrKeyword ] || callbackOrKeyword; - var namespacedEventNames = ( eventNames + ' ' ) - .split( ' ' ).join( '.' + self.widgetName + ' ' ); - - // Create and destroy events have to be defined. - $initNode - // Remove all events first in order to not end up with having the handler - // attached multiple times: - .on( namespacedEventNames, function( event ) { - callbackOrKeyword( event, $( event.target ) ); - } ); + self._initToolbarEventListener( $initNode, eventNames, callback ); } ); } if ( !def.events || def.widget ) { $initNode[type]( options ); } - } ); } ); this.initEventListeners(); + }, + + _initToolbarEventListener: function( $toolbar, eventNames, callback ) { + var namespacedEventNames = ( eventNames + ' ' ) + .split( ' ' ).join( '.' + this.widgetName + ' ' ); + + // Create and destroy events have to be defined. + $toolbar + // Remove all events first in order to not end up with having the handler + // attached multiple times: + .on( namespacedEventNames, function( event ) { + callback( event, $( event.target ) ); + } ); }, /** @@ -167,4 +158,32 @@ } ); + /** + * Returns an object with fields named after the default toolbar definition event actions + * ("create" and "destroy"). Each field holds a callback for handling the related action. + * + * @param {string} type + * @param {Object} toolbarInitOptions + * @returns {Object} + */ + function createDefaultEventHandlers( type, toolbarInitOptions ) { + return { + 'create': + function( event ) { + $( event.target )[type]( toolbarInitOptions ); + }, + destroy: + function( event ) { + var $node = $( event.target ); + if ( $node.data( type ) ) { + $node.data( type ).destroy(); + $node.removeData( type ); + $node.children( + '.' + $.wikibase[ type ].prototype.widgetBaseClass + ).remove(); + } + } + }; + } + }( mediaWiki, wikibase, jQuery ) ); -- To view, visit https://gerrit.wikimedia.org/r/78824 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8a2d9d636183bf48119d768ffe364fd1b8eecf9a Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Daniel Werner <daniel.wer...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits