Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 42
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
HTMLSizeFilterField
0.00% covered (danger)
0.00%
0 / 41
0.00% covered (danger)
0.00%
0 / 6
110
0.00% covered (danger)
0.00%
0 / 1
 getSize
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getInputHTML
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 1
12
 getInputWidget
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
6
 getOOUIModules
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 loadDataFromRequest
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 needsLabel
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace MediaWiki\HTMLForm\Field;
4
5use MediaWiki\Request\WebRequest;
6use MediaWiki\Widget\SizeFilterWidget;
7use MediaWiki\Xml\Xml;
8
9/**
10 * A size filter field for use on query-type special pages. It looks a bit like:
11 *
12 *    (o) Min size  ( ) Max size:  [       ] bytes
13 *
14 * Minimum size limits are represented using a positive integer, while maximum
15 * size limits are represented using a negative integer.
16 *
17 * @stable to extend
18 *
19 */
20class HTMLSizeFilterField extends HTMLIntField {
21
22    protected bool $mSelectMin = true;
23
24    public function getSize() {
25        return $this->mParams['size'] ?? 9;
26    }
27
28    public function getInputHTML( $value ) {
29        $attribs = [];
30        if ( !empty( $this->mParams['disabled'] ) ) {
31            $attribs['disabled'] = 'disabled';
32        }
33
34        $html = Xml::radioLabel(
35            $this->msg( 'minimum-size' )->text(),
36            $this->mName . '-mode',
37            'min',
38            $this->mID . '-mode-min',
39            $this->mSelectMin,
40            $attribs
41        );
42        $html .= "\u{00A0}" . Xml::radioLabel(
43            $this->msg( 'maximum-size' )->text(),
44            $this->mName . '-mode',
45            'max',
46            $this->mID . '-mode-max',
47            !$this->mSelectMin,
48            $attribs
49        );
50        $html .= "\u{00A0}" . parent::getInputHTML( $value ? abs( $value ) : '' );
51        $html .= "\u{00A0}" . $this->msg( 'pagesize' )->parse();
52
53        return $html;
54    }
55
56    /**
57     * @inheritDoc
58     * @stable to override
59     */
60    protected function getInputWidget( $params ) {
61        $this->mParent->getOutput()->addModuleStyles( 'mediawiki.widgets.SizeFilterWidget.styles' );
62
63        // negative numbers represent "max", positive numbers represent "min"
64        $value = $params['value'];
65        $params['value'] = $value ? abs( $value ) : '';
66
67        return new SizeFilterWidget( [
68            'selectMin' => $this->mSelectMin,
69            'textinput' => $params,
70            'radioselectinput' => [
71                'name' => $this->mName . '-mode',
72                'disabled' => !empty( $this->mParams['disabled'] ),
73            ],
74        ] );
75    }
76
77    protected function getOOUIModules() {
78        return [ 'mediawiki.widgets.SizeFilterWidget' ];
79    }
80
81    /**
82     * @param WebRequest $request
83     *
84     * @return int
85     */
86    public function loadDataFromRequest( $request ) {
87        $size = abs( $request->getInt( $this->mName, $this->getDefault() ) );
88
89        // negative numbers represent "max", positive numbers represent "min"
90        if ( $request->getVal( $this->mName . '-mode' ) === 'max' ) {
91            $this->mSelectMin = false;
92            return -$size;
93        } else {
94            return $size;
95        }
96    }
97
98    protected function needsLabel() {
99        return false;
100    }
101}
102
103/** @deprecated class alias since 1.42 */
104class_alias( HTMLSizeFilterField::class, 'HTMLSizeFilterField' );