1 module NumberedPaginationHelper
2 def element_versions_pagination(top_version, active_version: 0, &)
6 lists << tag.ul(:class => "pagination pagination-sm mt-1") do
7 (1..top_version).each do |v|
8 concat element_versions_pagination_item(v, **yield(v), :active => v == active_version)
12 start_list_versions = 1..1
13 end_list_versions = top_version..top_version
14 middle_list_versions = (start_list_versions.last + 1)..(end_list_versions.first - 1)
16 lists << tag.ul(:class => "pagination pagination-sm mt-1") do
17 start_list_versions.each do |v|
18 concat element_versions_pagination_item(v, **yield(v), :active => v == active_version,
19 :edge => [false, v == start_list_versions.last],
23 lists << tag.ul(:class => [
24 "pagination pagination-sm",
25 "overflow-x-scroll pb-3", # horizontal scrollbar with reserved space below
26 "pt-1" # space reserved for focus outlines
28 middle_list_versions.each do |v|
29 concat element_versions_pagination_item(v, **yield(v), :active => v == active_version,
30 :edge => [v == start_list_versions.last + 1,
31 v == end_list_versions.first - 1])
34 lists << tag.ul(:class => "pagination pagination-sm mt-1") do
35 end_list_versions.each do |v|
36 concat element_versions_pagination_item(v, **yield(v), :active => v == active_version,
37 :edge => [v == end_list_versions.first, false],
43 tag.div safe_join(lists), :class => "d-flex align-items-start"
48 def element_versions_pagination_item(body, href: nil, title: nil, active: false, edge: [false, false], edge_border: false)
49 link_class = ["page-link", { "rounded-start-0" => edge.first,
50 "border-start-0" => edge.first && !edge_border,
51 "rounded-end-0" => edge.last,
52 "border-end-0" => edge.last && !edge_border }]
53 link = link_to body, href, :class => link_class, :title => title
54 tag.li link, :class => ["page-item", { "active" => active }]