Math/MathWikidataHook.php
lyrianos93 946a18d14c Implement datatype 'Math' for Wikidata
This change implements all components to use the datatype 'Math' in Wikidata.
Because 'String 'is used as value type, only the Formatter and Validator are needed to be implemended.

The components are:
* hooks
* Formatter class
* Validator class
* Test cases

Bug: T67397
Change-Id: Ic64fd6c8560f48052e2db24ae1f013d48a82b5e9
2016-01-11 22:29:29 +00:00

57 lines
1.9 KiB
PHP

<?php
use ValueFormatters\FormatterOptions;
use ValueParsers\StringParser;
use Wikibase\Repo\Parsers\WikibaseStringValueNormalizer;
use Wikibase\Repo\Validators\CompositeValidator;
use Wikibase\Repo\WikibaseRepo;
class MathWikidataHook {
/*
* Add Datatype "Math" to the Wikibase Repository
*/
public static function onWikibaseRepoDataTypes( array &$dataTypeDefinitions ) {
$dataTypeDefinitions['PT:math'] = array(
'value-type' => 'string',
'validator-factory-callback' => function() {
// load validator builders
$factory = WikibaseRepo::getDefaultValidatorBuilders();
// initialize an array with string validators
// returns an array of validators
// that add basic string validation such as preventing empty strings
$validators = $factory->buildStringValidators();
$validators[] = new MathValidator();
return $validators;
},
'parser-factory-callback' => function( ParserOptions $options ) {
$repo = WikibaseRepo::getDefaultInstance();
$normalizer = new WikibaseStringValueNormalizer( $repo->getStringNormalizer() );
return new StringParser( $normalizer );
},
'formatter-factory-callback' => function( $format, FormatterOptions $options ) {
global $wgOut;
$styles = array( 'ext.math.desktop.styles', 'ext.math.scripts', 'ext.math.styles' );
$wgOut->addModuleStyles( $styles );
return new MathFormatter( $format );
},
);
}
/*
* Add Datatype "Math" to the Wikibase Client
*/
public static function onWikibaseClientDataTypes( array &$dataTypeDefinitions ) {
$dataTypeDefinitions['PT:math'] = array(
'value-type' => 'string',
'formatter-factory-callback' => function( $format, FormatterOptions $options ) {
global $wgOut;
$styles = array( 'ext.math.desktop.styles', 'ext.math.scripts', 'ext.math.styles' );
$wgOut->addModuleStyles( $styles );
return new MathFormatter( $format );
},
);
}
}