Adrian Lang has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/249988

Change subject: Remove bridge between Controller and edittoolbar
......................................................................

Remove bridge between Controller and edittoolbar

Change-Id: I4efdf15a37843dba512189066bfee89c63dd234a
---
M 
view/resources/jquery/wikibase/toolbar/controller/definitions/edittoolbar/referenceview.js
M view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js
2 files changed, 58 insertions(+), 40 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/88/249988/1

diff --git 
a/view/resources/jquery/wikibase/toolbar/controller/definitions/edittoolbar/referenceview.js
 
b/view/resources/jquery/wikibase/toolbar/controller/definitions/edittoolbar/referenceview.js
index b111764..5db561e 100644
--- 
a/view/resources/jquery/wikibase/toolbar/controller/definitions/edittoolbar/referenceview.js
+++ 
b/view/resources/jquery/wikibase/toolbar/controller/definitions/edittoolbar/referenceview.js
@@ -40,24 +40,15 @@
                                };
                        }
 
-                       var controller;
-                       var bridge = {
-                               cancelEditing: function() { return 
controller.cancelEditing.apply( controller, arguments ); },
-                               element: $referenceview,
-                               getHelpMessage: function() {
-                                       return $.Deferred().resolve( 
referenceview.options.helpMessage ).promise();
-                               },
-                               startEditing: function() { return 
controller.startEditing.apply( controller, arguments ); },
-                               stopEditing: function() { return 
controller.stopEditing.apply( controller, arguments ); },
-                               setError: function() { return 
controller.setError.apply( controller, arguments ); }
-                       };
-                       options.interactionWidget = bridge;
+                       options.getHelpMessage = function() {
+                               return $.Deferred().resolve( 
referenceview.options.helpMessage ).promise();
+                       },
 
-                       $referenceview.edittoolbar( options );
+                       var edittoolbar = $referenceview.edittoolbar( options 
).data( 'edittoolbar' );
 
                        var guid = referenceview.options.statementGuid;
                        var referencesChanger = 
