Aleksey Bekh-Ivanov (WMDE) has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/361498 )
Change subject: [DNM] Prototype of expert dynamic registration
......................................................................
[DNM] Prototype of expert dynamic registration
TODO:
* Create tests
* Change all experts to use `module.exports = ` pattern to return constructor
* Change config for all types to contain "expert-module" key
Change-Id: I0252d16ec531b4aee65e51029fee3051b37f872e
---
M lib/includes/DataTypeDefinitions.php
M repo/WikibaseRepo.datatypes.php
A repo/includes/Modules/PropertyValueExpertsModule.php
M repo/includes/WikibaseRepo.php
M repo/resources/Resources.php
M repo/resources/experts/getStore.js
M repo/resources/experts/resources.php
7 files changed, 76 insertions(+), 1 deletion(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/98/361498/1
diff --git a/lib/includes/DataTypeDefinitions.php
b/lib/includes/DataTypeDefinitions.php
index 9651626..6c5f5ce 100644
--- a/lib/includes/DataTypeDefinitions.php
+++ b/lib/includes/DataTypeDefinitions.php
@@ -142,6 +142,19 @@
return array_keys( $ptDefinitions );
}
+ public function getExpertModules() {
+ $ptDefinitions = $this->getFilteredByPrefix(
$this->dataTypeDefinitions, 'PT:' );
+
+ return array_map(
+ function ( array $d ) {
+ return $d['expert-module'];
+ },
+ $ptDefinitions
+ );
+
+ return $this->getMapForDefinitionField( 'expert-module' );
+ }
+
/**
* @param string $field
*
diff --git a/repo/WikibaseRepo.datatypes.php b/repo/WikibaseRepo.datatypes.php
index 97c898c..3cd00c7 100644
--- a/repo/WikibaseRepo.datatypes.php
+++ b/repo/WikibaseRepo.datatypes.php
@@ -110,6 +110,7 @@
) {
return new CommonsMediaRdfBuilder( $vocab );
},
+ 'expert-module' =>
'jquery.valueview.experts.CommonsMediaType',
),
'PT:geo-shape' => array(
'validator-factory-callback' => function() {
diff --git a/repo/includes/Modules/PropertyValueExpertsModule.php
b/repo/includes/Modules/PropertyValueExpertsModule.php
new file mode 100644
index 0000000..0ff4e4c
--- /dev/null
+++ b/repo/includes/Modules/PropertyValueExpertsModule.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace Wikibase\Repo\Modules;
+
+use ResourceLoaderContext;
+use Wikibase\Lib\DataTypeDefinitions;
+
+class PropertyValueExpertsModule extends \ResourceLoaderModule {
+
+ /**
+ * @var DataTypeDefinitions
+ */
+ private $dataTypeDefinitions;
+
+ public function __construct( DataTypeDefinitions $dataTypeDefinitions )
{
+
+ $this->dataTypeDefinitions = $dataTypeDefinitions;
+ }
+
+ public function getScript( ResourceLoaderContext $context ) {
+
+ $json = \XML::encodeJsVar(
$this->dataTypeDefinitions->getExpertModules() );
+
+ //TODO Throw exception if no expert module defined. Probably
not here, but somewhere.
+ //TODO Change all experts to use `module.exports =` construct
+
+ $js = <<<JS
+module.exports = ( function () {
+ 'use strict';
+ return $json;
+}() );
+JS;
+
+ return $js;
+ }
+
+ public function getDependencies( ResourceLoaderContext $context = null
) {
+ return array_values(
$this->dataTypeDefinitions->getExpertModules() );
+ }
+
+}
+
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 967768f..185a666 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -85,6 +85,7 @@
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Lib\Store\EntityStore;
use Wikibase\Lib\Store\EntityStoreWatcher;
+use Wikibase\Repo\Modules\PropertyValueExpertsModule;
use Wikibase\Repo\Modules\SettingsValueProvider;
use Wikibase\Rdf\EntityRdfBuilderFactory;
use Wikibase\Repo\ChangeOp\Deserialization\ChangeOpDeserializerFactory;
@@ -1983,4 +1984,10 @@
return $this->repositoryDefinitions->getConceptBaseUris();
}
+ public function getPropertyValueExpertsModule() {
+
+
+ return new
PropertyValueExpertsModule($this->getDataTypeDefinitions());
+ }
+
}
diff --git a/repo/resources/Resources.php b/repo/resources/Resources.php
index 89940bf..3bbee5c 100644
--- a/repo/resources/Resources.php
+++ b/repo/resources/Resources.php
@@ -2,6 +2,7 @@
use DataTypes\Modules\DataTypesModule;
use Wikibase\Repo\Modules\MediaWikiConfigModule;
+use Wikibase\Repo\Modules\PropertyValueExpertsModule;
use Wikibase\Repo\WikibaseRepo;
/**
@@ -172,6 +173,12 @@
),
),
+ 'wikibase.experts.modules' => $moduleTemplate + [
+ 'factory' => function () {
+ return
WikibaseRepo::getDefaultInstance()->getPropertyValueExpertsModule();
+ }
+ ],
+
);
return array_merge(
diff --git a/repo/resources/experts/getStore.js
b/repo/resources/experts/getStore.js
index a786913..53a140a 100644
--- a/repo/resources/experts/getStore.js
+++ b/repo/resources/experts/getStore.js
@@ -5,6 +5,8 @@
( function ( wb, vv, dv ) {
'use strict';
+ var registeredExperts = require( 'wikibase.experts.modules' );
+
var MODULE = wb.experts;
/**
@@ -41,8 +43,10 @@
// Register experts for data types defined in Wikibase. Since
those data types are defined by a
// setting, it needs to be checked whether they are actually
defined.
+ //TODO After fixing all expert modules and PT declarations
`dataTypeIdToExpertConstructor` should be built dynamically
+
var dataTypeIdToExpertConstructor = {
- commonsMedia: vv.experts.CommonsMediaType,
+ commonsMedia:
require(registeredExperts['commonsMedia']), // Comment this line to test that
it is failing
'geo-shape': vv.experts.GeoShape,
'tabular-data': vv.experts.TabularData,
'external-id': vv.experts.StringValue,
diff --git a/repo/resources/experts/resources.php
b/repo/resources/experts/resources.php
index fe1c8e3..855c0f4 100644
--- a/repo/resources/experts/resources.php
+++ b/repo/resources/experts/resources.php
@@ -30,6 +30,7 @@
'getStore.js',
),
'dependencies' => array(
+ 'wikibase.experts.modules',
'dataValues.values',
'jquery.valueview.ExpertStore',
'jquery.valueview.experts.CommonsMediaType',
--
To view, visit https://gerrit.wikimedia.org/r/361498
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0252d16ec531b4aee65e51029fee3051b37f872e
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aleksey Bekh-Ivanov (WMDE) <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits