]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2662 Create a pagination helper
authorFabrice Bellingard <bellingard@gmail.com>
Mon, 19 Dec 2011 07:30:37 +0000 (08:30 +0100)
committerFabrice Bellingard <bellingard@gmail.com>
Mon, 19 Dec 2011 07:41:28 +0000 (08:41 +0100)
It is currently used for the review listing page, but it can
normally be used elsewhere.

sonar-server/src/main/webapp/WEB-INF/app/controllers/project_reviews_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/controllers/reviews_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/helpers/application_helper.rb
sonar-server/src/main/webapp/WEB-INF/app/views/reviews/_list.html.erb

index e20078c83928941ae1edd7c99d556607669bcb10..b778001d4350f9e3549aa65aa52dc6c4b7d7cd15 100644 (file)
@@ -33,19 +33,19 @@ class ProjectReviewsController < ApplicationController
       @security_exclusions = true
     end
 
-    # table pagination
-    @page_size = 20
-    @page_size = params[:page_size].to_i if Api::Utils.is_number?(params[:page_size]) && params[:page_size].to_i > 5
-    @total_number = @reviews.size
-    if @reviews.size > @page_size
-      @page_id = (params[:page_id] ? params[:page_id].to_i : 1)
-      @page_count = @reviews.size / @page_size
-      @page_count += 1 if (@reviews.size % @page_size > 0)
-      from = (@page_id-1) * @page_size
-      to = (@page_id*@page_size)-1
-      to = @reviews.size-1 if to >= @reviews.size
-      @reviews = @reviews[from..to]
-    end
+#    # table pagination
+#    @page_size = 20
+#    @page_size = params[:page_size].to_i if Api::Utils.is_number?(params[:page_size]) && params[:page_size].to_i > 5
+#    @total_number = @reviews.size
+#    if @reviews.size > @page_size
+#      @page_id = (params[:page_id] ? params[:page_id].to_i : 1)
+#      @page_count = @reviews.size / @page_size
+#      @page_count += 1 if (@reviews.size % @page_size > 0)
+#      from = (@page_id-1) * @page_size
+#      to = (@page_id*@page_size)-1
+#      to = @reviews.size-1 if to >= @reviews.size
+#      @reviews = @reviews[from..to]
+#    end
   end
 
 end
index fbf09d1994dd4d4196ed8c111c3f46b1e649fa5a..c8db5e02216a559793dd13d480267053dfece25d 100644 (file)
@@ -435,7 +435,7 @@ class ReviewsController < ApplicationController
       options['to']=@to
     end
     unless @id == ''
-      if is_number? @id
+      if Api::Utils.is_integer? @id
         options['id'] = @id
       else
         options['id'] = -1
@@ -449,24 +449,6 @@ class ReviewsController < ApplicationController
     if found_reviews.size != @reviews.size
       @security_exclusions = true
     end
-
-    # table pagination
-    @page_size = 20
-    @page_size = params[:page_size].to_i if is_number?(params[:page_size]) && params[:page_size].to_i > 5
-    @total_number = @reviews.size
-    if @reviews.size > @page_size
-      @page_id = (params[:page_id] ? params[:page_id].to_i : 1)
-      @page_count = @reviews.size / @page_size
-      @page_count += 1 if (@reviews.size % @page_size > 0)
-      from = (@page_id-1) * @page_size
-      to = (@page_id*@page_size)-1
-      to = @reviews.size-1 if to >= @reviews.size
-      @reviews = @reviews[from..to]
-    end
-  end
-
-  def is_number?(s)
-    true if Float(s) rescue false
   end
 
   def has_rights_to_modify?(object)
index 324f7b3344c635282dac7ac55b2cc51511f32f99..2321c8a6b00f2ea27a0390add1c6ad3e9d595851 100644 (file)
@@ -550,4 +550,47 @@ module ApplicationHelper
     html = options[:default].to_s if html.nil? && options[:default]
     html
   end
+  
+  #
+  # Creates a pagination section for the given array (items_array) if its size exceeds the pagination size (default: 20).
+  # Upon completion of this method, the HTML is returned and the given array contains only the selected elements.
+  #
+  # In any case, the HTML that is returned contains the message 'x results', where x is the total number of elements
+  # in the items_array object.
+  #
+  # === Optional parameters
+  # * page_size: the number of elements to display at the same time (= the pagination size)
+  # 
+  def paginate(items_array, options={})
+    html = items_array.size.to_s + " " + message('results').downcase
+    
+    page_size = options[:page_size] || 20    
+    if items_array.size > page_size
+      # computes the pagination elements
+      page_id = (params[:page_id] ? params[:page_id].to_i : 1)
+      page_count = items_array.size / page_size
+      page_count += 1 if (items_array.size % page_size > 0)
+      from = (page_id-1) * page_size
+      to = (page_id*page_size)-1
+      to = items_array.size-1 if to >= items_array.size
+      
+      # render the pagination links
+      html += " | "
+      html += link_to_if page_id>1, message('paging_previous'), {:overwrite_params => {:page_id => page_id-1}}
+      html += " "
+      for index in 1..page_count
+        html += link_to_unless index==page_id, index.to_s, {:overwrite_params => {:page_id => index}}
+        html += " "
+      end
+      html += link_to_if page_id<page_count, message('paging_next'), {:overwrite_params => {:page_id => 1+page_id}}
+      
+      # and adapt the items_array object according to the pagination
+      items_to_keep = items_array[from..to]
+      items_array.clear
+      items_to_keep.each {|i| items_array << i} 
+    end
+    
+    html    
+  end
+  
 end
index 945b68097a3807c5357f279631c6b15f9f4dc3c5..2c9b0133aa4e9ba0c7abfc7783a5d5f6aebc7201 100644 (file)
       <tfoot>
       <tr>
         <td colspan="6">
-          <%= @total_number -%> <%= message('results').downcase -%>
-          <% if @page_count %>
-            |
-            <%= link_to_if @page_id>1, message('paging_previous'), {:overwrite_params => {:page_id => @page_id-1}} %>
-            <% for index in 1..@page_count %>
-              <%= link_to_unless index==@page_id, index.to_s, {:overwrite_params => {:page_id => index}} %>
-            <% end %>
-            <%= link_to_if @page_id<@page_count, message('paging_next'), {:overwrite_params => {:page_id => 1+@page_id}} %>
-          <% end %>
+          <%= paginate(@reviews) -%>
         </td>
       </tr>
       </tfoot>