8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'lib/active_scaffold/helpers/pagination_helpers.rb', line 8
def (current_page, url_options, options, inner_window, outer_window)
unless active_scaffold_config.store_user_settings
url_options.merge!(:search => search_params) if search_params.present?
if active_scaffold_config.list.user.user_sorting?
column, direction = active_scaffold_config.list.user.sorting.first
url_options.merge!(:sort => column.name, :sort_direction => direction)
end
end
start_number = current_page.number - inner_window
end_number = current_page.number + inner_window
start_number = 1 if start_number <= 0
if current_page..infinite?
offsets = [20, 100]
else
end_number = current_page..last.number if end_number > current_page..last.number
end
html = []
if current_page.number == 1
last_page = 0
else
last_page = 1
last_page.upto([last_page + outer_window, current_page.number - 1].min) do |num|
html << (num, url_options, options)
last_page = num
end
end
if current_page..infinite?
offsets.reverse.each do |offset|
page = current_page.number - offset
if page < start_number && page > last_page
html << '..' if page > last_page + 1
html << (page, url_options, options)
last_page = page
end
end
end
html << ".." if start_number > last_page + 1
[start_number, last_page + 1].max.upto(end_number) do |num|
if current_page.number == num
html << content_tag(:span, num.to_s, {:class => "as_paginate current"})
else
html << (num, url_options, options)
end
end
if current_page..infinite?
offsets.each do |offset|
html << '..' << (current_page.number + offset, url_options, options)
end
else
html << ".." unless end_number >= current_page..last.number - outer_window - 1
[end_number + 1, current_page..last.number - outer_window].max.upto(current_page..last.number) do |num|
html << (num, url_options, options)
end
end
html.join(' ').html_safe
end
|