From: Jozef Zigmund <[email protected]>

This UI prepares to apply new UI design for Image factory. Old wizard of 
template builder was changed to form on one page.

This PATCH depends on "image/template revamp (rev. 4)" set of patches
---
 src/app/controllers/templates_controller.rb |   26 +++++++-
 src/app/views/templates/_basics.haml        |   28 ++++-----
 src/app/views/templates/_build_images.haml  |    5 ++
 src/app/views/templates/_image_formats.haml |    7 ++
 src/app/views/templates/_packages.haml      |    6 --
 src/app/views/templates/_platform.haml      |   12 ++++
 src/app/views/templates/_scripting.haml     |   10 +++
 src/app/views/templates/_services.haml      |   23 +++++++
 src/app/views/templates/_software.haml      |   85 +++++++++++++++++++++++++++
 src/app/views/templates/new.haml            |   29 +++------
 src/app/views/templates/summary.haml        |    5 --
 11 files changed, 186 insertions(+), 50 deletions(-)
 create mode 100644 src/app/views/templates/_build_images.haml
 create mode 100644 src/app/views/templates/_image_formats.haml
 delete mode 100644 src/app/views/templates/_packages.haml
 create mode 100644 src/app/views/templates/_platform.haml
 create mode 100644 src/app/views/templates/_scripting.haml
 create mode 100644 src/app/views/templates/_services.haml
 create mode 100644 src/app/views/templates/_software.haml

diff --git a/src/app/controllers/templates_controller.rb 
b/src/app/controllers/templates_controller.rb
index d9ac23c..974b433 100644
--- a/src/app/controllers/templates_controller.rb
+++ b/src/app/controllers/templates_controller.rb
@@ -15,9 +15,29 @@ class TemplatesController < ApplicationController
 
   def new
     update_xml
-    if params[:next]
-      redirect_to :action => 'services', :id => @image_descriptor
+    @repository_manager = RepositoryManager.new
+    @image_descriptor = params[:id] ? Template.find(params[:id]) : Template.new
+    @groups = @repository_manager.all_groups(params[:repository])
+    @hardware_profiles = HardwareProfile.find(:all)
+    @all_targets = Image.available_targets
+    if params[:tab].to_s == 'packages'
+      @selected_tab = 'packages'
+      @packages = @repository_manager.all_packages(params[:repository])
+    else
+      @selected_tab = 'groups'
+    end
+
+    if request.xhr?
+      render :partial => @selected_tab
+      return
+    end
+    if params[:build_and_monitor]
+      update_xml
+      redirect_to :action => 'summary', :id => @image_descriptor.id, 
:build=>"build", :targets =>params[:targets]
     end
+    #if params[:next]
+    #  redirect_to :action => 'services', :id => @image_descriptor
+    #end
   end
 
   def packages
@@ -83,7 +103,7 @@ class TemplatesController < ApplicationController
       end
     else
       if params[:back]
-        redirect_to :action => 'software', :id => @image_descriptor
+        redirect_to :action => 'new', :id => @image_descriptor
       elsif params[:done]
         redirect_to :controller => 'dashboard', :action => 'index'
       end
