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

Change subject: Replace wb.formatters.getStore with ValueFormatterFactory
......................................................................


Replace wb.formatters.getStore with ValueFormatterFactory

Bug: T125521
Change-Id: I60935f85f3f01b327c7d79cb3567c4a37521f004
---
M composer.json
M repo/resources/Resources.php
A repo/resources/formatters/ApiValueFormatter.js
A repo/resources/formatters/ApiValueFormatterFactory.js
D repo/resources/formatters/getApiBasedValueFormatterConstructor.js
D repo/resources/formatters/getStore.js
M repo/resources/formatters/resources.php
M repo/resources/wikibase.ui.entityViewInit.js
M 
view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.js
M 
view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.js
M view/resources/wikibase/resources.php
M view/resources/wikibase/view/ViewFactory.js
A view/resources/wikibase/wikibase.ValueFormatterFactory.js
M view/resources/wikibase/wikibase.ValueViewBuilder.js
M view/tests/qunit/wikibase/view/ViewFactory.tests.js
M view/tests/qunit/wikibase/wikibase.ValueViewBuilder.tests.js
16 files changed, 259 insertions(+), 190 deletions(-)

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



diff --git a/composer.json b/composer.json
index 97712a0..177bdd0 100644
--- a/composer.json
+++ b/composer.json
@@ -32,7 +32,7 @@
                "data-values/data-types": "~0.5.0",
                "data-values/serialization": "~1.0",
                "data-values/javascript": "~0.8.0",
-               "data-values/value-view": "~0.15.11",
+               "data-values/value-view": "~0.16.0",
                "wikibase/data-model": "~4.0",
                "wikibase/data-model-serialization": "~2.0",
                "wikibase/internal-serialization": "~2.0",
diff --git a/repo/resources/Resources.php b/repo/resources/Resources.php
index dd8aa2e..ac920bb 100644
--- a/repo/resources/Resources.php
+++ b/repo/resources/Resources.php
@@ -90,7 +90,7 @@
                                'wikibase.dataTypeStore',
                                'wikibase.entityChangers.EntityChangersFactory',
                                'wikibase.experts.getStore',
-                               'wikibase.formatters.getStore',
+                               'wikibase.formatters.ApiValueFormatterFactory',
                                
'wikibase.entityIdFormatter.CachingEntityIdHtmlFormatter',
                                
'wikibase.entityIdFormatter.CachingEntityIdPlainFormatter',
                                
