]> git.openstreetmap.org Git - rails.git/commitdiff
Add Bootstrap styling to changeset node/way/relation page links
authorAnton Khorev <tony29@yandex.ru>
Tue, 3 Oct 2023 02:00:17 +0000 (05:00 +0300)
committerAnton Khorev <tony29@yandex.ru>
Thu, 16 Nov 2023 10:21:13 +0000 (13:21 +0300)
app/views/browse/_paging_nav.html.erb
lib/classic_pagination/pagination_helper.rb

index e13b1a9b85e84abe2e3efcf27e2ad9dfd93a4e26..02a7aa2c8e31c58f111d797152ccdb32ce55c21f 100644 (file)
@@ -4,11 +4,7 @@
   </div>
   <% if pages.page_count > 1 %>
     <div class="col-auto">
-      <h4>
-        <span class="border border-lightgrey rounded p-1">
-          <%= raw pagination_links_each(pages, {}) { |n| link_to(n, page_param => n) } %>
-        </span>
-      </h4>
+      <%= raw pagination_links_bootstrap(pages, {}) { |n| url_for(page_param => n) } %>
     </div>
   <% end %>
 </div>
index 3ff3c3b950974f515bb4f41cc9e09617d320d3f0..ed65944bc35e242dbf1c0df8240d8e9ec1a9e194 100644 (file)
@@ -130,6 +130,62 @@ module ActionView
 
         html
       end
+
+      # 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'>"
+
+        if always_show_anchors && !(wp_first = window_pages[0]).first?
+          html << bootstrap_page_item(first.number.to_s, yield(first.number))
+          html << bootstrap_page_item("...") 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(page.number.to_s)
+                  else
+                    bootstrap_page_item(page.number.to_s, yield(page.number))
+                  end
+        end
+
+        if always_show_anchors && !(wp_last = window_pages[-1]).last?
+          html << bootstrap_page_item("...") if last.number - wp_last.number > 1
+          html << bootstrap_page_item(last.number.to_s, yield(last.number))
+        end
+
+        html << "</ul>"
+
+        html
+      end
+      
+      private
+
+      def bootstrap_page_item(body, url = nil)
+        if url
+          content_tag "li", :class => "page-item" do
+            link_to body, url, :class => "page-link"
+          end
+        else
+          content_tag "li", :class => "page-item disabled" do
+            content_tag "a", body, :class => "page-link"
+          end
+        end
+      end
     end
   end
 end