diff --git a/src/app/views/templates/_basics.haml 
b/src/app/views/templates/_basics.haml
index b89970d..9e0e7d8 100644
--- a/src/app/views/templates/_basics.haml
+++ b/src/app/views/templates/_basics.haml
@@ -1,16 +1,12 @@
-%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"
-  = submit_tag "Next"
+#clear
+  %h3 Basic Template Properties
+  %ul
+    %li
+      %label Name
+      = text_field_tag("xml[name]", @image_descriptor.xml.name)
+    %li
+      %label Description
+      = text_field_tag("xml[description]", @image_descriptor.xml.description, 
:rows =>4)
+    %li
+      %label Template Category
+      = select_tag("xml[category]", "<option>User - private</option>")
diff --git a/src/app/views/templates/_build_images.haml 
b/src/app/views/templates/_build_images.haml
new file mode 100644
index 0000000..728c676
--- /dev/null
+++ b/src/app/views/templates/_build_images.haml
@@ -0,0 +1,5 @@
+#clear
+  .submit
+    = submit_tag("Build", :disabled => true)
+    = submit_tag("Build & Monitor", :name=> "build_and_monitor")
+    = submit_tag("Build & Launch", :disabled => true)
diff --git a/src/app/views/templates/_image_formats.haml 
b/src/app/views/templates/_image_formats.haml
new file mode 100644
index 0000000..c661694
--- /dev/null
+++ b/src/app/views/templates/_image_formats.haml
@@ -0,0 +1,7 @@
+#clear
+  %h3 Build Options
+  %label Image formats
+  - @all_targets.each do |target_id, target|
+    %br
+    = check_box_tag 'targets[]', target_id, false
+    = target['name']
diff --git a/src/app/views/templates/_packages.haml 
b/src/app/views/templates/_packages.haml
deleted file mode 100644
index 1e0c2a5..0000000
--- a/src/app/views/templates/_packages.haml
+++ /dev/null
@@ -1,6 +0,0 @@
-%ul{:class => 'packages_to_select selection_list'}
-  - @packages.each do |pkg|
-    %li
-      = pkg[:name]
-      %a{:class => 'select_package action_link', :href => url_for(:action => 
'select_package', :id => params[:id], :package => pkg[:name], :repository => 
pkg[:repository_id])}
-        Select
diff --git a/src/app/views/templates/_platform.haml 
b/src/app/views/templates/_platform.haml
new file mode 100644
index 0000000..a74c812
--- /dev/null
+++ b/src/app/views/templates/_platform.haml
@@ -0,0 +1,12 @@
+#clear
+  %h3 Platform
+  %ul
+    %li
+      %label Operating System
+      = select_tag("xml[platform]", 
@image_descriptor.xml.platforms.map{|repid, rep| "<option value=\"#{repid}\" 
selected=\"#{repid == @image_descriptor.xml.platform ? 'selected' : 
''}\">#{rep['name']}</option>"}.join.html_safe)
+    %li
+      %label H/W Profile
+      = select_tag("xml[hw_profile]", 
options_for_select(@hardware_profiles.collect{|p| [ p.name, p.id ]}), 
{:included_blank => :true})
+    %li
+      %label Locale
+      =select_tag("xml[locale]", options_for_select(I18n.available_locales, 
I18n.locale.to_sym))
diff --git a/src/app/views/templates/_scripting.haml 
b/src/app/views/templates/_scripting.haml
new file mode 100644
index 0000000..f58c556
--- /dev/null
+++ b/src/app/views/templates/_scripting.haml
@@ -0,0 +1,10 @@
+#clear
+  %h3 Configuration Scripting
+  %ul
+    %li
+      =check_box_tag("choose_file")
+      =text_field_tag("choose_file","Choose a file")
+      =submit_tag("Browse", :disabled =>true)
+    %li
+      =check_box_tag("puppet")
+      %label Use Puppet
diff --git a/src/app/views/templates/_services.haml 
b/src/app/views/templates/_services.haml
new file mode 100644
index 0000000..90ba092
--- /dev/null
+++ b/src/app/views/templates/_services.haml
@@ -0,0 +1,23 @@
+#clear
+  %h3 Cloud Provider Services
+  %ul
+    %li
+      %label S3-Compatible 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"
+    %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"
+    %li
+      %label High Availability
+      = check_box_tag 'xml[services][availability]', '1', 
@image_descriptor.xml.services.include?('availability')
+      = label_tag 'xml[services][availability]', 'Enable high availability 
services', :class => "plain"
+    %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"
+    %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"
diff --git a/src/app/views/templates/_software.haml 
b/src/app/views/templates/_software.haml
new file mode 100644
index 0000000..5f94341
--- /dev/null
+++ b/src/app/views/templates/_software.haml
@@ -0,0 +1,85 @@
+- content_for :scripts do
+  :javascript
+    $(document).ready(function() {
+      // FIXME: don't know, how to disable first ajax load.
+      // On ajax load, new data are only appended to existing content
+      // workaround is to delete existing content before load
+      $(".groups_to_select").remove();
+      $("#dashboard-tabs").tabs({
+        spinner: "Loading...",
+        load: function(event, ui) {
+          $("a.select_group").click(function(ev) {
+            $("#selected_packages").load($(ev.target).attr('href'), 
loadCallback);
+            return false;
+          });
+          $("a.select_package").click(function(ev) {
+            $("#selected_packages").load($(ev.target).attr('href'), 
loadCallback);
+            return false;
+          });
+        }
+      });
+      // when JS is enabled, hide the Dashboard content -- it'll be loaded
+      // by jquery UI tab using ajax
+      $("#dashboard-content").hide();
+      loadCallback();
+    });
+    function loadCallback() {
+      $("a.remove_group").click(function(ev) {
+        $("#selected_packages").load($(ev.target).attr('href'), loadCallback);
+        return false;
+      });
+      createTree();
+    };
+    function createTree() {
+      $("li.group").each(function() {
+        var group = $(this);
+        group.addClass("closed_folder");
+        $(".groupname", group).toggle(
+          function() {
+            group.removeClass("closed_folder");
+            group.addClass("opened_folder");
+            $("ul > li", group).removeClass("hidden");
+          }, function() {
+            group.removeClass("opened_folder");
+            group.addClass("closed_folder");
+            $("ul > li", group).addClass("hidden");
+          }
+        );
+      })
+      $("li.group > ul > li").addClass("hidden");
+    };
+    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'));
+    };
+
+- menu = [ { :text => "Groups", :tab => "groups" }, |
+  { :text => "Packages", :tab => "packages" }, ] |
+#clear
+  %h3 Software
+  = hidden_field_tag 'xml[set_packages]', true
+  .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[:tab] == @selected_tab
+            %li{ :class => "#{selection_style} ui-state-default 
ui-corner-top", :style => 'clear: none' }
+              = "<a href=\"#{url_for(:action => "software", :id => 
@image_descriptor, :tab => item[:tab])}\"><span>#{item[:text]}</span></a>"
+          %li{ :class => "select_repository"}
+            = select_tag("repository", (["<option value='all' 
selected='selected'>All</option>"] + @repository_manager.repositories.map{|rep| 
"<option value=\"#{rep.id}\">#{rep.name}</option>"}).join.html_safe, {:onchange 
=> "get_repository(event)"})
+        - unless request.xhr?
+          = render :partial => @selected_tab
+    .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
+      = render :partial => 'selected_packages'
diff --git a/src/app/views/templates/new.haml b/src/app/views/templates/new.haml
index 85c97c6..6114b11 100644
--- a/src/app/views/templates/new.haml
+++ b/src/app/views/templates/new.haml
@@ -1,22 +1,11 @@
-= render :partial => "nav"
-
 #image_descriptor_form{:class => 'dcloud_form'}
