jenkins-bot has submitted this change and it was merged. Change subject: labelview: inherit from EditableTemplatedWidget ......................................................................
labelview: inherit from EditableTemplatedWidget Change-Id: I0f97b8bb067934613e7ed24c7e8fbc02b9b966ed --- M lib/resources/jquery.wikibase/jquery.wikibase.labelview.js M lib/resources/jquery.wikibase/resources.php 2 files changed, 30 insertions(+), 96 deletions(-) Approvals: Adrian Lang: Looks good to me, approved jenkins-bot: Verified diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js b/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js index a4a09d4..bc8d473 100644 --- a/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js +++ b/lib/resources/jquery.wikibase/jquery.wikibase.labelview.js @@ -5,12 +5,12 @@ ( function( $, mw, wb ) { 'use strict'; - var PARENT = $.ui.TemplatedWidget; + var PARENT = $.ui.EditableTemplatedWidget; /** * Manages a label. * @since 0.5 - * @extends jQuery.ui.TemplatedWidget + * @extends jQuery.ui.EditableTemplatedWidget * * @option {wikibase.datamodel.Term} value * @@ -47,14 +47,9 @@ }, /** - * @type {boolean} - */ - _isInEditMode: false, - - /** * @see jQuery.ui.TemplatedWidget._create * - * @throws {Error} if required parameters are not specified properly. + * @throws {Error} if a required option is not specified properly. */ _create: function() { if( @@ -62,7 +57,7 @@ || !this.options.entityId || !this.options.labelsChanger ) { - throw new Error( 'Required parameter(s) missing' ); + throw new Error( 'Required option not specified properly' ); } var self = this; @@ -87,7 +82,7 @@ PARENT.prototype._create.call( this ); if( this.$text.text() === '' ) { - this._draw(); + this.draw(); } }, @@ -95,7 +90,7 @@ * @see jQuery.ui.TemplatedWidget.destroy */ destroy: function() { - if( this._isInEditMode ) { + if( this.isInEditMode() ) { var self = this; this.element.one( this.widgetEventPrefix + 'afterstopediting', function( event ) { @@ -109,10 +104,11 @@ }, /** - * Main draw routine. + * @inheritdoc */ - _draw: function() { + draw: function() { var self = this, + deferred = $.Deferred(), languageCode = this.options.value.getLanguageCode(), labelText = this.options.value.getText(); @@ -120,7 +116,7 @@ labelText = null; } - if( this.options.showEntityId && !( this._isInEditMode && labelText ) ) { + if( this.options.showEntityId && !( this.isInEditMode() && labelText ) ) { this.$entityId.text( mw.msg( 'parentheses', this.options.entityId ) ); } else { this.$entityId.empty(); @@ -128,9 +124,9 @@ this.element[labelText ? 'removeClass' : 'addClass']( 'wb-empty' ); - if( !this._isInEditMode ) { + if( !this.isInEditMode() ) { this.$text.text( labelText || mw.msg( 'wikibase-label-empty' ) ); - return; + return deferred.resolve().promise(); } var $input = $( '<input />' ); @@ -157,84 +153,41 @@ } this.$text.empty().append( $input ); + + return deferred.resolve().promise(); }, /** - * Starts the widget's edit mode. + * @inheritdoc + * @protected */ - startEditing: function() { - if( this._isInEditMode ) { - return; - } - this.element.addClass( 'wb-edit' ); - this._isInEditMode = true; - this._draw(); - this._trigger( 'afterstartediting' ); - }, - - /** - * Stops the widget's edit mode. - * - * @param {boolean} dropValue - */ - stopEditing: function( dropValue ) { - var self = this; - - if( !this._isInEditMode ) { - return; - } else if( ( !this.isValid() || this.isInitialValue() ) && !dropValue ) { - return; - } else if( dropValue ) { - this._afterStopEditing( dropValue ); - return; - } - - this.disable(); - - this._trigger( 'stopediting', null, [dropValue] ); + _save: function() { + var deferred = $.Deferred(); this.options.labelsChanger.setLabel( this.value() ) .done( function( label ) { - self.enable(); - self._afterStopEditing( dropValue ); + deferred.resolve(); } ) - .fail( function( error ) { - self.setError( error ); - self.enable(); - } ); + .fail( deferred.reject ); + + return deferred.promise(); }, /** - * Cancels the widget's edit mode. - */ - cancelEditing: function() { - this.stopEditing( true ); - }, - - /** - * Callback tearing down edit mode. - * - * @param {boolean} dropValue + * @inheritdoc + * @protected */ _afterStopEditing: function( dropValue ) { - if( !dropValue ) { - this.options.value = this.value(); - } else if( this.options.value.getText() === '' ) { + if( dropValue && this.options.value.getText() === '' ) { this.$text.children( 'input' ).val( '' ); } - - this.element.removeClass( 'wb-edit' ); - this._isInEditMode = false; - this._draw(); - - this._trigger( 'afterstopediting', null, [dropValue] ); + return PARENT.prototype._afterStopEditing.call( this, dropValue ); }, /** * @return {boolean} */ isValid: function() { - // Function is required by edittoolbar definition. return true; }, @@ -243,25 +196,6 @@ */ isInitialValue: function() { return this.value().equals( this.options.value ); - }, - - /** - * Toggles error state. - * - * @param {Error} error - */ - setError: function( error ) { - if( error ) { - this.element.addClass( 'wb-error' ); - this._trigger( 'toggleerror', null, [error] ); - } else { - this.removeError(); - this._trigger( 'toggleerror' ); - } - }, - - removeError: function() { - this.element.removeClass( 'wb-error' ); }, /** @@ -274,7 +208,7 @@ var response = PARENT.prototype._setOption.call( this, key, value ); - if( key === 'disabled' && this._isInEditMode ) { + if( key === 'disabled' && this.isInEditMode() ) { this.$text.children( 'input' ).prop( 'disabled', value ); } @@ -293,7 +227,7 @@ return; } - if( !this._isInEditMode ) { + if( !this.isInEditMode() ) { return this.option( 'value' ); } @@ -307,7 +241,7 @@ * @see jQuery.ui.TemplatedWidget.focus */ focus: function() { - if( this._isInEditMode ) { + if( this.isInEditMode() ) { this.$text.children( 'input' ).focus(); } else { this.element.focus(); diff --git a/lib/resources/jquery.wikibase/resources.php b/lib/resources/jquery.wikibase/resources.php index e17ae2d..d55b703 100644 --- a/lib/resources/jquery.wikibase/resources.php +++ b/lib/resources/jquery.wikibase/resources.php @@ -262,7 +262,7 @@ 'themes/default/jquery.wikibase.labelview.css', ), 'dependencies' => array( - 'jquery.ui.TemplatedWidget', + 'jquery.ui.EditableTemplatedWidget', 'jquery.util.getDirectionality', 'wikibase.datamodel.Term', 'wikibase.getLanguageNameByCode', -- To view, visit https://gerrit.wikimedia.org/r/189725 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I0f97b8bb067934613e7ed24c7e8fbc02b9b966ed Gerrit-PatchSet: 3 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Henning Snater <henning.sna...@wikimedia.de> Gerrit-Reviewer: Adrian Lang <adrian.he...@wikimedia.de> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits