From: Jan Provaznik <[email protected]>

Though there is still minor bug when JS is off:
when user selects some packages, then goes to next page and then returns
previously selected packages are disabled.
---
 src/app/controllers/templates_controller.rb     |   24 +++++++++++++---
 src/app/helpers/templates_helper.rb             |    8 +++++
 src/app/views/templates/_searched_packages.haml |   34 +++++++++++++++++++++-
 src/app/views/templates/content_selection.haml  |   25 ++---------------
 src/app/views/templates/new.haml                |   25 +++++++++++++++++
 5 files changed, 87 insertions(+), 29 deletions(-)
 create mode 100644 src/app/helpers/templates_helper.rb

diff --git a/src/app/controllers/templates_controller.rb 
b/src/app/controllers/templates_controller.rb
index a3dc723..4fe34bb 100644
--- a/src/app/controllers/templates_controller.rb
+++ b/src/app/controllers/templates_controller.rb
@@ -114,19 +114,23 @@ class TemplatesController < ApplicationController
     @packages = []
     @packages += params[:packages].collect{ |p| { :name => p } } unless 
params[:packages].blank?
     @packages += params[:selected_packages].collect{ |p| { :name => p } } 
unless params[:selected_packages].blank?
-    @groups = 
@repository_manager.all_groups_with_tagged_selected_packages(@packages, 
params[:repository])
+    @groups = 
@repository_manager.all_groups_with_tagged_selected_packages(@packages, 
params[:repository] || @tpl.platform)
     @embed  = params[:embed]
     @categories = @repository_manager.categories(params[:tpl] ? 
params[:tpl][:platform] : nil)
     @metagroups = @repository_manager.metagroups
 
     if not params[:package_search].blank?
-      @searched_packages = 
@repository_manager.search_package(params[:package_search], params[:repository])
+      @page = get_page
+      @cached_packages = params[:cached_packages].to_a
+      @searched_packages = 
@repository_manager.search_package(params[:package_search],
+                                                              
params[:repository] || @tpl.platform).paginate(:page => @page,
+                                                                               
                              :per_page => 60)
     elsif not @metagroup.blank?
       if @metagroup == 'Collections'
         # TODO: if we remember selected groups, this could be done much more 
simply
-        @collections = 
@repository_manager.all_groups_with_tagged_selected_packages(@packages, 
params[:repository])
+        @collections = 
@repository_manager.all_groups_with_tagged_selected_packages(@packages, 
params[:repository] || @tpl.platform)
       else
-        @metagroup_packages = 
@repository_manager.metagroup_packages_with_tagged_selected_packages(@metagroup,
 @packages, params[:repository])
+        @metagroup_packages = 
@repository_manager.metagroup_packages_with_tagged_selected_packages(@metagroup,
 @packages, params[:repository] || @tpl.platform)
       end
     end
     if request.xhr?
@@ -252,7 +256,7 @@ add account on <a href=\"#{url_for :controller => 
'provider', \
     @repository_manager = RepositoryManager.new
     @groups = @repository_manager.all_groups(params[:repository])
 
-    if not params[:packages].blank? or not params[:selected_packages].blank?
+    if not params[:packages].blank? or not params[:selected_packages].blank? 
or not params[:cached_packages].blank?
       @selected_packages = params[:packages].to_a + 
params[:selected_packages].to_a
     elsif !tpl.nil?
       @selected_packages = tpl.xml.packages.collect { |p| p[:name] }
@@ -273,4 +277,14 @@ add account on <a href=\"#{url_for :controller => 
'provider', \
 
     @selected_packages.uniq!
   end
+
+  def get_page
+    if params[:page] == 'Previous'
+      return params[:old_page].to_i - 1
+    elsif params[:page] == 'Next'
+      return params[:old_page].to_i + 1
+    else
+      return params[:page].blank? ? 1 : params[:page].to_i
+    end
+  end
 end
diff --git a/src/app/helpers/templates_helper.rb 
b/src/app/helpers/templates_helper.rb
new file mode 100644
index 0000000..6323233
--- /dev/null
+++ b/src/app/helpers/templates_helper.rb
@@ -0,0 +1,8 @@
+module TemplatesHelper
+  class ButtonPaginationRenderer < WillPaginate::LinkRenderer
+    def page_link(page, text, attributes = {})
+      #submit_tag text, :name => 'page'
+      "<input type=submit value='#{text}' name='page'/>"
+    end
+  end
+end
diff --git a/src/app/views/templates/_searched_packages.haml 
b/src/app/views/templates/_searched_packages.haml
index 4bf3898..d0eb770 100644
--- a/src/app/views/templates/_searched_packages.haml
+++ b/src/app/views/templates/_searched_packages.haml
@@ -1,9 +1,39 @@
+:javascript
+  $(document).ready(function() {
+    $('.pagination input[type=submit]').click(function(e) {
+      e.preventDefault();
+      var url = '#{url_for :action => 'dispatch', :id => @id}';
+      var old_pkgs = 
$("input:hidden[name='cached_packages[]']").map(function() {return 
$(this).val()}).get();
+      var new_pkgs = $("input:checked[name='packages[]']").map(function() 
{return $(this).val()}).get();
+      var data = {
+        'selected_packages[]': 
$("input:text[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').load(url, data, function() {
+        Aggregator.hook_selected_packages();
+      })
+    });
+  });
+
+- @cached_packages.uniq.each do |pkg|
+  = hidden_field_tag 'cached_packages[]', pkg
+
 %h4
   = "Search Results for '#{params[:package_search]}'"
 %ul.searchedpackages
   - @searched_packages.sort.each do |pkg|
     %li
