X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/081ac24295eb65573df5656879557bd51894dbec..b46f6b513231dfac72e955e897375ceb03f451ff:/lib/classic_pagination/pagination_helper.rb?ds=sidebyside diff --git a/lib/classic_pagination/pagination_helper.rb b/lib/classic_pagination/pagination_helper.rb index ae03b82b2..72d16fc98 100644 --- a/lib/classic_pagination/pagination_helper.rb +++ b/lib/classic_pagination/pagination_helper.rb @@ -13,7 +13,7 @@ module ActionView :always_show_anchors => true, :link_to_current_page => false, :params => {} - } + }.freeze end # Creates a basic HTML link bar for the given +paginator+. Links will be created @@ -113,11 +113,11 @@ module ActionView end window_pages.each do |page| - if current_page == page && !link_to_current_page - html << page.number.to_s - else - html << yield(page.number) - end + html << if current_page == page && !link_to_current_page + page.number.to_s + else + yield(page.number) + end html << " " end @@ -130,6 +130,40 @@ module ActionView html end - end # PaginationHelper - end # Helpers -end # ActionView + + def pagination_items(paginator, options) + options = DEFAULT_OPTIONS.merge(options) + link_to_current_page = options[:link_to_current_page] + always_show_anchors = options[:always_show_anchors] + + current_page = paginator.current_page + window_pages = current_page.window(options[:window_size]).pages + + first = paginator.first + last = paginator.last + + items = [] + + if always_show_anchors && !(wp_first = window_pages[0]).first? + items.push [first.number.to_s, first.number] + items.push ["...", "disabled"] if wp_first.number - first.number > 1 + end + + window_pages.each do |page| + if current_page == page && !link_to_current_page + items.push [page.number.to_s, "active"] + else + items.push [page.number.to_s, page.number] + end + end + + if always_show_anchors && !(wp_last = window_pages[-1]).last? + items.push ["...", "disabled"] if last.number - wp_last.number > 1 + items.push [last.number.to_s, last.number] + end + + items + end + end + end +end