From 6f2ce07c7582cb4e3690a24fb99c2983349ef53c Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Fri, 8 Aug 2025 18:49:40 +0300 Subject: [PATCH] Rename top/active version parameters to top/active page --- app/helpers/numbered_pagination_helper.rb | 66 +++++++++---------- app/views/elements/show.html.erb | 2 +- app/views/old_elements/_actions.html.erb | 2 +- .../numbered_pagination_helper_test.rb | 40 +++++------ 4 files changed, 55 insertions(+), 55 deletions(-) diff --git a/app/helpers/numbered_pagination_helper.rb b/app/helpers/numbered_pagination_helper.rb index c582de226..3f8a1a17a 100644 --- a/app/helpers/numbered_pagination_helper.rb +++ b/app/helpers/numbered_pagination_helper.rb @@ -1,41 +1,41 @@ module NumberedPaginationHelper - def numbered_pagination(top_version, active_version: top_version + 1, window_half_size: 50, step_size: 50, &) + def numbered_pagination(top_page, active_page: top_page + 1, window_half_size: 50, step_size: 50, &) lists = [] - if top_version <= 5 + if top_page <= 5 lists << tag.ul(:class => "pagination pagination-sm mt-1") do - (1..top_version).each do |v| - concat numbered_pagination_item(v, **yield(v), :active => v == active_version) + (1..top_page).each do |page| + concat numbered_pagination_item(page, **yield(page), :active => page == active_page) end end else - start_list_versions = 1..(active_version < 3 ? active_version + 1 : 1) - end_list_versions = (active_version > top_version - 2 ? active_version - 1 : top_version)..top_version + start_list_pages = 1..(active_page < 3 ? active_page + 1 : 1) + end_list_pages = (active_page > top_page - 2 ? active_page - 1 : top_page)..top_page - middle_list_version_sentinels = [start_list_versions.last, end_list_versions.first] - middle_list_version_steps = Range.new(*middle_list_version_sentinels).filter { |v| (v % step_size).zero? } - middle_list_version_window = Range.new([active_version - window_half_size, start_list_versions.last].max, - [active_version + window_half_size, end_list_versions.first].min).to_a - middle_list_versions_with_sentinels = (middle_list_version_sentinels | middle_list_version_steps | middle_list_version_window).sort - middle_list_versions_with_sentinels_and_gaps = [middle_list_versions_with_sentinels.first] + - middle_list_versions_with_sentinels.each_cons(2).flat_map do |previous_version, v| - v == previous_version + 1 ? [v] : [:gap, v] - end - middle_list_versions_with_small_gaps_filled = middle_list_versions_with_sentinels_and_gaps.each_cons(3).map do |previous_version, v, next_version| - if v == :gap && previous_version != :gap && next_version != :gap && next_version - previous_version == 2 - previous_version + 1 + middle_list_page_sentinels = [start_list_pages.last, end_list_pages.first] + middle_list_page_steps = Range.new(*middle_list_page_sentinels).filter { |page| (page % step_size).zero? } + middle_list_page_window = Range.new([active_page - window_half_size, start_list_pages.last].max, + [active_page + window_half_size, end_list_pages.first].min).to_a + middle_list_pages_with_sentinels = (middle_list_page_sentinels | middle_list_page_steps | middle_list_page_window).sort + middle_list_pages_with_sentinels_and_gaps = [middle_list_pages_with_sentinels.first] + + middle_list_pages_with_sentinels.each_cons(2).flat_map do |previous_page, page| + page == previous_page + 1 ? [page] : [:gap, page] + end + middle_list_pages_with_small_gaps_filled = middle_list_pages_with_sentinels_and_gaps.each_cons(3).map do |previous_page, page, next_page| + if page == :gap && previous_page != :gap && next_page != :gap && next_page - previous_page == 2 + previous_page + 1 else - v + page end end - middle_list_versions = middle_list_versions_with_small_gaps_filled + middle_list_pages = middle_list_pages_with_small_gaps_filled lists << tag.ul(:id => "versions-navigation-list-start", :class => "pagination pagination-sm mt-1") do - start_list_versions.each do |v| - concat numbered_pagination_item(v, **yield(v), :active => v == active_version, - :edge => [false, v == start_list_versions.last], - :edge_border => true) + start_list_pages.each do |page| + concat numbered_pagination_item(page, **yield(page), :active => page == active_page, + :edge => [false, page == start_list_pages.last], + :edge_border => true) end end lists << tag.ul(:id => "versions-navigation-list-middle", @@ -43,23 +43,23 @@ module NumberedPaginationHelper "pagination pagination-sm", "overflow-x-auto pb-3", # horizontal scrollbar with reserved space below "pt-1 px-1 mx-n1", # space reserved for focus outlines - "position-relative" # required for centering when clicking "Version #n" + "position-relative" # required for centering when clicking current page links ("Version #n" on pages showing element versions) ]) do - middle_list_versions.each_with_index do |v, i| - edge = [i.zero?, i == middle_list_versions.length - 1] - if v == :gap + middle_list_pages.each_with_index do |page, i| + edge = [i.zero?, i == middle_list_pages.length - 1] + if page == :gap concat numbered_pagination_item("...", :edge => edge) else - concat numbered_pagination_item(v, **yield(v), :active => v == active_version, :edge => edge) + concat numbered_pagination_item(page, **yield(page), :active => page == active_page, :edge => edge) end end end lists << tag.ul(:id => "versions-navigation-list-end", :class => "pagination pagination-sm mt-1") do - end_list_versions.each do |v| - concat numbered_pagination_item(v, **yield(v), :active => v == active_version, - :edge => [v == end_list_versions.first, false], - :edge_border => true) + end_list_pages.each do |page| + concat numbered_pagination_item(page, **yield(page), :active => page == active_page, + :edge => [page == end_list_pages.first, false], + :edge_border => true) end end end diff --git a/app/views/elements/show.html.erb b/app/views/elements/show.html.erb index 476330fad..9c65bef75 100644 --- a/app/views/elements/show.html.erb +++ b/app/views/elements/show.html.erb @@ -29,7 +29,7 @@ - <%= numbered_pagination(@feature.version, :active_version => @feature.version) do |v| + <%= numbered_pagination(@feature.version, :active_page => @feature.version) do |v| { :href => { :controller => "old_#{@type.pluralize}", :action => :show, :version => v }, :title => t("browse.versions_navigation.version", :version => v) } end %> diff --git a/app/views/old_elements/_actions.html.erb b/app/views/old_elements/_actions.html.erb index 8c3d0eb55..222ec078d 100644 --- a/app/views/old_elements/_actions.html.erb +++ b/app/views/old_elements/_actions.html.erb @@ -25,7 +25,7 @@ - <%= numbered_pagination(@current_feature.version, :active_version => @feature.version) do |v| + <%= numbered_pagination(@current_feature.version, :active_page => @feature.version) do |v| { :href => { :version => v }, :title => t("browse.versions_navigation.version", :version => v) } end %> diff --git a/test/helpers/numbered_pagination_helper_test.rb b/test/helpers/numbered_pagination_helper_test.rb index f08c5ba63..7e08c8275 100644 --- a/test/helpers/numbered_pagination_helper_test.rb +++ b/test/helpers/numbered_pagination_helper_test.rb @@ -2,7 +2,7 @@ require "test_helper" class NumberedPaginationHelperTest < ActionView::TestCase def test_numbered_pagination1 - pagination = numbered_pagination(1) { |v| sample_item_data v } + pagination = numbered_pagination(1) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 1 do assert_dom "> li", 1 do @@ -12,7 +12,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination1_active1 - pagination = numbered_pagination(1, :active_version => 1) { |v| sample_item_data v } + pagination = numbered_pagination(1, :active_page => 1) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 1 do assert_dom "> li", 1 do @@ -22,7 +22,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination5 - pagination = numbered_pagination(5) { |v| sample_item_data v } + pagination = numbered_pagination(5) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 1 do assert_dom "> li", 5 do |items| @@ -34,7 +34,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination6 - pagination = numbered_pagination(6) { |v| sample_item_data v } + pagination = numbered_pagination(6) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do @@ -52,7 +52,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination6_active1 - pagination = numbered_pagination(6, :active_version => 1) { |v| sample_item_data v } + pagination = numbered_pagination(6, :active_page => 1) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 2 do |items| @@ -71,7 +71,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination6_active2 - pagination = numbered_pagination(6, :active_version => 2) { |v| sample_item_data v } + pagination = numbered_pagination(6, :active_page => 2) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 3 do |items| @@ -90,7 +90,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination6_active3 - pagination = numbered_pagination(6, :active_version => 3) { |v| sample_item_data v } + pagination = numbered_pagination(6, :active_page => 3) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -109,7 +109,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination6_active4 - pagination = numbered_pagination(6, :active_version => 4) { |v| sample_item_data v } + pagination = numbered_pagination(6, :active_page => 4) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -128,7 +128,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination6_active5 - pagination = numbered_pagination(6, :active_version => 5) { |v| sample_item_data v } + pagination = numbered_pagination(6, :active_page => 5) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -147,7 +147,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination6_active6 - pagination = numbered_pagination(6, :active_version => 6) { |v| sample_item_data v } + pagination = numbered_pagination(6, :active_page => 6) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -166,7 +166,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_window_start_include - pagination = numbered_pagination(50, :window_half_size => 3, :active_version => 3) { |v| sample_item_data v } + pagination = numbered_pagination(50, :window_half_size => 3, :active_page => 3) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -187,7 +187,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_window_start_touch - pagination = numbered_pagination(50, :window_half_size => 3, :active_version => 5) { |v| sample_item_data v } + pagination = numbered_pagination(50, :window_half_size => 3, :active_page => 5) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -210,7 +210,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_window_start_touch_almost - pagination = numbered_pagination(50, :window_half_size => 3, :active_version => 6) { |v| sample_item_data v } + pagination = numbered_pagination(50, :window_half_size => 3, :active_page => 6) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -234,7 +234,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_window_middle - pagination = numbered_pagination(50, :window_half_size => 3, :active_version => 43) { |v| sample_item_data v } + pagination = numbered_pagination(50, :window_half_size => 3, :active_page => 43) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -258,7 +258,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_window_end_touch - pagination = numbered_pagination(50, :window_half_size => 3, :active_version => 46) { |v| sample_item_data v } + pagination = numbered_pagination(50, :window_half_size => 3, :active_page => 46) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -281,7 +281,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_window_end_beyond - pagination = numbered_pagination(50, :window_half_size => 3) { |v| sample_item_data v } + pagination = numbered_pagination(50, :window_half_size => 3) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -299,7 +299,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_step - pagination = numbered_pagination(35, :step_size => 10, :window_half_size => 0) { |v| sample_item_data v } + pagination = numbered_pagination(35, :step_size => 10, :window_half_size => 0) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -321,7 +321,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_step_end_touch - pagination = numbered_pagination(31, :step_size => 10, :window_half_size => 0) { |v| sample_item_data v } + pagination = numbered_pagination(31, :step_size => 10, :window_half_size => 0) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -342,7 +342,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_step_window - pagination = numbered_pagination(35, :active_version => 15, :step_size => 10, :window_half_size => 1) { |v| sample_item_data v } + pagination = numbered_pagination(35, :active_page => 15, :step_size => 10, :window_half_size => 1) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| @@ -368,7 +368,7 @@ class NumberedPaginationHelperTest < ActionView::TestCase end def test_numbered_pagination_step_window_touch - pagination = numbered_pagination(35, :active_version => 12, :step_size => 10, :window_half_size => 1) { |v| sample_item_data v } + pagination = numbered_pagination(35, :active_page => 12, :step_size => 10, :window_half_size => 1) { |n| sample_item_data n } pagination_dom = Rails::Dom::Testing.html_document_fragment.parse(pagination) assert_dom pagination_dom, "ul", :count => 3 do |lists| assert_dom lists[0], "> li", 1 do |items| -- 2.39.5