]> git.openstreetmap.org Git - rails.git/blobdiff - lib/classic_pagination/pagination_helper.rb
Adjust sizes of changeset element headers/pagination
[rails.git] / lib / classic_pagination / pagination_helper.rb
index 18decb119e1ae01234c7212e37cb1258b62b0c39..3ff7fbf4e24bbc5f167a4b471082f8d43ba527cc 100644 (file)
@@ -130,6 +130,68 @@ module ActionView
 
         html
       end
 
         html
       end
-    end # PaginationHelper
-  end # Helpers
-end # ActionView
+
+      # Same as above, but
+      # - with bootstrap classes
+      # - invoked block returns the page url
+      def pagination_links_bootstrap(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
+        return unless link_to_current_page || window_pages.length > 1
+
+        first = paginator.first
+        last = paginator.last
+
+        html = ""
+
+        html << "<ul class='pagination pagination-sm mb-1'>"
+
+        if always_show_anchors && !(wp_first = window_pages[0]).first?
+          html << bootstrap_page_item_link(first.number.to_s, yield(first.number))
+          html << bootstrap_page_item_disabled("...") if wp_first.number - first.number > 1
+        end
+
+        window_pages.each do |page|
+          html << if current_page == page && !link_to_current_page
+                    bootstrap_page_item_active(page.number.to_s)
+                  else
+                    bootstrap_page_item_link(page.number.to_s, yield(page.number))
+                  end
+        end
+
+        if always_show_anchors && !(wp_last = window_pages[-1]).last?
+          html << bootstrap_page_item_disabled("...") if last.number - wp_last.number > 1
+          html << bootstrap_page_item_link(last.number.to_s, yield(last.number))
+        end
+
+        html << "</ul>"
+
+        html
+      end
+      
+      private
+
+      def bootstrap_page_item_disabled(body)
+        content_tag "li", :class => "page-item disabled" do
+          content_tag "span", body, :class => "page-link"
+        end
+      end
+
+      def bootstrap_page_item_active(body)
+        content_tag "li", :class => "page-item active", :'aria-current' => "page" do
+          content_tag "span", body, :class => "page-link"
+        end
+      end
+
+      def bootstrap_page_item_link(body, url)
+        content_tag "li", :class => "page-item" do
+          link_to body, url, :class => "page-link"
+        end
+      end
+    end
+  end
+end