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

Reply via email to