From: Imre Farkas ifarkas@redhat.com
--- src/app/controllers/pools_controller.rb | 4 +- src/app/helpers/mustache_helper.rb | 26 ++++++++++++++++ src/app/views/pools/_list.html.haml | 43 ++++++-------------------- src/app/views/pools/_pool_row.html.mustache | 26 ++++++++++++++++ src/public/javascripts/backbone/views.js | 12 +++++-- 5 files changed, 73 insertions(+), 38 deletions(-) create mode 100644 src/app/views/pools/_pool_row.html.mustache
diff --git a/src/app/controllers/pools_controller.rb b/src/app/controllers/pools_controller.rb index 2ae502a..4a3a9d8 100644 --- a/src/app/controllers/pools_controller.rb +++ b/src/app/controllers/pools_controller.rb @@ -78,11 +78,11 @@ class PoolsController < ApplicationController format.json do case @details_tab[:id] when 'pools' - render :json => @pools + render :json => @pools.map{ |pool| view_context.pool_for_mustache(pool) } when 'instances' render :json => @instances when 'deployments' - render :json => @deployments + render :json => @deployments.map{ |deployment| view_context.deployment_for_mustache(deployment) } end end end diff --git a/src/app/helpers/mustache_helper.rb b/src/app/helpers/mustache_helper.rb index 60cc9a1..b13ef67 100644 --- a/src/app/helpers/mustache_helper.rb +++ b/src/app/helpers/mustache_helper.rb @@ -63,4 +63,30 @@ module MustacheHelper } end
+ def pool_for_mustache(pool) + pool_statistics = pool.statistics + user_can_access_pool_family = check_privilege(Privilege::VIEW, pool.pool_family) + + { + :id => pool.id, + :name => pool.name, + :filter_view_path => pool_path(pool, :view => :filter), + :failed_instances_present => pool_statistics[:instances_failed_count] > 0, + :deployments_count => pool.deployments.count, + + :statistics => { + :total_instances => pool_statistics[:total_instances], + :instances_pending => pool_statistics[:instances_pending], + :instances_failed_count => pool_statistics[:instances_failed_count], + :quota_percent => pool_statistics[:quota_percent], + }, + + :user_can_access_pool_family => user_can_access_pool_family, + :pool_family => { + :name => pool.pool_family.name, + :path => user_can_access_pool_family ? pool_family_path(pool.pool_family) : nil + } + } + end + end diff --git a/src/app/views/pools/_list.html.haml b/src/app/views/pools/_list.html.haml index 5dc5e5d..bd1edd5 100644 --- a/src/app/views/pools/_list.html.haml +++ b/src/app/views/pools/_list.html.haml @@ -24,36 +24,13 @@ });
= filter_table(@header, @pools) do |pool| - - pool_stats = pool.statistics - %tr{:class => cycle('nostripe','stripe')} - %td{:class => 'checkbox'} - %input{:name => "pools_selected[]", :type => "checkbox", :value => pool.id, :id => "pool_checkbox_#{pool.id}" } - %td{:class => 'alert'}= (@statistics[:instances_failed] & pool.instances).present? ? image_tag("sb_icon_instance_failure.png") : "" - %td= link_to(pool.name, pool_path(pool, :view => :filter)) - %td{:class => 'center'}= pool.deployments.count - %td{:class => 'center'}= pool_stats[:total_instances] - %td{:class => 'center'}= pool_stats[:instances_pending] - %td{:class => 'center'}= pool_stats[:instances_failed_count] - %td{:class => 'center'}= pool_stats[:quota_percent] - - if check_privilege(Privilege::VIEW, pool.pool_family) - %td= link_to(pool.pool_family.name, pool.pool_family) - - else - %td= pool.pool_family.name -%script#poolTemplate{ :type => 'text/x-jquery-tmpl' } - :plain - <tr> - <td class="checkbox"><input type="checkbox" id="pool_checkbox_${id}" - name="pools_selected[]" value="${id}"></td> - <td class="alert"> - {{if statistics.instances_failed_count > 0}} - #{image_tag("sb_icon_instance_failure.png")} - {{/if}} - </td> - <td><a href="#{pool_path('replace_id', :view => :filter).sub('replace_id', '${id}')}">${name}</a></td> - <td class="center">${deployments_count}</td> - <td class="center">${statistics.total_instances}</td> - <td class="center">${statistics.instances_pending}</td> - <td class="center">${statistics.instances_failed_count}</td> - <td class="center">${statistics.quota_percent}</td> - <td><a href="#{pool_family_path('replace_id').sub('replace_id', '${pool_family.id}')}">${pool_family.name}</a></td> - </tr> + = render :partial => 'pool_row', :mustache => pool_for_mustache(pool) + +:javascript + $(document).ready(function(){ + $('tr:odd').addClass('stripe'); + $('tr:even').addClass('nostripe'); + }); + +%script#poolRowTemplate{ :type => 'text/html' } + = render :partial => 'pool_row' diff --git a/src/app/views/pools/_pool_row.html.mustache b/src/app/views/pools/_pool_row.html.mustache new file mode 100644 index 0000000..63d3ee2 --- /dev/null +++ b/src/app/views/pools/_pool_row.html.mustache @@ -0,0 +1,26 @@ +<tr> + <td class="checkbox"> + <%= check_box_tag("pools_selected[]", '{{id}}', false, :id => "pool_checkbox_{{id}}") %> + </td> + <td class="alert"> + {{#failed_instances_present}} + <%= image_tag("sb_icon_instance_failure.png") %> + {{/failed_instances_present}} + </td> + <td> + <%= link_to('{{name}}', '{{filter_view_path}}') %> + </td> + <td class="center">{{deployments_count}}</td> + <td class="center">{{statistics.total_instances}}</td> + <td class="center">{{statistics.instances_pending}}</td> + <td class="center">{{statistics.instances_failed_count}}</td> + <td class="center">{{statistics.quota_percent}}</td> + <td> + {{#user_can_access_pool_family}} + <%= link_to('{{pool_family.name}}', '{{pool_family.path}}') %> + {{/user_can_access_pool_family}} + {{^user_can_access_pool_family}} + {{pool_family.name}} + {{/user_can_access_pool_family}} + </td> +</tr> diff --git a/src/public/javascripts/backbone/views.js b/src/public/javascripts/backbone/views.js index 0d29417..4535ac5 100644 --- a/src/public/javascripts/backbone/views.js +++ b/src/public/javascripts/backbone/views.js @@ -31,8 +31,8 @@ Conductor.Views.PoolsIndex = Backbone.View.extend({ template: function() { if (this.currentView() == 'table') { switch(this.currentTab()) { - case 'pools': return $('#poolTemplate'); - case 'deployments': return $('#deploymentTemplate'); + case 'pools': return $('#poolRowTemplate'); + case 'deployments': return $('#deploymentRowTemplate'); case 'instances': return $('#instanceTemplate'); } } @@ -66,7 +66,13 @@ Conductor.Views.PoolsIndex = Backbone.View.extend({ var $table = this.$('table.checkbox_table > tbody'); if($table.length === 0 || $template.length === 0) return; var checkboxes = Conductor.saveCheckboxes('td :checkbox', $table); - $table.empty().append($template.tmpl(this.collection.toJSON())) + + var rowsHtml = ''; + $.each(this.collection.toJSON(), function(index, value) { + rowsHtml += Mustache.to_html($template.html(), value); + }); + + $table.empty().append(rowsHtml); Conductor.restoreCheckboxes(checkboxes, 'td :checkbox', $table); $table.find('tr:even').addClass('nostripe'); $table.find('tr:odd').addClass('stripe');