*/
use MediaWiki\Linker\LinkRenderer;
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\ResultWrapper;
class ChangesList extends ContextSource {
+ const CSS_CLASS_PREFIX = 'mw-changeslist-';
+
/**
* @var Skin
*/
*/
protected $linkRenderer;
+ /**
+ * @var array
+ */
+ protected $filterGroups;
+
/**
* Changeslist constructor
*
* @param Skin|IContextSource $obj
+ * @param array $filterGroups Array of ChangesListFilterGroup objects (currently optional)
*/
- public function __construct( $obj ) {
+ public function __construct( $obj, array $filterGroups = [] ) {
if ( $obj instanceof IContextSource ) {
$this->setContext( $obj );
$this->skin = $obj->getSkin();
$this->preCacheMessages();
$this->watchMsgCache = new HashBagOStuff( [ 'maxKeys' => 50 ] );
$this->linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+ $this->filterGroups = $filterGroups;
}
/**
* Some users might want to use an enhanced list format, for instance
*
* @param IContextSource $context
+ * @param array $groups Array of ChangesListFilterGroup objects (currently optional)
* @return ChangesList
*/
- public static function newFromContext( IContextSource $context ) {
+ public static function newFromContext( IContextSource $context, array $groups = [] ) {
$user = $context->getUser();
$sk = $context->getSkin();
$list = null;
if ( Hooks::run( 'FetchChangesList', [ $user, &$sk, &$list ] ) ) {
$new = $context->getRequest()->getBool( 'enhanced', $user->getOption( 'usenewrc' ) );
- return $new ? new EnhancedChangesList( $context ) : new OldChangesList( $context );
+ return $new ?
+ new EnhancedChangesList( $context, $groups ) :
+ new OldChangesList( $context, $groups );
} else {
return $list;
}
$logType = $rc->mAttribs['rc_log_type'];
if ( $logType ) {
- $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType );
+ $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'log-' . $logType );
} else {
- $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
+ $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns' .
$rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
}
// Indicate watched status on the line to allow for more
// comprehensive styling.
$classes[] = $watched && $rc->mAttribs['rc_timestamp'] >= $watched
- ? 'mw-changeslist-line-watched'
- : 'mw-changeslist-line-not-watched';
+ ? self::CSS_CLASS_PREFIX . 'line-watched'
+ : self::CSS_CLASS_PREFIX . 'line-not-watched';
+
+ $classes = array_merge( $classes, $this->getHTMLClassesForFilters( $rc ) );
+
+ return $classes;
+ }
+
+ /**
+ * Get an array of CSS classes attributed to filters for this row
+ *
+ * @param RecentChange $rc
+ * @return array Array of CSS classes
+ */
+ protected function getHTMLClassesForFilters( $rc ) {
+ $classes = [];
+
+ if ( $this->filterGroups !== null ) {
+ foreach ( $this->filterGroups as $filterGroup ) {
+ foreach ( $filterGroup->getFilters() as $filter ) {
+ $filter->applyCssClassIfNeeded( $this, $rc, $classes );
+ }
+ }
+ }
return $classes;
}
$diffLink = $this->linkRenderer->makeKnownLink(
$rc->getTitle(),
new HtmlArmor( $this->message['diff'] ),
- [],
+ [ 'class' => 'mw-changeslist-diff' ],
$query
);
}
$diffhist .= $this->linkRenderer->makeKnownLink(
$rc->getTitle(),
new HtmlArmor( $this->message['hist'] ),
- [],
+ [ 'class' => 'mw-changeslist-history' ],
[
'curid' => $rc->mAttribs['rc_cur_id'],
'action' => 'history'
# TODO: Deprecate the $s argument, it seems happily unused.
$s = '';
+ # Avoid PHP 7.1 warning from passing $this by reference
+ $changesList = $this;
Hooks::run( 'ChangesListInsertArticleLink',
- [ &$this, &$articlelink, &$s, &$rc, $unpatrolled, $watched ] );
+ [ &$changesList, &$articlelink, &$s, &$rc, $unpatrolled, $watched ] );
return "{$s} {$articlelink}";
}