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