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