referenceview.options.referencesChanger;
-                       controller = new wikibase.view.ToolbarController(
+                       var controller = new wikibase.view.ToolbarController(
                                {
                                        save: function( reference ) {
                                                return 
referencesChanger.setReference( guid, reference );
@@ -66,6 +57,7 @@
                                $referenceview.data( 'edittoolbar' ),
                                referenceview
                        );
+                       edittoolbar.setController( controller );
 
                        $referenceview.on( 'keydown.edittoolbar', function( 
event ) {
                                if ( referenceview.option( 'disabled' ) ) {
diff --git 
a/view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js 
b/view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js
index a3392d2..eeba2b1 100644
--- a/view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js
+++ b/view/resources/jquery/wikibase/toolbar/jquery.wikibase.edittoolbar.js
@@ -18,7 +18,7 @@
  * Apart from the required methods, the interaction widget has to have defined 
a help message in
  * its options that will be used as tooltip message.
  *
- * @option {jQuery.Widget} interactionWidget
+ * @option {jQuery.Widget} [interactionWidget]
  *         Name of the widget the toolbar shall interact with.
  *
  * @option {Function} [onRemove]
@@ -81,22 +81,28 @@
        _$tooltipAnchor: null,
 
        /**
+        * @property 
{jQuery.ui.EditableTemplatedWidget|wikibase.view.Controller} [controller]
+        * @private
+        */
+       _controller: null,
+
+       /**
         * @see jQuery.wikibase.toolbar._create
         */
        _create: function() {
-               if ( !this.options.interactionWidget ) {
-                       throw new Error( 'Interaction widget needs to be 
defined' );
-               }
-
                PARENT.prototype._create.call( this );
 
-               if ( !this.options.interactionWidget.getHelpMessage ) {
-                       throw new Error( 'Interaction widget help message 
getter missing' );
-               }
-
-               var missingMethods = this.checkRequiredMethods();
-               if ( missingMethods.length ) {
-                       throw new Error( 'Required method(s) missing: ' + 
missingMethods.join( ', ' ) );
+               if ( this.options.interactionWidget ) {
+                       this.setController( this.options.interactionWidget );
+                       if ( !this.options.getHelpMessage ) {
+                               if ( 
!this.options.interactionWidget.getHelpMessage ) {
+                                       throw new Error( 'Interaction widget 
help message getter missing' );
+                               }
+                               this.options.getHelpMessage = $.proxy(
+                                       
this.options.interactionWidget.getHelpMessage,
+                                       this.options.interactionWidget
+                               );
+                       }
                }
 
                this._buttons = {};
@@ -113,13 +119,23 @@
                }
        },
 
+       setController: function( controller ) {
+               this._controller = controller;
+               var missingMethods = this.checkRequiredMethods();
+               if ( missingMethods.length ) {
+                       throw new Error( 'Required method(s) missing: ' + 
missingMethods.join( ', ' ) );
+               }
+       },
+
        /**
         * @see jQuery.wikibase.toolbar.destroy
         */
        destroy: function() {
                var self = this;
 
-               this.options.interactionWidget.element.off( '.' + 
this.widgetName );
+               if ( this.options.interactionWidget ) {
+                       this.options.interactionWidget.element.off( '.' + 
this.widgetName );
+               }
 
                if ( this._$tooltipAnchor ) {
                        var $wbtooltip = this._$tooltipAnchor.find( 
':wikibase-wbtooltip' ),
@@ -155,7 +171,7 @@
                var self = this,
                        missingMethods = [];
                $.each( this._requiredMethods, function( i, methodName ) {
-                       if ( !$.isFunction( 
self.options.interactionWidget[methodName] ) ) {
+                       if ( !$.isFunction( self._controller[methodName] ) ) {
                                missingMethods.push( methodName );
                        }
                } );
@@ -203,7 +219,7 @@
                } );
        },
 
-       _attachEventHandlers: function() {
+       _attachInteractionWidgetEventHandlers: function() {
                var self = this,
                        prefix = 
this.options.interactionWidget.widgetEventPrefix;
 
@@ -262,25 +278,35 @@
                                } );
                        }
                } );
+       },
+
+       _attachEventHandlers: function() {
+               var self = this;
+
+               if ( this.options.interactionWidget ) {
+                       this._attachInteractionWidgetEventHandlers();
+               }
 
                this.getContainer()
                .on( 'toolbarbuttonaction.' + this.widgetName, function( event 
) {
                        if ( self._buttons.edit && event.target === 
self._buttons.edit.get( 0 ) ) {
-                               self.options.interactionWidget.element.one(
-                                       prefix + 'afterstartediting.' + 
self.widgetName,
-                                       function() {
-                                               self._trigger( 'edit' );
-                                       }
-                               );
-                               self.options.interactionWidget.startEditing();
+                               if ( self.options.interactionWidget ) {
+                                       
self.options.interactionWidget.element.one(
+                                               prefix + 'afterstartediting.' + 
self.widgetName,
+                                               function() {
+                                                       self._trigger( 'edit' );
+                                               }
+                                       );
+                               }
+                               self._controller.startEditing();
                        } else if ( self._buttons.save && event.target === 
self._buttons.save.get( 0 ) ) {
-                               self.options.interactionWidget.stopEditing();
+                               self._controller.stopEditing();
                        } else if ( self._buttons.remove && event.target === 
self._buttons.remove.get( 0 ) ) {
                                self.disable();
                                self.toggleActionMessage( mw.msg( 
'wikibase-remove-inprogress' ) );
                                self.options.onRemove();
                        } else if ( self._buttons.cancel && event.target === 
self._buttons.cancel.get( 0 ) ) {
-                               self.options.interactionWidget.cancelEditing();
+                               self._controller.cancelEditing();
                        }
                } );
        },
@@ -380,7 +406,7 @@
                        }
                }
 
-               this.options.interactionWidget.getHelpMessage().done( 
addTooltip );
+               this.options.getHelpMessage().done( addTooltip );
 
                return this._$tooltipAnchor;
        },
@@ -459,7 +485,7 @@
                        permanent: true
                } )
                .one( 'wbtooltipafterhide.' + this.widgetName, function() {
-                       self.options.interactionWidget.setError();
+                       self._controller.setError();
                        var wbtooltip = $anchor.data( 'wbtooltip' );
                        if ( wbtooltip ) {
                                wbtooltip.destroy();

-- 
To view, visit https://gerrit.wikimedia.org/r/249988
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4efdf15a37843dba512189066bfee89c63dd234a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Lang <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to