jenkins-bot has submitted this change and it was merged.
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 `entityview`s so that they can create the widgets
without having to pass them all their dependencies.
It improves separation between the `entityview`s and their immediate children,
since the `entityview`s don't have to know how to construct the child views.
It also allows to inject different implementations, for example in tests.
In more expressive type systems, this would have been implemented by having
three single-method interfaces (`EntityTermsViewFactory`,
`SitelinkGroupListViewFactory`, `StatementGroupListViewFactory`) and having
the `ViewFactory` implementing all three of them.
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/jquery.wikibase.statementgrouplistview.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
12 files changed, 229 insertions(+), 221 deletions(-)
Approvals:
Hoo man: Looks good to me, approved
jenkins-bot: Verified
diff --git a/view/resources/jquery/wikibase/jquery.wikibase.entityview.js
b/view/resources/jquery/wikibase/jquery.wikibase.entityview.js
index ad4c377..7c95018 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,34 +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,
- entityChangersFactory:
this.options.entityChangersFactory,
- helpMessage: mw.msg(
'wikibase-entitytermsview-input-help-message' )
- } );
+ this.options.entityTermsViewBuilder(
this.options.value.getFingerprint(), this.$entityTerms );
},
/**
@@ -180,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' ) {
@@ -231,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/jquery.wikibase.statementgrouplistview.js
b/view/resources/jquery/wikibase/jquery.wikibase.statementgrouplistview.js
index 259ca1f..cc5478f 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.statementgrouplistview.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.statementgrouplistview.js
@@ -9,6 +9,7 @@
* @see wikibase.datamodel.StatementGroup
* @see wikibase.datamodel.StatementGroupSet
* @uses jQuery.wikibase.statementgroupview
+ * @uses jQuery.wikibase.statementgrouplabelscroll
* @uses jQuery.wikibase.listview
* @uses jQuery.wikibase.listview.ListItemAdapter
* @since 0.5
@@ -98,6 +99,9 @@
listview.removeItem( $statementgroupview );
}
} );
+
+ this.element.statementgrouplabelscroll();
+
},
/**
diff --git a/view/resources/jquery/wikibase/resources.php
b/view/resources/jquery/wikibase/resources.php
index d32d307..21d2754 100644
--- a/view/resources/jquery/wikibase/resources.php
+++ b/view/resources/jquery/wikibase/resources.php
@@ -67,6 +67,7 @@
'dependencies' => array(
'jquery.ui.TemplatedWidget',
'jquery.ui.widget',
+ 'jquery.wikibase.statementgrouplabelscroll',
'jquery.wikibase.statementgroupview',
'jquery.wikibase.listview',
'wikibase.datamodel.Item',
@@ -156,17 +157,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 +234,8 @@
'jquery.wikibase.itemview.js',
),
'dependencies' => array(
- 'jquery.wikibase.statementgrouplabelscroll',
- 'jquery.wikibase.statementgrouplistview',
'jquery.wikibase.entityview',
'jquery.wikibase.sitelinkgrouplistview',
- 'wikibase.utilities.ClaimGuidGenerator',
),
),
@@ -302,10 +289,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..5abfcdb 100644
--- a/view/resources/wikibase/view/ViewFactory.js
+++ b/view/resources/wikibase/view/ViewFactory.js
@@ -154,19 +154,93 @@
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 fingerprint on the
given DOM element
+ *
+ * @param {wikibase.datamodel.Fingerprint} fingerprint
+ * @param {jQuery} $dom
+ * @return {jQuery.wikibase.entitytermsview} The constructed entity
terms view
+ **/
+ SELF.prototype.getEntityTermsView = function( fingerprint, $dom ) {
+ var 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,
+ 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 ) {
+ return 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
+ }
+ );
+
+ };
+
+ /**
* @private
* @return {wikibase.ValueViewBuilder}
**/
diff --git a/view/resources/wikibase/view/resources.php
b/view/resources/wikibase/view/resources.php
index 9b7123d..1c1b538 100644
--- a/view/resources/wikibase/view/resources.php
+++ b/view/resources/wikibase/view/resources.php
@@ -27,10 +27,18 @@
'ViewFactory.js'
),
'dependencies' => array(
+ 'jquery.wikibase.entitytermsview',
'jquery.wikibase.itemview',
'jquery.wikibase.propertyview',
+ '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..cc6f955 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,55 @@
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 = [],
+ fingerprint = new wb.datamodel.Fingerprint(),
+ 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( fingerprint, $dom );
+
+ sinon.assert.calledWith( $.wikibase.entitytermsview,
sinon.match( {
+ value: [],
+ 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..2d58d27 100644
--- a/view/tests/qunit/wikibase/view/resources.php
+++ b/view/tests/qunit/wikibase/view/resources.php
@@ -20,6 +20,8 @@
'ViewFactory.tests.js',
),
'dependencies' => array(
+ 'wikibase.datamodel.Fingerprint',
+ '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: merged
Gerrit-Change-Id: I996c57f6fd6a1c6a4575bb82cbcbb7726eca4328
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Lang <[email protected]>
Gerrit-Reviewer: Adrian Lang <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits