Number range filter improvements (#4789)

- Allow minimum or maximum to be unspecified, meaning you want everything up to maximum, or everything above minimum.
- Allow for zero values to work
- Tweak display of infinite values

Fixes #3982.
This commit is contained in:
Ben Thomson 2019-11-28 22:23:28 +08:00 committed by GitHub
parent 566f138eab
commit 9b72c2d181
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 12 deletions

View File

@ -145,18 +145,19 @@ class Filter extends WidgetBase
break;
case 'numberrange':
if ($scope->value && is_array($scope->value) && count($scope->value) === 2 &&
$scope->value[0] &&
$scope->value[1]
if (
$scope->value
&& (is_array($scope->value) && count($scope->value) === 2)
&& (isset($scope->value[0]) || isset($scope->value[1]))
) {
$min = $scope->value[0];
$max = $scope->value[1];
$params['minStr'] = $min ?: '';
$params['min'] = $min ?: null;
$params['minStr'] = $min ?? '∞';
$params['min'] = $min ?? null;
$params['maxStr'] = $max ?: '∞';
$params['max'] = $max ?: null;
$params['maxStr'] = $max ?? '∞';
$params['max'] = $max ?? null;
}
break;
@ -790,7 +791,7 @@ class Filter extends WidgetBase
if (is_array($scope->value) && count($scope->value) > 1) {
list($min, $max) = array_values($scope->value);
if ($min && $max) {
if (isset($min) || isset($max)) {
/*
* Condition
*
@ -1049,8 +1050,7 @@ class Filter extends WidgetBase
if (preg_match($numberRegex, $number)) {
$numbers[] = $number;
} else {
$numbers = [];
break;
$numbers[] = null;
}
}
}

View File

@ -257,7 +257,7 @@
numbers[1] = numbers[1] && numbers[1].match(numberRegex) ? numbers[1] : null
if(numbers[0] || numbers[1]) {
var min = numbers[0] ? numbers[0] : '',
var min = numbers[0] ? numbers[0] : '',
max = numbers[1] ? numbers[1] : '∞'
$setting.text(min + ' → ' + max)

View File

@ -3485,7 +3485,7 @@ numberinput.value=''!==defaultValue?defaultValue:'';})}
FilterWidget.prototype.updateScopeNumberSetting=function($scope,numbers){var $setting=$scope.find('.filter-setting'),numberRegex=/\d*/,reset=false
if(numbers&&numbers.length){numbers[0]=numbers[0]&&numbers[0].match(numberRegex)?numbers[0]:null
if(numbers.length>1){numbers[1]=numbers[1]&&numbers[1].match(numberRegex)?numbers[1]:null
if(numbers[0]||numbers[1]){var min=numbers[0]?numbers[0]:'',max=numbers[1]?numbers[1]:'∞'
if(numbers[0]||numbers[1]){var min=numbers[0]?numbers[0]:'',max=numbers[1]?numbers[1]:'∞'
$setting.text(min+' → '+max)}else{reset=true}}
else if(numbers[0]){$setting.text(numbers[0])}else{reset=true}}
else{reset=true}