Adrian Lang has uploaded a new change for review.

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

Change subject: Clean up statementview
......................................................................

Clean up statementview

* Switch from using a reference to the main snak jQuery DOM element to having a
reference to the `snakview` jQuery UI widget
* Directly access `options` object
* Remove usage of slow pseudo selector in test
* Correctly wait for promise to resolve after `startEditing` in test
* Remove unused resource dependency

Change-Id: I22f88df7589f474b9ec8f2cd75f8ef270d4dd9c7
---
M view/resources/jquery/wikibase/jquery.wikibase.statementview.js
M view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
M view/tests/qunit/jquery/wikibase/resources.php
3 files changed, 53 insertions(+), 43 deletions(-)


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

diff --git a/view/resources/jquery/wikibase/jquery.wikibase.statementview.js 
b/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
index bc37bfd..c592246 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
@@ -119,6 +119,12 @@
        },
 
        /**
+        * @property {jQuery.wikibase.snakview}
+        * @private
+        */
+       _mainSnakSnakView: null,
+
+       /**
         * @property {jQuery.wikibase.statementview.RankSelector}
         * @private
         */
@@ -196,6 +202,7 @@
         */
        _createMainSnak: function( snak ) {
                if ( this.$mainSnak.data( 'snakview' ) ) {
+                       this._mainSnakSnakView = this.$mainSnak.data( 
'snakview' );
                        return;
                }
 
@@ -210,7 +217,7 @@
                        event.stopPropagation();
                } );
 
-               this.$mainSnak.snakview( {
+               this._mainSnakSnakView = this.$mainSnak.snakview( {
                        value: snak || undefined,
                        locked: this.options.locked.mainSnak,
                        autoStartEditing: false,
@@ -314,30 +321,30 @@
                        return;
                }
 
+               var lia = new $.wikibase.listview.ListItemAdapter( {
+                       listItemWidget: $.wikibase.referenceview,
+                       newItemOptionsFn: function( value ) {
+                               return {
+                                       value: value || null,
+                                       statementGuid: self.options.value
+                                               ? 
self.options.value.getClaim().getGuid()
+                                               : null,
+                                       dataTypeStore: 
self.options.dataTypeStore,
+                                       entityIdHtmlFormatter: 
self.options.entityIdHtmlFormatter,
+                                       entityIdPlainFormatter: 
self.options.entityIdPlainFormatter,
+                                       entityStore: self.options.entityStore,
+                                       valueViewBuilder: 
self.options.valueViewBuilder,
+                                       referencesChanger: 
self.options.referencesChanger
+                               };
+                       }
+               } );
+
                $listview.listview( {
-                       listItemAdapter: new 
$.wikibase.listview.ListItemAdapter( {
-                               listItemWidget: $.wikibase.referenceview,
-                               newItemOptionsFn: function( value ) {
-                                       return {
-                                               value: value || null,
-                                               statementGuid: 
self.options.value
-                                                       ? 
self.options.value.getClaim().getGuid()
-                                                       : null,
-                                               dataTypeStore: 
self.options.dataTypeStore,
-                                               entityIdHtmlFormatter: 
self.options.entityIdHtmlFormatter,
-                                               entityIdPlainFormatter: 
self.options.entityIdPlainFormatter,
-                                               entityStore: 
self.options.entityStore,
-                                               valueViewBuilder: 
self.options.valueViewBuilder,
-                                               referencesChanger: 
self.options.referencesChanger
-                                       };
-                               }
-                       } ),
+                       listItemAdapter: lia,
                        value: references
                } );
 
                this._referencesListview = $listview.data( 'listview' );
-
-               var lia = this._referencesListview.listItemAdapter();
 
                $listview
                .on( 'listviewitemadded listviewitemremoved', function( event, 
value, $li ) {
@@ -427,7 +434,7 @@
                this._rankSelector.destroy();
                this.$rankSelector.off( '.' + this.widgetName );
 
-               this.$mainSnak.snakview( 'destroy' );
+               this._mainSnakSnakView.destroy();
                this.$mainSnak.off( '.' + this.widgetName );
 
                this._destroyQualifiersListView();
@@ -473,7 +480,7 @@
 
                this._createMainSnak( this.options.value
                                ? this.options.value.getClaim().getMainSnak()
-                               : this.option( 'predefined' ).mainSnak || null
+                               : this.options.predefined.mainSnak || null
                );
 
                if ( this.isInEditMode()
@@ -536,7 +543,7 @@
                        }
                }
 
-               return this.$mainSnak.data( 'snakview' ).isInitialValue();
+               return this._mainSnakSnakView.isInitialValue();
        },
 
        /**
@@ -547,7 +554,7 @@
         * @return {wikibase.datamodel.Statement|null}
         */
        _instantiateStatement: function( guid ) {
-               var mainSnak = this.$mainSnak.data( 'snakview' ).snak();
+               var mainSnak = this._mainSnakSnakView.snak();
 
                if ( !mainSnak ) {
                        return null;
@@ -693,7 +700,7 @@
                        .fail( deferred.reject );
                } );
 
-               this.$mainSnak.data( 'snakview' ).startEditing();
+               this._mainSnakSnakView.startEditing();
 
                return deferred.promise();
        },
@@ -703,8 +710,8 @@
         * @protected
         */
        _afterStopEditing: function( dropValue ) {
-               if ( this.$mainSnak.data( 'snakview' ) ) {
-                       this.$mainSnak.data( 'snakview' ).stopEditing( 
dropValue );
+               if ( this._mainSnakSnakView ) {
+                       this._mainSnakSnakView.stopEditing( dropValue );
                }
                this._stopEditingQualifiers( dropValue );
                this._rankSelector.stopEditing( dropValue );
@@ -773,7 +780,7 @@
                        throw new Error( 'Unable to instantiate Statement' );
                }
 
-               return this.option( 'claimsChanger' ).setStatement( statement )
+               return this.options.claimsChanger.setStatement( statement )
                .done( function( savedStatement ) {
                        // Update model of represented Statement:
                        self.options.value = savedStatement;
@@ -786,7 +793,7 @@
        isEmpty: function() {
                return false;
                // TODO: Supposed to do at least...
-               // this.$mainSnak.data( 'snakview' ).isEmpty(); (does not exist 
at the moment of writing)
+               // this._mainSnakSnakView.isEmpty(); (does not exist at the 
moment of writing)
        },
 
        /**
@@ -796,7 +803,7 @@
                var snaklistviews,
                        i;
 
-               if ( this.$mainSnak.data( 'snakview' ) && !this.$mainSnak.data( 
'snakview' ).isValid() ) {
+               if ( this._mainSnakSnakView && 
!this._mainSnakSnakView.isValid() ) {
                        return false;
                }
 
@@ -829,7 +836,7 @@
                var response = PARENT.prototype._setOption.apply( this, 
arguments );
 
                if ( key === 'disabled' ) {
-                       this.$mainSnak.data( 'snakview' ).option( key, value );
+                       this._mainSnakSnakView.option( key, value );
                        if ( this._qualifiers ) {
                                this._qualifiers.option( key, value );
                        }
@@ -844,7 +851,7 @@
         * @inheritdoc
         */
        focus: function() {
-               this.$mainSnak.data( 'snakview' ).focus();
+               this._mainSnakSnakView.focus();
        }
 } );
 
diff --git 
a/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js 
b/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
index 15a5e64..561bd09 100644
--- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
+++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
@@ -145,11 +145,11 @@
                        ),
                        referencesChanger: referencesChanger
                } ),
