Jonas Kress (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/363582 )

Change subject: Override datatype VT:wikibase-entityid and inject fake formatter
......................................................................

Override datatype VT:wikibase-entityid and inject fake formatter

Overrides datatype for entityid and inject a fake formatter when
formatting HTML, so we can replace entity HTML link with fake one

Change-Id: If4268c52f8d8b76be57e102e95becb8edd7a2f25
---
M WikibaseLexeme.datatypes.php
1 file changed, 50 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseLexeme 
refs/changes/82/363582/1

diff --git a/WikibaseLexeme.datatypes.php b/WikibaseLexeme.datatypes.php
index 7d27897..5887c73 100644
--- a/WikibaseLexeme.datatypes.php
+++ b/WikibaseLexeme.datatypes.php
@@ -16,17 +16,64 @@
  *
  * @license GPL-2.0+
  */
-
+use ValueFormatters\FormatterOptions;
+use ValueFormatters\ValueFormatter;
 use Wikibase\Lexeme\DataModel\Lexeme;
+use Wikibase\Lib\SnakFormatter;
+use Wikibase\Rdf\DedupeBag;
+use Wikibase\Rdf\EntityMentionListener;
+use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Rdf\Values\EntityIdRdfBuilder;
 use Wikibase\Repo\WikibaseRepo;
+use Wikibase\Repo\Parsers\EntityIdValueParser;
+use Wikimedia\Purtle\RdfWriter;
+
+$newEntityIdParser = function ( ParserOptions $options ) {
+       $repo = WikibaseRepo::getDefaultInstance();
+       return new EntityIdValueParser( $repo->getEntityIdParser() );
+};
+
+class FakeEntityIdFormatter implements ValueFormatter {
+       private $formatter;
+
+       public function __construct( ValueFormatter $formatter ) {
+               $this->formatter = $formatter;
+       }
+
+       public function format( $value ) {
+               $html = $this->formatter->format( $value );
+               return preg_replace( '/href="(.*?)"/', 
'href="./Lexeme:L11#F1"', $html );
+       }
+}
 
 return [
        'PT:wikibase-lexeme' => [
                'expert-module' => 'wikibase.experts.Lexeme',
-               'validator-factory-callback' => function() {
+               'validator-factory-callback' => function () {
                        $factory = WikibaseRepo::getDefaultValidatorBuilders();
                        return $factory->getEntityValidators( 
Lexeme::ENTITY_TYPE );
                },
-               'value-type' => 'wikibase-entityid',
+               'value-type' => 'wikibase-entityid'
        ],
+       'VT:wikibase-entityid' => [  // TODO: remove this section
+               'validator-factory-callback' => function () {
+                       $factory = WikibaseRepo::getDefaultValidatorBuilders();
+                       return $factory->buildEntityValidators();
+               },
+               'parser-factory-callback' => $newEntityIdParser,
+               'formatter-factory-callback' => function ( $format, 
FormatterOptions $options ) {
+                       $factory = 
WikibaseRepo::getDefaultValueFormatterBuilders();
+
+                       if ( $format === SnakFormatter::FORMAT_HTML ) {
+                               return new FakeEntityIdFormatter(
+                                       $factory->newEntityIdFormatter( 
$format, $options ) );
+                       }
+
+                       return $factory->newEntityIdFormatter( $format, 
$options );
+               },
+               'rdf-builder-factory-callback' => function ( $flags, 
RdfVocabulary $vocab, RdfWriter $writer,
+                       EntityMentionListener $tracker, DedupeBag $dedupe ) {
+                       return new EntityIdRdfBuilder( $vocab, $tracker );
+               }
+       ]
 ];

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If4268c52f8d8b76be57e102e95becb8edd7a2f25
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: Jonas Kress (WMDE) <jonas.kr...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to