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
68
69
|
# File 'lib/active_scaffold/helpers/pagination_helpers.rb', line 18
def (current_page, url_options, options, inner_window, outer_window)
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]
elsif end_number > current_page..last.number
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
next unless page < start_number && page > last_page
html << '..' if page > last_page + 1
html << (page, url_options, options)
last_page = page
end
end
html << '..' if start_number > last_page + 1
[start_number, last_page + 1].max.upto(end_number) do |num|
html << if current_page.number == num
content_tag(:span, num.to_s, :class => 'as_paginate current')
else
(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
safe_join html, ' '
end
|