From: Imre Farkas <ifarkas(a)redhat.com>
---
aeolus-conductor.spec.in | 2 +-
src/app/controllers/images_controller.rb | 161 ++++++++------
.../views/images/_push_all_button.html.mustache | 1 +
src/app/views/images/_status.html.mustache | 90 ++++++++
src/app/views/images/show.html.haml | 236 ++------------------
src/public/javascripts/backbone/views.js | 14 +-
6 files changed, 209 insertions(+), 295 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..d86f589 100644
--- a/src/app/controllers/images_controller.rb
+++ b/src/app/controllers/images_controller.rb
@@ -67,71 +67,31 @@ class ImagesController < ApplicationController
@account_groups_listing = @account_groups.select{ |driver, group| group[:included] ||
@target_images_by_target[driver] || (@build and @builder.find_active_build((a)build.id,
driver)) }
flash[:error] = t("images.flash.error.no_provider_accounts") if
@account_groups_listing.blank?
+ @user_can_build = (@environment && check_privilege(Privilege::USE,
@environment))
+ @is_latest_build = (@build && @build.id == @latest_build_id)
+
+ @account_groups_listing = []
+ @account_groups.each do |driver, group|
+ if group[:included] || @target_images_by_target[driver] || (@build &&
@builder.find_active_build((a)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 = []
+ @account_groups_listing.each do |account_group|
+ provider_type = account_group[:provider_type]
+ target_image = @target_images_by_target[provider_type.deltacloud_driver]
+ @images_by_provider_type << load_build_status_for_target_image(account_group,
target_image)
+ end
+
+ @push_all_enabled = (@build && @build.id == @latest_build_id &&
@target_image_exists)
+
respond_to do |format|
format.html
format.json do
- active_builds = @account_groups.keys.inject({}) do |result, driver|
- result[driver] = @builder.find_active_build((a)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[(a)image.id] = {} unless result.has_key?((a)image.id)
- result[(a)image.id][driver] = @builder.find_active_build_by_imageid((a)image.id,
driver)
- result[(a)image.id][driver].attributes['status'].capitalize! if
result[(a)image.id][driver]
-
- result
- 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_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?
-
- result
- end
-
- failed_build_counts = @account_groups.keys.inject({}) do |result, driver|
- result[driver] = @builder.failed_build_count((a)build.id, driver) if @build
- result
- end
-
- 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?
-
- result
- end
-
- 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 }
+ render :json => { :images => @images_by_provider_type, :push_all_enabled
=> @push_all_enabled,
+ :push_all_path => @push_all_enabled ?
push_all_image_path((a)image.id, :build_id => @build.id) : nil }
end
end
end
@@ -360,18 +320,18 @@ class ImagesController < ApplicationController
protected
def load_target_images(build)
@target_images_by_target = {}
- return unless build and @latest_build.present?
+ return unless build and @latest_build_id.present?
build.target_images.each {|timg| @target_images_by_target[timg.target] = timg}
@target_images_by_target
end
def load_builds
@builds = @image.image_builds.sort {|a, b| a.timestamp <=>
b.timestamp}.reverse
- @latest_build = @builds.first.uuid if @builds.any?
+ @latest_build_id = @builds.first.uuid if @builds.any?
@build = if params[:build].present?
@builds.find {|b| b.id == params[:build]}
- elsif @latest_build
- @builds.find {|b| b.id == @latest_build}
+ elsif @latest_build_id
+ @builds.find {|b| b.id == @latest_build_id}
else
nil
end
@@ -399,4 +359,73 @@ class ImagesController < ApplicationController
end
return true
end
+
+ def load_build_status_for_target_image(account_group, target_image)
+ provider_type = account_group[:provider_type]
+ provider_images_by_provider_account = []
+
+ account_group[:accounts].each do |account|
+ provider_images_by_provider_account << load_provider_images(account,
target_image)
+ end
+
+ active_build = @builder.find_active_build((a)build.id,
provider_type.deltacloud_driver)
+ build_status = { :is_active_build => active_build.present?,
+ :build_action_available => !target_image.present? &&
(@is_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((a)image.id, :target => provider_type.deltacloud_driver,
+
:build_id => @build ? @build.id : nil)
+ failed_build_count = @builder.failed_build_count((a)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
+
+ target_image_for_provider_type[:delete_target_image_path] =
image_target_image_path((a)image.id, target_image.id) if
build_status[:delete_action_available]
+
+ target_image_for_provider_type
+ end
+
+ def load_provider_images(account, target_image)
+ 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? && @is_latest_build &&
!push_started_for_account,
+ :delete_action_available => provider_image.present? &&
!(a)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((a)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
+
+ provider_image_for_provider_account[:delete_provider_image_path] =
image_provider_image_path((a)image.id, provider_image.id) if
push_status[:delete_action_available]
+
+ provider_image_for_provider_account
+ 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..2afee93
--- /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>{{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..7662686 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((a)image.uuid), :class
=> 'button pill'
+ = link_to t('images.show.template_xml'),
template_image_path((a)image.uuid), :class => 'button pill'
= button_to t("delete"), image_path((a)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((a)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'
+ = select_tag :build, options_for_build_select(@builds, @build,
@latest_build_id)
+ = 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((a)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((a)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((a)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((a)build.id, driver)
- = label_tag b.status
- - elsif !@build and b =
@builder.find_active_build_by_imageid((a)image.id, driver)
- = label_tag b.status
- - elsif timg
- - if user_can_build
- = button_to t('.delete'),
image_target_image_path((a)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((a)image.id, :target => driver, :build_id => @build ?
@build.id : nil), :method => :post
- - failed_build_count = @builder.failed_build_count((a)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((a)image.id, :target => driver, :build_id => @build ?
@build.id : nil), :method => :post
- - else
-
- %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((a)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((a)image.id, pimg.id), :method => :delete, :class =>
'delete_image'
- - else
-
- - 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}}
-
- {{/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}}
-
- {{/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