jenkins-bot has submitted this change and it was merged.
Change subject: Use ViewFactory for building snaklistviews in referenceview
......................................................................
Use ViewFactory for building snaklistviews in referenceview
This change uses the available `ViewFactory` method for building
`ListItemAdapter`s for `snaklistview` widgets. This `ListItemAdapter` is
passed to the `referenceview` so that it can create the widgets without having
to pass them all their dependencies.
This change leaves `listview` as an implementation detail of `referenceview`.
This implementation detail is publicly represented by having to pass in a
`listview.ListItemAdapter`.
It improves separation between the `referenceview` and `snaklistview`,
since the `referenceview` doesn't have to know how to construct a
`snaklistview` anymore. It also allows to inject a different implementation,
for example in tests.
This is a sixth step for T75380.
Change-Id: Ifd76d6238e5fed78916abd25fbb409129e3497e0
---
M view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
M view/resources/jquery/wikibase/resources.php
M view/resources/wikibase/view/ViewFactory.js
M view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
M view/tests/qunit/jquery/wikibase/resources.php
M view/tests/qunit/wikibase/view/ViewFactory.tests.js
6 files changed, 38 insertions(+), 89 deletions(-)
Approvals:
Jonas Kress (WMDE): Looks good to me, approved
jenkins-bot: Verified
diff --git a/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
b/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
index e80a95e..629f4b6 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
@@ -16,19 +16,11 @@
*
* @param {Object} options
* @param {wikibase.datamodel.Reference|null} options.value
- * @param {string} options.statementGuid
- * The GUID of the `Statement` the `Reference` represented by the
widget instance belongs to.
- * @param {wikibase.entityIdFormatter.EntityIdHtmlFormatter}
options.entityIdHtmlFormatter
- * Required for dynamically rendering links to `Entity`s.
- * @param {wikibase.entityIdFormatter.EntityIdPlainFormatter}
options.entityIdPlainFormatter
- * Required for dynamically rendering plain text references to
`Entity`s.
- * @param {wikibase.store.EntityStore} options.entityStore
- * Required for dynamically gathering `Entity`/`Property` information.
- * @param {wikibase.ValueViewBuilder} options.valueViewBuilder
- * Required by the `snakview` interfacing a `snakview` "value"
`Variation` to
- * `jQuery.valueview`.
+ * @param {jQuery.wikibase.listview.ListItemAdapater} options.listItemAdapter
* @param {wikibase.entityChangers.ReferencesChanger} options.referencesChanger
* Required for saving the `Reference` represented by the widget
instance.
+ * @param {string} options.statementGuid
+ * The GUID of the `Statement` the `Reference` represented by the
widget instance belongs to.
* @param {string} [options.helpMessage=mw.msg(
'wikibase-claimview-snak-new-tooltip' )]
* End-user message explaining how to interact with the widget. The
message is most likely to
* be used inside the tooltip of the toolbar corresponding to the
widget.
@@ -77,12 +69,9 @@
$listview: '.wikibase-referenceview-listview'
},
value: null,
- statementGuid: null,
- entityIdHtmlFormatter: null,
- entityIdPlainFormatter: null,
- entityStore: null,
- valueViewBuilder: null,
+ listItemAdapter: null,
referencesChanger: null,
+ statementGuid: null,
helpMessage: mw.msg( 'wikibase-claimview-snak-new-tooltip' )
},
@@ -100,33 +89,14 @@
* @throws {Error} if a required option is not specified properly.
*/
_create: function() {
- if ( !this.options.statementGuid
- || !this.options.entityStore
- || !this.options.valueViewBuilder
- || !this.options.referencesChanger
- ) {
+ if ( !this.options.statementGuid ||
!this.options.listItemAdapter || !this.options.referencesChanger ) {
throw new Error( 'Required option not specified
properly' );
}
PARENT.prototype._create.call( this );
- var self = this;
-
this.$listview.listview( {
- listItemAdapter: new
$.wikibase.listview.ListItemAdapter( {
- listItemWidget: $.wikibase.snaklistview,
- newItemOptionsFn: function( value ) {
- return {
- value: value || undefined,
- singleProperty: true,
- dataTypeStore:
self.options.dataTypeStore,
- entityIdHtmlFormatter:
self.options.entityIdHtmlFormatter,
- entityIdPlainFormatter:
self.options.entityIdPlainFormatter,
- entityStore:
self.options.entityStore,
- valueViewBuilder:
self.options.valueViewBuilder
- };
- }
- } ),
+ listItemAdapter: this.options.listItemAdapter,
value: this.options.value ?
this.options.value.getSnaks().getGroupedSnakLists() : []
} );
@@ -139,11 +109,12 @@
*/
_attachEditModeEventHandlers: function() {
var self = this,
- lia = this.$listview.data( 'listview'
).listItemAdapter();
+ listview = this.$listview.data( 'listview' ),
+ lia = listview.listItemAdapter();
var changeEvents = [
'snakviewchange.' + this.widgetName,
- 'snaklistviewchange.' + this.widgetName,
+ lia.prefixedEvent( 'change.' + this.widgetName ),
'listviewafteritemmove.' + this.widgetName,
'listviewitemadded.' + this.widgetName,
'listviewitemremoved.' + this.widgetName
@@ -155,10 +126,10 @@
// Check if last snaklistview item (snakview)
has been removed and remove the
// listview item (the snaklistview itself) if
so:
var $snaklistview = $( event.target ).closest(
':wikibase-snaklistview' ),
- snaklistview = $snaklistview.data(
'snaklistview' );
+ snaklistview = lia.liInstance(
$snaklistview );
if ( snaklistview &&
!snaklistview.value().length ) {
- self.$listview.data( 'listview'
).removeItem( snaklistview.element );
+ listview.removeItem( $snaklistview );
}
}
diff --git a/view/resources/jquery/wikibase/resources.php
b/view/resources/jquery/wikibase/resources.php
index 41a0b6a..dbe4fc4 100644
--- a/view/resources/jquery/wikibase/resources.php
+++ b/view/resources/jquery/wikibase/resources.php
@@ -292,7 +292,6 @@
'dependencies' => array(
'jquery.removeClassByRegex',
'jquery.wikibase.listview',
- 'jquery.wikibase.snaklistview',
'wikibase.datamodel',
),
),
diff --git a/view/resources/wikibase/view/ViewFactory.js
b/view/resources/wikibase/view/ViewFactory.js
index 1372521..d69cf3c 100644
--- a/view/resources/wikibase/view/ViewFactory.js
+++ b/view/resources/wikibase/view/ViewFactory.js
@@ -331,11 +331,8 @@
value: value || null,
statementGuid: statementGuid,
dataTypeStore: this._dataTypeStore,
- entityIdHtmlFormatter:
this._entityIdHtmlFormatter,
- entityIdPlainFormatter:
this._entityIdPlainFormatter,
- entityStore: this._entityStore,
- referencesChanger:
this._entityChangersFactory.getReferencesChanger(),
- valueViewBuilder:
this._getValueViewBuilder()
+ listItemAdapter:
this.getListItemAdapterForSnakListView(),
+ referencesChanger:
this._entityChangersFactory.getReferencesChanger()
};
}, this )
} );
diff --git
a/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
b/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
index c77d009..08bc85a 100644
--- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
+++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
@@ -2,15 +2,8 @@
* @licence GNU GPL v2+
* @author Adrian Heine < [email protected] >
*/
-( function( $, wb, vv, vf, QUnit ) {
+( function( $, wb, QUnit ) {
'use strict';
-
- var valueViewBuilder = new wb.ValueViewBuilder(
- new vv.ExpertStore(),
- new vf.ValueFormatterStore( vf.NullFormatter ),
- 'I am a ParserStore',
- 'I am a language code'
- );
/**
* Generates a referenceview widget suitable for testing.
@@ -21,20 +14,22 @@
function createReferenceview( options ) {
options = $.extend( {
statementGuid: 'testGuid',
- entityIdHtmlFormatter: {
- format: function() {
- return $.Deferred().resolve( 'P1'
).promise();
- }
- },
- entityIdPlainFormatter: {
- format: function() {
- return $.Deferred().resolve( 'P1'
).promise();
- }
- },
- entityStore: 'I am an EntityStore',
- valueViewBuilder: valueViewBuilder,
referencesChanger: 'I am a ReferencesChanger',
- dataTypeStore: 'I am a DataTypeStore'
+ listItemAdapter: wb.tests.getMockListItemAdapter(
+ 'snaklistview',
+ function() {
+ this.enterNewItem = function() {
+ return
$.Deferred().resolve().promise();
+ };
+ this.isValid = function() {
+ return false;
+ };
+ this.stopEditing = function() {};
+ this.value = function() {
+ return this.options.value;
+ };
+ }
+ )
}, options );
return $( '<div/>' )
@@ -184,4 +179,4 @@
);
} );
-} )( jQuery, wikibase, jQuery.valueview, valueFormatters, QUnit );
+} )( jQuery, wikibase, QUnit );
diff --git a/view/tests/qunit/jquery/wikibase/resources.php
b/view/tests/qunit/jquery/wikibase/resources.php
index a98f169..a5fbf1f 100644
--- a/view/tests/qunit/jquery/wikibase/resources.php
+++ b/view/tests/qunit/jquery/wikibase/resources.php
@@ -203,11 +203,11 @@
'jquery.wikibase.referenceview.tests.js',
),
'dependencies' => array(
- 'jquery.valueview.ExpertStore',
'jquery.wikibase.referenceview',
- 'wikibase.datamodel',
- 'wikibase.ValueViewBuilder',
- 'valueFormatters'
+ 'wikibase.datamodel.PropertyNoValueSnak',
+ 'wikibase.datamodel.Reference',
+ 'wikibase.datamodel.SnakList',
+ 'wikibase.tests.getMockListItemAdapter',
),
),
diff --git a/view/tests/qunit/wikibase/view/ViewFactory.tests.js
b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
index 4ec9b8c..9afd8c2 100644
--- a/view/tests/qunit/wikibase/view/ViewFactory.tests.js
+++ b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
@@ -305,8 +305,6 @@
} )
);
- sinon.spy( wb, 'ValueViewBuilder' );
-
var result = ListItemAdapter.args[0][0].newItemOptionsFn( value
);
assert.deepEqual(
@@ -315,24 +313,13 @@
value: value || null,
statementGuid: statementGuid,
dataTypeStore: dataTypeStore,
- entityIdHtmlFormatter: entityIdHtmlFormatter,
- entityIdPlainFormatter: entityIdPlainFormatter,
- entityStore: entityStore,
- referencesChanger: referencesChanger,
- valueViewBuilder:
wb.ValueViewBuilder.returnValues[0]
+ listItemAdapter: result.listItemAdapter, // Hack
+ referencesChanger: referencesChanger
}
);
- sinon.assert.calledWith( wb.ValueViewBuilder,
- expertStore,
- formatterStore,
- parserStore,
- userLanguages[0],
- messageProvider,
- contentLanguages
- );
+ assert.ok( result.listItemAdapter instanceof
$.wikibase.listview.ListItemAdapter );
- wb.ValueViewBuilder.restore();
$.wikibase.listview.ListItemAdapter.restore();
} );
--
To view, visit https://gerrit.wikimedia.org/r/246768
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ifd76d6238e5fed78916abd25fbb409129e3497e0
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Lang <[email protected]>
Gerrit-Reviewer: Adrian Lang <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits