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

Reply via email to