'wikibase.entityIdFormatter.DataValueBasedEntityIdHtmlFormatter',
diff --git a/repo/resources/formatters/ApiValueFormatter.js 
b/repo/resources/formatters/ApiValueFormatter.js
new file mode 100644
index 0000000..24b0d28
--- /dev/null
+++ b/repo/resources/formatters/ApiValueFormatter.js
@@ -0,0 +1,84 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < [email protected] >
+ */
+( function( $, wb, vf, util ) {
+       'use strict';
+
+       wb.formatters = wb.formatters || {};
+
+       var PARENT = vf.ValueFormatter;
+
+       /**
+        * A ValueFormatter which is doing an API request to
+        * the FormatSnakValue API module for formatting a value.
+        *
+        * @constructor
+        * @extends valueFormatters.ValueFormatter
+        * @since 0.5
+        *
+        * @param {wikibase.api.FormatValueCaller} formatValueCaller
+        * @param {Object} additionalOptions
+        * @param {string|null} dataTypeId
+        * @param {string} outputType
+        */
+       wb.formatters.ApiValueFormatter = util.inherit(
+               'WbApiValueFormatter',
+               PARENT,
+               function( formatValueCaller, additionalOptions, dataTypeId, 
outputType ) {
+                       this._formatValueCaller = formatValueCaller;
+                       this._options = additionalOptions;
+                       this._dataTypeId = dataTypeId;
+                       this._outputType = outputType;
+               },
+               {
+                       /**
+                        * @var {wikibase.api.FormatValueCaller}
+                        */
+                       _formatValueCaller: null,
+
+                       /**
+                        * @var {string|null}
+                        */
+                       _dataTypeId: null,
+
+                       /**
+                        * @var {Object}
+                        */
+                       _options: null,
+
+                       /**
+                        * @var {string} outputType
+                        */
+                       _outputType: null,
+
+                       /**
+                        * @see valueFormatters.ValueFormatter.format
+                        * @since 0.1
+                        *
+                        * @param {dataValues.DataValue} dataValue
+                        * @return {jQuery.Promise}
+                        *         Resolved parameters:
+                        *         - {string} Formatted DataValue.
+                        *         - {dataValues.DataValues} Original DataValue 
object.
+                        *         Rejected parameters:
+                        *         - {string} HTML error message.
+                        */
+                       format: function( dataValue ) {
+                               var deferred = $.Deferred();
+
+                               this._formatValueCaller.formatValue( dataValue, 
this._dataTypeId, this._outputType, this._options )
+                               .done( function( formattedValue ) {
+                                       deferred.resolve( formattedValue, 
dataValue );
+                               } )
+                               .fail( function( error ) {
+                                       deferred.reject( error.detailedMessage 
|| error.code );
+                               } );
+
+                               return deferred.promise();
+                       }
+
+               }
+       );
+
+}( jQuery, wikibase, valueFormatters, util ) );
diff --git a/repo/resources/formatters/ApiValueFormatterFactory.js 
b/repo/resources/formatters/ApiValueFormatterFactory.js
new file mode 100644
index 0000000..e6d8aa4
--- /dev/null
+++ b/repo/resources/formatters/ApiValueFormatterFactory.js
@@ -0,0 +1,50 @@
+/**
+ * @licence GNU GPL v2+
+ * @author H. Snater < [email protected] >
+ * @author Adrian Heine <[email protected]>
+ */
+( function( $, wb ) {
+       'use strict';
+
+       var PARENT = wb.ValueFormatterFactory;
+       wb.formatters = wb.formatters || {};
+
+       /**
+        * @param {wikibase.api.FormatValueCaller} apiCaller
+        * @param {string} languageCode
+        */
+       wb.formatters.ApiValueFormatterFactory = util.inherit(
+               PARENT,
+               function( apiCaller, languageCode ) {
+                       this._apiCaller = apiCaller;
+                       this._options = { lang: languageCode };
+               },
+               {
+                       /**
+                        * @type {wikibase.api.FormatValueCaller}
+                        */
+                       _apiCaller: null,
+
+                       /**
+                        * @type {Object}
+                        */
+                       _options: null,
+
+                       /**
+                        * Returns a ValueFormatter instance for the given 
DataType id and output type
+                        *
+                        * @param {string|null} dataTypeId
+                        * @param {string} outputType
+                        * @return {valueFormatters.ValueFormatter}
+                        */
+                       getFormatter: function( dataTypeId, outputType ) {
+                               var options = this._options;
+                               if ( dataTypeId === 'quantity' && outputType 
=== 'text/plain' ) {
+                                       options = $.extend( { applyRounding: 
false, applyUnit: false }, options );
+                               }
+                               return new wb.formatters.ApiValueFormatter( 
this._apiCaller, options, dataTypeId, outputType );
+                       }
+               }
+       );
+
+}( jQuery, wikibase ) );
diff --git a/repo/resources/formatters/getApiBasedValueFormatterConstructor.js 
b/repo/resources/formatters/getApiBasedValueFormatterConstructor.js
deleted file mode 100644
index fe84f56..0000000
--- a/repo/resources/formatters/getApiBasedValueFormatterConstructor.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < [email protected] >
- */
-( function( $, wb, vf, util ) {
-       'use strict';
-
-       wb.formatters = wb.formatters || {};
-
-       var PARENT = vf.ValueFormatter;
-
-       /**
-        * Get a constructor for a ValueFormatter which formats using the given 
wikibase.api.FormatValueCaller
-        *
-        * This is necessary since valueFormatter.ValueFormatterStore returns a 
constructor, not an
-        * instance, and we have to pass in the wikibase.api.RepoApi wrapped in 
a
-        * wikibase.api.FormatValueCaller.
-        *
-        * @param {wikibase.api.FormatValueCaller} apiValueFormatter
-        */
-       wb.formatters.getApiBasedValueFormatterConstructor = function( 
apiValueFormatter ) {
-               /**
-                * Base constructor for objects representing a value formatter 
which is doing an API request to
-                * the FormatSnakValue API module for formatting a value.
-                * @constructor
-                * @extends valueFormatters.ValueFormatter
-                * @since 0.5
-                */
-               return util.inherit( 'WbApiBasedValueFormatter', PARENT, {
-                       /**
-                        * @see valueFormatters.ValueFormatter.parse
-                        * @since 0.1
-                        *
-                        * @param {dataValues.DataValue} dataValue
-                        * @param {string} [dataTypeId]
-                        * @param {string} [outputType] The output's preferred 
MIME type
-                        * @return {jQuery.Promise}
-                        *         Resolved parameters:
-                        *         - {string} Formatted DataValue.
-                        *         - {dataValues.DataValues} Original DataValue 
object.
-                        *         Rejected parameters:
-                        *         - {string} HTML error message.
-                        */
-                       format: function( dataValue, dataTypeId, outputType ) {
-                               var deferred = $.Deferred();
-
-                               // Since dataTypeId and outputType are optional 
parameters to this function as well as
-                               // to 
wikibase.api.FormatValueCaller.formatValue, we use this complicated apply 
arguments pattern.
-                               apiValueFormatter.formatValue.apply(
-                                       apiValueFormatter,
-                                       $.makeArray( arguments ).concat( 
[this._options] )
-                               )
-                               .done( function( formattedValue ) {
-                                       deferred.resolve( formattedValue, 
dataValue );
-                               } )
-                               .fail( function( error ) {
-                                       deferred.reject( error.detailedMessage 
|| error.code );
-                               } );
-
-                               return deferred.promise();
-                       }
-
-               } );
-       };
-
-}( jQuery, wikibase, valueFormatters, util ) );
diff --git a/repo/resources/formatters/getStore.js 
b/repo/resources/formatters/getStore.js
deleted file mode 100644
index 8250d18..0000000
--- a/repo/resources/formatters/getStore.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author H. Snater < [email protected] >
- */
-( function( wb, vf, dv ) {
-       'use strict';
-
-       wb.formatters = wb.formatters || {};
-
-       /**
-        * @param {wikibase.api.RepoApi} api
-        * @param {dataTypes.DataTypeStore} dataTypeStore
-        */
-       wb.formatters.getStore = function( api, dataTypeStore ) {
-               var apiCaller = new wb.api.FormatValueCaller(
-                       api,
-                       dataTypeStore
-               );
-
-               var ApiBasedValueFormatter = 
wb.formatters.getApiBasedValueFormatterConstructor( apiCaller );
-
-               var formatterStore = new vf.ValueFormatterStore( 
vf.NullFormatter );
-
-               formatterStore.registerDataValueFormatter(
-                       ApiBasedValueFormatter,
-                       wb.datamodel.EntityId.TYPE
-               );
-
-               formatterStore.registerDataValueFormatter(
-                       ApiBasedValueFormatter,
-                       dv.GlobeCoordinateValue.TYPE
-               );
-
-               formatterStore.registerDataValueFormatter(
-                       ApiBasedValueFormatter,
-                       dv.QuantityValue.TYPE
-               );
-
-               formatterStore.registerDataValueFormatter(
-                       ApiBasedValueFormatter,
-                       dv.StringValue.TYPE
-               );
-
-               formatterStore.registerDataValueFormatter(
-                       ApiBasedValueFormatter,
-                       dv.TimeValue.TYPE
-               );
-
-               var commonsMediaType = dataTypeStore.getDataType( 
'commonsMedia' );
-               if ( commonsMediaType ) {
-                       formatterStore.registerDataTypeFormatter(
-                               ApiBasedValueFormatter,
-                               commonsMediaType.getId()
-                       );
-               }
-
-               var urlType = dataTypeStore.getDataType( 'url' );
-               if ( urlType ) {
-                       formatterStore.registerDataTypeFormatter(
-                               ApiBasedValueFormatter,
-                               urlType.getId()
-                       );
-               }
-
-               var monolingualTextType = dataTypeStore.getDataType( 
'monolingualtext' );
-               if ( monolingualTextType ) {
-                       formatterStore.registerDataTypeFormatter(
-                               ApiBasedValueFormatter,
-                               monolingualTextType.getId()
-                       );
-               }
-
-               return formatterStore;
-       };
-
-}( wikibase, valueFormatters, dataValues ) );
diff --git a/repo/resources/formatters/resources.php 
b/repo/resources/formatters/resources.php
index d43da03..d9e81b3 100644
--- a/repo/resources/formatters/resources.php
+++ b/repo/resources/formatters/resources.php
@@ -16,9 +16,9 @@
 
        return array(
 
-               'wikibase.formatters.getApiBasedValueFormatterConstructor' => 
$moduleTemplate + array(
+               'wikibase.formatters.ApiValueFormatter' => $moduleTemplate + 
array(
                        'scripts' => array(
-                               'getApiBasedValueFormatterConstructor.js',
+                               'ApiValueFormatter.js',
                        ),
                        'dependencies' => array(
                                'wikibase',
@@ -27,17 +27,14 @@
                        ),
                ),
 
-               'wikibase.formatters.getStore' => $moduleTemplate + array(
+               'wikibase.formatters.ApiValueFormatterFactory' => 
$moduleTemplate + array(
                        'scripts' => array(
-                               'getStore.js',
+                               'ApiValueFormatterFactory.js',
                        ),
                        'dependencies' => array(
-                               'dataValues.values',
-                               'valueFormatters.formatters',
-                               'valueFormatters.ValueFormatterStore',
                                'wikibase.api.FormatValueCaller',
-                               'wikibase.datamodel',
-                               
'wikibase.formatters.getApiBasedValueFormatterConstructor',
+                               'wikibase.formatters.ApiValueFormatter',
+                               'wikibase.ValueFormatterFactory'
                        ),
                ),
 
diff --git a/repo/resources/wikibase.ui.entityViewInit.js 
b/repo/resources/wikibase.ui.entityViewInit.js
index e22a241..9a70b6c 100644
--- a/repo/resources/wikibase.ui.entityViewInit.js
+++ b/repo/resources/wikibase.ui.entityViewInit.js
@@ -4,7 +4,7 @@
  * @author Daniel Werner < daniel.werner at wikimedia.de >
  * @author Adrian Heine < [email protected] >
  */
-( function( $, mw, wb, dataTypeStore, getExpertsStore, getFormatterStore, 
getParserStore, performance ) {
+( function( $, mw, wb, dataTypeStore, getExpertsStore, getParserStore, 
performance ) {
        'use strict';
 
        /**
@@ -98,23 +98,30 @@
                                entity
                        ),
                        contentLanguages = new 
wikibase.WikibaseContentLanguages(),
-                       formatterStore = getFormatterStore( repoApi, 
dataTypeStore ),
+                       formatterFactory = new 
wb.formatters.ApiValueFormatterFactory(
+                               new wb.api.FormatValueCaller(
+                                       repoApi,
+                                       dataTypeStore
+                               ),
+                               userLanguages[0]
+                       ),
                        parserStore = getParserStore( repoApi ),
-                       entityIdFormatter = new ( formatterStore.getFormatter( 
wb.datamodel.EntityId.TYPE ) )( { lang: userLanguages[0] } ),
+                       htmlDataValueEntityIdFormatter = 
formatterFactory.getFormatter( null, 'text/html' ),
+                       plaintextDataValueEntityIdFormatter = 
formatterFactory.getFormatter( null, 'text/plain' ),
                        entityIdParser = new ( parserStore.getParser( 
wb.datamodel.EntityId.TYPE ) )( { lang: userLanguages[0] } ),
                        viewFactory = new wikibase.view.ViewFactory(
                                contentLanguages,
                                dataTypeStore,
                                entityChangersFactory,
                                new 
wb.entityIdFormatter.CachingEntityIdHtmlFormatter(
-                                       new 
wb.entityIdFormatter.DataValueBasedEntityIdHtmlFormatter( entityIdParser, 
entityIdFormatter )
+                                       new 
wb.entityIdFormatter.DataValueBasedEntityIdHtmlFormatter( entityIdParser, 
htmlDataValueEntityIdFormatter )
                                ),
                                new 
wb.entityIdFormatter.CachingEntityIdPlainFormatter(
-                                       new 
wb.entityIdFormatter.DataValueBasedEntityIdPlainFormatter( entityIdParser, 
entityIdFormatter )
+                                       new 
wb.entityIdFormatter.DataValueBasedEntityIdPlainFormatter( entityIdParser, 
plaintextDataValueEntityIdFormatter )
                                ),
                                entityStore,
                                getExpertsStore( dataTypeStore ),
-                               formatterStore,
+                               formatterFactory,
                                {
                                        getMessage: function( key, params ) {
                                                return mw.msg.apply( mw, [ key 
].concat( params ) );
@@ -393,7 +400,6 @@
        wikibase,
        wikibase.dataTypeStore,
        wikibase.experts.getStore,
-       wikibase.formatters.getStore,
        wikibase.parsers.getStore,
        window.performance
 );
diff --git 
a/view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.js
 
b/view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.js
index 540f813..6a556c8 100644
--- 
a/view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.js
+++ 
b/view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdHtmlFormatter.js
@@ -21,7 +21,7 @@
                                var deferred = $.Deferred(),
                                        self = this;
                                this._parser.parse( entityId ).done( function( 
parsed ) {
-                                       return self._formatter.format( parsed, 
null, 'text/html' ).done( function( response ) {
+                                       return self._formatter.format( parsed 
).done( function( response ) {
                                                deferred.resolve( response );
                                        } ).fail( function() {
                                                deferred.resolve( 
mw.html.escape( entityId ) );
diff --git 
a/view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.js
 
b/view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.js
index f835731..a27536c 100644
--- 
a/view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.js
+++ 
b/view/resources/wikibase/entityIdFormatter/DataValueBasedEntityIdPlainFormatter.js
@@ -21,7 +21,7 @@
                                var deferred = $.Deferred(),
                                        self = this;
                                this._parser.parse( entityId ).done( function( 
parsed ) {
-                                       return self._formatter.format( parsed, 
null, 'text/plain' ).done( function( response ) {
+                                       return self._formatter.format( parsed 
).done( function( response ) {
                                                deferred.resolve( response );
                                        } ).fail( function() {
                                                deferred.resolve( entityId );
diff --git a/view/resources/wikibase/resources.php 
b/view/resources/wikibase/resources.php
index 962006c..a3fdf41 100644
--- a/view/resources/wikibase/resources.php
+++ b/view/resources/wikibase/resources.php
@@ -72,6 +72,16 @@
                        ),
                ),
 
+               'wikibase.ValueFormatterFactory' => $moduleTemplate + array(
+                       'scripts' => array(
+                               'wikibase.ValueFormatterFactory.js',
+                       ),
+                       'dependencies' => array(
+                               'util.inherit',
+                               'wikibase',
+                       ),
+               ),
+
        );
 
        return $modules;
diff --git a/view/resources/wikibase/view/ViewFactory.js 
b/view/resources/wikibase/view/ViewFactory.js
index 8bc8073..19e17e9 100644
--- a/view/resources/wikibase/view/ViewFactory.js
+++ b/view/resources/wikibase/view/ViewFactory.js
@@ -29,7 +29,7 @@
         *        Required for dynamically gathering `Entity`/`Property` 
information.
         * @param {jQuery.valueview.ExpertStore} expertStore
         *        Required by the `ValueView` for constructing `expert`s for 
different value types.
-        * @param {valueFormatters.ValueFormatterStore} formatterStore
+        * @param {wikibase.ValueFormatterFactory} formatterFactory
         *        Required by the `ValueView` for formatting entered values.
         * @param {util.MessageProvider} messageProvider
         *        Required by the `ValueView` for showing the user interface in 
the correct language.
@@ -48,7 +48,7 @@
                entityIdPlainFormatter,
                entityStore,
                expertStore,
-               formatterStore,
+               formatterFactory,
                messageProvider,
                parserStore,
                userLanguages,
@@ -61,7 +61,7 @@
                this._entityIdPlainFormatter = entityIdPlainFormatter;
                this._entityStore = entityStore;
                this._expertStore = expertStore;
-               this._formatterStore = formatterStore;
+               this._formatterFactory = formatterFactory;
                this._messageProvider = messageProvider;
                this._parserStore = parserStore;
                // Maybe make userLanguages an argument to getEntityView 
instead of to the constructor
@@ -112,10 +112,10 @@
        SELF.prototype._expertStore = null;
 
        /**
-        * @property {valueFormatters.ValueFormatterStore}
+        * @property {wikibsae.ValueFormatterFactory}
         * @private
         **/
-       SELF.prototype._formatterStore = null;
+       SELF.prototype._formatterFactory = null;
 
        /**
         * @property {util.MessageProvider}
@@ -441,7 +441,7 @@
        SELF.prototype._getValueViewBuilder = function() {
                return new wb.ValueViewBuilder(
                        this._expertStore,
-                       this._formatterStore,
+                       this._formatterFactory,
                        this._parserStore,
                        this._userLanguages && this._userLanguages[0],
                        this._messageProvider,
diff --git a/view/resources/wikibase/wikibase.ValueFormatterFactory.js 
b/view/resources/wikibase/wikibase.ValueFormatterFactory.js
new file mode 100644
index 0000000..d79217b
--- /dev/null
+++ b/view/resources/wikibase/wikibase.ValueFormatterFactory.js
@@ -0,0 +1,17 @@
+( function( util, wb ) {
+
+'use strict';
+
+var SELF = wb.ValueFormatterFactory = function() {
+};
+
+/**
+ * Returns a ValueFormatter instance for the given DataType id and output type
+ *
+ * @param {string|null} dataTypeId
+ * @param {string} outputType
+ * @return {valueFormatters.ValueFormatter}
+ */
+SELF.prototype.getFormatter = util.abstractMember;
+
+}( util, wikibase ) );
diff --git a/view/resources/wikibase/wikibase.ValueViewBuilder.js 
b/view/resources/wikibase/wikibase.ValueViewBuilder.js
index 740db35..0d7794f 100644
--- a/view/resources/wikibase/wikibase.ValueViewBuilder.js
+++ b/view/resources/wikibase/wikibase.ValueViewBuilder.js
@@ -9,7 +9,7 @@
         * @constructor
         *
         * @param {jQuery.valueview.ExpertStore} expertStore
-        * @param {valueFormatters.ValueFormatterStore} formatterStore
+        * @param {wikibase.ValueFormatterFactory} formatterFactory
         * @param {valueParsers.ValueParserStore} parserStore
         * @param {string} language
         * @param {util.MessageProvider} messageProvider
@@ -18,7 +18,7 @@
         */
        var SELF = wb.ValueViewBuilder = function WbValueViewBuilder(
                expertStore,
-               formatterStore,
+               formatterFactory,
                parserStore,
                language,
                messageProvider,
@@ -27,25 +27,30 @@
        ) {
                this._baseOptions = {
                        expertStore: expertStore,
-                       formatterStore: formatterStore,
                        parserStore: parserStore,
                        language: language,
                        messageProvider: messageProvider,
                        contentLanguages: contentLanguages,
                        vocabularyLookupApiUrl: vocabularyLookupApiUrl || null
                };
+               this._formatterFactory = formatterFactory;
        };
 
        $.extend( SELF.prototype, {
                /**
-                * @type {Object}
+                * @var {Object}
                 */
                _baseOptions: null,
 
                /**
+                * @var {wikibase.ValueFormatterFactory}
+                */
+               _formatterFactory: null,
+
+               /**
                 * @param {jQuery} $valueViewDom
-                * @param {dataTypes.DataType} dataType
-                * @param {dataValues.DataValue} dataValue
+                * @param {dataTypes.DataType|null} dataType
+                * @param {dataValues.DataValue|null} dataValue
                 *
                 * @return {jQuery.valueview}
                 */
@@ -61,8 +66,17 @@
                        return valueView;
                },
 
+               /**
+                * @param {dataTypes.DataType|null} dataType
+                * @param {dataValues.DataValue|null} dataValue
+                *
+                * @return {Object}
+                */
                _getOptions: function( dataType, dataValue ) {
+                       var dataTypeId = dataType && dataType.getId();
                        var valueViewOptions = $.extend( {}, this._baseOptions, 
{
+                               htmlFormatter: 
this._formatterFactory.getFormatter( dataTypeId, 'text/html' ),
+                               plaintextFormatter: 
this._formatterFactory.getFormatter( dataTypeId, 'text/plain' ),
                                value: dataValue
                        } );
 
diff --git a/view/tests/qunit/wikibase/view/ViewFactory.tests.js 
b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
index 62b9ea3..85c1558 100644
--- a/view/tests/qunit/wikibase/view/ViewFactory.tests.js
+++ b/view/tests/qunit/wikibase/view/ViewFactory.tests.js
@@ -342,7 +342,7 @@
                        entityIdPlainFormatter = {},
                        entityStore = {},
                        expertStore = {},
-                       formatterStore = {},
+                       formatterFactory = {},
                        messageProvider = {},
                        parserStore = {},
                        userLanguages = [],
@@ -354,7 +354,7 @@
                                entityIdPlainFormatter,
                                entityStore,
                                expertStore,
-                               formatterStore,
+                               formatterFactory,
                                messageProvider,
                                parserStore,
                                userLanguages
@@ -435,7 +435,7 @@
                        entityIdPlainFormatter = {},
                        entityStore = {},
                        expertStore = {},
-                       formatterStore = {},
+                       formatterFactory = {},
                        messageProvider = {},
                        parserStore = {},
                        userLanguages = [],
@@ -447,7 +447,7 @@
                                entityIdPlainFormatter,
                                entityStore,
                                expertStore,
-                               formatterStore,
+                               formatterFactory,
                                messageProvider,
                                parserStore,
                                userLanguages
@@ -490,7 +490,7 @@
 
                sinon.assert.calledWith( wb.ValueViewBuilder,
                        expertStore,
-                       formatterStore,
+                       formatterFactory,
                        parserStore,
                        userLanguages[0],
                        messageProvider,
@@ -514,7 +514,7 @@
                        entityIdPlainFormatter = {},
                        entityStore = {},
                        expertStore = {},
-                       formatterStore = {},
+                       formatterFactory = {},
                        messageProvider = {},
                        parserStore = {},
                        userLanguages = [],
@@ -526,7 +526,7 @@
                                entityIdPlainFormatter,
                                entityStore,
                                expertStore,
-                               formatterStore,
+                               formatterFactory,
                                messageProvider,
                                parserStore,
                                userLanguages
@@ -557,7 +557,7 @@
 
                sinon.assert.calledWith( wb.ValueViewBuilder,
                        expertStore,
-                       formatterStore,
+                       formatterFactory,
                        parserStore,
                        userLanguages[0],
                        messageProvider,
diff --git a/view/tests/qunit/wikibase/wikibase.ValueViewBuilder.tests.js 
b/view/tests/qunit/wikibase/wikibase.ValueViewBuilder.tests.js
index 09dbe92..76cb9f7 100644
--- a/view/tests/qunit/wikibase/wikibase.ValueViewBuilder.tests.js
+++ b/view/tests/qunit/wikibase/wikibase.ValueViewBuilder.tests.js
@@ -29,7 +29,10 @@
                        valueView = vvAndDom.vv,
                        $dom = vvAndDom.$dom;
 
-               var valueViewBuilder = new wb.ValueViewBuilder();
+               var valueViewBuilder = new wb.ValueViewBuilder(
+                       null,
+                       { getFormatter: function() {} }
+               );
 
                var returnValue = valueViewBuilder.initValueView( $dom );
 
@@ -41,12 +44,12 @@
                var vvAndDom = getValueViewAndDom(),
                        $dom = vvAndDom.$dom,
                        expertStore = {},
-                       formatterStore = {},
+                       formatterFactory = { getFormatter: function() {} },
                        parserStore = {};
 
                var valueViewBuilder = new wb.ValueViewBuilder(
                        expertStore,
-                       formatterStore,
+                       formatterFactory,
                        parserStore,
                        null,
                        null
@@ -56,8 +59,32 @@
 
                sinon.assert.calledWith( $dom.valueview, sinon.match( {
                        expertStore: expertStore,
-                       formatterStore: formatterStore,
                        parserStore: parserStore
+               } ) );
+       } );
+
+       QUnit.test( 'initValueView passes formatters', function( assert ) {
+               assert.expect( 1 );
+               var vvAndDom = getValueViewAndDom(),
+                       $dom = vvAndDom.$dom,
+                       htmlFormatter = {},
+                       plaintextFormatter = {},
+                       formatterFactory = {
+                               getFormatter: function( _, outputType ) {
+                                       return outputType === 'text/html' ? 
htmlFormatter : plaintextFormatter;
+                               }
+                       };
+
+               var valueViewBuilder = new wb.ValueViewBuilder(
+                       null,
+                       formatterFactory
+               );
+
+               valueViewBuilder.initValueView( $dom );
+
+               sinon.assert.calledWith( $dom.valueview, sinon.match( {
+                       plaintextFormatter: plaintextFormatter,
+                       htmlFormatter: htmlFormatter
                } ) );
        } );
 
@@ -68,7 +95,7 @@
 
                var valueViewBuilder = new wb.ValueViewBuilder(
                        null,
-                       null,
+                       { getFormatter: function() {} },
                        null,
                        'de',
                        null
@@ -89,7 +116,7 @@
 
                var valueViewBuilder = new wb.ValueViewBuilder(
                        null,
-                       null,
+                       { getFormatter: function() {} },
                        null,
                        null,
                        messageProvider
@@ -111,7 +138,10 @@
                                getType: sinon.spy( function() { return 
dataValueType; } )
                        };
 
-               var valueViewBuilder = new wb.ValueViewBuilder();
+               var valueViewBuilder = new wb.ValueViewBuilder(
+                       null,
+                       { getFormatter: function() {} }
+               );
 
                valueViewBuilder.initValueView( $dom, null, dataValue );
 
@@ -132,7 +162,10 @@
                                getDataValueType: sinon.spy( function() { 
return dataTypeDataValueType; } )
                        };
 
-               var valueViewBuilder = new wb.ValueViewBuilder();
+               var valueViewBuilder = new wb.ValueViewBuilder(
+                       null,
+                       { getFormatter: function() {} }
+               );
 
                valueViewBuilder.initValueView( $dom, dataType );
 

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I60935f85f3f01b327c7d79cb3567c4a37521f004
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Heine <[email protected]>
Gerrit-Reviewer: Adrian Heine <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: JanZerebecki <[email protected]>
Gerrit-Reviewer: Jonas Kress (WMDE) <[email protected]>
Gerrit-Reviewer: Legoktm <[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