[PATCH] BZ810919 mustach-ify pretty-view pool header so that instance/deployment counts are automatically updated
Tzu-Mainn Chen
tzumainn at redhat.com
Mon May 21 13:22:45 UTC 2012
---
src/app/helpers/mustache_helper.rb | 1 +
src/app/views/pools/_pretty_list.html.haml | 24 ++++---------------
.../views/pools/_pretty_list_header.html.mustache | 24 ++++++++++++++++++++
src/public/javascripts/backbone/routers.js | 8 ++++++
src/public/javascripts/backbone/views.js | 7 +++++-
5 files changed, 44 insertions(+), 20 deletions(-)
create mode 100644 src/app/views/pools/_pretty_list_header.html.mustache
diff --git a/src/app/helpers/mustache_helper.rb b/src/app/helpers/mustache_helper.rb
index eed0223..739f979 100644
--- a/src/app/helpers/mustache_helper.rb
+++ b/src/app/helpers/mustache_helper.rb
@@ -76,6 +76,7 @@ module MustacheHelper
{
:id => pool.id,
:name => pool.name,
+ :view_path => pool_path(pool),
:filter_view_path => pool_path(pool, :view => :filter),
:failed_instances_present => pool_statistics[:instances_failed_count] > 0,
:deployments_count => pool.deployments.count,
diff --git a/src/app/views/pools/_pretty_list.html.haml b/src/app/views/pools/_pretty_list.html.haml
index 041d092..7061af6 100644
--- a/src/app/views/pools/_pretty_list.html.haml
+++ b/src/app/views/pools/_pretty_list.html.haml
@@ -4,25 +4,8 @@
.content#pools-list
- @pools.each do |pool|
%div.pool.overview{:id => ['pool', pool.id], :class => ('collapsed' unless pool.deployments.size > 0)}
- %header
- %h3.name
- = link_to pool.name, pool
- %dl.statistics
- %ul.groups
- %li
- %dt=t 'deployments.deployments'
- %dd.count.deployment= pool.deployments.size
- %li
- %dt=t 'instances.instances.other'
- %dd.count.instance= pool.instances.size
- %dd.count.instance.pending= pool.instances.select {|i| i.state == Instance::STATE_PENDING }.length
- %dd.count.instance.failure= pool.instances.select {|i| i.state == Instance::STATE_ERROR || i.state == Instance::STATE_CREATE_FAILED }.length
- %li
- %dt=t'quota_used'
- %dd.percentage.quota
- = number_to_percentage(pool.quota.percentage_used, :precision => 0)
- %a.control{:href => '#'}
- %span Expand/Collapse
+ %header{:class => "pool-header-#{pool.id}"}
+ = render :partial => 'pretty_list_header', :mustache => pool_for_mustache(pool)
%div.content
- deployments = paginate_collection(pool.deployments.includes(:owner, :pool, :instances, :events).list_for_user(current_user, Privilege::VIEW).ascending_by_name, params[:page], PER_PAGE)
= render :partial => 'deployments', :locals => {:pool => pool, :deployments => deployments}
@@ -48,3 +31,6 @@
});
})
});
+
+%script#poolPrettyListHeaderTemplate{ :type => 'text/html' }
+ = render :partial => 'pretty_list_header'
diff --git a/src/app/views/pools/_pretty_list_header.html.mustache b/src/app/views/pools/_pretty_list_header.html.mustache
new file mode 100644
index 0000000..140cd67
--- /dev/null
+++ b/src/app/views/pools/_pretty_list_header.html.mustache
@@ -0,0 +1,24 @@
+<h3 class="name">
+ <%= link_to('{{name}}', '{{view_path}}') %>
+</h3>
+<dl class="statistics">
+ <ul class="groups">
+ <li>
+ <dt><%= t('deployments.deployments')%></dt>
+ <dd class="count deployment">{{deployments_count}}</dd>
+ </li>
+ <li>
+ <dt><%= t('instances.instances.other')%></dt>
+ <dd class="count instance">{{statistics.total_instances}}</dd>
+ <dd class="count instance pending">{{statistics.instances_pending}}</dd>
+ <dd class="count instance failure">{{statistics.instances_failed_count}}</dd>
+ </li>
+ <li>
+ <dt><%= t('quota_used')%></dt>
+ <dd class="percentage_quota">{{statistics.quota_percent}}</dd>
+ </li>
+ </ul>
+</dl>
+<a class="control" href="#">
+ <span>Expand/Collapse</span>
+</a>
diff --git a/src/public/javascripts/backbone/routers.js b/src/public/javascripts/backbone/routers.js
index 8d99ac5..ec2a23b 100644
--- a/src/public/javascripts/backbone/routers.js
+++ b/src/public/javascripts/backbone/routers.js
@@ -17,6 +17,14 @@ Conductor.Routers.Pools = Backbone.Router.extend({
}
else if (view.currentView() == 'pretty') {
view.collection = new Conductor.Models.Deployments();
+ view.pools = new Conductor.Models.Pools();
+
+ view.pools.queryParams = view.queryParams();
+ view.pools.bind('change', function() { view.render() });
+
+ view.pools.fetch({ success: function() {
+ view.pools.trigger('change');
+ }})
}
view.collection.queryParams = view.queryParams();
diff --git a/src/public/javascripts/backbone/views.js b/src/public/javascripts/backbone/views.js
index 055202a..3b8e052 100644
--- a/src/public/javascripts/backbone/views.js
+++ b/src/public/javascripts/backbone/views.js
@@ -100,13 +100,18 @@ Conductor.Views.PoolsIndex = Backbone.View.extend({
$rows.append($row);
}
}
+
+ var headerTemplate = $('#poolPrettyListHeaderTemplate');
+ $.each(this.pools.models, function(index, value) {
+ var $header = $('header.pool-header-' + value.attributes.id);
+ $header.html(Mustache.to_html(headerTemplate.html(), value.toJSON()));
+ });
}
}
});
Conductor.Views.PoolsShow = Backbone.View.extend({
el: '#content',
-
currentView: function() {
if ($('form.filterable-data').length > 0) {
return 'table'
--
1.7.6.5
More information about the aeolus-devel
mailing list