From 9b72c2d181ce3c121abf54949809e760113d2f5b Mon Sep 17 00:00:00 2001 From: Ben Thomson Date: Thu, 28 Nov 2019 22:23:28 +0800 Subject: [PATCH] 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. --- modules/backend/widgets/Filter.php | 20 +++++++++---------- modules/system/assets/ui/js/filter.numbers.js | 2 +- modules/system/assets/ui/storm-min.js | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/backend/widgets/Filter.php b/modules/backend/widgets/Filter.php index ddb8b6892..a508007fe 100644 --- a/modules/backend/widgets/Filter.php +++ b/modules/backend/widgets/Filter.php @@ -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; } } } diff --git a/modules/system/assets/ui/js/filter.numbers.js b/modules/system/assets/ui/js/filter.numbers.js index 1a2cb071f..d0c8cef0f 100644 --- a/modules/system/assets/ui/js/filter.numbers.js +++ b/modules/system/assets/ui/js/filter.numbers.js @@ -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) diff --git a/modules/system/assets/ui/storm-min.js b/modules/system/assets/ui/storm-min.js index 7576ace78..f4c8efa10 100644 --- a/modules/system/assets/ui/storm-min.js +++ b/modules/system/assets/ui/storm-min.js @@ -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}