+  %h2 Template Builder - Basic Template
   = error_messages_for 'image_descriptor'
-
-  - form_for @image_descriptor, :url => {:action => controller.action_name, 
:id => @image_descriptor} do
-    %ul
-      %li
-        %label Name
-        = text_field_tag 'xml[name]', @image_descriptor.xml.name
-        .description 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>"})
-        .description Choose the software operating system.
-      %li
-        %label Description
-        = text_area_tag("xml[description]", @image_descriptor.xml.description, 
:rows => 4)
-        .description 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"
+  -form_for @image_descriptor, :url =>{:action => controller.action_name, :id 
=> @image_descriptor} do
+    = render :partial => "basics"
+    = render :partial => "platform"
+    = render :partial => "services"
+    = render :partial => "software"
+    = render :partial => "scripting"
+    = render :partial => "image_formats"
+    = render :partial => "build_images"
diff --git a/src/app/views/templates/summary.haml 
b/src/app/views/templates/summary.haml
index 18d286c..2134f61 100644
--- a/src/app/views/templates/summary.haml
+++ b/src/app/views/templates/summary.haml
@@ -17,8 +17,6 @@
       );
     });
 
-= render :partial => "nav"
-
 #image_descriptor_form{:class => 'dcloud_form'}
   = error_messages_for 'image_descriptor'
 
@@ -44,9 +42,6 @@
 
       %ul{:class => 'main_panel'}
         .image_build_panel
-          %h3
-            Images
-            %input{:type => 'button', :class => "expand_target_list_button", 
:value => "Build Images"}
           #image_build_form
             %ul
               %li
-- 
1.7.2.3

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to