jenkins-bot has submitted this change and it was merged. Change subject: Clean up EditableTemplatedWidget and implementations ......................................................................
Clean up EditableTemplatedWidget and implementations Change-Id: Ie236a8d066555ab62965490cdbba02643402123b --- M repo/resources/wikibase.ui.entityViewInit.js M view/resources/jquery/ui/jquery.ui.EditableTemplatedWidget.js M view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js M view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js M view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js M view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js M view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js M view/resources/jquery/wikibase/jquery.wikibase.labelview.js M view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js M view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js M view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js M view/resources/jquery/wikibase/jquery.wikibase.statementview.js M view/resources/jquery/wikibase/resources.php M view/resources/jquery/wikibase/toolbar/controller/resources.php M view/tests/qunit/jquery/ui/jquery.ui.EditableTemplatedWidget.tests.js M view/tests/qunit/jquery/wikibase/jquery.wikibase.aliasesview.tests.js M view/tests/qunit/jquery/wikibase/jquery.wikibase.descriptionview.tests.js M view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js M view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.tests.js M view/tests/qunit/jquery/wikibase/jquery.wikibase.labelview.tests.js M view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinklistview.tests.js 21 files changed, 51 insertions(+), 759 deletions(-) Approvals: Jonas Kress (WMDE): Looks good to me, approved Thiemo Mättig (WMDE): Looks good to me, but someone else must approve jenkins-bot: Verified diff --git a/repo/resources/wikibase.ui.entityViewInit.js b/repo/resources/wikibase.ui.entityViewInit.js index 529aff7..c91611e 100644 --- a/repo/resources/wikibase.ui.entityViewInit.js +++ b/repo/resources/wikibase.ui.entityViewInit.js @@ -31,8 +31,6 @@ 'statementview-referenceview', 'referenceview-snakview' ], - edittoolbar: [ - ], removetoolbar: [ 'referenceview', 'statementview-snakview', diff --git a/view/resources/jquery/ui/jquery.ui.EditableTemplatedWidget.js b/view/resources/jquery/ui/jquery.ui.EditableTemplatedWidget.js index f8e8adc..c95789e 100644 --- a/view/resources/jquery/ui/jquery.ui.EditableTemplatedWidget.js +++ b/view/resources/jquery/ui/jquery.ui.EditableTemplatedWidget.js @@ -1,6 +1,7 @@ /** * @license GPL-2.0+ * @author H. Snater < mediaw...@snater.com > + * @author Adrian Heine <adrian.he...@wikimedia.de> */ ( function( $ ) { 'use strict'; @@ -117,49 +118,14 @@ * - {Error} */ stopEditing: function( dropValue ) { - var self = this, - deferred = $.Deferred(); - - if ( !this.isInEditMode() || !this.isValid() && !dropValue ) { - return deferred.resolve().promise(); + var done = $.Deferred().resolve().promise(); + if ( !this.isInEditMode() ) { + return done; } - this._trigger( 'stopediting', null, [dropValue] ); - - this.disable(); - - if ( dropValue ) { - return this._afterStopEditing( dropValue ); - } else { - this._save() - .done( function( savedValue ) { - self.options.value = savedValue || self.value(); - self._afterStopEditing( dropValue ) - .done( function() { - deferred.resolve( dropValue ); - } ) - .fail( function( error ) { - deferred.reject( error ); - } ); - } ) - .fail( function( error ) { - self.setError( error ); - deferred.reject( error ); - self.enable(); - } ); - } - - return deferred.promise(); + this._afterStopEditing( dropValue ); + return done; }, - - /** - * @return {Object} jQuery.Promise - * Resolved parameters: - * - {*} [value] the data model object returned by save API call - * Rejected parameters: - * - {Error} - */ - _save: util.abstractMember, /** * @param {boolean} dropValue @@ -178,7 +144,7 @@ .done( function() { self.enable(); self._trigger( 'afterstopediting', null, [dropValue] ); - deferred.resolve( dropValue ); + deferred.resolve(); } ) .fail( function( error ) { self.setError( error ); @@ -186,13 +152,6 @@ } ); return deferred.promise(); - }, - - /** - * Cancels the widget's edit mode. - */ - cancelEditing: function() { - this.stopEditing( true ); }, /** @@ -211,28 +170,6 @@ * @return {*|undefined} */ value: util.abstractMember, - - /** - * Returns whether the widget features any value (may it be valid or invalid). - * - * @return {boolean} - */ - isEmpty: util.abstractMember, - - /** - * Returns whether the widget's value is valid. - * - * @return {boolean} - */ - isValid: util.abstractMember, - - /** - * Returns whether the widget's value is the widget's value from before starting edit mode. - * (Always returns "true" in non-edit mode.) - * - * @return {boolean} - */ - isInitialValue: util.abstractMember, /** * Toggles error state. diff --git a/view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js b/view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js index 94fd452..df8a473 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.aliasesview.js @@ -162,32 +162,6 @@ /** * @inheritdoc * @protected - */ - _save: function() { - return $.Deferred().resolve().promise(); - }, - - /** - * @inheritdoc - */ - isValid: function() { - return true; - }, - - /** - * @inheritdoc - */ - isInitialValue: function() { - if ( !this.isInEditMode() ) { - return true; - } - - return this.value().equals( this.options.value ); - }, - - /** - * @inheritdoc - * @protected * * @throws {Error} when trying to set the widget's value to something other than a * `wikibase.datamodel.MultiTerm` instance. diff --git a/view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js b/view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js index 2c47efd..2e2f271 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.descriptionview.js @@ -5,12 +5,12 @@ ( function( $, mw, wb ) { 'use strict'; - var PARENT = $.ui.TemplatedWidget; + var PARENT = $.ui.EditableTemplatedWidget; /** * Manages a description. * @since 0.5 - * @extends jQuery.ui.TemplatedWidget + * @extends jQuery.ui.EditableTemplatedWidget * * @option {wikibase.datamodel.Term} value * @@ -34,11 +34,6 @@ value: null, inputNodeName: 'TEXTAREA' }, - - /** - * @type {boolean} - */ - _isInEditMode: false, /** * @see jQuery.ui.TemplatedWidget._create @@ -74,7 +69,7 @@ PARENT.prototype._create.call( this ); if ( this.$text.text() === '' ) { - this._draw(); + this.draw(); } }, @@ -82,14 +77,14 @@ * @see jQuery.ui.TemplatedWidget.destroy */ destroy: function() { - if ( this._isInEditMode ) { + if ( this.isInEditMode() ) { var self = this; this.element.one( this.widgetEventPrefix + 'afterstopediting', function( event ) { PARENT.prototype.destroy.call( self ); } ); - this.cancelEditing(); + this.stopEditing( true ); } else { PARENT.prototype.destroy.call( this ); } @@ -98,7 +93,8 @@ /** * Main draw routine. */ - _draw: function() { + draw: function() { + var done = $.Deferred().resolve().promise(); var self = this, languageCode = this.options.value.getLanguageCode(), descriptionText = this.options.value.getText(); @@ -109,7 +105,7 @@ this.element[descriptionText ? 'removeClass' : 'addClass']( 'wb-empty' ); - if ( !this._isInEditMode && !descriptionText ) { + if ( !this.isInEditMode() && !descriptionText ) { this.$text.text( mw.msg( 'wikibase-description-empty' ) ); // Apply lang and dir of UI language // instead language of that row @@ -117,16 +113,16 @@ this.element .attr( 'lang', userLanguage ) .attr( 'dir', $.util.getDirectionality( userLanguage ) ); - return; + return done; } this.element .attr( 'lang', languageCode ) .attr( 'dir', $.util.getDirectionality( languageCode ) ); - if ( !this._isInEditMode ) { + if ( !this.isInEditMode() ) { this.$text.text( descriptionText ); - return; + return done; } var $input = $( document.createElement( this.options.inputNodeName ) ); @@ -162,106 +158,7 @@ } this.$text.empty().append( $input ); - }, - - /** - * Starts the widget's edit mode. - */ - 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 ) { - if ( !this._isInEditMode ) { - return; - } else if ( !this.isValid() && !dropValue ) { - return; - } else if ( dropValue ) { - this._afterStopEditing( dropValue ); - return; - } - - this.disable(); - - this._trigger( 'stopediting', null, [dropValue] ); - - this.enable(); - this._afterStopEditing( dropValue ); - }, - - /** - * Cancels the widget's edit mode. - */ - cancelEditing: function() { - this.stopEditing( true ); - }, - - /** - * Callback tearing down edit mode. - * - * @param {boolean} dropValue - */ - _afterStopEditing: function( dropValue ) { - if ( !dropValue ) { - this.options.value = this.value(); - } else if ( this.options.value.getText() === '' ) { - this.$text.children( '.' + this.widgetFullName + '-input' ).val( '' ); - } - - this.element.removeClass( 'wb-edit' ); - this._isInEditMode = false; - this._draw(); - - this._trigger( 'afterstopediting', null, [dropValue] ); - }, - - /** - * @return {boolean} - */ - isValid: function() { - // Function is required by edittoolbar definition. - return true; - }, - - /** - * @return {boolean} - */ - isInitialValue: function() { - if ( !this._isInEditMode ) { - return true; - } - - 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' ); + return done; }, /** @@ -274,7 +171,7 @@ var response = PARENT.prototype._setOption.call( this, key, value ); - if ( key === 'disabled' && this._isInEditMode ) { + if ( key === 'disabled' && this.isInEditMode() ) { this.$text.children( '.' + this.widgetFullName + '-input' ).prop( 'disabled', value ); } @@ -292,7 +189,7 @@ return this.option( 'value', value ); } - if ( !this._isInEditMode ) { + if ( !this.isInEditMode() ) { return this.options.value; } @@ -306,7 +203,7 @@ * @see jQuery.ui.TemplatedWidget.focus */ focus: function() { - if ( this._isInEditMode ) { + if ( this.isInEditMode() ) { this.$text.children( '.' + this.widgetFullName + '-input' ).focus(); } else { this.element.focus(); diff --git a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js index 2e44dc4..d23e8d7 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js @@ -377,44 +377,6 @@ return !!this.$listview.data( 'listview' ).items().length; }, - /** - * @return {boolean} - */ - isValid: function() { - if ( !this._isInEditMode ) { - return true; - } - - var listview = this.$listview.data( 'listview' ), - lia = listview.listItemAdapter(), - isValid = true; - - listview.items().each( function() { - var entitytermsforlanguageview = lia.liInstance( $( this ) ); - isValid = entitytermsforlanguageview.isValid(); - return isValid; - } ); - - return isValid; - }, - - /** - * @return {boolean} - */ - isInitialValue: function() { - var listview = this.$listview.data( 'listview' ), - lia = listview.listItemAdapter(), - isInitialValue = true; - - listview.items().each( function() { - var entitytermsforlanguageview = lia.liInstance( $( this ) ); - isInitialValue = entitytermsforlanguageview.isInitialValue(); - return isInitialValue; - } ); - - return isInitialValue; - }, - startEditing: function() { if ( this._isInEditMode ) { return; @@ -437,7 +399,7 @@ stopEditing: function( dropValue ) { var deferred = $.Deferred(); - if ( !this._isInEditMode || !this.isValid() && !dropValue ) { + if ( !this._isInEditMode ) { return deferred.resolve().promise(); } diff --git a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js index bc90489..630d829 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.js @@ -5,7 +5,7 @@ ( function( mw, wb, $ ) { 'use strict'; - var PARENT = $.ui.TemplatedWidget; + var PARENT = $.ui.EditableTemplatedWidget; /** * Displays and allows editing label and description in a specific language. @@ -84,11 +84,6 @@ $aliasesview: null, /** - * @type {boolean} - */ - _isInEditMode: false, - - /** * @see jQuery.ui.TemplatedWidget._create */ _create: function() { @@ -119,12 +114,12 @@ PARENT.prototype.destroy.call( self ); } - if ( this._isInEditMode ) { + if ( this.isInEditMode() ) { this.element.one( this.widgetEventPrefix + 'afterstopediting', function( event ) { degrade(); } ); - this.cancelEditing(); + this.stopEditing( true ); } else { degrade(); } @@ -181,85 +176,32 @@ } ); }, - /** - * @return {boolean} - */ - isValid: function() { - return this.$labelview.data( 'labelview' ).isValid() - && this.$descriptionview.data( 'descriptionview' ).isValid() - && this.$aliasesview.data( 'aliasesview' ).isValid(); - }, - - /** - * @return {boolean} - */ - isInitialValue: function() { - return this.$labelview.data( 'labelview' ).isInitialValue() - && this.$descriptionview.data( 'descriptionview' ).isInitialValue() - && this.$aliasesview.data( 'aliasesview' ).isInitialValue(); + draw: function() { + return $.Deferred().resolve().promise(); }, /** * Puts the widget into edit mode. */ startEditing: function() { - if ( this._isInEditMode ) { - return; + if ( this.isInEditMode() ) { + return $.Deferred().resolve().promise(); } - - this._isInEditMode = true; - this.element.addClass( 'wb-edit' ); this.$labelview.data( 'labelview' ).startEditing(); this.$descriptionview.data( 'descriptionview' ).startEditing(); this.$aliasesview.data( 'aliasesview' ).startEditing(); - - this._trigger( 'afterstartediting' ); - }, - - /** - * Stops the widget's edit mode. - * - * @param {boolean} [dropValue] - */ - stopEditing: function( dropValue ) { - if ( !this._isInEditMode || !this.isValid() && !dropValue ) { - return; - } - - this._trigger( 'stopediting', null, [dropValue] ); - - this.disable(); - - var labelview = this.$labelview.data( 'labelview' ), - descriptionview = this.$descriptionview.data( 'descriptionview' ), - aliasesview = this.$aliasesview.data( 'aliasesview' ); - - labelview.stopEditing( dropValue ); - descriptionview.stopEditing( dropValue ); - aliasesview.stopEditing( dropValue ); - - this._afterStopEditing( dropValue ); + return PARENT.prototype.startEditing.call( this ); }, /** * @param {boolean} [dropValue] */ _afterStopEditing: function( dropValue ) { - if ( !dropValue ) { - this.options.value = this.value(); - } - this._isInEditMode = false; - this.enable(); - this.element.removeClass( 'wb-edit' ); - this._trigger( 'afterstopediting', null, [dropValue] ); - }, - - /** - * Cancels editing. - */ - cancelEditing: function() { - this.stopEditing( true ); + this.$labelview.data( 'labelview' ).stopEditing( dropValue ); + this.$descriptionview.data( 'descriptionview' ).stopEditing( dropValue ); + this.$aliasesview.data( 'aliasesview' ).stopEditing( dropValue ); + return PARENT.prototype._afterStopEditing.call( this, dropValue ); }, /** @@ -345,23 +287,8 @@ this.$labelview.data( 'labelview' ).focus(); }, - /** - * Applies/Removes 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' ); + PARENT.prototype.removeError.call( this ); this.$labelview.data( 'labelview' ).removeError(); this.$descriptionview.data( 'descriptionview' ).removeError(); diff --git a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js index e8c2bf4..43946ff 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js @@ -344,38 +344,12 @@ }, /** - * @see jQuery.ui.EditableTemplatedWidget.isValid - * @return {boolean} - */ - isValid: function() { - return this._getEntitytermsforlanguagelistview().isValid(); - }, - - /** - * @see jQuery.ui.EditableTemplatedWidget.isInitialValue - * @return {boolean} - */ - isInitialValue: function() { - return this._getEntitytermsforlanguagelistview().isInitialValue(); - }, - - /** * @inheritdoc */ startEditing: function() { this._getEntitytermsforlanguagelistview().startEditing(); return PARENT.prototype.startEditing.call( this ); - }, - - /** - * @inheritdoc - */ - stopEditing: function( dropValue ) { - var deferred = $.Deferred(); - this._trigger( 'stopediting', null, [dropValue] ); - this._afterStopEditing( dropValue ); - return deferred.resolve( dropValue ).promise(); }, /** @@ -416,13 +390,6 @@ } return this._getEntitytermsforlanguagelistview().value(); - }, - - /** - * @inheritdoc - */ - isEmpty: function() { - return this._getEntitytermsforlanguagelistview().isEmpty(); }, /** diff --git a/view/resources/jquery/wikibase/jquery.wikibase.labelview.js b/view/resources/jquery/wikibase/jquery.wikibase.labelview.js index 0a4208d..c84f2c5 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.labelview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.labelview.js @@ -90,7 +90,7 @@ PARENT.prototype.destroy.call( self ); } ); - this.cancelEditing(); + this.stopEditing( true ); } else { PARENT.prototype.destroy.call( this ); } @@ -172,38 +172,11 @@ * @inheritdoc * @protected */ - _save: function() { - var deferred = $.Deferred(); - return deferred.resolve().promise(); - }, - - /** - * @inheritdoc - * @protected - */ _afterStopEditing: function( dropValue ) { if ( dropValue && this.options.value.getText() === '' ) { this.$text.children( '.' + this.widgetFullName + '-input' ).val( '' ); } return PARENT.prototype._afterStopEditing.call( this, dropValue ); - }, - - /** - * @inheritdoc - */ - isValid: function() { - return true; - }, - - /** - * @inheritdoc - */ - isInitialValue: function() { - if ( !this.isInEditMode() ) { - return true; - } - - return this.value().equals( this.options.value ); }, /** diff --git a/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js b/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js index f4d8336..f8078c9 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.sitelinkgroupview.js @@ -211,21 +211,6 @@ } ); }, - _save: function() { - var deferred = $.Deferred(); - return deferred.resolve().promise(); - }, - - stopEditing: function( dropValue ) { - var done = $.Deferred().resolve( dropValue ).promise(); - if ( !this.isInEditMode() ) { - return done; - } - this._trigger( 'stopediting', null, [dropValue] ); - this._afterStopEditing( dropValue ); - return done; - }, - /** * @see jQuery.ui.EditableTemplatedWidget._afterStopEditing */ diff --git a/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js b/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js index d038079..9afda53 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js @@ -309,65 +309,6 @@ }, /** - * @see jQuery.ui.EditableTemplatedWidget.isEmpty - * @return {boolean} - */ - isEmpty: function() { - return !this.$listview.data( 'listview' ).items().length; - }, - - /** - * @see jQuery.ui.EditableTemplatedWidget.isValid - * @return {boolean} - */ - isValid: function() { - var listview = this.$listview.data( 'listview' ), - lia = listview.listItemAdapter(), - isValid = true; - - listview.items().each( function() { - // Site link views are regarded valid if they have a valid site. Invalid site links - // (without a page name) and empty values (with no site id and page name input) are - // supposed to be stripped when querying this widget for its value. - // Put together, we consider sitelinkviews invalid only when they have something in - // the siteId input field which does not resolve to a valid siteId and which is not - // empty. - var sitelinkview = lia.liInstance( $( this ) ); - isValid = sitelinkview.value() !== null - || sitelinkview.isEmpty() - // Previously existing values do always feature a valid site id: - || Boolean( sitelinkview.option( 'value' ) ); - return isValid; - } ); - - return isValid; - }, - - /** - * @see jQuery.ui.EditableTemplatedWidget.isInitialValue - * @return {boolean} - */ - isInitialValue: function() { - var listview = this.$listview.data( 'listview' ), - lia = listview.listItemAdapter(), - $nonEmptyItems = listview.nonEmptyItems(), - isInitialValue = true; - - if ( $nonEmptyItems.length !== this.options.value.length ) { - return false; - } - - // Ignore empty values. - $nonEmptyItems.each( function() { - var sitelinkview = lia.liInstance( $( this ) ); - isInitialValue = sitelinkview.value().equals( sitelinkview.option( 'value' ) ); - return isInitialValue; - } ); - - return isInitialValue; - }, - - /** * @see jQuery.ui.EditableTemplatedWidget.startEditing */ startEditing: function() { @@ -429,29 +370,11 @@ * @see jQuery.ui.EditableTemplatedWidget.stopEditing */ stopEditing: function( dropValue ) { - var done = $.Deferred().resolve( dropValue ).promise(); - if ( !this.isInEditMode() ) { - return done; - } - if ( dropValue ) { - this.$listview.data( 'listview' ).value( this.options.value ); - this._refreshCounter(); - } else { + if ( !dropValue ) { this._removeIncompleteSiteLinks(); } - this._trigger( 'stopediting', null, [dropValue] ); - this._afterStopEditing( dropValue ); - return done; - }, - - /** - * @see jQuery.ui.EditableTemplatedWidget._save - */ - _save: function() { - var deferred = $.Deferred(); - - return deferred.resolve().promise(); + return PARENT.prototype.stopEditing.call( this, dropValue ); }, /** @@ -462,7 +385,6 @@ return PARENT.prototype._afterStopEditing.call( this, dropValue ) .done( function() { - self.$listview.data( 'listview' ).value( self.options.value ); self._refreshCounter(); self._eventSingletonManager.unregister( self, @@ -477,18 +399,6 @@ listview.items().not( listview.nonEmptyItems() ).each( function() { listview.removeItem( $( this ) ); - } ); - }, - - _resetEditMode: function() { - this.enable(); - - var listview = this.$listview.data( 'listview' ), - lia = listview.listItemAdapter(); - - listview.items().each( function() { - var sitelinkview = lia.liInstance( $( this ) ); - sitelinkview.startEditing(); } ); }, @@ -525,7 +435,7 @@ return $foundNode || $nodes.first(); } - if ( !this.isValid() ) { + if ( this.value() === null ) { $items = $items.filter( function() { var sitelinkview = lia.liInstance( $( this ) ); return sitelinkview.value() === null; diff --git a/view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js b/view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js index 8e5b894..65af667 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.statementview.RankSelector.js @@ -316,25 +316,11 @@ * @inheritdoc */ stopEditing: function( dropValue ) { - if ( dropValue ) { - this._setRank( this.options.value ); - } // Hide the menu the rank selector currently references to: if ( $menu && $menu.data( this.widgetName ) === this ) { $menu.hide(); } - - var deferred = $.Deferred(); - this._trigger( 'stopediting', null, [dropValue] ); - this._afterStopEditing( dropValue ); - return deferred.resolve( dropValue ).promise(); - }, - - /** - * @inheritdoc - */ - isEmpty: function() { - return false; + return PARENT.prototype.stopEditing.call( this, dropValue ); } } ); diff --git a/view/resources/jquery/wikibase/jquery.wikibase.statementview.js b/view/resources/jquery/wikibase/jquery.wikibase.statementview.js index 02498a9..91ac71d 100644 --- a/view/resources/jquery/wikibase/jquery.wikibase.statementview.js +++ b/view/resources/jquery/wikibase/jquery.wikibase.statementview.js @@ -645,16 +645,6 @@ } }, - stopEditing: function( dropValue ) { - var deferred = $.Deferred(); - - this._trigger( 'stopediting', null, [dropValue] ); - - this._afterStopEditing( dropValue ); - - return deferred.resolve( dropValue ).promise(); - }, - /** * @inheritdoc * @protected @@ -716,15 +706,6 @@ // Refill the qualifier listview with the initial (or new initial) qualifiers: this._createQualifiersListview( qualifiers ); } - }, - - /** - * @inheritdoc - */ - isEmpty: function() { - return false; - // TODO: Supposed to do at least... - // this._mainSnakSnakView.isEmpty(); (does not exist at the moment of writing) }, /** diff --git a/view/resources/jquery/wikibase/resources.php b/view/resources/jquery/wikibase/resources.php index a584230..ca93844 100644 --- a/view/resources/jquery/wikibase/resources.php +++ b/view/resources/jquery/wikibase/resources.php @@ -107,7 +107,7 @@ 'dependencies' => array( 'jquery.inputautoexpand', 'jquery.ui.core', - 'jquery.ui.TemplatedWidget', + 'jquery.ui.EditableTemplatedWidget', 'jquery.util.getDirectionality', 'wikibase.datamodel.Term', 'wikibase.getLanguageNameByCode', diff --git a/view/resources/jquery/wikibase/toolbar/controller/resources.php b/view/resources/jquery/wikibase/toolbar/controller/resources.php index 76bb7f2..55367f8 100644 --- a/view/resources/jquery/wikibase/toolbar/controller/resources.php +++ b/view/resources/jquery/wikibase/toolbar/controller/resources.php @@ -137,7 +137,6 @@ ), 'dependencies' => array( 'jquery.wikibase.addtoolbar', - 'jquery.wikibase.edittoolbar', 'jquery.wikibase.removetoolbar', ), ), diff --git a/view/tests/qunit/jquery/ui/jquery.ui.EditableTemplatedWidget.tests.js b/view/tests/qunit/jquery/ui/jquery.ui.EditableTemplatedWidget.tests.js index e6d4ff7..d109a76 100644 --- a/view/tests/qunit/jquery/ui/jquery.ui.EditableTemplatedWidget.tests.js +++ b/view/tests/qunit/jquery/ui/jquery.ui.EditableTemplatedWidget.tests.js @@ -11,25 +11,13 @@ _create: function() { this._initialValue = this.options.value; }, - _draw: function() {}, - _save: function() { - return $.Deferred().resolve().promise(); - }, + draw: function() {}, value: function( value ) { if ( value === undefined ) { this.option( 'value', value ); } else { return this.option( 'value' ); } - }, - isEmpty: function() { - return !this.option( 'value' ); - }, - isValid: function() { - return !!this.option( 'value' ); - }, - isInitialValue: function() { - return this.option( 'value' ) === this._initialValue; } } ); }, diff --git a/view/tests/qunit/jquery/wikibase/jquery.wikibase.aliasesview.tests.js b/view/tests/qunit/jquery/wikibase/jquery.wikibase.aliasesview.tests.js index b4c4951..f7bab09 100644 --- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.aliasesview.tests.js +++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.aliasesview.tests.js @@ -200,33 +200,6 @@ $queue.dequeue( 'tests' ); } ); -QUnit.test( 'isInitialValue()', function( assert ) { - assert.expect( 3 ); - var $aliasesview = createAliasesview(), - aliasesview = $aliasesview.data( 'aliasesview' ); - - aliasesview.startEditing(); - - assert.ok( - aliasesview.isInitialValue(), - 'Verified isInitialValue() returning true.' - ); - - aliasesview.$list.data( 'tagadata' ).getTags().first().find( 'input' ).val( 'changed' ); - - assert.ok( - !aliasesview.isInitialValue(), - 'Verified isInitialValue() returning false after changing value.' - ); - - aliasesview.$list.data( 'tagadata' ).getTags().first().find( 'input' ).val( 'a' ); - - assert.ok( - aliasesview.isInitialValue(), - 'Verified isInitialValue() returning true after resetting to initial value.' - ); -} ); - QUnit.test( 'setError()', function( assert ) { assert.expect( 1 ); var $aliasesview = createAliasesview(), diff --git a/view/tests/qunit/jquery/wikibase/jquery.wikibase.descriptionview.tests.js b/view/tests/qunit/jquery/wikibase/jquery.wikibase.descriptionview.tests.js index dce8de3..d565977 100644 --- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.descriptionview.tests.js +++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.descriptionview.tests.js @@ -100,33 +100,6 @@ descriptionview.stopEditing(); } ); -QUnit.test( 'isInitialValue()', function( assert ) { - assert.expect( 3 ); - var $descriptionview = createDescriptionview(), - descriptionview = $descriptionview.data( 'descriptionview' ); - - descriptionview.startEditing(); - - assert.ok( - descriptionview.isInitialValue(), - 'Verified isInitialValue() returning true.' - ); - - descriptionview.$text.find( 'textarea' ).val( 'changed' ); - - assert.ok( - !descriptionview.isInitialValue(), - 'Verified isInitialValue() returning false after changing value.' - ); - - descriptionview.$text.find( 'textarea' ).val( 'test description' ); - - assert.ok( - descriptionview.isInitialValue(), - 'Verified isInitialValue() returning true after resetting to initial value.' - ); -} ); - QUnit.test( 'setError()', function( assert ) { assert.expect( 1 ); var $descriptionview = createDescriptionview(), diff --git a/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js b/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js index cd8a235..274c773 100644 --- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js +++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js @@ -90,45 +90,6 @@ ); } ); -QUnit.test( 'isInitialValue()', function( assert ) { - assert.expect( 3 ); - var view = createEntitytermsforlanguagelistview().data( 'entitytermsforlanguagelistview' ), - listview = view.$listview.data( 'listview' ); - - assert.ok( - view.isInitialValue(), - 'Verified isInitialValue() returning true.' - ); - - var $item = listview.addItem( { - language: 'fa', - label: new wb.datamodel.Term( 'fa', 'fa-label' ), - description: new wb.datamodel.Term( 'fa', 'fa-description' ), - aliases: new wb.datamodel.MultiTerm( 'fa', [] ) - } ); - - assert.ok( - view.isInitialValue(), - 'Verified isInitialValue()still returning false after adding another unchanged value.' - ); - - // Replace the method with a fake that always acts like the value changed. - $item.data( 'entitytermsforlanguageview' ).isInitialValue = function() { - return false; - }; - - assert.ok( - !view.isInitialValue(), - 'Verified isInitialValue() returning false.' - ); -} ); - -// TODO: Add test which is kind of pointless without having a method to save a whole fingerprint -// which could be overwritten by the test mechanism. Instead, the "save" functions of labelview, -// descriptionview and aliasesview for each single entitytermsforlanguage would need to be -// overwritten (see entitytermsforlanguage tests). -// QUnit.test( 'startEditing() & stopEditing()', function( assert ) {} ); - QUnit.test( 'setError()', function( assert ) { assert.expect( 1 ); var $entitytermsforlanguagelistview = createEntitytermsforlanguagelistview(), diff --git a/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.tests.js b/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.tests.js index 19d83f2..a86d66d 100644 --- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.tests.js +++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguageview.tests.js @@ -185,34 +185,6 @@ $queue.dequeue( 'tests' ); } ); -QUnit.test( 'isInitialValue()', function( assert ) { - assert.expect( 3 ); - var $entitytermsforlanguageview = createEntitytermsforlanguageview(), - entitytermsforlanguageview - = $entitytermsforlanguageview.data( 'entitytermsforlanguageview' ); - - entitytermsforlanguageview.startEditing(); - - assert.ok( - entitytermsforlanguageview.isInitialValue(), - 'Verified isInitialValue() returning true.' - ); - - entitytermsforlanguageview.$label.find( 'input, textarea' ).val( 'changed' ); - - assert.ok( - !entitytermsforlanguageview.isInitialValue(), - 'Verified isInitialValue() returning false after changing value.' - ); - - entitytermsforlanguageview.$label.find( 'input, textarea' ).val( 'test label' ); - - assert.ok( - entitytermsforlanguageview.isInitialValue(), - 'Verified isInitialValue() returning true after resetting to initial value.' - ); -} ); - QUnit.test( 'setError()', function( assert ) { assert.expect( 1 ); var $entitytermsforlanguageview = createEntitytermsforlanguageview(), diff --git a/view/tests/qunit/jquery/wikibase/jquery.wikibase.labelview.tests.js b/view/tests/qunit/jquery/wikibase/jquery.wikibase.labelview.tests.js index 2abd95b..3d6ea1a 100644 --- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.labelview.tests.js +++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.labelview.tests.js @@ -100,33 +100,6 @@ labelview.stopEditing(); } ); -QUnit.test( 'isInitialValue()', function( assert ) { - assert.expect( 3 ); - var $labelview = createLabelview(), - labelview = $labelview.data( 'labelview' ); - - labelview.startEditing(); - - assert.ok( - labelview.isInitialValue(), - 'Verified isInitialValue() returning true.' - ); - - labelview.$text.find( 'textarea' ).val( 'changed' ); - - assert.ok( - !labelview.isInitialValue(), - 'Verified isInitialValue() returning false after changing value.' - ); - - labelview.$text.find( 'textarea' ).val( 'test label' ); - - assert.ok( - labelview.isInitialValue(), - 'Verified isInitialValue() returning true after resetting to initial value.' - ); -} ); - QUnit.test( 'setError()', function( assert ) { assert.expect( 1 ); var $labelview = createLabelview(), diff --git a/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinklistview.tests.js b/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinklistview.tests.js index c3e1283..7490aed 100644 --- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinklistview.tests.js +++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.sitelinklistview.tests.js @@ -155,7 +155,7 @@ ); } ); -QUnit.test( 'isValid()', function( assert ) { +QUnit.test( 'value()', function( assert ) { assert.expect( 1 ); var $sitelinklistview = createSitelinklistview( { value: [new wb.datamodel.SiteLink( 'enwiki', 'enwiki-page' )] @@ -163,12 +163,12 @@ sitelinklistview = $sitelinklistview.data( 'sitelinklistview' ); assert.ok( - sitelinklistview.isValid(), - 'Verified isValid() returning TRUE.' + sitelinklistview.value(), + 'Verified value() returning value.' ); } ); -QUnit.test( 'isValid() with invalid sitelinkview', function( assert ) { +QUnit.test( 'value() with invalid sitelinkview', function( assert ) { assert.expect( 1 ); var $sitelinklistview = createSitelinklistview( { value: [] @@ -188,54 +188,10 @@ return false; }; - assert.ok( - !sitelinklistview.isValid(), - 'Verified isValid() returning FALSE.' - ); -} ); - -QUnit.test( 'isInitialValue()', function( assert ) { - assert.expect( 5 ); - var $sitelinklistview = createSitelinklistview( { - value: [new wb.datamodel.SiteLink( 'enwiki', 'enwiki-page' )] - } ), - sitelinklistview = $sitelinklistview.data( 'sitelinklistview' ), - listview = sitelinklistview.$listview.data( 'listview' ); - - assert.ok( - sitelinklistview.isInitialValue(), - 'Verified isInitialValue() returning TRUE.' - ); - - var $sitelinkview = listview.items().first(), - lia = listview.listItemAdapter(), - sitelink = lia.liInstance( $sitelinkview ).value(); - listview.removeItem( $sitelinkview ); - - assert.notOk( - sitelinklistview.isInitialValue(), - 'FALSE after removing an item.' - ); - - listview.addItem( sitelink ); - - assert.ok( - sitelinklistview.isInitialValue(), - 'TRUE after resetting to initial state.' - ); - - $sitelinkview = listview.addItem( new wb.datamodel.SiteLink( 'aawiki', 'aawiki-page' ) ); - - assert.notOk( - sitelinklistview.isInitialValue(), - 'FALSE after adding an item, even if the added item is unchanged.' - ); - - listview.removeItem( $sitelinkview ); - - assert.ok( - sitelinklistview.isInitialValue(), - 'TRUE after resetting to initial state.' + assert.strictEqual( + sitelinklistview.value().length, + 0, + 'Verified value() returning valid values.' ); } ); -- To view, visit https://gerrit.wikimedia.org/r/298754 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ie236a8d066555ab62965490cdbba02643402123b Gerrit-PatchSet: 11 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Adrian Heine <m...@adrianheine.de> Gerrit-Reviewer: Jonas Kress (WMDE) <jonas.kr...@wikimedia.de> 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