Overall, this looks good, couple minor suggestions inline
On Thu, 2010-06-10 at 11:42 +0200, [email protected] wrote:
> From: Jan Provaznik <[email protected]>
>
> - "new" action is splited into 4 actions according UI forms (new, service,
> software, summary)
Minor grammar fix ^ s/splited/split and s/according/corresponding
> - image descriptor id is passed by 'id'
> ---
> src/app/controllers/image_descriptor_controller.rb | 77 ++++++++++++-------
> src/app/views/image_descriptor/_nav.haml | 8 +-
> src/app/views/image_descriptor/_services.haml | 32 --------
> src/app/views/image_descriptor/_software.haml | 72 ------------------
> src/app/views/image_descriptor/_summary.haml | 58 ---------------
> src/app/views/image_descriptor/new.haml | 23 +++++-
> src/app/views/image_descriptor/services.haml | 37 +++++++++
> src/app/views/image_descriptor/software.haml | 78
> ++++++++++++++++++++
> src/app/views/image_descriptor/summary.haml | 64 ++++++++++++++++
> 9 files changed, 249 insertions(+), 200 deletions(-)
> delete mode 100644 src/app/views/image_descriptor/_services.haml
> delete mode 100644 src/app/views/image_descriptor/_software.haml
> delete mode 100644 src/app/views/image_descriptor/_summary.haml
> create mode 100644 src/app/views/image_descriptor/services.haml
> create mode 100644 src/app/views/image_descriptor/software.haml
> create mode 100644 src/app/views/image_descriptor/summary.haml
>
> diff --git a/src/app/controllers/image_descriptor_controller.rb
> b/src/app/controllers/image_descriptor_controller.rb
> index e5a3a2d..532c092 100644
> --- a/src/app/controllers/image_descriptor_controller.rb
> +++ b/src/app/controllers/image_descriptor_controller.rb
> @@ -2,8 +2,6 @@ class ImageDescriptorController < ApplicationController
> layout :layout
> before_filter :require_user
>
> - TABS = %w(basics services software summary)
> -
> def layout
> return "aggregator" unless ajax?
> end
> @@ -13,46 +11,67 @@ class ImageDescriptorController < ApplicationController
> end
>
> def new
> - # FIXME: check permission, something like IMAGE_CREATE
> - if params[:commit] == 'Cancel' or params[:commit] == 'Done'
> + if params[:cancel]
> redirect_to :controller => "dashboard", :action => 'index'
> - return
> - elsif params[:commit] == 'Build'
> - @tab = 'summary'
> - if params[:targets]
> - params[:targets].each do |target|
> - ImageDescriptorTarget.new_if_not_exists(:name => target,
> :image_descriptor_id => params[:image_descriptor][:id], :status =>
> ImageDescriptorTarget::STATE_QUEUED)
> - end
> - end
> + else
> + @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) :
> ImageDescriptor.new
> + @image_descriptor.update_xml_attributes!(params[:xml] || {})
This block ^ (2 lines) is repeated several times throughout the
controller. It would be more DRY to move this into its own method
(maybe private so people cannot call it directly), something like
update_xml(), then put this block in there.
> end
> + end
>
> - unless @tab
> - @old_tab = TABS.index(params[:tab]) || nil
> - next_idx = @old_tab ? @old_tab + (params[:commit] == 'Back' ? -1 : 1)
> : 0
> - @tab = (next_idx < 0 || next_idx > TABS.size) ? TABS[0] :
> TABS[next_idx]
> + def services
> + if params[:cancel]
> + redirect_to :controller => "dashboard", :action => 'index'
> + else
> + @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) :
> ImageDescriptor.new
> + @image_descriptor.update_xml_attributes!(params[:xml] || {})
> end
> + end
>
> - @image_descriptor = params[:image_descriptor] &&
> params[:image_descriptor][:id] ?
> ImageDescriptor.find(params[:image_descriptor][:id]) : ImageDescriptor.new
> - @image_descriptor.update_xml_attributes!(params[:xml] || {})
> + def software
> + if params[:cancel]
> + redirect_to :controller => "dashboard", :action => 'index'
> + else
> + @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) :
> ImageDescriptor.new
> + @image_descriptor.update_xml_attributes!(params[:xml] || {})
> + @repositories = RepositoryManager.new.repositories
> + if params[:back]
> + redirect_to :action => 'new', :id => params[:id]
> + return
> + end
> + end
> + end
>
> - if @tab == 'summary'
> + def summary
> + if params[:cancel]
> + redirect_to :controller => "dashboard", :action => 'index'
> + else
> + @image_descriptor = params[:id] ? ImageDescriptor.find(params[:id]) :
> ImageDescriptor.new
> + @image_descriptor.update_xml_attributes!(params[:xml] || {})
> @image_descriptor.complete = true
> @image_descriptor.save!
> - end
> -
> - if @tab == 'software'
> - @repositories = RepositoryManager.new.repositories
> - elsif @tab == 'summary'
> @all_targets = ImageDescriptorTarget.available_targets
> + if params[:back]
> + redirect_to :action => 'services', :id => params[:id]
> + return
> + end
> end
> end
>
> - def create
> - if params[:commit] == 'Cancel'
> - redirect_to :controller => "image", :action => 'show'
> - return
> + def build
> + if params[:cancel] or params[:done]
> + redirect_to :controller => "dashboard", :action => 'index'
> + elsif params[:back]
> + redirect_to :action => 'software', :id => params[:id]
> + else
> + @all_targets = ImageDescriptorTarget.available_targets
> + if params[:targets]
> + params[:targets].each do |target|
> + ImageDescriptorTarget.new_if_not_exists(:name => target,
> :image_descriptor_id => params[:id], :status =>
> ImageDescriptorTarget::STATE_QUEUED)
> + end
> + end
> + redirect_to :action => 'summary', :id => params[:id]
> end
> - redirect_to :action => 'images', :tab => 'show'
> end
>
> def targets
> diff --git a/src/app/views/image_descriptor/_nav.haml
> b/src/app/views/image_descriptor/_nav.haml
> index c923baf..35cfd02 100644
> --- a/src/app/views/image_descriptor/_nav.haml
> +++ b/src/app/views/image_descriptor/_nav.haml
Up to you if you want to do this, but tsedovic has what I think is a
nice pattern for this, see layouts/_header.haml. (actually, I think you
do this in another file as well). Not a huge win I guess, but feels a
little cleaner imho.
> @@ -1,15 +1,15 @@
> #image_descriptor_nav
> %h2 Create a New Template Master
> %ul{:class => 'nav'}
> - %li{:class => @tab == 'basics' ? 'selected' : nil}
> + %li{:class => controller.action_name == 'new' ? 'selected' : nil}
> %h4 BASICS
> %p Basic RHEL LAMP
> - %li{:class => @tab == 'services' ? 'selected' : nil}
> + %li{:class => controller.action_name == 'services' ? 'selected' : nil}
> %h4 SERVICES
> %p Add services
> - %li{:class => @tab == 'software' ? 'selected' : nil}
> + %li{:class => controller.action_name == 'software' ? 'selected' : nil}
> %h4 SOFTWARE
> %p Add software
> - %li{:class => @tab == 'summary' ? 'selected' : nil}
> + %li{:class => controller.action_name == 'summary' ? 'selected' : nil}
> %h4 SUMMARY
> %p Create images
> diff --git a/src/app/views/image_descriptor/_services.haml
> b/src/app/views/image_descriptor/_services.haml
> deleted file mode 100644
> index d0ef4af..0000000
> --- a/src/app/views/image_descriptor/_services.haml
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -%ul
> - %li
> - %label Storage
> - = check_box_tag 'xml[services][amazon3_storage]', '1',
> @image_descriptor.xml.services.include?('amazon3_storage')
> - = label_tag 'xml[services][amazon3_storage]', 'Enable Amazon S3
> storage', :class => "plain"
> - %span Provides cloud aware table storage for both user-data and
> guest-images and snapshots compatible with Amazon S3, for any (internal &
> external)cloud deployment
> - %li
> - %label Inter-node Messaging
> - = check_box_tag 'xml[services][inter_node_messaging]', '1',
> @image_descriptor.xml.services.include?('inter_node_messaging')
> - = label_tag 'xml[services][inter_node_messaging]', 'Enable inter-node
> messaging', :class => "plain"
> - %span Provides cloud aware messaging to facilitate instance-to-instance
> and instance-to-external communication compatible with Amazon SQS, for any
> (internal & external)cloud deployment
> - %li
> - %label Availbility
> - = check_box_tag 'xml[services][availbility]', '1',
> @image_descriptor.xml.services.include?('availbility')
> - = label_tag 'xml[services][availbility]', 'Enable high availbility
> services', :class => "plain"
> - %span Provides REST API's that allow applications and administrators to
> inspect instances and know the active state and configuration. Choose high
> availability to actively maintain and manage application availability when
> run in cloud
> - %li
> - %label JBoss
> - = check_box_tag 'xml[services][jboss]', '1',
> @image_descriptor.xml.services.include?('jboss')
> - = label_tag 'xml[services][jboss]', 'Enable JBoss infrastructure',
> :class => "plain"
> - %span Provides cloud ready JBoss infrastructure to be run in public and
> internal clouds
> - %li
> - %label Cooling Tower
> - = check_box_tag 'xml[services][cooling_tower]', '1',
> @image_descriptor.xml.services.include?('cooling_tower')
> - = label_tag 'xml[services][cooling_tower]', 'Enable Cooling Tower',
> :class => "plain"
> - %span Provides multi-tenant, lightweight container for managing many
> cloud ready PaaS services inside a single instance
> -
> -
> -.submit
> - = submit_tag "Cancel"
> - = submit_tag "Back"
> - = submit_tag "Next"
> diff --git a/src/app/views/image_descriptor/_software.haml
> b/src/app/views/image_descriptor/_software.haml
> deleted file mode 100644
> index 5f7f24f..0000000
> --- a/src/app/views/image_descriptor/_software.haml
> +++ /dev/null
> @@ -1,72 +0,0 @@
> -- content_for :scripts do
> - :javascript
> - $(document).ready(function() {
> - $("#dashboard-tabs > ul > li > a").each(function(index) {
> - var link = $(this).attr("href") + "?ajax=true";
> - $(this).attr("href", link);
> - });
> - $("#dashboard-tabs").tabs({spinner: "Loading..."});
> -
> - // when JS is enabled, hide the Dashboard content -- it'll be loaded
> - // by jquery UI tab using ajax
> - $("#dashboard-content").hide();
> - #...@image_descriptor.xml.packages.map {|group, pkgs|
> js_add_group_cmd(group, pkgs)}.join("\n")}
> - });
> - function remove_group(ev) {
> - $(ev.target).parent().remove();
> - };
> - function get_repository(ev) {
> - var rep = $(ev.target).val();
> - $("#dashboard-tabs > ul > li > a").each(function(index) {
> - var link = $(this).data('load.tabs');
> - if (link.search(/repository=[^$&]*/) == -1) {
> - link = link + "&repository=" + rep;
> - } else {
> - link = link.replace(/repository=[^$&]*/, "repository="+rep);
> - }
> - $("#dashboard-tabs").tabs('url', index, link);
> - });
> - $("#dashboard-tabs").tabs('load', $("#dashboard-tabs").tabs('option',
> 'selected'));
> - };
> - function select_package(group, pkgname, parent) {
> - if (!parent) parent = $("#selected_packages");
> - if (parent.find(".pkgname").filter(function() {return $(this).text()
> == pkgname}).length == 0) {
> - var node = $("<li><input type=checkbox name='xml[packages][]'
> value='" + group + '#' + pkgname + "' checked=true><span class='pkgname'>" +
> pkgname + "</span></li>").appendTo(parent);
> - }
> - };
> - function add_group(name) {
> - var group = $("<li><span class='group'>" + name + "</span><span
> class='select'
> onclick='remove_group(event)'>Remove</span><ul></ul></li>").appendTo("#selected_packages");
> - return group.find("ul");
> - };
> - function select_group(opts) {
> - var groups = $("#selected_packages li .group").filter(function()
> {return $(this).text() == opts.group});
> - //FIXME: if group exists, we abort adding group again, merging is not
> supported yet
> - if (groups.length > 0) return;
> - var group = add_group(opts.group);
> - for (var i = 0; i < opts.pkgs.length; i++) {
> - select_package(opts.group, opts.pkgs[i], group);
> - }
> - };
> -
> -- menu = [ { :text => "Groups", :action => "repository_packages_by_group" },
> |
> - { :text => "Packages", :action => "repository_packages" }, ] |
> -
> -.pkglist_wrapper
> - .pkglist
> - #dashboard-tabs{ :class => "ui-tabs ui-widget ui-widget-content
> ui-corner-all" }
> - %ul{ :class => "ui-tabs ui-widget ui-widget-content ui-corner-all
> ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header" }
> - - menu.each do |item|
> - - selection_style = "ui-tabs-selected ui-state-active" if
> item[:action] == controller.action_name
> - %li{ :class => "#{selection_style} ui-state-default
> ui-corner-top", :style => 'clear: none' }
> - = "<a href=\"#{url_for :controller => "image_descriptor",
> :action => item[:action] }\"><span>#{item[:text]}</span></a>"
> - %li{ :class => "select_repository"}
> - = select_repository_tag(@repositories)
> - .pkglist{:style => "margin-left: 30px", :class => "left-pkglist"}
> - %div{:class => "ui-tabs ui-widget ui-widget-content ui-corner-all
> ui-helper-reset ui-helper-clearfix ui-widget-header"}
> - Selected packages
> - %ul{:id => "selected_packages"}
> -
> -.submit
> - = submit_tag "Cancel"
> - = submit_tag "Back"
> - = submit_tag "Next"
> diff --git a/src/app/views/image_descriptor/_summary.haml
> b/src/app/views/image_descriptor/_summary.haml
> deleted file mode 100644
> index 632669d..0000000
> --- a/src/app/views/image_descriptor/_summary.haml
> +++ /dev/null
> @@ -1,58 +0,0 @@
> -- content_for :scripts do
> - :javascript
> - $(document).ready(function() {
> - var refreshId = setInterval(function() {
> - $('#image_target_list').load('#{url_for :controller =>
> 'image_descriptor', :action => 'targets', :id => @image_descriptor.id, :ajax
> => true}');
> - }, 10000);
> - });
> - function toggle_build_form_visibility(ev) {
> - if ($("#image_build_form").css('display') == 'none') {
> - $("#image_build_form").css('display', 'block');
> - $(ev.target).val('Cancel');
> - } else {
> - $("#image_build_form").css('display', 'none');
> - $(ev.target).val('Build Images');
> - }
> - }
> -
> -.summary_panel
> - %ul{:class => 'side_panel'}
> - %li
> - BASICS
> - %label
> - = @image_descriptor.xml.name
> - %label
> - = @image_descriptor.xml.platform
> - %label
> - = @image_descriptor.xml.description
> - %li
> - SERVICES
> - - @image_descriptor.xml.services.each do |service|
> - %label
> - = service
> - //FIXME: software could take realy long space
> - //%li
> - // SOFTWARE
> -
> - %ul{:class => 'main_panel'}
> - .image_build_panel
> - %h3
> - Images
> - %input{:type => 'button', :value => "Build Images", :style =>
> 'float:right', :onclick => 'toggle_build_form_visibility(event)'}
> - #image_build_form
> - %ul
> - %li
> - %label Image formats
> - %ul
> - - @all_targets.each do |target_id, target|
> - %li
> - = check_box_tag 'targets[]', target_id, false
> - %span
> - = target['name']
> - = submit_tag "Build"
> - = render :partial => 'targets'
> -
> -.submit
> - = submit_tag "Cancel"
> - = submit_tag "Back"
> - = submit_tag "Done"
> diff --git a/src/app/views/image_descriptor/new.haml
> b/src/app/views/image_descriptor/new.haml
> index e6f4a3e..5a1adda 100644
> --- a/src/app/views/image_descriptor/new.haml
> +++ b/src/app/views/image_descriptor/new.haml
> @@ -1,9 +1,22 @@
> -= render :partial => "nav", :locals => {:tab => params[:tab]}
> += render :partial => "nav"
>
> #image_descriptor_form{:class => 'dcloud_form'}
> = error_messages_for 'image_descriptor'
>
> - - form_tag :action => 'new' do
> - %input{:type => 'hidden', :name => 'tab', :value => @tab}
> - = hidden_field :image_descriptor, :id
> - = render :partial => @tab
> + - form_for @image_descriptor, :url => {:action => 'services', :id =>
> @image_descriptor.id} do
> + %ul
> + %li
> + %label Name
> + = text_field_tag 'xml[name]', @image_descriptor.xml.name
> + %span Provide a unique name for template master. Users will see this
> name when they choose this image to instantiate.
> + %li
> + %label Platform
> + = select_tag("xml[platform]",
> @image_descriptor.xml.platforms.map{|repid, rep| "<option value=\"#{repid}\"
> selected=\"#{repid == @image_descriptor.xml.platform ? 'selected' :
> ''}\">#{rep['name']}</option>"})
> + %span Choose the software operating system.
> + %li
> + %label Description
> + = text_area_tag("xml[description]",
> @image_descriptor.xml.description, :rows => 4)
> + %span Provide a description of your template master. Be descriptive
> to help users to identify the images created with this master.
> + .submit
> + = submit_tag "Cancel", :name => "cancel"
> + = submit_tag "Next", :name => "next"
> diff --git a/src/app/views/image_descriptor/services.haml
> b/src/app/views/image_descriptor/services.haml
> new file mode 100644
> index 0000000..ac169b7
> --- /dev/null
> +++ b/src/app/views/image_descriptor/services.haml
> @@ -0,0 +1,37 @@
> += render :partial => "nav"
> +
> +#image_descriptor_form{:class => 'dcloud_form'}
> + = error_messages_for 'image_descriptor'
> +
> + - form_for @image_descriptor, :url => {:action => 'software', :id =>
> @image_descriptor.id} do
> + = hidden_field :image_descriptor, :id
> + %ul
> + %li
> + %label Storage
> + = check_box_tag 'xml[services][amazon3_storage]', '1',
> @image_descriptor.xml.services.include?('amazon3_storage')
> + = label_tag 'xml[services][amazon3_storage]', 'Enable Amazon S3
> storage', :class => "plain"
> + %span Provides cloud aware table storage for both user-data and
> guest-images and snapshots compatible with Amazon S3, for any (internal &
> external)cloud deployment
> + %li
> + %label Inter-node Messaging
> + = check_box_tag 'xml[services][inter_node_messaging]', '1',
> @image_descriptor.xml.services.include?('inter_node_messaging')
> + = label_tag 'xml[services][inter_node_messaging]', 'Enable
> inter-node messaging', :class => "plain"
> + %span Provides cloud aware messaging to facilitate
> instance-to-instance and instance-to-external communication compatible with
> Amazon SQS, for any (internal & external)cloud deployment
> + %li
> + %label Availbility
> + = check_box_tag 'xml[services][availbility]', '1',
> @image_descriptor.xml.services.include?('availbility')
> + = label_tag 'xml[services][availbility]', 'Enable high availbility
> services', :class => "plain"
All instances of 'availbility' above should be 'availability'
> + %span Provides REST API's that allow applications and administrators
> to inspect instances and know the active state and configuration. Choose high
> availability to actively maintain and manage application availability when
> run in cloud
> + %li
> + %label JBoss
> + = check_box_tag 'xml[services][jboss]', '1',
> @image_descriptor.xml.services.include?('jboss')
> + = label_tag 'xml[services][jboss]', 'Enable JBoss infrastructure',
> :class => "plain"
> + %span Provides cloud ready JBoss infrastructure to be run in public
> and internal clouds
> + %li
> + %label Cooling Tower
> + = check_box_tag 'xml[services][cooling_tower]', '1',
> @image_descriptor.xml.services.include?('cooling_tower')
> + = label_tag 'xml[services][cooling_tower]', 'Enable Cooling Tower',
> :class => "plain"
> + %span Provides multi-tenant, lightweight container for managing many
> cloud ready PaaS services inside a single instance
> + .submit
> + = submit_tag "Cancel", :name => "cancel"
> + = submit_tag "Back", :name => "back"
> + = submit_tag "Next", :name => "next"
> diff --git a/src/app/views/image_descriptor/software.haml
> b/src/app/views/image_descriptor/software.haml
> new file mode 100644
> index 0000000..47f377f
> --- /dev/null
> +++ b/src/app/views/image_descriptor/software.haml
> @@ -0,0 +1,78 @@
> +- content_for :scripts do
> + :javascript
> + $(document).ready(function() {
> + $("#dashboard-tabs > ul > li > a").each(function(index) {
> + var link = $(this).attr("href") + "?ajax=true";
> + $(this).attr("href", link);
> + });
> + $("#dashboard-tabs").tabs({spinner: "Loading..."});
> +
> + // when JS is enabled, hide the Dashboard content -- it'll be loaded
> + // by jquery UI tab using ajax
> + $("#dashboard-content").hide();
> + #...@image_descriptor.xml.packages.map {|group, pkgs|
> js_add_group_cmd(group, pkgs)}.join("\n")}
> + });
> + function remove_group(ev) {
> + $(ev.target).parent().remove();
> + };
> + function get_repository(ev) {
> + var rep = $(ev.target).val();
> + $("#dashboard-tabs > ul > li > a").each(function(index) {
> + var link = $(this).data('load.tabs');
> + if (link.search(/repository=[^$&]*/) == -1) {
> + link = link + "&repository=" + rep;
> + } else {
> + link = link.replace(/repository=[^$&]*/, "repository="+rep);
> + }
> + $("#dashboard-tabs").tabs('url', index, link);
> + });
> + $("#dashboard-tabs").tabs('load', $("#dashboard-tabs").tabs('option',
> 'selected'));
> + };
> + function select_package(group, pkgname, parent) {
> + if (!parent) parent = $("#selected_packages");
> + if (parent.find(".pkgname").filter(function() {return $(this).text()
> == pkgname}).length == 0) {
> + var node = $("<li><input type=checkbox name='xml[packages][]'
> value='" + group + '#' + pkgname + "' checked=true><span class='pkgname'>" +
> pkgname + "</span></li>").appendTo(parent);
> + }
> + };
> + function add_group(name) {
> + var group = $("<li><span class='group'>" + name + "</span><span
> class='select'
> onclick='remove_group(event)'>Remove</span><ul></ul></li>").appendTo("#selected_packages");
> + return group.find("ul");
> + };
> + function select_group(opts) {
> + var groups = $("#selected_packages li .group").filter(function()
> {return $(this).text() == opts.group});
> + //FIXME: if group exists, we abort adding group again, merging is not
> supported yet
> + if (groups.length > 0) return;
> + var group = add_group(opts.group);
> + for (var i = 0; i < opts.pkgs.length; i++) {
> + select_package(opts.group, opts.pkgs[i], group);
> + }
> + };
> +
> +- menu = [ { :text => "Groups", :action => "repository_packages_by_group" },
> |
> + { :text => "Packages", :action => "repository_packages" }, ] |
> +
> += render :partial => "nav"
> +
> +#image_descriptor_form{:class => 'dcloud_form'}
> + = error_messages_for 'image_descriptor'
> +
> + - form_for @image_descriptor, :url => {:action => 'summary', :id =>
> @image_descriptor.id} do
> + .pkglist_wrapper
> + .pkglist
> + #dashboard-tabs{ :class => "ui-tabs ui-widget ui-widget-content
> ui-corner-all" }
> + %ul{ :class => "ui-tabs ui-widget ui-widget-content ui-corner-all
> ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header" }
> + - menu.each do |item|
> + - selection_style = "ui-tabs-selected ui-state-active" if
> item[:action] == controller.action_name
> + %li{ :class => "#{selection_style} ui-state-default
> ui-corner-top", :style => 'clear: none' }
> + = "<a href=\"#{url_for :controller => "image_descriptor",
> :action => item[:action] }\"><span>#{item[:text]}</span></a>"
> + %li{ :class => "select_repository"}
> + = select_repository_tag(@repositories)
> + .pkglist{:style => "margin-left: 30px", :class => "left-pkglist"}
> + %div{:class => "ui-tabs ui-widget ui-widget-content ui-corner-all
> ui-helper-reset ui-helper-clearfix ui-widget-header"}
> + Selected packages
> + %ul{:id => "selected_packages"}
> +
> + .submit
> + = submit_tag "Cancel", :name => "cancel"
> + = submit_tag "Back", :name => "back"
> + = submit_tag "Next", :name => "next"
> diff --git a/src/app/views/image_descriptor/summary.haml
> b/src/app/views/image_descriptor/summary.haml
> new file mode 100644
> index 0000000..dd8ff1f
> --- /dev/null
> +++ b/src/app/views/image_descriptor/summary.haml
> @@ -0,0 +1,64 @@
> +- content_for :scripts do
> + :javascript
> + $(document).ready(function() {
> + var refreshId = setInterval(function() {
> + $('#image_target_list').load('#{url_for :controller =>
> 'image_descriptor', :action => 'targets', :id => @image_descriptor.id, :ajax
> => true}');
> + }, 10000);
> + });
> + function toggle_build_form_visibility(ev) {
> + if ($("#image_build_form").css('display') == 'none') {
> + $("#image_build_form").css('display', 'block');
> + $(ev.target).val('Cancel');
> + } else {
> + $("#image_build_form").css('display', 'none');
> + $(ev.target).val('Build Images');
> + }
> + }
> +
> += render :partial => "nav"
> +
> +#image_descriptor_form{:class => 'dcloud_form'}
> + = error_messages_for 'image_descriptor'
> +
> + - form_for @image_descriptor, :url => {:action => 'build', :id =>
> @image_descriptor.id} do
> + .summary_panel
> + %ul{:class => 'side_panel'}
> + %li
> + BASICS
> + %label
> + = @image_descriptor.xml.name
> + %label
> + = @image_descriptor.xml.platform
> + %label
> + = @image_descriptor.xml.description
> + %li
> + SERVICES
> + - @image_descriptor.xml.services.each do |service|
> + %label
> + = service
> + //FIXME: software could take realy long space
> + //%li
> + // SOFTWARE
> +
> + %ul{:class => 'main_panel'}
> + .image_build_panel
> + %h3
> + Images
> + %input{:type => 'button', :value => "Build Images", :style =>
> 'float:right', :onclick => 'toggle_build_form_visibility(event)'}
> + #image_build_form
> + %ul
> + %li
> + %label Image formats
> + %ul
> + - @all_targets.each do |target_id, target|
> + %li
> + = check_box_tag 'targets[]', target_id, false
> + %span
> + = target['name']
> + = submit_tag "Build"
> + = render :partial => 'targets'
> +
> + .submit
> + = submit_tag "Cancel", :name => "cancel"
> + = submit_tag "Back", :name => "back"
> + = submit_tag "Done", :name => "done"
Other than those minor notes, ACK
-j
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel