[PATCH conductor 3/4] Mustachifying images/show

ifarkas at redhat.com ifarkas at redhat.com
Thu May 10 12:41:20 UTC 2012


From: Imre Farkas <ifarkas at redhat.com>

---
 aeolus-conductor.spec.in                           |    2 +-
 src/app/controllers/images_controller.rb           |  133 +++++++-----
 .../views/images/_push_all_button.html.mustache    |    1 +
 src/app/views/images/_status.html.mustache         |   90 ++++++++
 src/app/views/images/show.html.haml                |  234 ++------------------
 src/public/javascripts/backbone/views.js           |   14 +-
 6 files changed, 189 insertions(+), 285 deletions(-)
 create mode 100644 src/app/views/images/_push_all_button.html.mustache
 create mode 100644 src/app/views/images/_status.html.mustache

diff --git a/aeolus-conductor.spec.in b/aeolus-conductor.spec.in
index b9bb080..3c867d4 100644
--- a/aeolus-conductor.spec.in
+++ b/aeolus-conductor.spec.in
@@ -197,7 +197,7 @@ haml="app/views/hardware_profiles app/views/realm_mappings \
       app/views/api/target_images app/views/api/entrypoint \
       app/views/api/environments"
 mustache="app/views/instances app/views/pools app/views/deployments \
-          app/views/deployables"
+          app/views/deployables app/views/images"
 html="public"
 ico="public"
 jpg="public/images public/stylesheets/images"
diff --git a/src/app/controllers/images_controller.rb b/src/app/controllers/images_controller.rb
index cf7dc1a..3da2e46 100644
--- a/src/app/controllers/images_controller.rb
+++ b/src/app/controllers/images_controller.rb
@@ -67,71 +67,90 @@ class ImagesController < ApplicationController
     @account_groups_listing = @account_groups.select{ |driver, group| group[:included] || @target_images_by_target[driver] || (@build and @builder.find_active_build(@build.id, driver)) }
     flash[:error] = t("images.flash.error.no_provider_accounts") if @account_groups_listing.blank?
 
-    respond_to do |format|
-      format.html
-      format.json do
-        active_builds = @account_groups.keys.inject({})  do |result, driver|
-          result[driver] = @builder.find_active_build(@build.id, driver) if @build
-          result[driver].attributes['status'].capitalize! if result[driver]
-
-          result
-        end
-
-        active_builds_by_image_id = @account_groups.keys.inject(Hash.new({}))  do |result, driver|
-          result[@image.id] = {} unless result.has_key?(@image.id)
-          result[@image.id][driver] = @builder.find_active_build_by_imageid(@image.id, driver)
-          result[@image.id][driver].attributes['status'].capitalize! if result[@image.id][driver]
-
-          result
+    @account_groups_listing = []
+    @account_groups.each do |driver, group|
+      if group[:included] || @target_images_by_target[driver] || (@build && @builder.find_active_build(@build.id, driver))
+        @account_groups_listing << { :provider_type => group[:type], :accounts => group[:accounts].map{ |account| account[:account] if account[:included] }.compact }
+      end
+    end
+    flash[:error] = t("images.flash.error.no_provider_accounts") if @account_groups_listing.empty?
+
+    @images_by_provider_type = []
+    user_can_build = (@environment && check_privilege(Privilege::USE, @environment))
+    latest_build = (@build && @build.id == @latest_build)
+    @account_groups_listing.each do |account_group|
+      provider_type = account_group[:provider_type]
+      target_image = @target_images_by_target[provider_type.deltacloud_driver]
+
+      provider_images_by_provider_account = []
+
+      account_group[:accounts].each do |account|
+        provider_image = target_image.find_provider_image_by_provider_and_account(account.provider.name, account.credentials_hash['username']).first if target_image.present?
+        provider_image_details = { :uuid => provider_image.uuid, :target_identifier => provider_image.target_identifier } if provider_image.present?
+
+        push_started_for_account = (@push_started && @pushed_provider_account == account)
+        active_push = @builder.find_active_push(target_image.id, account.provider.name, account.credentials_hash['username']) if target_image.present?
+        push_status = { :is_active_push =>  active_push.present?,
+                        :push_started_for_account => push_started_for_account,
+                        :build_action_available => target_image.present? && !provider_image.present? && latest_build && !push_started_for_account,
+                        :delete_action_available => provider_image.present? && !@image.imported? }
+        push_status[:active_push_status] = active_push.status.capitalize if active_push.present?
+        push_status[:build_action_available] &= user_can_build
+        push_status[:delete_action_available] &= user_can_build
+
+        provider_image_for_provider_account = {
+          :account => { :name => account.name, :provider_name => account.provider.name },
+          :provider_image => provider_image_details,
+          :push_status => push_status
+        }
+
+        if push_status[:build_action_available]
+          provider_image_for_provider_account[:push_provider_image_path] = image_provider_images_path(@image.id, :build_id => @build.id,
+                                                                                                      :target_image_id => target_image.id,
+                                                                                                      :account_id => account.id)
+
+          failed_push_count = @builder.failed_push_count(target_image.id, account.provider.name, account.credentials_hash['username'])
+          push_status[:translated_failed_push_count] = t('images.show.failed_push_attempts', :count => failed_push_count) if failed_push_count > 0
         end
 
