From: Jan Provaznik <[email protected]>

---
 .../image_factory/templates_controller.rb          |   47 ++++++--
 src/app/stylesheets/newui.scss                     |    2 +
 .../views/image_factory/templates/_addbuttons.haml |    4 +
 src/app/views/image_factory/templates/_basics.haml |   27 +++++
 .../image_factory/templates/_collections.haml      |    8 ++
 src/app/views/image_factory/templates/_form.haml   |  120 ++++++++++++++++++++
 .../image_factory/templates/_hidden_fields.haml    |    8 ++
 .../templates/_local_content_to_bundle.haml        |   21 ++++
 .../image_factory/templates/_managed_content.haml  |   21 ++++
 .../templates/_metagroup_packages.haml             |   19 +++
 .../views/image_factory/templates/_metagroups.haml |   13 ++
 .../templates/_preboot_configuration.haml          |   11 ++
 .../views/image_factory/templates/_properties.haml |    2 +-
 .../image_factory/templates/_search_packages.haml  |   45 ++++++++
 .../templates/_software_selection.haml             |   41 +++++++
 .../views/image_factory/templates/collections.haml |    1 +
 src/app/views/image_factory/templates/edit.haml    |    9 ++
 .../image_factory/templates/managed_content.haml   |    1 +
 .../templates/metagroup_packages.haml              |    1 +
 src/app/views/image_factory/templates/new.haml     |    8 ++
 .../image_factory/templates/search_packages.haml   |    1 +
 src/config/routes.rb                               |    2 +-
 src/features/support/custom.rb                     |    6 +
 src/features/template.feature                      |    1 +
 24 files changed, 404 insertions(+), 15 deletions(-)
 create mode 100644 src/app/views/image_factory/templates/_addbuttons.haml
 create mode 100644 src/app/views/image_factory/templates/_basics.haml
 create mode 100644 src/app/views/image_factory/templates/_collections.haml
 create mode 100644 src/app/views/image_factory/templates/_form.haml
 create mode 100644 src/app/views/image_factory/templates/_hidden_fields.haml
 create mode 100644 
src/app/views/image_factory/templates/_local_content_to_bundle.haml
 create mode 100644 src/app/views/image_factory/templates/_managed_content.haml
 create mode 100644 
src/app/views/image_factory/templates/_metagroup_packages.haml
 create mode 100644 src/app/views/image_factory/templates/_metagroups.haml
 create mode 100644 
src/app/views/image_factory/templates/_preboot_configuration.haml
 create mode 100644 src/app/views/image_factory/templates/_search_packages.haml
 create mode 100644 
src/app/views/image_factory/templates/_software_selection.haml
 create mode 100644 src/app/views/image_factory/templates/collections.haml
 create mode 100644 src/app/views/image_factory/templates/edit.haml
 create mode 100644 src/app/views/image_factory/templates/managed_content.haml
 create mode 100644 
src/app/views/image_factory/templates/metagroup_packages.haml
 create mode 100644 src/app/views/image_factory/templates/new.haml
 create mode 100644 src/app/views/image_factory/templates/search_packages.haml

diff --git a/src/app/controllers/image_factory/templates_controller.rb 
b/src/app/controllers/image_factory/templates_controller.rb
index 25a5b0d..2105622 100644
--- a/src/app/controllers/image_factory/templates_controller.rb
+++ b/src/app/controllers/image_factory/templates_controller.rb
@@ -28,16 +28,25 @@ class ImageFactory::TemplatesController < 
ApplicationController
     # can't use @template variable - is used by compass (or something other)
     @tpl = Template.new(params[:tpl])
     @repository_manager = RepositoryManager.new(:repositories => 
params[:repository] || @tpl.platform)
+  end
+
+  def add_selected
+    if params[:tpl] and not params[:tpl][:id].blank?
+      @tpl = Template.find(params[:tpl][:id])
+      @tpl.attributes = params[:tpl]
+    else
+      @tpl = Template.new(params[:tpl])
+    end
+    @repository_manager = RepositoryManager.new(:repositories => 
params[:repository] || @tpl.platform)
     @tpl.add_software(params[:packages].to_a + params[:selected_packages].to_a 
+ params[:cached_packages].to_a,
                       params[:groups].to_a + params[:selected_groups].to_a)
