14use OOUI\ButtonGroupWidget;
42 $this->mSort = $this->
getRequest()->getText(
'sort' );
43 if ( !array_key_exists( $this->mSort, $this->
getFieldNames() )
50 } elseif ( $this->
getRequest()->getBool(
'desc' ) ) {
55 parent::__construct(
null, $linkRenderer );
68 $body = parent::getBody();
86 $body = parent::getBody();
89 $pout->
setRawText( $navigation . $body . $navigation );
105 foreach ( $fields as $field => $name ) {
106 if ( strval( $name ) ==
'' ) {
107 $s .= Html::rawElement(
'th', [],
"\u{00A0}" ) .
"\n";
113 if ( $this->mSort == $field ) {
118 $class =
"$sortClass mw-datatable-is-sorted mw-datatable-is-descending";
123 $class =
"$sortClass mw-datatable-is-sorted mw-datatable-is-ascending";
125 $query[
'desc'] =
'1';
129 $link = $this->
makeLink( htmlspecialchars( $name ), $query, $linkType );
130 $s .= Html::rawElement(
'th', [
'class' => $class ], $link ) .
"\n";
136 $ret = Html::openElement(
'table', [
139 $ret .= Html::rawElement(
'thead', [], Html::rawElement(
'tr', [],
"\n" . $s .
"\n" ) );
140 $ret .= Html::openElement(
'tbody' ) .
"\n";
150 return "</tbody></table>\n";
158 $msgEmpty = $this->
msg(
'table_pager_empty' )->text();
159 return Html::rawElement(
'tr', [],
160 Html::element(
'td', [
'colspan' => $colspan ], $msgEmpty ) );
169 $this->mCurrentRow = $row;
170 $s = Html::openElement(
'tr', $this->
getRowAttrs( $row ) ) .
"\n";
173 foreach ( $fieldNames as $field => $name ) {
174 $value = $row->$field ??
null;
175 $formatted = strval( $this->
formatValue( $field, $value ) );
177 if ( $formatted ==
'' ) {
178 $formatted =
"\u{00A0}";
181 $s .= Html::rawElement(
'td', $this->
getCellAttrs( $field, $value ), $formatted ) .
"\n";
184 $s .= Html::closeElement(
'tr' ) .
"\n";
232 return [
'class' =>
'TablePager_col_' . $field ];
250 return 'mw-datatable';
258 return 'TablePager_nav';
266 return 'TablePager_sort';
282 $types = [
'first',
'prev',
'next',
'last' ];
290 foreach ( $types as $type ) {
291 $buttons[] =
new ButtonWidget( [
297 'classes' => [
'TablePager-button-' . $type ],
298 'flags' => [
'progressive' ],
300 'label' => $this->
msg(
'table_pager_' . $type )->text(),
301 'href' => $queries[ $type ] ?
302 $title->getLinkURL( $queries[ $type ] + $this->getDefaultQuery() ) :
304 'icon' => $type ===
'prev' ?
'previous' : $type,
305 'disabled' => $queries[ $type ] === false
308 return (
new ButtonGroupWidget( [
319 parent::getModuleStyles(), [
'oojs-ui.styles.icons-movement' ]
330 $select = new
XmlSelect(
'limit', false, $this->mLimit );
332 foreach ( $attribs as $name => $value ) {
333 $select->setAttribute( $name, $value );
335 return $select->getHTML();
346 # Add the current limit from the query string
347 # to avoid that the limit is lost after clicking Go next time
348 if ( !in_array( $this->mLimit, $this->mLimitsShown ) ) {
349 $this->mLimitsShown[] = $this->mLimit;
350 sort( $this->mLimitsShown );
353 foreach ( $this->mLimitsShown as $key => $value ) {
354 # The pair is either $index => $limit, in which case the $value
355 # will be numeric, or $limit => $text, in which case the $value
357 if ( is_int( $value ) ) {
359 $text = $this->getLanguage()->formatNum( $limit );
364 $ret[$text] = $limit;
379 $noResubmit = (array)$noResubmit;
380 $query = $this->getRequest()->getQueryValues();
381 foreach ( $noResubmit as $name ) {
382 unset( $query[$name] );
385 foreach ( $query as $name => $value ) {
386 if ( is_array( $value ) ) {
390 $s .= Html::hidden( $name, $value ) .
"\n";
401 return Html::rawElement(
407 "\n" . $this->getLimitDropdown()
416 private function getLimitDropdown() {
417 # Make the select with some explanatory text
418 $msgSubmit = $this->msg(
'table_pager_limit_submit' )->escaped();
420 return $this->msg(
'table_pager_limit' )
421 ->rawParams( $this->getLimitSelect() )->escaped() .
422 "\n<input type=\"submit\" value=\"$msgSubmit\"/>\n" .
423 $this->getHiddenFields( [
'limit' ] );
470class_alias( TablePager::class,
'TablePager' );
wfScript( $script='index')
Get the URL path to a MediaWiki entry point.
setContext(IContextSource $context)
msg( $key,... $params)
Get a Message object with context set Parameters are the same as wfMessage()
Interface for objects which can provide a MediaWiki context on request.