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