-    render :action => :new
+    render :action => @tpl.id ? :edit : :new
   end
 
   def edit
     @tpl = Template.find(params[:id])
     @tpl.attributes = params[:tpl] unless params[:tpl].blank?
     @repository_manager = RepositoryManager.new(:repositories => 
params[:repository] || @tpl.platform)
-    render :action => :edit
   end
 
   def create
@@ -46,10 +55,10 @@ class ImageFactory::TemplatesController < 
ApplicationController
     if @tpl.save
       flash[:notice] = "Template saved."
       @tpl.set_complete
-      redirect_to templates_path
+      redirect_to image_factory_templates_path
     else
       @repository_manager = RepositoryManager.new(:repositories => 
params[:repository] || @tpl.platform)
-      render :action => 'new'
+      render :new
     end
   end
 
@@ -60,7 +69,7 @@ class ImageFactory::TemplatesController < 
ApplicationController
     if @tpl.update_attributes(params[:tpl])
       @tpl.set_complete
       flash[:notice] = "Template updated."
-      redirect_to templates_path
+      redirect_to image_factory_templates_path
     else
       @repository_manager = RepositoryManager.new(:repositories => 
params[:repository] || @tpl.platform)
       render :action => 'edit'
@@ -75,28 +84,27 @@ class ImageFactory::TemplatesController < 
ApplicationController
       params[:package_search]).paginate(:page => @page, :per_page => 60)
     if request.xhr?
       render :partial => 'search_packages'
-    else
-      render :search_packages
     end
   end
 
   def metagroup_packages
     set_package_vars
-    @metagroup_packages = 
@repository_manager.metagroup_packages(params[:metagroup_packages])
+    group = params[:__rewrite] ? params[:__rewrite][:metagroup_packages] : nil
+    @metagroup_packages = @repository_manager.metagroup_packages(group)
     if request.xhr?
       render :partial => 'metagroup_packages'
-    else
-      render :metagroup_packages
     end
   end
 
   def collections
+    unless params[:package_search].blank?
+      search_packages
+      return
+    end
     set_package_vars
     @collections = @repository_manager.groups
     if request.xhr?
       render :partial => 'collections'
-    else
-      render :collections
     end
   end
 
@@ -131,7 +139,7 @@ class ImageFactory::TemplatesController < 
ApplicationController
         flash_error('Error while deleting template', errs)
       end
     end
-    redirect_to templates_path
+    redirect_to image_factory_templates_path
   end
 
   def assembly
@@ -141,6 +149,19 @@ class ImageFactory::TemplatesController < 
ApplicationController
     @all_targets = Image.available_targets
   end
 
+  def remove_package
+    params[:packages].delete(params[:name]) unless params[:name].blank?
+    if params[:tpl] and not params[:tpl][:id].blank?
+      @tpl = Template.find(params[:tpl][:id])
+      @tpl.attributes = params[:tpl]
+    else
+      @tpl = Template.new(params[:tpl])
+    end
+    @tpl.add_software(params[:packages].to_a, params[:groups].to_a)
+    @repository_manager = RepositoryManager.new(:repositories => 
params[:repository] || @tpl.platform)
+    render :action => @tpl.id ? :edit : :new
+  end
+
   protected
 
   def load_templates
