Adrian Lang has uploaded a new change for review.
https://gerrit.wikimedia.org/r/242337
Change subject: Use ViewFactory for building children of entityviews
......................................................................
Use ViewFactory for building children of entityviews
This change introduces ViewFactory methods for creating entitytermsview,
sitelinkgrouplistview and statementgrouplistview widgets. These methods are
passed to the different entityviews so that they can create the widgets without
having to pass them all their dependencies.
It improves separation between the entityviews and their immediate children,
since the entityviews don't have to know how to construct the child views.
It also allows to inject different implementations, for example in tests.
This is a first step for T75380.
Change-Id: I996c57f6fd6a1c6a4575bb82cbcbb7726eca4328
---
M view/resources/jquery/wikibase/jquery.wikibase.entityview.js
M view/resources/jquery/wikibase/jquery.wikibase.itemview.js
M view/resources/jquery/wikibase/jquery.wikibase.propertyview.js
M view/resources/jquery/wikibase/resources.php
M view/resources/wikibase/view/ViewFactory.js
M view/resources/wikibase/view/resources.php
M view/tests/qunit/jquery/wikibase/jquery.wikibase.entityview.tests.js
M view/tests/qunit/jquery/wikibase/jquery.wikibase.itemview.tests.js
M view/tests/qunit/jquery/wikibase/jquery.wikibase.propertyview.tests.js
M view/tests/qunit/wikibase/view/ViewFactory.tests.js
M view/tests/qunit/wikibase/view/resources.php
11 files changed, 230 insertions(+), 222 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/37/242337/1
diff --git a/view/resources/jquery/wikibase/jquery.wikibase.entityview.js
b/view/resources/jquery/wikibase/jquery.wikibase.entityview.js
index 787d6f0..809d680 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.entityview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.entityview.js
@@ -1,4 +1,4 @@
-( function( wb, $, mw ) {
+( function( $ ) {
'use strict';
var PARENT = $.ui.TemplatedWidget;
@@ -16,12 +16,7 @@
*
* @param {Object} options
* @param {wikibase.datamodel.Entity} options.value
- * @param {string[]|string} languages
- * Language codes of the languages to display
label-/description-/aliasesview in. Other
- * components of the entityview will use the first language code for
rendering. May just be a
- * single language code.
- * @param {wikibase.entityChangers.EntityChangersFactory}
options.entityChangersFactory
- * Required to be able to store changes applied to the entity.
+ * @param {Function} options.entityTermsViewBuilder
*/
/**
* @event afterstartediting
@@ -41,6 +36,7 @@
* @protected
*/
options: {
+ entityTermsViewBuilder: null,
template: 'wikibase-entityview',
templateParams: [
'', // entity type
@@ -54,9 +50,7 @@
$main: '.wikibase-entityview-main',
$side: '.wikibase-entityview-side'
},
- value: null,
- languages: null,
- entityChangersFactory: null
+ value: null
},
/**
@@ -90,17 +84,9 @@
* @throws {Error} if a required options is missing.
*/
_init: function() {
- if(
- !this.options.value
- || !this.options.languages
- || !this.options.entityStore
- || !this.options.valueViewBuilder
- || !this.options.entityChangersFactory
- ) {
+ if( !this.options.value || !this.options.entityTermsViewBuilder
) {
throw new Error( 'Required option(s) missing' );
}
-
- this.option( 'languages', this.options.languages );
this.element.data( $.wikibase.entityview.prototype.widgetName,
this );
@@ -115,35 +101,13 @@
* @protected
*/
_initEntityTerms: function() {
- var i;
-
this.$entityTerms = $( '.wikibase-entitytermsview',
this.element );
if( !this.$entityTerms.length ) {
this.$entityTerms = $( '<div/>' ).prependTo( this.$main
);
}
- var fingerprint = this.options.value.getFingerprint(),
- value = [];
-
- for( i = 0; i < this.options.languages.length; i++ ) {
- value.push( {
- language: this.options.languages[i],
- label: fingerprint.getLabelFor(
this.options.languages[i] )
- || new wb.datamodel.Term(
this.options.languages[i], '' ),
- description: fingerprint.getDescriptionFor(
this.options.languages[i] )
- || new wb.datamodel.Term(
this.options.languages[i], '' ),
- aliases: fingerprint.getAliasesFor(
this.options.languages[i] )
- || new wb.datamodel.MultiTerm(
this.options.languages[i], [] )
- } );
- }
-
- this.$entityTerms.entitytermsview( {
- value: value,
- entityId: this.options.value.getId(),
- entityChangersFactory:
this.options.entityChangersFactory,
- helpMessage: mw.msg(
'wikibase-entitytermsview-input-help-message' )
- } );
+ this.options.entityTermsViewBuilder( this.options.value,
this.$entityTerms );
},
/**
@@ -181,14 +145,6 @@
* @throws {Error} when trying to set an option to an improper value.
*/
_setOption: function( key, value ) {
- if( key === 'languages' ) {
- if( typeof this.options.languages === 'string' ) {
- this.options.languages =
[this.options.languages];
- } else if( !$.isArray( this.options.languages ) ) {
- throw new Error( 'languages need to be supplied
as string or array' );
- }
- }
-
var response = PARENT.prototype._setOption.apply( this,
arguments );
if( key === 'disabled' ) {
@@ -232,4 +188,4 @@
}
);
-}( wikibase, jQuery, mediaWiki ) );
+}( jQuery ) );
diff --git a/view/resources/jquery/wikibase/jquery.wikibase.itemview.js
b/view/resources/jquery/wikibase/jquery.wikibase.itemview.js
index 2c0e6aa..c8b6238 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.itemview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.itemview.js
@@ -8,29 +8,16 @@
* @see wikibase.datamodel.Item
* @class jQuery.wikibase.itemview
* @extends jQuery.wikibase.entityview
- * @uses jQuery.wikibase.statementgrouplistview
- * @uses jQuery.wikibase.statementgrouplabelscroll
- * @uses jQuery.wikibase.sitelinkgrouplistview
- * @uses wikibase.utilities.ClaimGuidGenerator
* @since 0.5
* @licence GNU GPL v2+
* @author H. Snater < [email protected] >
*
+ * @param {Object} options
+ * @param {Function} options.sitelinkGroupListViewBuilder
+ * @param {Function} options.statementGroupListViewBuilder
+ *
* @constructor
*
- * @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 by sub-components of the `entityview` to enable those to
dynamically query for
- * `Entity` objects.
- * @param {wikibase.ValueViewBuilder} options.valueViewBuilder
- * Required by the `snakview` interfacing a `snakview` "value"
`Variation` to
- * `jQuery.valueview`.
- * @param {dataTypes.DataTypeStore} options.dataTypeStore
- * Required by the `snakview` for retrieving and evaluating a proper
`dataTypes.DataType`
- * object when interacting on a "value" `Variation`.
*/
$.widget( 'wikibase.itemview', PARENT, {
/**
@@ -38,11 +25,8 @@
* @protected
*/
options: {
- entityIdHtmlFormatter: null,
- entityIdPlainFormatter: null,
- entityStore: null,
- valueViewBuilder: null,
- dataTypeStore: null
+ sitelinkGroupListViewBuilder: null,
+ statementGroupListViewBuilder: null
},
/**
@@ -74,6 +58,13 @@
* @protected
*/
_init: function() {
+ if(
+ !this.options.sitelinkGroupListViewBuilder ||
+ !this.options.statementGroupListViewBuilder
+ ) {
+ throw new Error( 'Required option(s) missing' );
+ }
+
this._initStatements();
this._initSiteLinks();
PARENT.prototype._init.call( this );
@@ -83,20 +74,7 @@
* @protected
*/
_initStatements: function() {
- var claimGuidGenerator = new wb.utilities.ClaimGuidGenerator(
this.options.value.getId() );
-
- this.$statements
- .statementgrouplistview( {
- value: this.options.value.getStatements(),
- claimGuidGenerator: claimGuidGenerator,
- dataTypeStore: this.option( 'dataTypeStore' ),
- entityStore: this.options.entityStore,
- entityIdHtmlFormatter:
this.options.entityIdHtmlFormatter,
- entityIdPlainFormatter:
this.options.entityIdPlainFormatter,
- valueViewBuilder: this.options.valueViewBuilder,
- entityChangersFactory:
this.options.entityChangersFactory
- } )
- .statementgrouplabelscroll();
+ this.options.statementGroupListViewBuilder( this.options.value,
this.$statements );
// This is here to be sure there is never a duplicate id:
$( '.wikibase-statementgrouplistview' )
@@ -109,11 +87,7 @@
* @protected
*/
_initSiteLinks: function() {
- this.$siteLinks.sitelinkgrouplistview( {
- value: this.options.value.getSiteLinks(),
- siteLinksChanger:
this.options.entityChangersFactory.getSiteLinksChanger(),
- entityIdPlainFormatter:
this.options.entityIdPlainFormatter
- } );
+ this.options.sitelinkGroupListViewBuilder(
this.options.value.getSiteLinks(), this.$siteLinks );
},
/**
diff --git a/view/resources/jquery/wikibase/jquery.wikibase.propertyview.js
b/view/resources/jquery/wikibase/jquery.wikibase.propertyview.js
index 502060f..2d74101 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.propertyview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.propertyview.js
@@ -1,4 +1,4 @@
-( function( $, wb, mw ) {
+( function( $, mw ) {
'use strict';
var PARENT = $.wikibase.entityview;
@@ -8,28 +8,15 @@
* @see wikibase.datamodel.Property
* @class jQuery.wikibase.propertyview
* @extends jQuery.wikibase.entityview
- * @uses jQuery.wikibase.statementgrouplistview
- * @uses jQuery.wikibase.statementgrouplabelscroll
- * @uses wikibase.utilities.ClaimGuidGenerator
* @since 0.5
* @licence GNU GPL v2+
* @author H. Snater < [email protected] >
*
+ * @param {Object} options
+ * @param {Function} options.statementGroupListViewBuilder
+ *
* @constructor
*
- * @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 by sub-components of the `entityview` to enable those to
dynamically query for
- * `Entity` objects.
- * @param {wikibase.ValueViewBuilder} options.valueViewBuilder
- * Required by the `snakview` interfacing a `snakview` "value"
`Variation` to
- * `jQuery.valueview`.
- * @param {dataTypes.DataTypeStore} options.dataTypeStore
- * Required by the `snakview` for retrieving and evaluating a proper
`dataTypes.DataType`
- * object when interacting on a "value" `Variation`.
*/
$.widget( 'wikibase.propertyview', PARENT, {
/**
@@ -37,10 +24,7 @@
* @protected
*/
options: {
- entityIdPlainFormatter: null,
- entityStore: null,
- valueViewBuilder: null,
- dataTypeStore: null
+ statementGroupListViewBuilder: null
},
/**
@@ -75,6 +59,10 @@
* @protected
*/
_init: function() {
+ if( !this.options.statementGroupListViewBuilder ) {
+ throw new Error( 'Required option(s) missing' );
+ }
+
this._initStatements();
PARENT.prototype._init.call( this );
},
@@ -103,20 +91,7 @@
* @protected
*/
_initStatements: function() {
- var claimGuidGenerator = new wb.utilities.ClaimGuidGenerator(
this.options.value.getId() );
-
- this.$statements
- .statementgrouplistview( {
- value: this.options.value.getStatements(),
- claimGuidGenerator: claimGuidGenerator,
- dataTypeStore: this.option( 'dataTypeStore' ),
- entityIdHtmlFormatter:
this.options.entityIdHtmlFormatter,
- entityIdPlainFormatter:
this.options.entityIdPlainFormatter,
- entityStore: this.options.entityStore,
- valueViewBuilder: this.options.valueViewBuilder,
- entityChangersFactory:
this.options.entityChangersFactory
- } )
- .statementgrouplabelscroll();
+ this.options.statementGroupListViewBuilder( this.options.value,
this.$statements );
// This is here to be sure there is never a duplicate id:
$( '.wikibase-statementgrouplistview' )
@@ -175,4 +150,4 @@
$.wikibase.entityview.TYPES.push( $.wikibase.propertyview.prototype.widgetName
);
-}( jQuery, wikibase, mediaWiki ) );
+}( jQuery, mediaWiki ) );
diff --git a/view/resources/jquery/wikibase/resources.php
b/view/resources/jquery/wikibase/resources.php
index d32d307..86bb0d3 100644
--- a/view/resources/jquery/wikibase/resources.php
+++ b/view/resources/jquery/wikibase/resources.php
@@ -156,17 +156,6 @@
),
'dependencies' => array(
'jquery.ui.TemplatedWidget',
- 'jquery.wikibase.aliasesview',
- 'jquery.wikibase.descriptionview',
- 'jquery.wikibase.entitytermsview',
- 'jquery.wikibase.labelview',
- 'wikibase.datamodel.MultiTerm',
- 'wikibase.datamodel.Term',
- 'wikibase.getLanguageNameByCode',
- 'wikibase.templates',
- ),
- 'messages' => array(
- 'wikibase-entitytermsview-input-help-message',
),
),
@@ -244,11 +233,8 @@
'jquery.wikibase.itemview.js',
),
'dependencies' => array(
- 'jquery.wikibase.statementgrouplabelscroll',
- 'jquery.wikibase.statementgrouplistview',
'jquery.wikibase.entityview',
'jquery.wikibase.sitelinkgrouplistview',
- 'wikibase.utilities.ClaimGuidGenerator',
),
),
@@ -302,10 +288,8 @@
'jquery.wikibase.propertyview.js',
),
'dependencies' => array(
- 'jquery.wikibase.statementgrouplabelscroll',
- 'jquery.wikibase.statementgrouplistview',
'jquery.wikibase.entityview',
- 'wikibase.utilities.ClaimGuidGenerator',
+ 'wikibase.templates',
),
),
diff --git a/view/resources/wikibase/view/ViewFactory.js
b/view/resources/wikibase/view/ViewFactory.js
index 8282ce1..f9d429d 100644
--- a/view/resources/wikibase/view/ViewFactory.js
+++ b/view/resources/wikibase/view/ViewFactory.js
@@ -154,19 +154,98 @@
entity.getType() + 'view',
$dom,
{
- dataTypeStore: this._dataTypeStore,
- entityChangersFactory:
this._entityChangersFactory,
- entityIdHtmlFormatter:
this._entityIdHtmlFormatter,
- entityIdPlainFormatter:
this._entityIdPlainFormatter,
- entityStore: this._entityStore,
- languages: this._userLanguages,
- value: entity,
- valueViewBuilder: this._getValueViewBuilder()
+ entityTermsViewBuilder: $.proxy(
this.getEntityTermsView, this ),
+ sitelinkGroupListViewBuilder: $.proxy(
this.getSitelinkGroupListView, this ),
+ statementGroupListViewBuilder: $.proxy(
this.getStatementGroupListView, this ),
+ value: entity
}
);
};
/**
+ * Construct a suitable terms view for the given entity on the given
DOM element
+ *
+ * @param {wikibase.datamodel.Entity} entity
+ * @param {jQuery} $dom
+ * @return {jQuery.wikibase.entitytermsview} The constructed entity
terms view
+ **/
+ SELF.prototype.getEntityTermsView = function( entity, $dom ) {
+ var fingerprint = entity.getFingerprint(),
+ value = $.map(
+ this._userLanguages,
+ function( language ) {
+ return {
+ language: language,
+ label: fingerprint.getLabelFor(
language )
+ || new
wb.datamodel.Term( language, '' ),
+ description:
fingerprint.getDescriptionFor( language )
+ || new
wb.datamodel.Term( language, '' ),
+ aliases:
fingerprint.getAliasesFor( language )
+ || new
wb.datamodel.MultiTerm( language, [] )
+ };
+ }
+ );
+
+ return this._getView(
+ 'entitytermsview',
+ $dom,
+ {
+ value: value,
+ entityId: entity.getId(),
+ entityChangersFactory:
this._entityChangersFactory,
+ helpMessage: this._messageProvider.getMessage(
'wikibase-entitytermsview-input-help-message' )
+ }
+ );
+ };
+
+ /**
+ * Construct a suitable view for the given sitelink set on the given
DOM element
+ *
+ * @param {wikibase.datamodel.SiteLinkSet} sitelinkSet
+ * @param {jQuery} $dom
+ * @return {jQuery.wikibase.sitelinkgrouplistview} The constructed
sitelinkgrouplistview
+ **/
+ SELF.prototype.getSitelinkGroupListView = function( sitelinkSet, $dom )
{
+ return this._getView(
+ 'sitelinkgrouplistview',
+ $dom,
+ {
+ value: sitelinkSet,
+ siteLinksChanger:
this._entityChangersFactory.getSiteLinksChanger(),
+ entityIdPlainFormatter:
this._entityIdPlainFormatter
+ }
+ );
+ };
+
+ /**
+ * Construct a suitable view for the list of statement groups for the
given entity on the given DOM element
+ *
+ * @param {wikibase.datamodel.Entity} entity
+ * @param {jQuery} $dom
+ * @return {jQuery.wikibase.statementgrouplistview} The constructed
statementgrouplistview
+ **/
+ SELF.prototype.getStatementGroupListView = function( entity, $dom ) {
+ var view = this._getView(
+ 'statementgrouplistview',
+ $dom,
+ {
+ value: entity.getStatements(),
+ claimGuidGenerator: new
wb.utilities.ClaimGuidGenerator( entity.getId() ),
+ dataTypeStore: this._dataTypeStore,
+ entityStore: this._entityStore,
+ entityIdHtmlFormatter:
this._entityIdHtmlFormatter,
+ entityIdPlainFormatter:
this._entityIdPlainFormatter,
+ valueViewBuilder: this._getValueViewBuilder(),
+ entityChangersFactory:
this._entityChangersFactory
+ }
+ );
+
+ $dom.statementgrouplabelscroll();
+
+ return view;
+ };
+
+ /**
* @private
* @return {wikibase.ValueViewBuilder}
**/
diff --git a/view/resources/wikibase/view/resources.php
b/view/resources/wikibase/view/resources.php
index 9b7123d..933ea14 100644
--- a/view/resources/wikibase/view/resources.php
+++ b/view/resources/wikibase/view/resources.php
@@ -27,10 +27,19 @@
'ViewFactory.js'
),
'dependencies' => array(
+ 'jquery.wikibase.entitytermsview',
'jquery.wikibase.itemview',
'jquery.wikibase.propertyview',
+ 'jquery.wikibase.statementgrouplabelscroll',
+ 'jquery.wikibase.statementgrouplistview',
+ 'wikibase.datamodel.MultiTerm',
+ 'wikibase.datamodel.Term',
+ 'wikibase.utilities.ClaimGuidGenerator',
'wikibase.view.__namespace',
'wikibase.ValueViewBuilder'
+ ),
+ 'messages' => array(
+ 'wikibase-entitytermsview-input-help-message',
)
),
);
diff --git
a/view/tests/qunit/jquery/wikibase/jquery.wikibase.entityview.tests.js
b/view/tests/qunit/jquery/wikibase/jquery.wikibase.entityview.tests.js
index 5a24100..2c650f2 100644
--- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.entityview.tests.js
+++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.entityview.tests.js
@@ -11,14 +11,6 @@
assert.throws(
function() {
$( '<div/>' ).entityview( $.extend( {
- entityStore: 'I am an EntityStore',
- entityChangersFactory: {
- getAliasesChanger: function() { return
'I am an AliasesChanger'; },
- getDescriptionsChanger: function() {
return 'I am a DescriptionsChanger'; },
- getLabelsChanger: function() { return
'I am a LabelsChanger'; }
- },
- api: 'I am an Api',
- valueViewBuilder: 'I am a valueview builder',
value: new wb.datamodel.Property( 'P1',
'someDataType' ),
languages: 'en'
} ) );
diff --git a/view/tests/qunit/jquery/wikibase/jquery.wikibase.itemview.tests.js
b/view/tests/qunit/jquery/wikibase/jquery.wikibase.itemview.tests.js
index 3ecac9d..b757c40 100644
--- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.itemview.tests.js
+++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.itemview.tests.js
@@ -12,19 +12,10 @@
*/
var createItemview = function( options, $node ) {
options = $.extend( {
- entityIdPlainFormatter: 'I am an EntityIdPlainFormatter',
- entityStore: new wb.store.EntityStore(),
- entityChangersFactory: {
- getAliasesChanger: function() { return 'I am an
AliasesChanger'; },
- getDescriptionsChanger: function() { return 'I am a
DescriptionsChanger'; },
- getLabelsChanger: function() { return 'I am a
LabelsChanger'; },
- getSiteLinksChanger: function() { return 'I am a
SiteLinksChanger'; }
- },
- api: 'I am an Api',
- valueViewBuilder: 'I am a valueview builder',
- dataTypeStore: 'I am a DataTypeStore',
value: new wb.datamodel.Item( 'Q1' ),
- languages: 'en'
+ entityTermsViewBuilder: function() {},
+ statementGroupListViewBuilder: function() {},
+ sitelinkGroupListViewBuilder: function() {}
}, options || {} );
$node = $node || $( '<div/>' ).appendTo( 'body' );
@@ -59,13 +50,6 @@
'Throwing error when trying to initialize widget without a
value.'
);
- assert.throws(
- function() {
- createItemview( { languages: null } );
- },
- 'Throwing error when trying to initialize widget without a
language.'
- );
-
var $itemview = createItemview(),
itemview = $itemview.data( 'itemview' );
@@ -81,13 +65,6 @@
'Destroyed widget.'
);
- $itemview = createItemview( { languages: ['ku'] } );
- itemview = $itemview.data( 'itemview' );
-
- assert.ok(
- itemview instanceof $.wikibase.itemview,
- 'Created widget with a language.'
- );
} );
}( jQuery, wikibase, QUnit ) );
diff --git
a/view/tests/qunit/jquery/wikibase/jquery.wikibase.propertyview.tests.js
b/view/tests/qunit/jquery/wikibase/jquery.wikibase.propertyview.tests.js
index 03c556e..a601aa4 100644
--- a/view/tests/qunit/jquery/wikibase/jquery.wikibase.propertyview.tests.js
+++ b/view/tests/qunit/jquery/wikibase/jquery.wikibase.propertyview.tests.js
@@ -12,17 +12,9 @@
*/
var createPropertyview = function( options, $node ) {
options = $.extend( {
- entityStore: new wb.store.EntityStore(),
- entityChangersFactory: {
- getAliasesChanger: function() { return 'I am an
AliasesChanger'; },
- getDescriptionsChanger: function() { return 'I am a
DescriptionsChanger'; },
- getLabelsChanger: function() { return 'I am a
LabelsChanger'; }
- },
- api: 'I am an Api',
- valueViewBuilder: 'I am a valueview builder',
- dataTypeStore: 'I am a DataTypeStore',
value: new wb.datamodel.Property( 'P1', 'someDataType' ),
- languages: 'en'
+ entityTermsViewBuilder: function() {},
+ statementGroupListViewBuilder: function() {}
}, options || {} );
$node = $node || $( '<div/>' ).appendTo( 'body' );
@@ -57,13 +49,6 @@
'Throwing error when trying to initialize widget without a
value.'
);
- assert.throws(
- function() {
- createPropertyview( { languages: null } );
- },
- 'Throwing error when trying to initialize widget without a
language.'
- );
-
var $propertyview = createPropertyview(),
propertyview = $propertyview.data( 'propertyview' );
@@ -79,13 +64,6 @@
'Destroyed widget.'
);
- $propertyview = createPropertyview( { languages: ['ku'] } );
- propertyview = $propertyview.data( 'propertyview' );
-
- assert.ok(
- propertyview instanceof $.wikibase.propertyview,
- 'Created widget with a language.'
- );
} );
}( jQuery, wikibase, QUnit ) );
diff --git a/view/tests/qunit/wikibase/view/ViewFactory.tests.js
b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
index cd2bda7..2d565f5 100644
--- a/view/tests/qunit/wikibase/view/ViewFactory.tests.js
+++ b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
@@ -42,13 +42,57 @@
} );
QUnit.test( 'getEntityView passes correct options to views', function(
assert ) {
+ var entity = getEntityStub( 'foo' ),
+ viewFactory = new ViewFactory(),
+ $dom = $( '<div/>' ),
+ FooView = $dom.fooview = $.wikibase.fooview =
sinon.spy();
+
+ viewFactory.getEntityView( entity, $dom );
+
+ sinon.assert.calledWith( FooView, sinon.match( {
+ entityTermsViewBuilder: sinon.match.func,
+ sitelinkGroupListViewBuilder: sinon.match.func,
+ statementGroupListViewBuilder: sinon.match.func,
+ value: entity
+ } ) );
+ } );
+
+ QUnit.test( 'getSitelinkGroupListView passes correct options to views',
function( assert ) {
+ var sitelinkSet = new wb.datamodel.SiteLinkSet( [] ),
+ siteLinksChanger = {},
+ entityChangersFactory = { getSiteLinksChanger:
function() { return siteLinksChanger; } },
+ entityIdPlainFormatter = {},
+ viewFactory = new ViewFactory(
+ null,
+ null,
+ entityChangersFactory,
+ null,
+ entityIdPlainFormatter
+ ),
+ $dom = $( '<div/>' );
+
+ sinon.spy( $.wikibase, 'sitelinkgrouplistview' );
+ $dom.sitelinkgrouplistview = $.wikibase.sitelinkgrouplistview;
+
+ viewFactory.getSitelinkGroupListView( sitelinkSet, $dom );
+
+ sinon.assert.calledWith( $.wikibase.sitelinkgrouplistview,
sinon.match( {
+ value: sitelinkSet,
+ entityIdPlainFormatter: entityIdPlainFormatter,
+ siteLinksChanger: siteLinksChanger
+ } ) );
+
+ $.wikibase.sitelinkgrouplistview.restore();
+ } );
+
+ QUnit.test( 'getStatementGroupListView passes correct options to
views', function( assert ) {
var contentLanguages = {},
+ entity = new wb.datamodel.Item( 'Q1' ),
dataTypeStore = {},
- entity = getEntityStub( 'foo' ),
entityChangersFactory = {},
entityIdHtmlFormatter = {},
entityIdPlainFormatter = {},
- entityStore = new wb.store.EntityStore(),
+ entityStore = {},
expertStore = {},
formatterStore = {},
messageProvider = {},
@@ -67,12 +111,13 @@
parserStore,
userLanguages
),
- $dom = $( '<div/>' ),
- FooView = $dom.fooview = $.wikibase.fooview =
sinon.spy();
+ $dom = $( '<div/>' );
+ sinon.spy( $.wikibase, 'statementgrouplistview' );
+ $dom.statementgrouplistview = $.wikibase.statementgrouplistview;
sinon.spy( wb, 'ValueViewBuilder' );
- viewFactory.getEntityView( entity, $dom );
+ viewFactory.getStatementGroupListView( entity, $dom );
sinon.assert.calledWith( wb.ValueViewBuilder,
expertStore,
@@ -83,18 +128,56 @@
contentLanguages
);
- sinon.assert.calledWith( FooView, sinon.match( {
+ sinon.assert.calledWith( $.wikibase.statementgrouplistview,
sinon.match( {
+ value: entity.getStatements(),
+ claimGuidGenerator: sinon.match.instanceOf(
wb.utilities.ClaimGuidGenerator ),
dataTypeStore: dataTypeStore,
- entityChangersFactory: entityChangersFactory,
+ entityStore: entityStore,
entityIdHtmlFormatter: entityIdHtmlFormatter,
entityIdPlainFormatter: entityIdPlainFormatter,
- entityStore: entityStore,
- languages: userLanguages,
- value: entity,
- valueViewBuilder: wb.ValueViewBuilder.thisValues[0]
+ valueViewBuilder: wb.ValueViewBuilder.returnValues[0],
+ entityChangersFactory: entityChangersFactory
} ) );
wb.ValueViewBuilder.restore();
+ $.wikibase.statementgrouplistview.restore();
+ } );
+
+ QUnit.test( 'getEntityTermsView passes correct options to views',
function( assert ) {
+ var contentLanguages = [],
+ entity = new wb.datamodel.Item( 'Q1' ),
+ entityChangersFactory = {},
+ message = 'message',
+ messageProvider = { getMessage: function() { return
message; } },
+ userLanguages = [],
+ viewFactory = new ViewFactory(
+ contentLanguages,
+ null,
+ entityChangersFactory,
+ null,
+ null,
+ null,
+ null,
+ null,
+ messageProvider,
+ null,
+ userLanguages
+ ),
+ $dom = $( '<div/>' );
+
+ sinon.spy( $.wikibase, 'entitytermsview' );
+ $dom.entitytermsview = $.wikibase.entitytermsview;
+
+ viewFactory.getEntityTermsView( entity, $dom );
+
+ sinon.assert.calledWith( $.wikibase.entitytermsview,
sinon.match( {
+ value: [],
+ entityId: entity.getId(),
+ entityChangersFactory: entityChangersFactory,
+ helpMessage: message
+ } ) );
+
+ $.wikibase.entitytermsview.restore();
} );
}( jQuery, sinon, QUnit, wikibase, wikibase.view.ViewFactory ) );
diff --git a/view/tests/qunit/wikibase/view/resources.php
b/view/tests/qunit/wikibase/view/resources.php
index 9d39780..e860382 100644
--- a/view/tests/qunit/wikibase/view/resources.php
+++ b/view/tests/qunit/wikibase/view/resources.php
@@ -20,6 +20,7 @@
'ViewFactory.tests.js',
),
'dependencies' => array(
+ 'wikibase.datamodel.Item',
'wikibase.store.EntityStore',
'wikibase.entityIdFormatter.EntityIdPlainFormatter',
'wikibase.view.ViewFactory',
--
To view, visit https://gerrit.wikimedia.org/r/242337
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I996c57f6fd6a1c6a4575bb82cbcbb7726eca4328
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