-        active_pushes = @account_groups.inject({})  do |result, (driver, group)|
-          timg = @target_images_by_target[driver]
-          group[:accounts].each do |account|
-            result[account[:account].id] = @builder.find_active_push(timg.id, account[:account].provider.name, account[:account].credentials_hash['username'])
-            result[account[:account].id].attributes['status'].capitalize! if result[account[:account].id]
-          end if timg.present?
-
-          result
-        end
+        provider_image_for_provider_account[:delete_provider_image_path] = image_provider_image_path(@image.id, provider_image.id) if push_status[:delete_action_available]
 
-        provider_images = @account_groups.inject({})  do |result, (driver, group)|
-          timg = @target_images_by_target[driver]
-          group[:accounts].each do |account|
-            result[account[:account].id] = timg.find_provider_image_by_provider_and_account(account[:account].provider.name, account[:account].credentials_hash['username']).first
-          end if timg.present?
+        provider_images_by_provider_account << provider_image_for_provider_account
+      end
 
-          result
-        end
+      active_build = @builder.find_active_build(@build.id, provider_type.deltacloud_driver)
+      build_status = { :is_active_build => active_build.present?,
+                       :build_action_available => !target_image.present? && (latest_build || !@build),
+                       :delete_action_available => target_image.present? }
+      build_status[:active_build_status] = active_build.status.capitalize if active_build.present?
+      build_status[:build_action_available] &= user_can_build
+      build_status[:delete_action_available] &= user_can_build
+
+      target_image_for_provider_type = {
+        :provider_type => provider_type,
+        :build_status => build_status,
+        :accounts => provider_images_by_provider_account
+      }
+
+      if build_status[:build_action_available]
+        target_image_for_provider_type[:build_target_image_path] = image_target_images_path(@image.id, :target => provider_type.deltacloud_driver,
+                                                                                            :build_id => @build ? @build.id : nil)
+        failed_build_count = @builder.failed_build_count(@build.id, provider_type.deltacloud_driver)
+        build_status[:translated_failed_build_count] = t('images.show.failed_build_attempts', :count => failed_build_count) if failed_build_count > 0
+      end
 
-        failed_build_counts = @account_groups.keys.inject({})  do |result, driver|
-          result[driver] = @builder.failed_build_count(@build.id, driver) if @build
-          result
-        end
+      target_image_for_provider_type[:delete_target_image_path] = image_target_image_path(@image.id, target_image.id) if build_status[:delete_action_available]
 
