diff options
Diffstat (limited to 'www/wiki/includes/htmlform/fields/HTMLSizeFilterField.php')
-rw-r--r-- | www/wiki/includes/htmlform/fields/HTMLSizeFilterField.php | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/www/wiki/includes/htmlform/fields/HTMLSizeFilterField.php b/www/wiki/includes/htmlform/fields/HTMLSizeFilterField.php new file mode 100644 index 00000000..145a0ecd --- /dev/null +++ b/www/wiki/includes/htmlform/fields/HTMLSizeFilterField.php @@ -0,0 +1,89 @@ +<?php + +/** + * A size filter field for use on query-type special pages. It looks a bit like: + * + * (o) Min size ( ) Max size: [ ] bytes + * + * Minimum size limits are represented using a positive integer, while maximum + * size limits are represented using a negative integer. + */ +class HTMLSizeFilterField extends HTMLIntField { + public function getSize() { + return isset( $this->mParams['size'] ) ? $this->mParams['size'] : 9; + } + + public function getInputHTML( $value ) { + $attribs = []; + if ( !empty( $this->mParams['disabled'] ) ) { + $attribs['disabled'] = 'disabled'; + } + + $html = Xml::radioLabel( + $this->msg( 'minimum-size' )->text(), + $this->mName . '-mode', + 'min', + $this->mID . '-mode-min', + $value >= 0, + $attribs + ); + $html .= ' ' . Xml::radioLabel( + $this->msg( 'maximum-size' )->text(), + $this->mName . '-mode', + 'max', + $this->mID . '-mode-max', + $value < 0, + $attribs + ); + $html .= ' ' . parent::getInputHTML( $value ? abs( $value ) : '' ); + $html .= ' ' . $this->msg( 'pagesize' )->parse(); + + return $html; + } + + protected function getInputWidget( $params ) { + $this->mParent->getOutput()->addModuleStyles( 'mediawiki.widgets.SizeFilterWidget.styles' ); + + // negative numbers represent "max", positive numbers represent "min" + $value = $params['value']; + + $params['value'] = $value ? abs( $value ) : ''; + + return new MediaWiki\Widget\SizeFilterWidget( [ + 'selectMin' => $value >= 0, + 'textinput' => $params, + 'radioselectinput' => [ + 'name' => $this->mName . '-mode', + 'disabled' => !empty( $this->mParams['disabled'] ), + ], + ] ); + } + + protected function getOOUIModules() { + return [ 'mediawiki.widgets.SizeFilterWidget' ]; + } + + /** + * @param WebRequest $request + * + * @return string|int + */ + public function loadDataFromRequest( $request ) { + $size = $request->getInt( $this->mName ); + if ( !$size ) { + return $this->getDefault(); + } + $size = abs( $size ); + + // negative numbers represent "max", positive numbers represent "min" + if ( $request->getVal( $this->mName . '-mode' ) === 'max' ) { + return -$size; + } else { + return $size; + } + } + + protected function needsLabel() { + return false; + } +} |