-               statementview = $statementview.data( 'statementview' );
+               statementview = $statementview.data( 'statementview' ),
+               referenceslistview = statementview._referencesListview,
+               referenceview = 
referenceslistview.listItemAdapter().liInstance( $( 
referenceslistview.items()[0] ) );
 
-       statementview.remove(
-               $statementview.find( ':wikibase-referenceview' ).data( 
'referenceview' )
-       );
+       statementview.remove( referenceview );
        sinon.assert.calledWith( referencesChanger.removeReference, 'guid', 
reference );
 } );
 
@@ -216,14 +216,18 @@
                } ),
                statementview = $statementview.data( 'statementview' );
 
-       statementview.startEditing();
-
-       statementview.$mainSnak.find( ':wikibase-entityselector' ).data( 
'wikibase-entityselector' )._select( { id: 'P1' } );
-       statementview.$mainSnak.find( ':wikibase-snaktypeselector' ).data( 
'snaktypeselector' ).snakType( 'novalue' );
-
        QUnit.stop();
+       statementview.startEditing().then( function() {
+               QUnit.start();
+               assert.ok( statementview.isInEditMode(), 'should be in edit 
mode after starting editing' );
 
-       statementview.stopEditing( false ).then( function() {
+               // Change main snak
+               statementview.$mainSnak.find( ':wikibase-entityselector' 
).data( 'wikibase-entityselector' )._select( { id: 'P1' } );
+               statementview.$mainSnak.find( ':wikibase-snaktypeselector' 
).data( 'snaktypeselector' ).snakType( 'novalue' );
+
+               QUnit.stop();
+               return statementview.stopEditing( false );
+       } ).then( function() {
                QUnit.start();
                sinon.assert.calledWith(
                        setStatement,
diff --git a/view/tests/qunit/jquery/wikibase/resources.php 
b/view/tests/qunit/jquery/wikibase/resources.php
index 8c0acdb..9a426ae 100644
--- a/view/tests/qunit/jquery/wikibase/resources.php
+++ b/view/tests/qunit/jquery/wikibase/resources.php
@@ -290,7 +290,6 @@
                                'test.sinonjs',
                                'wikibase.datamodel.Claim',
                                'wikibase.datamodel.PropertyNoValueSnak',
-                               'wikibase.datamodel.PropertyValueSnak',
                                'wikibase.datamodel.Reference',
                                'wikibase.datamodel.ReferenceList',
                                'wikibase.datamodel.Statement',

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

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

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

Reply via email to