diff --git a/src/app/stylesheets/newui.scss b/src/app/stylesheets/newui.scss
index a2ba8e3..513d510 100644
--- a/src/app/stylesheets/newui.scss
+++ b/src/app/stylesheets/newui.scss
@@ -1236,6 +1236,8 @@ a.iconbutton {
   }
 
   .packagegroupsidebar {
+    float: left;
+    padding-right: 20px;
     display: block;
     text-align: right;
     font-size: 120%;
diff --git a/src/app/views/image_factory/templates/_addbuttons.haml 
b/src/app/views/image_factory/templates/_addbuttons.haml
new file mode 100644
index 0000000..9f88751
--- /dev/null
+++ b/src/app/views/image_factory/templates/_addbuttons.haml
@@ -0,0 +1,4 @@
+%fieldset.clear
+  - cancel_path = @tpl.id ? edit_image_factory_template_path(@tpl) : 
new_image_factory_template_path
+  = restful_submit_tag "Add Selected", "add_selected", 
add_selected_image_factory_templates_path, 'GET', {:class => "grid_2 alpha", 
:id => "do_add_software"}
+  = restful_submit_tag "Cancel", "cancel_add_software", cancel_path, 'GET', 
{:class => "grid_2", :id => "cancel_add_software"}
diff --git a/src/app/views/image_factory/templates/_basics.haml 
b/src/app/views/image_factory/templates/_basics.haml
new file mode 100644
index 0000000..72d2423
--- /dev/null
+++ b/src/app/views/image_factory/templates/_basics.haml
@@ -0,0 +1,27 @@
+%h3 General Information
+%fieldset.clearfix
+  %label.grid_4.alpha.la Template Name:
+  %label.grid_7.la Summary:
+  %label.grid_3.suffix_2.omega.la Version:
+  = text_field :tpl, :name, :value => @tpl.name || 'Template Name', :class => 
"grid_4 alpha"
+  = text_field :tpl, :summary, :value => @tpl.summary || 'Template 
Description', :class => "grid_7"
+  = text_field_tag 'current_version', 'Current Version', :disabled => true, 
:class => "grid_3"
+  %button{:type => 'button', :disabled => 'disabled', :class => "grid_2 
omega"} New Version
+%fieldset.clearfix
+  %label.grid_4.alpha Choose Logo:
+  %input{:type => 'file', :disabled => 'disabled', :class => "grid_7"}
+%fieldset.clearfix
+  - default = @tpl.platforms['fedora']
+  = label :tpl, :platform, 'Platform Choice:', :class => "grid_4 alpha"
+  = select :tpl, :platform, @tpl.platforms.map {|id, p| ["#{p['name']} 
#{p['version']} (#{p['architecture']})", id]}, {:selected => @tpl.platform || 
'fedora'}, {:class => 'grid_7'}
+%fieldset.clearfix
+  = label_tag :bootable, 'Bootable:', :class => "grid_4 alpha"
+  .grid_12.omega
+    = radio_button_tag :bootable, 'yes', true, :disabled => true
+    = label_tag :bootable, 'Yes'
+    = radio_button_tag :bootable, 'no', false, :disabled => true
+    = label_tag :bootable, 'No'
+%fieldset.clearfix
+  %label{:for => :template_group, :class => 'grid_4 alpha'}
+    Template Group:
+  = select_tag(:template_group, options_for_select([['User Private', 1]]), 
:class => 'grid_4')
diff --git a/src/app/views/image_factory/templates/_collections.haml 
b/src/app/views/image_factory/templates/_collections.haml
new file mode 100644
index 0000000..98ce959
--- /dev/null
+++ b/src/app/views/image_factory/templates/_collections.haml
@@ -0,0 +1,8 @@
+%ul.collections
+  - @collections.each do |c|
+    %li
+      /- selected = c[:selected] ? true : false
+      - selected = false
+      = check_box_tag 'groups[]', c[:id], selected, {:disabled => selected, 
:id => "group_#{c[:id]}", :class => "#{selected ? 'selected' : ''}"}
+      = label_tag "group_#{c[:id]}", c[:name]
+= render :partial => 'addbuttons'
diff --git a/src/app/views/image_factory/templates/_form.haml 
b/src/app/views/image_factory/templates/_form.haml
new file mode 100644
index 0000000..7cc323c
--- /dev/null
+++ b/src/app/views/image_factory/templates/_form.haml
@@ -0,0 +1,120 @@
+:javascript
+  $(document).ready(function() {
+    var $content_container = $('#managed_content');
+    var $sel_pkg_container = $('#package_selection_list');
+    var $submit            = $('#add_software_button');
+    $submit.click(function(e) {
+      e.preventDefault();
+      $submit.hide();
+      var data = {
+        'packages[]': $("input[name='packages[]']").map(function() {return 
$(this).val()}).get(),
+        'repository': $("select[name='tpl[platform]']").val() || ''
+      }
+      var url = '#{url_for :action => 'content_selection', :id => @id}';
+      //$content_container.empty().show();
+      $sel_pkg_container.empty().show().addClass('loading');
+      $sel_pkg_container.load(url, data, function(){
+        $sel_pkg_container.removeClass('loading');
+        var $groups = $('.softwaregroups .disclosure', this);
+        //search
+        $("input[name='package_search']").keypress(function(event) {
+          if (event.keyCode == '13') {
+            event.preventDefault();
+            $("input[name=package_search] ~ button").click();
+          }
+        });
+        $("input[name=package_search] ~ button").click(function(event) {
+          event.preventDefault();
+          var data = {
+            'packages[]': $("input:text[name='packages[]']").map(function() 
{return $(this).val()}).get(),
+            'package_search': $("input[name='package_search']").val(),
+            'repository': $("select[name='tpl[platform]']").val()
+          };
+          var url = '#{url_for :action => 'search_packages', :id => @id}';
+          $('#metagrouppackages').empty().addClass('loading');
+          $('#metagrouppackages').load(url, data, function() {
+            $('#metagrouppackages').removeClass('loading');
+          });
+        });
+      });
+    });
+    //removing packages from the list
+    $('.remove_package').live('click', function (e) {
+      e.preventDefault();
+      $(this).parent().hide(300, function () {
+        $(this).remove();
+      });
+    });
+    //displaying extended package info and actions
+    $('.dropdown').hide();
+    $('.packagename').live('click', function () {
+      var dropdowncontent = $(this).siblings('.dropdown').html(),
+      $dropdown = $("#dropdown");
+      $('.packagewrap').removeClass('selected');
+      $(this).parent().addClass('selected');
+      $dropdown.empty().html(dropdowncontent).css({
+        'top': $(this).positionAncestor('#content').top + 17,
+        'left': $(this).positionAncestor('#content').left - 4
+      }).show();
+    });
+    //catch #content clicks and hide the #dropdown if it's not within it
+    $("#content").click(function (e) {
+      if(!e.target.id === 'dropdown' || 
!$(e.target).closest("#dropdown").length) {
+        $("#dropdown").hide();
+        $('.packagewrap').removeClass('selected');
+      }
+    });
+    // select correct package repo when we change platform
+    $("select[name='tpl[platform]']").change(function() {
+      if ($submit.is(':hidden')) {
+        $submit.trigger('click');
+      }
+    });
+    // add selected pkgs/groups
+    $('#do_add_software').live('click', function(e) {
+      e.preventDefault();
+      var $button = $(this).clone();
+      var label = "<span id='do_add_software' class='loading fl'>Adding 
Packages</span>";
+      var url = '#{url_for :action => 'managed_content'}';
+      var new_pkgs = 
$("input:checked[name='selected_packages[]']").map(function() {return 
$(this).val()}).get();
+      var old_pkgs =  $("input:hidden[name='packages[]']").map(function() 
{return $(this).val()}).get()
+      var cached_pkgs =  
$("input:hidden[name='cached_packages[]']").map(function() {return 
$(this).val()}).get()
+      var data = {
+        'selected_packages[]': old_pkgs.concat(new_pkgs.concat(cached_pkgs)),
+        'selected_groups[]': 
$("input:checked[name='groups[]']").map(function() {return 
$(this).val()}).get(),
+        'collections': $("input:hidden[name=collections]").val(),
+        'template_id'  : '#[email protected]? ? nil : @id}'
+      };
+      $(this).replaceWith(label);
+      $('#managed_content').load(url, data, function(){
+        $("input:checked[name='groups[]']").attr('disabled', 'disabled');
+        $("input:checked[name='packages[]']").attr('disabled', 'disabled');
+        // $('#add_software_button').show();
+        $('.dropdown').hide();
+        $('#do_add_software').replaceWith($button);
+      });
+    });
+    // hide sw selection panel
+    $('#cancel_add_software').live('click', function(e) {
+      e.preventDefault();
+      $('#package_selection_list').hide();
+      $('#add_software_button').show();
+      $('.dropdown').hide();
+    });
+  });
+
+#build
+  = error_messages_for :tpl, :object_name => 'template'
+  = render :partial => 'basics'
+  = render :partial => 'local_content_to_bundle'
+
+  #managed_content
+    = render :partial => 'managed_content'
+
+  .clearfix
+    .grid_16.alpha.omega
+      = restful_submit_tag "Add Software", 'collections', 
collections_image_factory_templates_path, 'GET', {:id => "add_software_button", 
:class => "iconbutton"}
+
+  #package_selection_list{:style => 'display: none'}
+
+  = render :partial => 'preboot_configuration'
diff --git a/src/app/views/image_factory/templates/_hidden_fields.haml 
b/src/app/views/image_factory/templates/_hidden_fields.haml
new file mode 100644
index 0000000..5709087
--- /dev/null
+++ b/src/app/views/image_factory/templates/_hidden_fields.haml
@@ -0,0 +1,8 @@
+= hidden_field :tpl, :id
+= hidden_field :tpl, :name
+= hidden_field :tpl, :summary
+= hidden_field :tpl, :platform
+= hidden_field :tpl, :platform_version
+= hidden_field :tpl, :architecture
+- @tpl.packages.each do |p|
+  = hidden_field_tag "packages[]", p, :id => "package_#{p}"
diff --git 
a/src/app/views/image_factory/templates/_local_content_to_bundle.haml 
b/src/app/views/image_factory/templates/_local_content_to_bundle.haml
new file mode 100644
index 0000000..109ce20
--- /dev/null
+++ b/src/app/views/image_factory/templates/_local_content_to_bundle.haml
@@ -0,0 +1,21 @@
+%h3.disabled.gap Local Content to Bundle
+%fieldset.clearfix
+  = label_tag :local_bundle_name, 'Local:', :class => "disabled grid_2 alpha"
+  = text_field_tag 'local_bundle_name[]', 'Bundle Name', :disabled => true, 
:class => "grid_8"
+  .grid_6.omega
+    %button{:type => 'button', :disabled => 'disabled'} Browse
+    %button{:type => 'button', :disabled => 'disabled'} Config
+    %button{:type => 'button', :disabled => 'disabled'} Metadata
+    (
+    %a{:href => '#'} Remove
+    )
+  .grid_2.alpha
+    &nbsp;
+  = text_field_tag 'local_bundle_name[]', 'Bundle Name', :disabled => true, 
:class => "grid_8"
+  .grid_6.omega
+    %button{:type => 'button', :disabled => 'disabled'} Browse
+    %button{:type => 'button', :disabled => 'disabled'} Config
+    %button{:type => 'button', :disabled => 'disabled'} Metadata
+    (
+    %a{:href => '#'} Remove
+    )
diff --git a/src/app/views/image_factory/templates/_managed_content.haml 
b/src/app/views/image_factory/templates/_managed_content.haml
new file mode 100644
index 0000000..ebea6cd
--- /dev/null
+++ b/src/app/views/image_factory/templates/_managed_content.haml
@@ -0,0 +1,21 @@
+#selected_packages
+  %h3.gap Managed Content to Bundle
+  .grid_16.alpha.omega
+    - if @tpl.packages.empty?
+      No selected packages
+    - else
+      /- repos = @repository_manager.repositories_hash
+      - @tpl.packages.sort.each do |pkg|
+        /- pkg_group = @groups.keys.find {|g| @groups[g][:packages][pkg]}
+        .packagewrap
+          %a.packagename{:id => "package_#{pkg}"}=pkg
+          = hidden_field_tag 'packages[]', pkg, :id => "package_#{pkg}"
+          = restful_submit_tag "Remove", "remove_package", 
remove_package_image_factory_templates_path(:name => pkg), 'GET', {:id => 
"remove_package_#{pkg}", :class => 'remove_package'}
+          .dropdown
+            / we don't display repository for now, it's pretty difficult with 
current design
+            /%section
+            /  Repository:
+            /  %label= (pkg_group and repo = 
rep...@groups[pkg_group][:repository_id]]) ? repo.name.to_s : '&nbsp;'
+            %fieldset.nomargin
+              %button{:disabled => true} Browse
+              %button{:disabled => true} Config
diff --git a/src/app/views/image_factory/templates/_metagroup_packages.haml 
b/src/app/views/image_factory/templates/_metagroup_packages.haml
new file mode 100644
index 0000000..3e83d34
--- /dev/null
+++ b/src/app/views/image_factory/templates/_metagroup_packages.haml
@@ -0,0 +1,19 @@
+- if @metagroup_packages.blank?
+  %span.disabled No group selected
+- else
+  %h4
+    = "#...@metagroup} Packages"
+  %ul.metagrouppackages
+    - @metagroup_packages.sort {|a, b| a[:name] <=> b[:name]}.each do |group|
+      %li
+        - selected = false
+        %h5
+          = check_box_tag 'selected_groups[]', group[:id], selected, 
{:disabled => selected, :id => "group_#{group[:id]}", :class => "softwaregroups 
#{selected ? 'selected' : ''}"}
+          = label_tag "group_#{group[:id]}", group[:name]
+        %ul
+          - group[:packages].each do |pkg|
+            %li
+              - selected = @packages.to_a.find {|p| p[:name] == pkg}
+              = check_box_tag 'selected_packages[]', pkg, selected, {:disabled 
=> selected, :id => "pkg_#{group[:name]}_#{pkg}"}
+              = label_tag "pkg_#{group[:name]}_#{pkg}", pkg
+  = render :partial => 'addbuttons'
diff --git a/src/app/views/image_factory/templates/_metagroups.haml 
b/src/app/views/image_factory/templates/_metagroups.haml
new file mode 100644
index 0000000..339ce8a
--- /dev/null
+++ b/src/app/views/image_factory/templates/_metagroups.haml
@@ -0,0 +1,13 @@
+%fieldset.clearfix
+  .search.grid_4.alpha
+    %input{:type => "search", :placeholder => "Search for package", :name => 
'package_search', :value => params[:package_search], :id => 'package_search'}
+    %button.action{:id => 'package_search_button'}
+  .grid_8
+  %a.grid_4.omega Advanced Search
+
+%ul.metagroups{:class => 'packagegroupsidebar grid_4 alpha'}
+  %li
+    = restful_submit_tag 'Collections', 'collections', 
collections_image_factory_templates_path, 'GET', {:id => 'collections', :class 
=> 'icon'}
+  - @metagroups.keys.sort.each do |cat|
+    %li
+      = restful_submit_tag cat, "metagroup_packages", 
metagroup_packages_image_factory_templates_path, 'GET', {:class => 'icon'}
diff --git a/src/app/views/image_factory/templates/_preboot_configuration.haml 
b/src/app/views/image_factory/templates/_preboot_configuration.haml
new file mode 100644
index 0000000..79ae839
--- /dev/null
+++ b/src/app/views/image_factory/templates/_preboot_configuration.haml
@@ -0,0 +1,11 @@
+%h3.clear.gap Preboot Configuration
+%fieldset.clearfix
+  .grid_4.alpha
+    = radio_button_tag :configure_via_script, 'no', :disabled => true
+    = label_tag :configure_via_script, 'Configure Via Script'
+  = file_field_tag 'script_file', :disabled => true, :class => 'grid_12 omega'
+%fieldset.clearfix
+  .grid_4.alpha
+    = radio_button_tag :configure_via_script, 'no', :disabled => true
+    = label_tag :configure_via_script, 'Configure Via Script'
+  = file_field_tag 'script_file', :disabled => true, :class => 'grid_12 omega'
diff --git a/src/app/views/image_factory/templates/_properties.haml 
b/src/app/views/image_factory/templates/_properties.haml
index 203917e..0fe33ae 100644
--- a/src/app/views/image_factory/templates/_properties.haml
+++ b/src/app/views/image_factory/templates/_properties.haml
@@ -1,4 +1,4 @@
 %h3
   Properties for
   = @tpl.name
-/= link_to "Edit", edit_resources_pool_path(@pool), { :class => 'button' }
+= link_to "Edit", edit_image_factory_template_path(@tpl), { :class => 'button' 
}
diff --git a/src/app/views/image_factory/templates/_search_packages.haml 
b/src/app/views/image_factory/templates/_search_packages.haml
new file mode 100644
index 0000000..78fa5b1
--- /dev/null
+++ b/src/app/views/image_factory/templates/_search_packages.haml
@@ -0,0 +1,45 @@
+:javascript
+  $(document).ready(function() {
+    $('.pagination input[type=submit]').click(function(e) {
+      e.preventDefault();
+      var url = '#{url_for :action => 'search_packages', :id => @id}';
+      var old_pkgs = 
$("input:hidden[name='cached_packages[]']").map(function() {return 
$(this).val()}).get();
+      var new_pkgs = 
$("input:checked[name='selected_packages[]']").map(function() {return 
$(this).val()}).get();
+      var data = {
+        'selected_packages[]': 
$("input:hidden[name='packages[]']").map(function() {return 
$(this).val()}).get(),
+        'cached_packages[]': old_pkgs.concat(new_pkgs),
+        'selected_groups[]': 
$("input:checked[name='groups[]']").map(function() {return 
$(this).val()}).get(),
+        'package_search': $("input[name='package_search']").val(),
+        'old_page': '#...@page}',
+        'template_id'  : '#[email protected]? ? nil : @id}',
+        'page': $(this).val(),
+        'repository': $("select[name='tpl[platform]']").val()
+      };
+      $('#metagrouppackages').empty().addClass('loading');
+      $('#metagrouppackages').load(url, data, function() {
+        $('#metagrouppackages').removeClass('loading');
+      })
+    });
+  });
+
+- @cached_packages.uniq.each do |pkg|
+  = hidden_field_tag 'cached_packages[]', pkg
+
+- if params[:package_search].empty?
+  Search string is empty.
+-else
+  %h4
+    = "Search Results for '#{params[:package_search]}'"
+  %ul.searchedpackages
+    - @searched_packages.sort {|a, b| a [:name] <=> b[:name]}.each do |pkg|
+      %li
+        - selected = (@packages.to_a.find {|p| p[:name] == pkg[:name]} or 
@cached_packages.include?(pkg[:name]))
+        - disabled = @tpl.packages.include?(pkg[:name])
+        = check_box_tag 'selected_packages[]', pkg[:name], selected, 
{:disabled => disabled, :id => "pkg_#{pkg[:name]}"}
+        = label_tag "pkg_#{pkg[:name]}", pkg[:name]
+  .pageinfo
+    = page_entries_info @searched_packages, :entry_name => 'package'
+  = will_paginate @searched_packages, :params => {:package_search => 
params[:package_search]}, :renderer => 
TemplatesHelper::ButtonPaginationRenderer.new, :previous_label => 'Previous', 
:next_label => 'Next'
+
+
+  = render :partial => 'addbuttons'
diff --git a/src/app/views/image_factory/templates/_software_selection.haml 
b/src/app/views/image_factory/templates/_software_selection.haml
new file mode 100644
index 0000000..34606fc
--- /dev/null
+++ b/src/app/views/image_factory/templates/_software_selection.haml
@@ -0,0 +1,41 @@
+:javascript
+  $(document).ready(function() {
+    var $metagrouppackages = $('#metagrouppackages');
+    $('.metagroups input').click(function(e) {
+      e.preventDefault();
+      var data = {
+        'repository': $("select[name='tpl[platform]']").val(),
+        'packages[]':  $("input:hidden[name='packages[]']").map(function() 
{return $(this).val()}).get()
+      };
+      if ($(this).attr('name') == '__rewrite[collections]') {
+        var url = '#{url_for :action => 'collections', :id => @id}';
+      } else {
+        var url = '#{url_for :action => 'metagroup_packages', :id => @id}';
+        data.__rewrite = {
+          metagroup_packages: e.currentTarget.value
+        };
+      }
+      $metagrouppackages.empty().addClass('loading');
+      $metagrouppackages.load(url, data, function() {
+        $metagrouppackages.removeClass('loading');
+        //select all packages in collection
+        $(".softwaregroups").click(function() {
+          if ($(this).attr("checked") === true) {
+            
$(this).parent().siblings("ul").find("input[type='checkbox']").attr("checked","checked");
+          } else {
+            
$(this).parent().siblings("ul").find("input[type='checkbox']").removeAttr("checked");
+          }
+        });
+      });
+    });
+  });
+
+.grid_16
+  %h4 Managed Content Selection
+
+  - form_tag do
+    - unless request.xhr?
+      = render :partial => 'hidden_fields'
+    = render :partial => 'metagroups'
+    #metagrouppackages.grid_12.omega.gap
+      = render :partial => view
diff --git a/src/app/views/image_factory/templates/collections.haml 
b/src/app/views/image_factory/templates/collections.haml
new file mode 100644
index 0000000..a899c85
--- /dev/null
+++ b/src/app/views/image_factory/templates/collections.haml
@@ -0,0 +1 @@
+= render :partial => 'software_selection', :locals => {:view => 'collections'}
diff --git a/src/app/views/image_factory/templates/edit.haml 
b/src/app/views/image_factory/templates/edit.haml
new file mode 100644
index 0000000..a2a58ef
--- /dev/null
+++ b/src/app/views/image_factory/templates/edit.haml
@@ -0,0 +1,9 @@
+#dropdown
+.grid_16
+  %h2 Edit Template
+  /- form_for @tpl, :url => image_factory_template_path(@tpl), :html => { 
:method => :put } do |f|
+  - form_tag do
+    = hidden_field_tag :id, @tpl.id
+    = render :partial => 'form'
+    = restful_submit_tag "Save", 'update', image_factory_template_path(@tpl), 
'PUT', :class => "formbutton"
+    = link_to 'Cancel', image_factory_templates_path, :class => 'button 
formbutton'
diff --git a/src/app/views/image_factory/templates/managed_content.haml 
b/src/app/views/image_factory/templates/managed_content.haml
new file mode 100644
index 0000000..926142d
--- /dev/null
+++ b/src/app/views/image_factory/templates/managed_content.haml
@@ -0,0 +1 @@
+= render :partial => 'managed_content'
diff --git a/src/app/views/image_factory/templates/metagroup_packages.haml 
b/src/app/views/image_factory/templates/metagroup_packages.haml
new file mode 100644
index 0000000..9703663
--- /dev/null
+++ b/src/app/views/image_factory/templates/metagroup_packages.haml
@@ -0,0 +1 @@
+= render :partial => 'software_selection', :locals => {:view => 
'metagroup_packages'}
diff --git a/src/app/views/image_factory/templates/new.haml 
b/src/app/views/image_factory/templates/new.haml
new file mode 100644
index 0000000..9ba76fa
--- /dev/null
+++ b/src/app/views/image_factory/templates/new.haml
@@ -0,0 +1,8 @@
+#dropdown
+.grid_16
+  %h2 New Template
+  /- form_for @tpl, :url => image_factory_templates_path do |f|
+  - form_tag do
+    = render :partial => 'form'
+    = restful_submit_tag "Save", 'create', image_factory_templates_path, 
'POST', :class => "formbutton"
+    = link_to 'Cancel', image_factory_templates_path, :class => 'button 
formbutton'
diff --git a/src/app/views/image_factory/templates/search_packages.haml 
b/src/app/views/image_factory/templates/search_packages.haml
new file mode 100644
index 0000000..94e30f5
--- /dev/null
+++ b/src/app/views/image_factory/templates/search_packages.haml
@@ -0,0 +1 @@
+= render :partial => 'software_selection', :locals => {:view => 
'search_packages'}
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 262b6ff..99ad7cb 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -39,7 +39,7 @@ ActionController::Routing::Routes.draw do |map|
 
   map.namespace 'image_factory' do |r|
     r.resources :assemblies, :deployables
-    r.resources :templates
+    r.resources :templates, :collection => {:collections => :get, 
:add_selected => :get, :metagroup_packages => :get, :remove_package => :get}
   end
 
   map.connect '/set_layout', :controller => 'application', :action => 
'set_layout'
diff --git a/src/features/support/custom.rb b/src/features/support/custom.rb
index 0054a43..6b0db10 100644
--- a/src/features/support/custom.rb
+++ b/src/features/support/custom.rb
@@ -55,3 +55,9 @@ RepositoryManager.class_eval do
     }]
   end
 end
+
+Template.class_eval do
+  def upload
+    true
+  end
+end
diff --git a/src/features/template.feature b/src/features/template.feature
index da79859..72eda9d 100644
--- a/src/features/template.feature
+++ b/src/features/template.feature
@@ -7,6 +7,7 @@ Feature: Manage Templates
     Given I am an authorised user
     And I am logged in
     And There is a mock pulp repository
+    And I am using new UI
 
   Scenario: Create a new Template
     Given I am on the templates page
-- 
1.7.2.3

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

Reply via email to