Fix: scroller for descending (#327)

This commit is contained in:
Simon Hauser
2020-12-11 16:48:14 +01:00
committed by GitHub
parent d5ee177306
commit 6e6fbbc49e
3 changed files with 83 additions and 10 deletions

View File

@@ -126,7 +126,8 @@ function Picker:new(opts)
obj.scroller = p_scroller.create(
get_default(opts.scroll_strategy, config.values.scroll_strategy)
get_default(opts.scroll_strategy, config.values.scroll_strategy),
obj.sorting_strategy
)
return obj

View File

@@ -1,10 +1,33 @@
local scroller = {}
scroller.create = function(strategy)
local calc_count_fn = function(sorting_strategy)
if sorting_strategy == 'ascending' then
return function(a, b) return math.min(a, b) end
else
return function(a, b, row)
if a == b or not row then
return math.max(a, b)
else
local x = a - b
if row < x then
return math.max(a, b) - 1, true
elseif row == a then
return x, true
else
return math.max(a, b)
end
end
end
end
end
scroller.create = function(strategy, sorting_strategy)
local calc_count = calc_count_fn(sorting_strategy)
if strategy == 'cycle' then
return function(max_results, num_results, row)
local count = math.min(max_results, num_results)
local count, b = calc_count(max_results, num_results, row)
if b then return count end
if row >= count then
return 0
@@ -16,7 +39,7 @@ scroller.create = function(strategy)
end
elseif strategy == 'limit' or strategy == nil then
return function(max_results, num_results, row)
local count = math.min(max_results, num_results)
local count = calc_count(max_results, num_results)
if row >= count then
return count - 1