-        failed_push_counts = @account_groups.inject({})  do |result, (driver, group)|
-          timg = @target_images_by_target[driver]
-          group[:accounts].each do |account|
-            result[account[:account].id] = @builder.failed_push_count(timg.id, account[:account].provider.name, account[:account].credentials_hash['username'])
-          end if timg.present?
+      @images_by_provider_type << target_image_for_provider_type
+    end
 
-          result
-        end
+    @push_all_enabled = (@build && @build.id == @latest_build && @target_image_exists)
 
-        render :json => { :image => @image,
-                          :build => @build,
-                          :account_groups => @account_groups,
-                          :provider_images => provider_images,
-                          :target_images_by_target => @target_images_by_target,
-                          :active_builds => active_builds,
-                          :active_builds_by_image_id => active_builds_by_image_id,
-                          :active_pushes => active_pushes,
-                          :failed_build_counts => failed_build_counts,
-                          :failed_push_counts => failed_push_counts,
-                          :latest_build_id => @latest_build,
-                          :user_can_build => (@environment and
-                                              check_privilege(Privilege::USE, @environment)),
-                          :target_image_exists => @target_image_exists }
+    respond_to do |format|
+      format.html
+      format.json do
+        render :json => { :images => @images_by_provider_type, :push_all_enabled => @push_all_enabled,
+                          :push_all_path => @push_all_enabled ? push_all_image_path(@image.id, :build_id => @build.id) : nil }
       end
     end
   end
