mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-11-15 03:44:02 +00:00
8e44b43df0
Goal: ----- Finishing the work from Iadb7757debe000025e52770ca51ebcf24ca8ee66 by changing CommentParser::parse() to return a data object, instead of the whole parser. Changes: -------- ThreadItemSet.php: ThreadItemSet.js: * New data class to access the results of parsing a discussion. Most methods and properties are moved from CommentParser with no changes. CommentParser.php: Parser.js: * parse() returns a new ThreadItemSet. * Remove methods moved to ThreadItemSet. * Placeholder headings are generated slightly differently, as we process things in a different order. * Grouping threads and computing IDs/names is no longer lazy. We always needed IDs/names anyway. * computeId() explicitly uses a ThreadItemSet to check the existing IDs when de-duplicating. controller.js: * Move the code for turning some nodes annotated by CommentFormatter into a ThreadItemSet (previously a Parser) from controller#init to ThreadItemSet.static.newFromAnnotatedNodes, and rewrite it to handle assigning parents/replies and recalculating legacy IDs more nicely. * mw.dt.pageThreads is now a ThreadItemSet. Change-Id: I49bfe019aa460651447fd383f73eafa9d7180a92
38 lines
986 B
PHP
38 lines
986 B
PHP
<?php
|
|
|
|
namespace MediaWiki\Extension\DiscussionTools;
|
|
|
|
use MediaWiki\MediaWikiServices;
|
|
use MediaWiki\Revision\RevisionRecord;
|
|
use Title;
|
|
use Wikimedia\Parsoid\Utils\DOMCompat;
|
|
use Wikimedia\Parsoid\Utils\DOMUtils;
|
|
|
|
trait ApiDiscussionToolsTrait {
|
|
/**
|
|
* @param RevisionRecord $revision
|
|
* @return ThreadItemSet
|
|
*/
|
|
protected function parseRevision( RevisionRecord $revision ): ThreadItemSet {
|
|
$response = $this->requestRestbasePageHtml( $revision );
|
|
|
|
$doc = DOMUtils::parseHTML( $response['body'] );
|
|
$container = DOMCompat::getBody( $doc );
|
|
|
|
CommentUtils::unwrapParsoidSections( $container );
|
|
|
|
$title = Title::newFromLinkTarget(
|
|
$revision->getPageAsLinkTarget()
|
|
);
|
|
|
|
$parser = MediaWikiServices::getInstance()->getService( 'DiscussionTools.CommentParser' );
|
|
return $parser->parse( $container, $title );
|
|
}
|
|
|
|
/**
|
|
* @param RevisionRecord $revision
|
|
* @return array
|
|
*/
|
|
abstract protected function requestRestbasePageHtml( RevisionRecord $revision ): array;
|
|
}
|