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

Reply via email to