[PATCH conductor 2/3] BZ802772: Add pagination to pools#index and pools#show
ifarkas at redhat.com
ifarkas at redhat.com
Tue Mar 20 16:48:42 UTC 2012
From: Imre Farkas <ifarkas at redhat.com>
https://bugzilla.redhat.com/show_bug.cgi?id=802772
---
src/app/controllers/deployments_controller.rb | 7 +++++-
src/app/controllers/pools_controller.rb | 23 ++++++++++++++++-----
src/app/models/instance.rb | 3 --
src/app/models/pool.rb | 4 ++-
src/app/stylesheets/custom.scss | 5 ++++
src/app/views/deployments/_list.html.haml | 5 ++-
src/app/views/deployments/_pretty_view.html.haml | 8 +++---
src/app/views/layouts/_filter_table.html.haml | 3 ++
src/app/views/pools/_header_index.html.haml | 2 +-
src/app/views/pools/_pretty_list.html.haml | 10 ++++++--
src/app/views/pools/show.html.haml | 3 +-
src/config/initializers/will_paginate.rb | 2 +
src/config/locales/en.yml | 3 +-
src/public/javascripts/backbone/models.js | 7 ++++-
src/public/javascripts/backbone/routers.js | 1 +
src/public/javascripts/backbone/views.js | 18 ++++++++++++++++-
16 files changed, 78 insertions(+), 26 deletions(-)
create mode 100644 src/config/initializers/will_paginate.rb
diff --git a/src/app/controllers/deployments_controller.rb b/src/app/controllers/deployments_controller.rb
index d65dea3..3842872 100644
--- a/src/app/controllers/deployments_controller.rb
+++ b/src/app/controllers/deployments_controller.rb
@@ -379,7 +379,12 @@ class DeploymentsController < ApplicationController
{ :name => t("providers.provider"), :sortable => false }
]
@pools = Pool.list_for_user(current_user, Privilege::CREATE, Deployment)
- @deployments = Deployment.includes(:owner).apply_filters(:preset_filter_id => params[:deployments_preset_filter], :search_filter => params[:deployments_search]).list_for_user(current_user, Privilege::VIEW).where('deployments.pool_id' => @pools).order(sort_column(Deployment, "deployments.name") +' '+ sort_direction).paginate(:page => params[:page] || 1)
+ @deployments = Deployment.includes(:owner).
+ apply_filters(:preset_filter_id => params[:deployments_preset_filter], :search_filter => params[:deployments_search]).
+ list_for_user(current_user, Privilege::VIEW).
+ where('deployments.pool_id' => @pools).
+ order(sort_column(Deployment, "deployments.name") +' '+ sort_direction).
+ paginate(:page => params[:page], :per_page => PER_PAGE)
end
def count_additional_quota(deployment)
diff --git a/src/app/controllers/pools_controller.rb b/src/app/controllers/pools_controller.rb
index 11b86aa..cfefe34 100644
--- a/src/app/controllers/pools_controller.rb
+++ b/src/app/controllers/pools_controller.rb
@@ -47,15 +47,22 @@ class PoolsController < ApplicationController
if filter_view?
case @details_tab[:id]
when 'pools'
- @pools = Pool.apply_filters(:preset_filter_id => params[:pools_preset_filter], :search_filter => params[:pools_search]).list_for_user(current_user, Privilege::VIEW).list(sort_column(Pool), sort_direction)
+ @pools = Pool.apply_filters(:preset_filter_id => params[:pools_preset_filter], :search_filter => params[:pools_search]).
+ list_for_user(current_user, Privilege::VIEW).list(sort_column(Pool), sort_direction).
+ paginate(:page => params[:page], :per_page => PER_PAGE)
when 'instances'
params[:instances_preset_filter] = "" unless params[:instances_preset_filter]
- @instances = Instance.apply_filters(:preset_filter_id => params[:instances_preset_filter], :search_filter => params[:instances_search]).list_for_user(current_user, Privilege::VIEW).list(sort_column(Instance), sort_direction)
+ @instances = Instance.apply_filters(:preset_filter_id => params[:instances_preset_filter], :search_filter => params[:instances_search]).
+ list_for_user(current_user, Privilege::VIEW).list(sort_column(Instance), sort_direction).
+ paginate(:page => params[:page], :per_page => PER_PAGE)
when 'deployments'
- @deployments = Deployment.apply_filters(:preset_filter_id => params[:deployments_preset_filter], :search_filter => params[:deployments_search]).list_for_user(current_user, Privilege::VIEW).list(sort_column(Deployment), sort_direction)
+ @deployments = Deployment.apply_filters(:preset_filter_id => params[:deployments_preset_filter], :search_filter => params[:deployments_search]).
+ list_for_user(current_user, Privilege::VIEW).list(sort_column(Deployment), sort_direction).
+ paginate(:page => params[:page], :per_page => PER_PAGE)
end
else
- @pools = Pool.list_for_user(current_user, Privilege::VIEW).list(sort_column(Pool), sort_direction)
+ @pools = Pool.list_for_user(current_user, Privilege::VIEW).list(sort_column(Pool), sort_direction).
+ paginate(:page => params[:page], :per_page => PER_PAGE)
end
statistics
@@ -102,12 +109,16 @@ class PoolsController < ApplicationController
details_tab_name = params[:details_tab].blank? ? 'deployments' : params[:details_tab]
@details_tab = @tabs.find {|t| t[:id] == details_tab_name} || @tabs.first[:name].downcase
- @deployments = @pool.deployments.apply_filters(:preset_filter_id => params[:deployments_preset_filter], :search_filter => params[:deployments_search]).list_for_user(current_user, Privilege::VIEW) if @details_tab[:id] == 'deployments'
+ @deployments = @pool.deployments.
+ apply_filters(:preset_filter_id => params[:deployments_preset_filter], :search_filter => params[:deployments_search]).
+ list_for_user(current_user, Privilege::VIEW).
+ paginate(:page => params[:page], :per_page => PER_PAGE) if @details_tab[:id] == 'deployments'
@view = @details_tab[:view]
respond_to do |format|
format.html { render :action => :show}
format.js { render :partial => @view }
- format.json { render :json => @pool.as_json(:with_deployments => true, :current_user => current_user) }
+ format.json { render :json => @pool.as_json(:with_deployments => true, :current_user => current_user,
+ :page => params[:page], :per_page => PER_PAGE) }
end
end
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb
index f074150..09938be 100644
--- a/src/app/models/instance.rb
+++ b/src/app/models/instance.rb
@@ -66,9 +66,6 @@ class Instance < ActiveRecord::Base
end
include PermissionedObject
- cattr_reader :per_page
- @@per_page = 15
-
belongs_to :pool
belongs_to :pool_family
belongs_to :provider_account
diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb
index 3fce49b..ec89e07 100644
--- a/src/app/models/pool.rb
+++ b/src/app/models/pool.rb
@@ -123,7 +123,9 @@ class Pool < ActiveRecord::Base
})
if options[:with_deployments]
- result[:deployments] = deployments.list_for_user(options[:current_user], Privilege::VIEW).map {|d| d.as_json}
+ result[:deployments] = deployments.list_for_user(options[:current_user], Privilege::VIEW).
+ paginate(:page => options[:page], :per_page => options[:per_page]).
+ map {|d| d.as_json}
end
result
diff --git a/src/app/stylesheets/custom.scss b/src/app/stylesheets/custom.scss
index 484d3c3..84b4c40 100644
--- a/src/app/stylesheets/custom.scss
+++ b/src/app/stylesheets/custom.scss
@@ -271,3 +271,8 @@ form.generic section.services {
}
}
}
+
+.pagination{
+ margin-top: 10px;
+ text-align: center;
+}
diff --git a/src/app/views/deployments/_list.html.haml b/src/app/views/deployments/_list.html.haml
index bd47ec9..b123219 100644
--- a/src/app/views/deployments/_list.html.haml
+++ b/src/app/views/deployments/_list.html.haml
@@ -40,10 +40,11 @@
%td= link_to deployment.pool.name, pool_path(deployment.pool, :view => :filter)
%td= owner_name(deployment)
%td= link_to(deployment.provider.provider_type.name, deployment.provider) if deployment.provider
+
:javascript
Conductor.setupPrettyFilterURL(
- '#{url_for(:action => :show, :details_tab => 'deployments', :view => 'filter' )}',
- '#{url_for(:action => :show, :details_tab => 'deployments', :view => 'pretty' )}'
+ '#{url_for(:action => :show, :details_tab => 'deployments', :view => 'filter', :page => params[:page])}',
+ '#{url_for(:action => :show, :details_tab => 'deployments', :view => 'pretty', :page => params[:page])}'
);
%script#deploymentTemplate{ :type => 'text/x-jquery-tmpl' }
diff --git a/src/app/views/deployments/_pretty_view.html.haml b/src/app/views/deployments/_pretty_view.html.haml
index c121973..24940a2 100644
--- a/src/app/views/deployments/_pretty_view.html.haml
+++ b/src/app/views/deployments/_pretty_view.html.haml
@@ -21,12 +21,12 @@
%dd
%p.provider= deployment.provider.provider_type.name unless deployment.provider.blank?
+%div= will_paginate(@deployments)
+
:javascript
Conductor.setupPrettyFilterURL(
- '#{url_for(:action => :show, :details_tab => 'deployments', :view => 'filter' )}',
- '#{url_for(:action => :show, :details_tab => 'deployments', :view => 'pretty' )}');
-
-
+ '#{url_for(:action => :show, :details_tab => 'deployments', :view => 'filter', :page => params[:page])}',
+ '#{url_for(:action => :show, :details_tab => 'deployments', :view => 'pretty', :page => params[:page] )}');
%script#deploymentTemplate{ :type => 'text/x-jquery-tmpl' }
:plain
diff --git a/src/app/views/layouts/_filter_table.html.haml b/src/app/views/layouts/_filter_table.html.haml
index 9240fc5..65798e6 100644
--- a/src/app/views/layouts/_filter_table.html.haml
+++ b/src/app/views/layouts/_filter_table.html.haml
@@ -26,3 +26,6 @@
- if content_for? form_footer
%ul.obj_actions
= yield form_footer
+
+- if rows.is_a?(WillPaginate::Collection)
+ %div= will_paginate(rows)
diff --git a/src/app/views/pools/_header_index.html.haml b/src/app/views/pools/_header_index.html.haml
index cb7f0de..6a1768f 100644
--- a/src/app/views/pools/_header_index.html.haml
+++ b/src/app/views/pools/_header_index.html.haml
@@ -2,7 +2,7 @@
%h1.section-index= t 'pools.index.overview'
#obj_actions.button-container
.button-group
- = pretty_filter_toggle(pools_path(:view => 'pretty'), pools_path(:view => 'filter'))
+ = pretty_filter_toggle(pools_path(:view => 'pretty', :page => params[:page]), pools_path(:view => 'filter', :page => params[:page]))
.button-group
- if check_privilege(Privilege::CREATE, Pool)
= link_to t('pools.new_pool'), new_pool_path, { :class => 'button primary', :id => 'new_pool_button' }
diff --git a/src/app/views/pools/_pretty_list.html.haml b/src/app/views/pools/_pretty_list.html.haml
index 02ef6f2..075de9f 100644
--- a/src/app/views/pools/_pretty_list.html.haml
+++ b/src/app/views/pools/_pretty_list.html.haml
@@ -1,6 +1,6 @@
%header
%h2=t 'pools.index.your_pools'
- %span.label.badge.dark.count= @pools.length
+ %span.label.badge.dark.count= @pools.total_entries
.content#pools-list
- @pools.each do |pool|
@@ -25,16 +25,20 @@
%a.control{:href => '#'}
%span Expand/Collapse
%div.content
- = render :partial => 'deployments', :locals => {:pool => pool, :deployments => pool.deployments.list_for_user(current_user, Privilege::VIEW).ascending_by_name}
+ - deployments = pool.deployments.list_for_user(current_user, Privilege::VIEW).ascending_by_name.paginate(:page => params[:page], :per_page => PER_PAGE)
+ = render :partial => 'deployments', :locals => {:pool => pool, :deployments => deployments}
%ul.content.actions
%li
- = link_to ("#{html_escape(pool.name)} " + "#{t'pools.index.pool_details'}" + " »").html_safe, pool_path(pool), :class =>'pool_details'
+ - pool_details_label = deployments.total_pages > 1 ? t('pools.index.not_all_deployments_displayed_alert_html', :name => pool.name) : t('pools.index.not_all_deployments_displayed_alert_html', :name => pool.name)
+ = link_to(pool_details_label, pool_path(pool), :class =>'pool_details')
%li
- if check_privilege(Privilege::CREATE, Deployment, pool)
= link_to t('deployments.new_deployment'), launch_new_deployments_path(:pool_id => pool.id), :class => 'button primary', :id => 'new_deployment_button'
%li.catalog_link
= render :partial => 'layouts/catalog_dropdown', :locals => {:catalogs => pool.catalogs}
+ %div= will_paginate(@pools)
+
:javascript
$(document).ready(function() {
$('div.pool').each(function(){
diff --git a/src/app/views/pools/show.html.haml b/src/app/views/pools/show.html.haml
index ad60ca4..b593c7d 100644
--- a/src/app/views/pools/show.html.haml
+++ b/src/app/views/pools/show.html.haml
@@ -16,6 +16,7 @@
.section-controls
#obj_actions.button-container
.button-group
- = pretty_filter_toggle(pool_path(@pool, :view => 'pretty', :details_tab => @details_tab[:id]), pool_path(@pool, :view => 'filter', :details_tab => @details_tab[:id]))
+ = pretty_filter_toggle(pool_path(@pool, :view => 'pretty', :details_tab => @details_tab[:id], :page => params[:page]),
+ pool_path(@pool, :view => 'filter', :details_tab => @details_tab[:id], :page => params[:page]))
.content.collapsible.toggle-view.pools#tab
= render :partial => @view
diff --git a/src/config/initializers/will_paginate.rb b/src/config/initializers/will_paginate.rb
new file mode 100644
index 0000000..25962eb
--- /dev/null
+++ b/src/config/initializers/will_paginate.rb
@@ -0,0 +1,2 @@
+## Set per_page globally
+PER_PAGE = 15
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index aeeb52d..4050e0b 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -432,7 +432,8 @@ en:
confirm_delete: "Are you sure you want to delete this pool? All related catalogs and deployables will be deleted too!"
overview: Overview
your_pools: Your Pools
- pool_details: Pool details
+ pool_details_html: "%{name} Pool details »"
+ not_all_deployments_displayed_alert_html: "Not all deployments are displayed! Go to %{name} Pool details for more! »"
global_uptime: Global uptime
destroy: Destroy
images:
diff --git a/src/public/javascripts/backbone/models.js b/src/public/javascripts/backbone/models.js
index 1d1c54b..967b106 100644
--- a/src/public/javascripts/backbone/models.js
+++ b/src/public/javascripts/backbone/models.js
@@ -2,12 +2,15 @@ Conductor.Models = Conductor.Models || {}
Conductor.Models.Pool = Backbone.Model.extend({
- urlRoot: Conductor.prefixedPath('/pools'),
-
initialize: function() {
this.deployments = new Conductor.Models.Deployments().filter(function(attributes) {
return attributes.pool.id == this.id;
});
+ },
+ queryParams: {},
+ url: function() {
+ var path = Conductor.prefixedPath('/pools/' + this.id);
+ return Conductor.parameterizedPath(path, this.queryParams);
}
});
diff --git a/src/public/javascripts/backbone/routers.js b/src/public/javascripts/backbone/routers.js
index 94bed1f..e16941b 100644
--- a/src/public/javascripts/backbone/routers.js
+++ b/src/public/javascripts/backbone/routers.js
@@ -36,6 +36,7 @@ Conductor.Routers.Pools = Backbone.Router.extend({
setInterval(function() {
var pool = new Conductor.Models.Pool({ id: id });
var view = new Conductor.Views.PoolsShow({ model: pool });
+ pool.queryParams = view.queryParams();
if(view.currentTab() !== 'deployments') return;
diff --git a/src/public/javascripts/backbone/views.js b/src/public/javascripts/backbone/views.js
index 5065e1b..9061481 100644
--- a/src/public/javascripts/backbone/views.js
+++ b/src/public/javascripts/backbone/views.js
@@ -42,7 +42,7 @@ Conductor.Views.PoolsIndex = Backbone.View.extend({
},
queryParams: function() {
- var paramsToInclude = [this.currentTab() + '_preset_filter', this.currentTab() + '_search'];
+ var paramsToInclude = [this.currentTab() + '_preset_filter', this.currentTab() + '_search', 'page'];
var result = Conductor.extractQueryParams(paramsToInclude);
result['details_tab'] = this.currentTab();
@@ -113,6 +113,22 @@ Conductor.Views.PoolsShow = Backbone.View.extend({
}
},
+ queryParams: function() {
+ var paramsToInclude = ['deployments_preset_filter', 'deployments_search', 'page'];
+ var result = Conductor.extractQueryParams(paramsToInclude);
+
+ // If there is no URL param for the preset filter, we still need to merge in the preset filter
+ var filter = 'deployments_preset_filter';
+ if(result[filter] == undefined) {
+ var filter_selector = '#deployments_preset_filter:enabled';
+ if($(filter_selector).val() != undefined) {
+ result[filter] = $(filter_selector).val();
+ }
+ };
+
+ return result;
+ },
+
render: function() {
this.$('h1.pools').text(this.model.get('name') + ' Pool');
--
1.7.6.5
More information about the aeolus-devel
mailing list