[PATCH conductor 4/8] Mustachifying deployments/_pretty_view
ifarkas at redhat.com
ifarkas at redhat.com
Thu Apr 19 07:30:02 UTC 2012
From: Imre Farkas <ifarkas at redhat.com>
---
src/app/controllers/pools_controller.rb | 6 ++-
src/app/helpers/mustache_helper.rb | 17 +++++++
src/app/models/pool.rb | 6 --
.../deployments/_deployment_card.html.mustache | 33 +++++++++++++
src/app/views/deployments/_pretty_view.html.haml | 50 +------------------
src/public/javascripts/backbone/views.js | 27 ++++++++++-
6 files changed, 82 insertions(+), 57 deletions(-)
diff --git a/src/app/controllers/pools_controller.rb b/src/app/controllers/pools_controller.rb
index abc3203..2ae502a 100644
--- a/src/app/controllers/pools_controller.rb
+++ b/src/app/controllers/pools_controller.rb
@@ -117,8 +117,10 @@ class PoolsController < ApplicationController
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,
- :page => params[:page], :per_page => PER_PAGE) }
+ format.json { render :json => { :name => @pool.name,
+ :deployments => @pool.deployments.list_for_user(current_user, Privilege::VIEW).
+ paginate(:page => params[:page], :per_page => params[:per_page]).
+ map{ |deployment| view_context.deployment_for_mustache(deployment) } } }
end
end
diff --git a/src/app/helpers/mustache_helper.rb b/src/app/helpers/mustache_helper.rb
index 086caf5..6131909 100644
--- a/src/app/helpers/mustache_helper.rb
+++ b/src/app/helpers/mustache_helper.rb
@@ -35,4 +35,21 @@ module MustacheHelper
}
end
+ def deployment_for_mustache(deployment)
+ {
+ :name => deployment.name,
+ :path => deployment_path(deployment),
+ :status => deployment.status,
+ :translated_state => I18n.t("deployments.status.#{deployment.status}"),
+ :uptime => count_uptime(deployment.uptime_1st_instance),
+ :instances_count => deployment.instances.count,
+ :instances_count_text => I18n.t('instances.instances', :count => deployment.instances.count.to_i),
+ :provider => {
+ :provider_type => {
+ :name => deployment.provider.present? ? deployment.provider.provider_type.name : nil,
+ }
+ }
+ }
+ end
+
end
diff --git a/src/app/models/pool.rb b/src/app/models/pool.rb
index 9556dee..4604bd2 100644
--- a/src/app/models/pool.rb
+++ b/src/app/models/pool.rb
@@ -137,12 +137,6 @@ class Pool < ActiveRecord::Base
})
- if options[:with_deployments]
- 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
end
diff --git a/src/app/views/deployments/_deployment_card.html.mustache b/src/app/views/deployments/_deployment_card.html.mustache
index e69de29..f7b0926 100644
--- a/src/app/views/deployments/_deployment_card.html.mustache
+++ b/src/app/views/deployments/_deployment_card.html.mustache
@@ -0,0 +1,33 @@
+<li class="deployment">
+ <h3 class="name">
+ <%= link_to('{{name}}', '{{path}}') %>
+ </h3>
+ <span title="{{translated_state}}" class="status {{status}}">alma</span>
+ <dl class="statistics">
+ <ul>
+ <li class="uptime">
+ <dt class="uptime"><%= t('uptime') %></dt>
+ <dd>{{uptime}}</dd>
+ </li>
+ <li class="instances">
+ <dt class="instances count"><%= t('instances.instances.other') %></dt>
+ <dd>
+ {{instances_count}}
+ <span class="inline-label">{{instances_count_text}}</span>
+ </dd>
+ </li>
+ <li class="provider">
+ <dt class="instances count"><%= t('providers.provider') %></dt>
+ <dd>
+ <p class="provider">
+ {{#provider}}
+ {{#provider_type}}
+ {{name}}
+ {{/provider_type}}
+ {{/provider}}
+ </p>
+ </dd>
+ </li>
+ </ul>
+ </dl>
+</li>
diff --git a/src/app/views/deployments/_pretty_view.html.haml b/src/app/views/deployments/_pretty_view.html.haml
index 12f8d00..2f5e6f7 100644
--- a/src/app/views/deployments/_pretty_view.html.haml
+++ b/src/app/views/deployments/_pretty_view.html.haml
@@ -2,25 +2,7 @@
- @deployments.in_groups_of(5, false) do |group|
%ul.deployment-array.large
- group.each do |deployment|
- - deployment_provider = deployment.provider
- %li.deployment
- %h3.name
- = link_to deployment.name, deployment_path(deployment)
- %span{ :class => "status #{deployment.status}", :title => t("deployments.status.#{deployment.status}")}
- %dl.statistics
- %ul
- %li.uptime
- %dt.uptime=t'uptime'
- %dd= count_uptime(deployment.uptime_1st_instance)
- %li.instances
- %dt.instances.count=t'instances.instances.other'
- %dd
- = deployment.instances.count || 0
- %span.inline-label=t('instances.instances', :count => deployment.instances.count.to_i)
- %li.provider
- %dt.instances.count=t'providers.provider'
- %dd
- %p.provider= deployment_provider.provider_type.name unless deployment_provider.blank?
+ = render :partial => 'deployments/deployment_card', :mustache => deployment_for_mustache(deployment)
= render_pagination(@deployments)
@@ -29,31 +11,5 @@
'#{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
- <li class="deployment">
- <h3 class="name">
- <a href="#{deployment_path('replace_id').sub('replace_id', '${id}')}">${name}</a>
- </h3>
- <span class="status ${status}" title="${status_description}">${status}</span>
- <dl class="statistics">
- <ul>
- <li class="uptime">
- <dt class="uptime">#{t'uptime'}</dt>
- <dd>${uptime}</dd>
- </li>
- <li class="instances">
- <dt class="instances count">#{t'instances.instances.other'}</dt>
- <dd>${instances_count}
- <span class="inline-label">${instances_count_text}</span>
- </dd>
- </li>
- <li class="provider">
- <dt class="instances count">#{t'providers.provider'}</dt>
- <dd>
- <p class="provider">{{if provider}} ${provider.name} {{/if}}</p>
- </dd>
- </li>
- </ul>
- </dl>
- </li>
+%script#deploymentCardTemplate{ :type => 'text/html' }
+ = render :partial => 'deployments/deployment_card'
diff --git a/src/public/javascripts/backbone/views.js b/src/public/javascripts/backbone/views.js
index 4c956ca..876ad9b 100644
--- a/src/public/javascripts/backbone/views.js
+++ b/src/public/javascripts/backbone/views.js
@@ -101,6 +101,15 @@ Conductor.Views.PoolsIndex = Backbone.View.extend({
Conductor.Views.PoolsShow = Backbone.View.extend({
el: '#content',
+ currentView: function() {
+ if ($('form.filterable-data').length > 0) {
+ return 'table'
+ }
+ else if ($('ul.deployable-cards').length > 0) {
+ return 'pretty'
+ }
+ },
+
currentTab: function() {
if($('#details_deployments.active').length > 0) {
return 'deployments';
@@ -113,6 +122,15 @@ Conductor.Views.PoolsShow = Backbone.View.extend({
}
},
+ template: function() {
+ if (this.currentView() == 'table') {
+ return $('#deploymentTemplate');
+ }
+ else if (this.currentView() == 'pretty') {
+ return $('#deploymentCardTemplate');
+ }
+ },
+
queryParams: function() {
var paramsToInclude = ['deployments_preset_filter', 'deployments_search', 'page'];
var result = Conductor.extractQueryParams(paramsToInclude);
@@ -132,7 +150,7 @@ Conductor.Views.PoolsShow = Backbone.View.extend({
render: function() {
this.$('h1.pools').text(this.model.get('name') + ' Pool');
- var $template = $('#deploymentTemplate');
+ var $template = this.template();
if($template.length === 0) return;
var $table = this.$('table.checkbox_table > tbody');
@@ -146,9 +164,14 @@ Conductor.Views.PoolsShow = Backbone.View.extend({
var $cards = this.$('ul.deployable-cards').empty()
var cardsPerRow = 5;
for(var i = 0; i < deployments.length; i += cardsPerRow) {
+ var deploymentCardHtml = '';
+ $.each(deployments.slice(i, i + cardsPerRow), function(deploymentIndex, deployment) {
+ deploymentCardHtml += Mustache.to_html($template.html(), deployment);
+ });
+
var $row = this.make('ul',
{'class': 'deployment-array large'},
- $template.tmpl(deployments.slice(i, i + cardsPerRow)));
+ deploymentCardHtml);
$cards.append($row);
}
}
--
1.7.6.5
More information about the aeolus-devel
mailing list