jenkins-bot has submitted this change and it was merged.

Change subject: Introduce ReadModeViewFactory for diffs and old revisions
......................................................................


Introduce ReadModeViewFactory for diffs and old revisions

Bug: T129836
Change-Id: I0df8481402125cf71840dcbe9bead136c11ead6f
---
M repo/resources/Resources.php
M repo/resources/wikibase.ui.entityViewInit.js
A view/resources/wikibase/view/ReadModeViewFactory.js
M view/resources/wikibase/view/ViewFactory.js
M view/resources/wikibase/view/resources.php
M view/src/ClaimHtmlGenerator.php
M view/tests/phpunit/ClaimHtmlGeneratorTest.php
M view/tests/qunit/wikibase/view/ViewFactory.tests.js
8 files changed, 142 insertions(+), 45 deletions(-)

Approvals:
  Hoo man: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/repo/resources/Resources.php b/repo/resources/Resources.php
index 9ccc766..16efe9d 100644
--- a/repo/resources/Resources.php
+++ b/repo/resources/Resources.php
@@ -101,6 +101,7 @@
                                'wikibase.store.CachingEntityStore',
                                'wikibase.store.CombiningEntityStore',
                                'wikibase.view.ControllerViewFactory',
+                               'wikibase.view.ReadModeViewFactory',
                                'wikibase.view.StructureEditorFactory',
                                'wikibase.view.ToolbarFactory',
                                'wikibase.WikibaseContentLanguages'
diff --git a/repo/resources/wikibase.ui.entityViewInit.js 
b/repo/resources/wikibase.ui.entityViewInit.js
index 1d1d04e..14de579 100644
--- a/repo/resources/wikibase.ui.entityViewInit.js
+++ b/repo/resources/wikibase.ui.entityViewInit.js
@@ -68,12 +68,6 @@
                        repoApi = new wb.api.RepoApi( mwApi ),
                        userLanguages = getUserLanguages(),
                        entityStore = buildEntityStore( repoApi, 
userLanguages[0] ),
-                       revisionStore = new wb.RevisionStore( mw.config.get( 
'wgCurRevisionId' ) ),
-                       entityChangersFactory = new 
wb.entityChangers.EntityChangersFactory(
-                               repoApi,
-                               revisionStore,
-                               entity
-                       ),
                        contentLanguages = new 
wikibase.WikibaseContentLanguages(),
                        formatterFactory = new 
