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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/liquid4-rails/tags/paginate_tag.rb', line 36
def render(context)
@context = context
context.stack do
collection = @context[@collection_name].presence || @context.environments[0][@collection_name]
raise ::Liquid::ArgumentError.new("Cannot paginate collection '#{@collection_name}'. Not found.") if collection.nil?
if collection.is_a? Array
paginated_collection = Kaminari.paginate_array(collection.to_a).page(current_page).per(@page_size)
elsif collection.respond_to?(:page)
paginated_collection = collection.page(current_page).per(@page_size)
end
page_count = paginated_collection.total_pages
= {}
['collection'] = paginated_collection
['current_offset'] = (current_page-1) * @page_size
['current_page'] = current_page
['page_size'] = @page_size
['pages'] = page_count
['items'] = paginated_collection.total_count
['previous'] = link('« Previous'.html_safe, current_page-1 ) unless 1 >= current_page
['next'] = link('Next »'.html_safe, current_page+1 ) unless page_count < current_page+1
['parts'] = []
hellip_break = false
if page_count > 1
1.upto(page_count) do |page|
if current_page == page
['parts'] << no_link(page)
elsif page == 1
['parts'] << link(page, page)
elsif page == page_count - 1
['parts'] << link(page, page)
elsif page <= current_page - window_size or page >= current_page + window_size
next if hellip_break
['parts'] << no_link('…')
hellip_break = true
next
else
['parts'] << link(page, page)
end
hellip_break = false
end
end
context['paginate'] =
super
end
end
|