public function testBuildConfigProperty() { $property = new Property(new PropertyId('P330'), null, 'string'); $this->addLabels($property); $mainSnakPropertyId = $this->addStatements($property); $configBuilder = new ParserOutputJsConfigBuilder(); $configVars = $configBuilder->build($property); $this->assertWbEntityId('P330', $configVars); $expectedSerialization = $this->getSerialization($property, $mainSnakPropertyId); $expectedSerialization['datatype'] = 'string'; $this->assertWbEntity($expectedSerialization, $configVars); $this->assertSerializationEqualsEntity($property, json_decode($configVars['wbEntity'], true)); }
/** * Creates the parser output for the given entity revision. * * @since 0.5 * * @note: the new ParserOutput will be registered as a watcher with $options by * calling $options->registerWatcher( array( $parserOutput, 'recordOption' ) ). * * @param EntityRevision $entityRevision * @param ParserOptions $options * @param bool $generateHtml * * @throws InvalidArgumentException * @return ParserOutput */ public function getParserOutput(EntityRevision $entityRevision, ParserOptions $options, $generateHtml = true) { $parserOutput = new ParserOutput(); $options->registerWatcher(array($parserOutput, 'recordOption')); // @note: SIDE EFFECT: the call to $options->getUserLang() effectively splits // the parser cache. It gets reported to the ParserOutput which is registered // as a watcher to $options above. if ($options->getUserLang() !== $this->languageCode) { // The language requested by $parserOptions is different from what // this generator was configured for. This indicates an inconsistency. throw new InvalidArgumentException('Unexpected user language in ParserOptions'); } $entity = $entityRevision->getEntity(); $updater = new EntityParserOutputDataUpdater($parserOutput, $this->dataUpdaters); $updater->processEntity($entity); $updater->finish(); $configVars = $this->configBuilder->build($entity); $parserOutput->addJsConfigVars($configVars); // FIXME: OCP violation - https://phabricator.wikimedia.org/T75495 if ($entity instanceof Item) { $this->addBadgesToParserOutput($parserOutput, $entity->getSiteLinkList()); } $this->addTitleTextToParserOutput($parserOutput, $entity); if ($generateHtml) { $this->addHtmlToParserOutput($parserOutput, $entityRevision, $this->getEntityInfo($parserOutput), $options->getEditSection()); } else { // If we don't have HTML, the ParserOutput in question // shouldn't be cacheable. $parserOutput->updateCacheExpiry(0); } //@todo: record sitelinks as iwlinks $this->addModules($parserOutput); //FIXME: some places, like Special:NewItem, don't want to override the page title. // But we still want to use OutputPage::addParserOutput to apply the modules etc from the ParserOutput. // So, for now, we leave it to the caller to override the display title, if desired. // set the display title //$parserOutput->setTitleText( $entity>getLabel( $langCode ) ); // Sometimes extensions like SpamBlacklist might call getParserOutput // before the id is assigned, during the process of creating a new entity. // in that case, no alternate links are added, which probably is no problem. if ($entity->getId() !== null) { $this->addAlternateLinks($parserOutput, $entity->getId()); } return $parserOutput; }