-      - selected = @packages.to_a.find {|p| p[:name] == pkg}
-      = check_box_tag 'packages[]', pkg, selected, {:disabled => selected, :id 
=> "package_#{pkg}"}
+      - selected = (@packages.to_a.find {|p| p[:name] == pkg} or 
@cached_packages.include?(pkg))
+      - disabled = params[:selected_packages].to_a.include?(pkg)
+      = check_box_tag 'packages[]', pkg, selected, {:disabled => disabled, :id 
=> "package_#{pkg}"}
       = label_tag "package_#{pkg}", pkg
+= will_paginate @searched_packages, :params => {:package_search => 
params[:package_search]}, :renderer => 
TemplatesHelper::ButtonPaginationRenderer.new, :previous_label => 'Previous', 
:next_label => 'Next'
+= page_entries_info @searched_packages
+
 = render :partial => 'addbuttons'
diff --git a/src/app/views/templates/content_selection.haml 
b/src/app/views/templates/content_selection.haml
index 931c7d6..e5961fe 100644
--- a/src/app/views/templates/content_selection.haml
+++ b/src/app/views/templates/content_selection.haml
@@ -9,30 +9,11 @@
         'packages[]':  $("input:text[name='packages[]']").map(function() 
{return $(this).val()}).get()
       };
       var url = '#{url_for :action => 'dispatch', :id => @id}';
-      $metagrouppackages.load(url, data, function() {
-        $('#do_add_software').click(function(e) {
-          e.preventDefault();
-          var url = '#{url_for :action => 'managed_content'}';
-          var new_pkgs = $("input:checked[name='packages[]']").map(function() 
{return $(this).val()}).get();
-          var old_pkgs =  $("input:text[name='packages[]']").map(function() 
{return $(this).val()}).get()
-          var data = {
-            'selected_packages[]': old_pkgs.concat(new_pkgs),
-            'selected_groups[]': 
$("input:checked[name='groups[]']").map(function() {return 
$(this).val()}).get(),
-            'template_id'  : '#[email protected]? ? nil : @id}'
-          };
-          $('#managed_content').load(url, data, function(){
-            $('#package_selection_list').empty().show();
-            $('#add_software_button').show();
-            $('.remove_package').click(function() { 
$(this).parent().parent().remove(); });
-          });
-        });
-        $('#cancel_add_software').click(function(e) {
-          e.preventDefault();
-          $('#package_selection_list').hide();
-          $('#add_software_button').show();
-        });
+      $('#metagrouppackages, ').load(url, data, function() {
+        Aggregator.hook_selected_packages();
       });
     });
+    Aggregator.hook_selected_packages();
   });
 
 .grid_16
diff --git a/src/app/views/templates/new.haml b/src/app/views/templates/new.haml
index 915867c..dcb4cda 100644
--- a/src/app/views/templates/new.haml
+++ b/src/app/views/templates/new.haml
@@ -50,6 +50,31 @@
         $submit.trigger('click');
       }
     });
+    Aggregator.hook_selected_packages = function() {
+      $('#do_add_software').click(function(e) {
+        e.preventDefault();
+        var url = '#{url_for :action => 'managed_content'}';
+        var new_pkgs = $("input:checked[name='packages[]']").map(function() 
{return $(this).val()}).get();
+        var old_pkgs =  $("input:text[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(),
+          'cached_packages[]': $("input:text[name='cached[]']").map(function() 
{return $(this).val()}).get(),
+          'template_id'  : '#[email protected]? ? nil : @id}'
+        };
+        $('#managed_content').load(url, data, function(){
+          //$('#package_selection_list').empty().show();
+          $('#add_software_button').show();
+          $('.remove_package').click(function() { 
$(this).parent().parent().remove(); });
+        });
+      });
+      $('#cancel_add_software').click(function(e) {
+        e.preventDefault();
+        $('#package_selection_list').hide();
+        $('#add_software_button').show();
+      });
+    }
   });
 
 .grid_16
-- 
1.7.2.3

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

Reply via email to