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
+
+ = 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 : ' '
+ %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