transformHTML( $title, $html )[ 'body' ]; } if ( $params['sectiontitle'] ) { $wikitext = "== " . $params['sectiontitle'] . " ==\n" . $wikitext; } break; case 'reply': $doc = DOMUtils::parseHTML( '' ); if ( $wikitext !== null ) { $container = CommentModifier::prepareWikitextReply( $doc, $wikitext ); } else { $container = CommentModifier::prepareHtmlReply( $doc, $html ); } if ( $signature !== null ) { CommentModifier::appendSignature( $container, $signature ); } $list = CommentModifier::transferReply( $container ); $html = DOMCompat::getOuterHTML( $list ); $wikitext = $this->transformHTML( $title, $html )[ 'body' ]; break; } $apiParams = [ 'action' => 'parse', 'title' => $title->getPrefixedText(), 'text' => $wikitext, 'pst' => '1', 'preview' => '1', 'disableeditsection' => '1', 'prop' => 'text|modules|jsconfigvars', ]; if ( isset( $originalParams['useskin'] ) ) { $apiParams['useskin'] = $originalParams['useskin']; } if ( isset( $originalParams['mobileformat'] ) && $originalParams['mobileformat'] ) { $apiParams['mobileformat'] = '1'; } $context = new DerivativeContext( $this->getContext() ); $context->setRequest( new DerivativeRequest( $context->getRequest(), $apiParams, /* was posted? */ true ) ); $api = new ApiMain( $context, /* enable write? */ false ); $api->execute(); return $api->getResult(); } /** * @see VisualEditorParsoidClientFactory * @return ParsoidClient */ protected function getParsoidClient(): ParsoidClient { return $this->parsoidClientFactory->createParsoidClient( $this->getContext()->getRequest()->getHeader( 'Cookie' ) ); } /** * @warning (T323357) - Calling this method writes to stash, so it should be called * only when we are fetching page HTML for editing. * * @param RevisionRecord $revision * @return array */ abstract protected function requestRestbasePageHtml( RevisionRecord $revision ): array; /** * @param Title $title * @param string $html * @param int|null $oldid * @param string|null $etag * @return array */ abstract protected function transformHTML( Title $title, string $html, int $oldid = null, string $etag = null ): array; /** * @return IContextSource */ abstract public function getContext(); }