wb.formatters.ApiValueFormatterFactory(
                                new wb.api.FormatValueCaller(
@@ -88,7 +82,7 @@
                        entityIdParser = new ( parserStore.getParser( 
wb.datamodel.EntityId.TYPE ) )( { lang: userLanguages[0] } ),
                        toolbarFactory = new wb.view.ToolbarFactory(),
                        structureEditorFactory = new 
wb.view.StructureEditorFactory( toolbarFactory ),
-                       viewFactoryClass = wb.view.ViewFactory,
+                       viewFactoryClass = wb.view.ReadModeViewFactory,
                        viewFactoryArguments = [
                                structureEditorFactory,
                                contentLanguages,
@@ -116,9 +110,16 @@
                        };
 
                if ( isEditable() ) {
+                       var revisionStore = new wb.RevisionStore( 
mw.config.get( 'wgCurRevisionId' ) ),
+                               entityChangersFactory = new 
wb.entityChangers.EntityChangersFactory(
+                                       repoApi,
+                                       revisionStore,
+                                       entity
+                               );
+
                        viewFactoryClass = wb.view.ControllerViewFactory;
                        viewFactoryArguments.unshift(
-                               new wb.view.ToolbarFactory(),
+                               toolbarFactory,
                                entityChangersFactory
                        );
                }
diff --git a/view/resources/wikibase/view/ReadModeViewFactory.js 
b/view/resources/wikibase/view/ReadModeViewFactory.js
new file mode 100644
index 0000000..1ecea4e
--- /dev/null
+++ b/view/resources/wikibase/view/ReadModeViewFactory.js
@@ -0,0 +1,18 @@
+wikibase.view.ReadModeViewFactory = ( function( wb ) {
+'use strict';
+
+var PARENT = wb.view.ViewFactory;
+
+var SELF = util.inherit( 'ReadModeViewFactory', PARENT, {} );
+
+SELF.prototype.getStatementGroupListView = function( entity, 
$statementgrouplistview ) {
+       /* Skip constructing statement views entirely */
+};
+
+SELF.prototype.getSitelinkGroupListView = function( sitelinkSet, 
$sitelinkgrouplistview ) {
+       /* Skip constructing sitelink views entirely */
+};
+
+return SELF;
+
+}( wikibase ) );
diff --git a/view/resources/wikibase/view/ViewFactory.js 
b/view/resources/wikibase/view/ViewFactory.js
index 5cc13c1..9bec537 100644
--- a/view/resources/wikibase/view/ViewFactory.js
+++ b/view/resources/wikibase/view/ViewFactory.js
@@ -53,6 +53,14 @@
                userLanguages,
                vocabularyLookupApiUrl
        ) {
+               if ( ( !structureEditorFactory || 
!structureEditorFactory.getAdder )
+                       || ( !messageProvider || !messageProvider.getMessage )
+                       || !$.isArray( userLanguages )
+                       || ( vocabularyLookupApiUrl && typeof 
vocabularyLookupApiUrl !== 'string' )
+               ) {
+                       throw new Error( 'Required parameter(s) not specified 
properly' );
+               }
+
                this._structureEditorFactory = structureEditorFactory;
                this._contentLanguages = contentLanguages;
                this._dataTypeStore = dataTypeStore;
diff --git a/view/resources/wikibase/view/resources.php 
b/view/resources/wikibase/view/resources.php
index 677c434..dc0ac1e 100644
--- a/view/resources/wikibase/view/resources.php
+++ b/view/resources/wikibase/view/resources.php
@@ -73,6 +73,14 @@
                        )
                ),
 
+               'wikibase.view.ReadModeViewFactory' => $moduleTemplate + array(
+                       'scripts' => 'ReadModeViewFactory.js',
+                       'dependencies' => array(
+                               'wikibase.view.__namespace',
+                               'wikibase.view.ViewFactory'
+                       ),
+               ),
+
                'wikibase.view.ViewFactory' => $moduleTemplate + array(
                        'scripts' => array(
                                'ViewFactory.js'
diff --git a/view/src/ClaimHtmlGenerator.php b/view/src/ClaimHtmlGenerator.php
index e89c062..c4d4d23 100644
--- a/view/src/ClaimHtmlGenerator.php
+++ b/view/src/ClaimHtmlGenerator.php
@@ -87,11 +87,11 @@
         * @since 0.4
         *
         * @param Statement $statement
-        * @param null|string $editSectionHtml has the html for the edit section
+        * @param string $editSectionHtml has the html for the edit section
         *
         * @return string HTML
         */
-       public function getHtmlForClaim( Statement $statement, $editSectionHtml 
= null ) {
+       public function getHtmlForClaim( Statement $statement, $editSectionHtml 
) {
                $mainSnakHtml = $this->snakHtmlGenerator->getSnakHtml(
                        $statement->getMainSnak(),
                        false
@@ -103,6 +103,7 @@
 
                $references = $statement->getReferences();
                $referencesHtml = $this->getHtmlForReferences( $references );
+               $collapseReferences = $editSectionHtml !== '' && 
!$references->isEmpty();
 
                return $this->templateFactory->render(
                        'wikibase-statementview',
@@ -114,7 +115,7 @@
                        $editSectionHtml,
                        $referencesHeadingHtml,
                        $referencesHtml,
-                       count( $references ) ? 'wikibase-initially-collapsed' : 
''
+                       $collapseReferences ? 'wikibase-initially-collapsed' : 
''
                );
        }
 
diff --git a/view/tests/phpunit/ClaimHtmlGeneratorTest.php 
b/view/tests/phpunit/ClaimHtmlGeneratorTest.php
index bd40623..46ff82b 100644
--- a/view/tests/phpunit/ClaimHtmlGeneratorTest.php
+++ b/view/tests/phpunit/ClaimHtmlGeneratorTest.php
@@ -7,6 +7,7 @@
 use ValueFormatters\BasicNumberLocalizer;
 use Wikibase\DataModel\Reference;
 use Wikibase\DataModel\ReferenceList;
+use Wikibase\DataModel\Snak\PropertyNoValueSnak;
 use Wikibase\DataModel\Snak\PropertySomeValueSnak;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Snak\SnakList;
@@ -116,4 +117,42 @@
                return $testCases;
        }
 
+       /**
+        * @dataProvider referencesProvider
+        */
+       public function testCollapsedReferences(
+               Statement $statement,
+               $editSectionHtml,
+               $expected
+       ) {
+               $templateFactory = TemplateFactory::getDefaultInstance();
+               $claimHtmlGenerator = new ClaimHtmlGenerator(
+                       $templateFactory,
+                       $this->getSnakHtmlGeneratorMock(),
+                       new BasicNumberLocalizer(),
+                       new DummyLocalizedTextProvider()
+               );
+
+               $html = $claimHtmlGenerator->getHtmlForClaim( $statement, 
$editSectionHtml );
+
+               $this->assertSame(
+                       $expected ? 1 : 0,
+                       substr_count( $html, 'wikibase-initially-collapsed' )
+               );
+       }
+
+       public function referencesProvider() {
+               $snak = new PropertyNoValueSnak( 1 );
+               $statement = new Statement( $snak );
+               $referencedStatement = clone $statement;
+               $referencedStatement->addNewReference( $snak );
+
+               return [
+                       [ $statement, '', false ],
+                       [ $statement, '<EDIT SECTION>', false ],
+                       [ $referencedStatement, '', false ],
+                       [ $referencedStatement, '<EDIT SECTION>', true ],
+               ];
+       }
+
 }
diff --git a/view/tests/qunit/wikibase/view/ViewFactory.tests.js 
b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
index e7f4b14..2522277 100644
--- a/view/tests/qunit/wikibase/view/ViewFactory.tests.js
+++ b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
@@ -3,9 +3,39 @@
 
        QUnit.module( 'wikibase.view.ViewFactory' );
 
+       function newViewFactory(
+               structureEditorFactory,
+               contentLanguages,
+               dataTypeStore,
+               entityIdHtmlFormatter,
+               entityIdPlainFormatter,
+               entityStore,
+               expertStore,
+               formatterFactory,
+               messageProvider,
+               parserStore,
+               userLanguages,
+               vocabularyLookupApiUrl
+       ) {
+               return new ViewFactory(
+                       structureEditorFactory || { getAdder: 'I am a getter' },
+                       contentLanguages,
+                       dataTypeStore,
+                       entityIdHtmlFormatter,
+                       entityIdPlainFormatter,
+                       entityStore,
+                       expertStore,
+                       formatterFactory,
+                       messageProvider || { getMessage: 'I am a getter' },
+                       parserStore,
+                       userLanguages || [],
+                       vocabularyLookupApiUrl
+               );
+       }
+
        QUnit.test( 'is constructable', function( assert ) {
                assert.expect( 1 );
-               assert.ok( new ViewFactory() instanceof ViewFactory );
+               assert.ok( newViewFactory() instanceof ViewFactory );
        } );
 
        function getEntityStub( type ) {
@@ -18,8 +48,7 @@
 
        QUnit.test( 'getEntityView constructs correct views', function( assert 
) {
                assert.expect( 2 );
-               var entityStore = new wb.store.EntityStore(),
-                       viewFactory = new ViewFactory( null, null, null, null, 
null, entityStore ),
+               var viewFactory = newViewFactory(),
                        fooView = {},
                        $dom = $( '<div/>' ),
                        FooView = $dom.fooview = $.wikibase.fooview = 
sinon.spy();
@@ -33,8 +62,7 @@
 
        QUnit.test( 'getEntityView throws on incorrect views', function( assert 
) {
                assert.expect( 1 );
-               var entityStore = new wb.store.EntityStore(),
-                       viewFactory = new ViewFactory( null, null, null, null, 
null, entityStore );
+               var viewFactory = newViewFactory();
 
                assert.throws(
                        function() {
@@ -47,7 +75,7 @@
        QUnit.test( 'getEntityView passes correct options to views', function( 
assert ) {
                assert.expect( 1 );
                var entity = getEntityStub( 'foo' ),
-                       viewFactory = new ViewFactory(),
+                       viewFactory = newViewFactory(),
                        $dom = $( '<div/>' ),
                        FooView = $dom.fooview = $.wikibase.fooview = 
sinon.spy();
 
@@ -64,7 +92,7 @@
        QUnit.test( 'getSitelinkGroupListView passes correct options to views', 
function( assert ) {
                assert.expect( 1 );
                var sitelinkSet = new wb.datamodel.SiteLinkSet( [] ),
-                       viewFactory = new ViewFactory(),
+                       viewFactory = newViewFactory(),
                        $dom = $( '<div/>' );
 
                sinon.spy( $.wikibase, 'sitelinkgrouplistview' );
@@ -83,7 +111,7 @@
                assert.expect( 1 );
                var groupName = 'groupid',
                        siteLinks = new wb.datamodel.SiteLinkSet( [] ),
-                       viewFactory = new ViewFactory(),
+                       viewFactory = newViewFactory(),
                        $dom = $( '<div/>' );
 
                sinon.stub( $.wikibase, 'sitelinkgroupview' );
@@ -103,7 +131,7 @@
        QUnit.test( 'getSiteLinkListView passes correct options to views', 
function( assert ) {
                assert.expect( 1 );
                var siteLinks = [],
-                       viewFactory = new ViewFactory(),
+                       viewFactory = newViewFactory(),
                        $dom = $( '<div/>' );
 
                sinon.spy( $.wikibase, 'sitelinklistview' );
@@ -122,8 +150,7 @@
        QUnit.test( 'getStatementGroupListView passes correct options to 
views', function( assert ) {
                assert.expect( 1 );
                var entity = new wb.datamodel.Item( 'Q1' ),
-                       structureEditorFactory = { getAdder: function() {} },
-                       viewFactory = new ViewFactory( structureEditorFactory ),
+                       viewFactory = newViewFactory(),
                        $dom = $( '<div/>' );
 
                $dom.statementgrouplistview = sinon.stub( $.wikibase, 
'statementgrouplistview' );
@@ -141,7 +168,7 @@
                assert.expect( 3 );
                var entityId = 'Q1',
                        entityIdHtmlFormatter = {},
-                       viewFactory = new ViewFactory( null, null, null, 
entityIdHtmlFormatter ),
+                       viewFactory = newViewFactory( null, null, null, 
entityIdHtmlFormatter ),
                        ListItemAdapter = sinon.spy( $.wikibase.listview, 
'ListItemAdapter' ),
                        value = new wb.datamodel.StatementGroup( 'P1' );
 
@@ -177,8 +204,7 @@
                                new wb.datamodel.Statement( new 
wb.datamodel.Claim( new wb.datamodel.PropertyNoValueSnak( 'P1' ) ) )
                        ] ),
                        entityId = 'entityId',
-                       structureEditorFactory = { getAdder: function() {} },
-                       viewFactory = new ViewFactory( structureEditorFactory ),
+                       viewFactory = newViewFactory(),
                        $dom = $( '<div/>' );
 
                sinon.stub( $.wikibase.listview, 'ListItemAdapter' );
@@ -206,8 +232,7 @@
                assert.expect( 1 );
                var value = new wb.datamodel.StatementList(),
                        entityId = 'entityId',
-                       structureEditorFactory = { getAdder: function() {} },
-                       viewFactory = new ViewFactory( structureEditorFactory ),
+                       viewFactory = newViewFactory(),
                        $dom = $( '<div/>' );
 
                sinon.stub( $.wikibase.listview, 'ListItemAdapter' );
@@ -231,9 +256,8 @@
                var entityId = 'Q1',
                        value = null,
                        entityIdPlainFormatter = {},
-                       structureEditorFactory = { getAdder: function() {} },
-                       viewFactory = new ViewFactory(
-                               structureEditorFactory,
+                       viewFactory = newViewFactory(
+                               null,
                                null,
                                null,
                                null,
@@ -291,8 +315,7 @@
                var entityId = 'Q1',
                        propertyId = 'propertyId',
                        value = null,
-                       structureEditorFactory = { getAdder: function() {} },
-                       viewFactory = new ViewFactory( structureEditorFactory ),
+                       viewFactory = newViewFactory(),
                        ListItemAdapter = sinon.spy( $.wikibase.listview, 
'ListItemAdapter' ),
                        dom = {};
 
@@ -320,8 +343,7 @@
                assert.expect( 1 );
                var propertyId = 'P1',
                        value = new wb.datamodel.Statement( new 
wb.datamodel.Claim( new wb.datamodel.PropertyNoValueSnak( propertyId ) ) ),
-                       structureEditorFactory = { getAdder: function() {} },
-                       viewFactory = new ViewFactory( structureEditorFactory ),
+                       viewFactory = newViewFactory(),
                        ListItemAdapter = sinon.spy( $.wikibase.listview, 
'ListItemAdapter' ),
                        dom = {};
 
@@ -347,7 +369,7 @@
 
        QUnit.test( 'getListItemAdapterForReferenceView passes correct options 
to ListItemAdapter', function( assert ) {
                assert.expect( 1 );
-               var viewFactory = new ViewFactory(),
+               var viewFactory = newViewFactory(),
                        removeCallback = function() {},
                        ListItemAdapter = sinon.spy( $.wikibase.listview, 
'ListItemAdapter' );
 
@@ -367,7 +389,7 @@
        QUnit.test( 'getReferenceView passes correct options to view', 
function( assert ) {
                assert.expect( 1 );
                var value = null,
-                       viewFactory = new ViewFactory(),
+                       viewFactory = newViewFactory(),
                        removeCallback = function() {},
                        $dom = $( '<div/>' ),
                        referenceview = sinon.stub( $dom, 'referenceview' );
@@ -390,7 +412,7 @@
 
        QUnit.test( 'getListItemAdapterForSnakListView passes correct options 
to ListItemAdapter', function( assert ) {
                assert.expect( 1 );
-               var viewFactory = new ViewFactory(),
+               var viewFactory = newViewFactory(),
                        ListItemAdapter = sinon.spy( $.wikibase.listview, 
'ListItemAdapter' );
 
                viewFactory.getListItemAdapterForSnakListView();
@@ -410,7 +432,7 @@
                assert.expect( 1 );
 
                var value = null,
-                       viewFactory = new ViewFactory(),
+                       viewFactory = newViewFactory(),
                        $dom = $( '<div/>' ),
                        stub = sinon.stub( $dom, 'snaklistview' );
 
@@ -430,7 +452,7 @@
 
        QUnit.test( 'getListItemAdapterForSnakView passes correct options to 
ListItemAdapter', function( assert ) {
                assert.expect( 1 );
-               var viewFactory = new ViewFactory(),
+               var viewFactory = newViewFactory(),
                        ListItemAdapter = sinon.spy( $.wikibase.listview, 
'ListItemAdapter' );
 
                viewFactory.getListItemAdapterForSnakView();
@@ -456,10 +478,10 @@
                        entityStore = {},
                        expertStore = {},
                        formatterFactory = {},
-                       messageProvider = {},
+                       messageProvider = { getMessage: 'I am a getter' },
                        parserStore = {},
                        userLanguages = [],
-                       viewFactory = new ViewFactory(
+                       viewFactory = newViewFactory(
                                null,
                                contentLanguages,
                                dataTypeStore,
@@ -512,14 +534,13 @@
 
        QUnit.test( 'getEntityTermsView passes correct options to views', 
function( assert ) {
                assert.expect( 1 );
-               var contentLanguages = [],
-                       fingerprint = new wb.datamodel.Fingerprint(),
+               var fingerprint = new wb.datamodel.Fingerprint(),
                        message = 'message',
                        messageProvider = { getMessage: function() { return 
message; } },
                        userLanguages = [],
-                       viewFactory = new ViewFactory(
+                       viewFactory = newViewFactory(
                                null,
-                               contentLanguages,
+                               null,
                                null,
                                null,
                                null,

-- 
To view, visit https://gerrit.wikimedia.org/r/304252
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I0df8481402125cf71840dcbe9bead136c11ead6f
Gerrit-PatchSet: 11
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: Aude <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (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