diff --git a/src/app/views/images/_push_all_button.html.mustache b/src/app/views/images/_push_all_button.html.mustache
new file mode 100644
index 0000000..1f1db0a
--- /dev/null
+++ b/src/app/views/images/_push_all_button.html.mustache
@@ -0,0 +1 @@
+<%= button_to(t('images.show.push_all'), '{{push_all_path}}', :class => 'button pill') %>
diff --git a/src/app/views/images/_status.html.mustache b/src/app/views/images/_status.html.mustache
new file mode 100644
index 0000000..64c9d2e
--- /dev/null
+++ b/src/app/views/images/_status.html.mustache
@@ -0,0 +1,90 @@
+{{#images}}
+  <li class="clearfix">
+    <dl>
+      <dt>
+        <div class="build-actions">
+          <h3>Name: {{provider_type.name}}</h3>
+          {{#build_status.is_active_build}}
+            {{build_status.active_build_status}}
+          {{/build_status.is_active_build}}
+
+          {{^build_status.is_active_build}}
+            {{#build_status.build_action_available}}
+              <%= button_to(t('images.show.build'), '{{build_target_image_path}}', :method => :post) %>
+              {{#build_status.translated_failed_build_count}}
+                <div class="light">{{build_status.translated_failed_build_count}}</div>
+              {{/build_status.translated_failed_build_count}}
+            {{/build_status.build_action_available}}
+
+            {{#build_status.delete_action_available}}
+              <%= button_to(t('images.show.delete'), '{{delete_target_image_path}}', :method => :delete) %>
+            {{/build_status.delete_action_available}}
+          {{/build_status.is_active_build}}
+        </div>
+      </dt>
+      <dd>
+        <table class="light_table">
+          <thead>
+            <tr><th>
+              <strong>Account</strong>
+            </th>
+            <th>
+              Provider
+            </th>
+            <th>
+              Image UUID
+            </th>
+            <th>
+              Image URI
+            </th>
+            <th class="image_controls"></th>
+          </tr></thead>
+          <tbody>
+            {{#accounts}}
+                <tr>
+                  <td>
+                    <strong>
+                      {{account.name}}
+                    </strong>
+                  </td>
+                  <td class="light">
+                    {{account.provider_name}}
+                  </td>
+                  <td class="light">
+                    {{provider_image.target_identifier}}
+                  </td>
+                  <td class="light">
+                    {{provider_image.uuid}}
+                  </td>
+                  <td class="image_controls light">
+                      {{#push_status.is_active_push}}
+                        {{push_status.active_push_status}}
+                      {{/push_status.is_active_push}}
+
+                      {{^push_status.is_active_push}}
+                        {{#push_status.push_started_for_account}}
+                          <div class="light">
+                            <%= t('images.show.push_started') %>
+                          </div>
+                        {{/push_status.push_started_for_account}}
+
+                        {{#push_status.build_action_available}}
+                          <%= button_to(t('images.show.push'), '{{push_provider_image_path}}', :method => :post, :class => 'upload_image button') %>
+                          {{#push_status.translated_failed_push_count}}
+                            <div class="light">{{push_status.translated_failed_push_count}}</div>
+                          {{/push_status.translated_failed_push_count}}
+                        {{/push_status.build_action_available}}
+
+                        {{#push_status.delete_action_available}}
+                          <%= button_to('', '{{delete_provider_image_path}}', :method => :delete, :class => 'delete_image') %>
+                        {{/push_status.delete_action_available}}
+                      {{/push_status.is_active_push}}
+                  </td>
+                </tr>
+            {{/accounts}}
+          </tbody>
+        </table>
+      </dd>
+    </dl>
+  </li>
+{{/images}}
diff --git a/src/app/views/images/show.html.haml b/src/app/views/images/show.html.haml
index 57385e4..a9911da 100644
--- a/src/app/views/images/show.html.haml
+++ b/src/app/views/images/show.html.haml
@@ -6,9 +6,9 @@
       = link_to t('images.index.images'), images_path
     - if @environment and check_privilege(Privilege::USE, @environment)
       .button-group
-        = link_to t('.new_deployable_from_image'), new_deployable_path(:create_from_image => @image.id), :class => 'button pill'
+        = link_to t('images.show.new_deployable_from_image'), new_deployable_path(:create_from_image => @image.id), :class => 'button pill'
         - unless @image.imported?
-          = link_to t('.template_xml'), template_image_path(@image.uuid), :class => 'button pill'
+          = link_to t('images.show.template_xml'), template_image_path(@image.uuid), :class => 'button pill'
         = button_to t("delete"), image_path(@image.id), :method => 'delete', :confirm => "Are you sure you want to delete?", :class => 'button pill danger', :id => 'delete'
   %h1.no-icon= @image.imported? ? @image.name + " (Imported)" : @image.name
 
@@ -26,103 +26,30 @@
   %header
     .section-controls
       - if @builds.any?
-        %span= t'.view_build'
+        %span= t'images.show.view_build'
         - if user_can_build
           = form_tag image_path(@image.id), :method => :get do
             = select_tag :build, options_for_build_select(@builds, @build, @latest_build)
-            = submit_tag t('.select_build'), :id => 'select_build_button'
+            = submit_tag t('images.show.select_build'), :id => 'select_build_button'
       - if user_can_build
         - if @image.imported?
-          %span= t('.can_not_build_imported_image')
+          %span= t('images.show.can_not_build_imported_image')
         -else
           - if @builds.any?
-            - build_text = '.rebuild'
+            - build_text = 'images.show.rebuild'
           - else
-            - build_text = '.build'
+            - build_text = 'images.show.build'
           - if @account_groups_listing.size > 1
             - build_text << '_all'
           = button_to t(build_text), rebuild_all_image_path(@image.id), :class => 'button pill' unless @account_groups_listing.blank?
           #push-all-btn
-            - if @build && @build.id == @latest_build && @target_image_exists
-              = button_to t('.push_all'), push_all_image_path(@image.id, :build_id => @build.id), :class => 'button pill'
-    %h2= t('.provider_images')
+            - if @push_all_enabled
+              = button_to t('images.show.push_all'), push_all_image_path(@image.id, :build_id => @build.id), :class => 'button pill'
+    %h2= t('images.show.provider_images')
 
   .content
-    - if @account_groups_listing.present?
-      %ul.image_builds
-        - @account_groups_listing.each do |driver, group|
-          - timg = @target_images_by_target[driver]
-          %li.clearfix
-            %dl
-              %dt
-                .build-actions
-                  %h3= group[:type].name
-                  - if @build and b = @builder.find_active_build(@build.id, driver)
-                    = label_tag b.status
-                  - elsif !@build and b = @builder.find_active_build_by_imageid(@image.id, driver)
-                    = label_tag b.status
-                  - elsif timg
-                    - if user_can_build
-                      = button_to t('.delete'), image_target_image_path(@image.id, timg.id), :method => :delete
-                  - elsif @build and @build.id == @latest_build
-                    - if user_can_build
-                      = button_to t('.build'), image_target_images_path(@image.id, :target => driver, :build_id => @build ? @build.id : nil), :method => :post
-                    - failed_build_count = @builder.failed_build_count(@build.id, driver)
-                    - if failed_build_count > 0
-                      .light
-                        = t('images.show.failed_build_attempts', :count => failed_build_count)
-                  - elsif !@build
-                    - if user_can_build
-                      = button_to t('.build'), image_target_images_path(@image.id, :target => driver, :build_id => @build ? @build.id : nil), :method => :post
-                  - else
-                    &nbsp;
-              %dd
-                %table.light_table
-                  %thead
-                    %th
-                      %strong= t'.account'
-                    %th
-                      = t'.provider'
-                    %th
-                      = t'.image_uuid'
-                    %th
-                      = t'.image_uri'
-                    %th.image_controls
-                  %tbody
-                    - group[:accounts].each do |account_hash|
-                      - account = account_hash[:account]
-                      - pimg = timg ? timg.find_provider_image_by_provider_and_account(account.provider.name, account.credentials_hash['username']).first : nil
-                      - if account_hash[:included] || (timg and !pimg)
-                        %tr
-                          %td
-                            %strong= account.name
-                          %td.light
-                            = account.provider.name
-                          %td.light
-                            = pimg ? pimg.target_identifier : ''
-                          %td.light
-                            = pimg ? pimg.id : ''
-                          %td.image_controls.light
-                            - if timg and b = @builder.find_active_push(timg.id, account.provider.name, account.credentials_hash['username'])
-                              = label_tag b.status
-                            - elsif timg and not pimg and @build and @build.id == @latest_build
-                              - if @push_started && @pushed_provider_account == account
-                                .light
-                                  = t('images.show.push_started')
-                              - else
-                                - if user_can_build
-                                  = button_to t('.push'), image_provider_images_path(@image.id, :build_id => @build.id, :target_image_id => timg.id, :account_id => account.id), :method => :post, :class => 'upload_image button'
-                                - failed_push_count = @builder.failed_push_count(timg.id, account.provider.name, account.credentials_hash['username'])
-                                - if failed_push_count > 0
-                                  = t('images.show.failed_push_attempts', :count => failed_push_count)
-                            - elsif pimg and not @image.imported?
-                              - if user_can_build
-                                = button_to "", image_provider_image_path(@image.id, pimg.id), :method => :delete, :class => 'delete_image'
-                            - else
-                              &nbsp;
-    - else
-      .centered.align-center
-        %strong= t("images.flash.error.no_provider_accounts")
+    %ul.image_builds
+      = render :partial => 'status', :mustache => {:images => @images_by_provider_type}
 
 :javascript
   $(document).ready(function(){
@@ -132,137 +59,8 @@
     });
   });
 
-%script#imageBuildsTemplate{ :type => 'text/x-jquery-tmpl' }
-  :plain
-    {{each(driver, group) account_groups}}
-      {{if group['included'] || target_images_by_target[driver] || (build && active_builds[driver])}}
-        <li>
-          <dl>
-            <dt>
-              <div class="build-actions">
-                <h3>${group['type']['name']}</h3>
-                {{if build && active_builds[driver]}}
-                  <label>${active_builds[driver]['builder']['status']}</label>
-                {{else !build && active_builds_by_image_id[image['uuid']][driver]}}
-                  <label>${active_builds_by_image_id[image['uuid']][driver]['builder']['status']}</label>
-                {{else target_images_by_target[driver]}}
-                  {{if user_can_build}}
-                    #{path = image_target_image_path('replace_image_id', 'replace_target_image_id')
-                      path = path.sub('replace_image_id', '${image[\'uuid\']}')
-                      path = path.sub('replace_target_image_id', '${target_images_by_target[driver][\'uuid\']}')
-                        button_to(t('images.show.delete'), path, :method => :delete)}
-                  {{/if}}
-                {{else build && build['uuid'] == latest_build_id}}
-                  {{if user_can_build}}
-                    #{path = image_target_images_path('replace_image_id', :target => 'replace_driver', :build_id => 'replace_build_id')
-                      path = path.sub('replace_image_id', '${image[\'uuid\']}')
-                      path = path.sub('replace_driver', '${driver}')
-                      path = path.sub('replace_build_id', '${build[\'uuid\']}')
-                        button_to(t('images.show.build'), path, :method => :post)}
-                  {{/if}}
-                  {{if failed_build_counts[driver] > 1}}
-                    <div class="light">
-                      #{t('images.show.failed_build_attempts', :count => '${failed_build_counts[driver]}')}
-                    </div>
-                  {{else failed_build_counts[driver] == 1}}
-                    <div class="light">
-                      #{t('images.show.failed_build_attempts', :count => 1 )}
-                    </div>
-                  {{/if}}
-                {{else !build}}
-                  {{if user_can_build}}
-                    #{path = image_target_images_path('replace_image_id', :target => 'replace_driver')
-                      path = path.sub('replace_image_id', '${image[\'uuid\']}')
-                      path = path.sub('replace_driver', '${driver}')
-                        button_to(t('images.show.build'), path, :method => :post)}
-                  {{/if}}
-                {{else}}
-                  &nbsp;
-                {{/if}}
-              </div>
-            </dt>
-            <dd>
-              <table class="light_table">
-                <thead>
-                  <tr>
-                    <th>
-                      <strong>#{t'images.show.account'}</strong>
-                    </th>
-                    <th>
-                      #{t'images.show.provider'}
-                    </th>
-                    <th>
-                      #{t'images.show.image_uuid'}
-                    </th>
-                    <th>
-                      #{t'images.show.image_uri'}
-                    </th>
-                    <th class="image_controls"></th>
-                </tr></thead>
+%script#imageStatusTemplate{ :type => 'text/html' }
+  = render :partial => 'status'
 
-                <tbody>
-                  {{each(index, account_hash) group['accounts']}}
-                    {{if account_hash['included'] || (target_images_by_target[driver] || !provider_images[account_hash['account']['id']])}}
-                      <tr>
-                        <td>
-                          <strong>${account_hash['account']['label']}</strong>
-                        </td>
-                        <td class="light">
-                          ${account_hash['account']['provider_name']}
-                        </td>
-                        <td class="light">
-                          {{if provider_images[account_hash['account']['id']]}}
-                            ${provider_images[account_hash['account']['id']]['target_identifier']}
-                          {{/if}}
-                        </td>
-                        <td class="light">
-                          {{if provider_images[account_hash['account']['id']]}}
-                            ${provider_images[account_hash['account']['id']]['uuid']}
-                          {{/if}}
-                        </td>
-                        <td class="image_controls light">
-                          {{if target_images_by_target[driver] && active_pushes[account_hash['account']['id']]}}
-                            <label>${active_pushes[account_hash['account']['id']]['builder']['status']}</label>
-                          {{else target_images_by_target[driver] && !provider_images[account_hash['account']['id']] && build &&  build['uuid'] == latest_build_id}}
-                            {{if user_can_build}}
-                              #{path = image_provider_images_path('replace_image_id', :build_id => 'replace_build_id', :target_image_id => 'replace_target_image_id', :account_id => 'replace_account_id')
-                                path = path.sub('replace_image_id', '${image[\'uuid\']}')
-                                path = path.sub('replace_build_id', '${build[\'uuid\']}')
-                                path = path.sub('replace_target_image_id', '${target_images_by_target[driver][\'uuid\']}')
-                                path = path.sub('replace_account_id', '${account_hash[\'account\'][\'id\']}')
-                                  button_to(t('images.show.push'), path, :method => :post, :class => 'upload_image button')}
-                            {{/if}}
-                            {{if failed_push_counts[account_hash['account']['id']] > 1}}
-                              #{t('images.show.failed_push_attempts', :count => '${failed_push_counts[account_hash[\'account\'][\'id\']]}' )}
-                            {{else failed_push_counts[account_hash['account']['id']] == 1}}
-                              #{t('images.show.failed_push_attempts', :count => 1 )}
-                            {{/if}}
-                          {{else provider_images[account_hash['account']['id']]}}
-                            {{if user_can_build}}
-                              #{path = image_provider_image_path('replace_image_id', 'replace_provider_image_id')
-                                path = path.sub('replace_image_id', '${image[\'uuid\']}')
-                                path = path.sub('replace_provider_image_id', '${provider_images[account_hash[\'account\'][\'id\']][\'uuid\']}')
-                                  button_to("", path, :method => :delete, :class => 'delete_image')}
-                            {{/if}}
-                          {{else}}
-                            &nbsp;
-                          {{/if}}
-                        </td>
-                      </tr>
-                    {{/if}}
-                  {{/each}}
-                </tbody>
-              </table>
-            </dd>
-          </dl>
-          <div class="clear"></div>
-        </li>
-      {{/if}}
-    {{/each}}
-
-%script#pushAllButtonTemplate{ :type => 'text/x-jquery-tmpl' }
-  :plain
-    #{path = push_all_image_path('replace_image_id', :build_id => 'replace_build_id')
-      path = path.sub('replace_image_id', '${image[\'uuid\']}')
-      path = path.sub('replace_build_id', '${build[\'uuid\']}')
-      button_to(t('images.show.push_all'), path, :class => 'button pill')}
+%script#pushAllButtonTemplate{ :type => 'text/html' }
+  = render :partial => 'push_all_button'
diff --git a/src/public/javascripts/backbone/views.js b/src/public/javascripts/backbone/views.js
index 2d88c9d..55e2c35 100644
--- a/src/public/javascripts/backbone/views.js
+++ b/src/public/javascripts/backbone/views.js
@@ -298,21 +298,17 @@ Conductor.Views.ImagesShow = Backbone.View.extend({
     var $builds = this.$('ul.image_builds');
     if($builds.length === 0) return;
 
-    $builds.empty();
+    $template = $('#imageStatusTemplate');
+    if($template.length === 0) return;
 
-    $('#imageBuildsTemplate').tmpl(this.model.toJSON()).appendTo($builds);
+    $builds.html(Mustache.to_html($template.html(), this.model.toJSON()));
 
     // Enable/Disable Push All button
     var $buttonTemplate = $('#pushAllButtonTemplate');
     var $pushAllBtn = $('#push-all-btn');
 
-    var buildId = this.model.get("build") ? this.model.get("build")['uuid'] : null;
-    var latestBuildId = this.model.get("latest_build_id");
-    var providerImageExists = this.model.get("provider_image_exists");
-    var targetImageExists = this.model.get("target_image_exists");
-
-    if (buildId && buildId == latestBuildId && targetImageExists) {
-      $pushAllBtn.html($buttonTemplate.tmpl(this.model.toJSON()));
+    if (this.model.get('push_all_enabled')) {
+      $pushAllBtn.html(Mustache.to_html($buttonTemplate.html(), this.model.toJSON()));
     }
     else {
       $pushAllBtn.empty();
-- 
1.7.6.5




More information about the aeolus-devel mailing list