From: Jan Provaznik <jprovazn(a)redhat.com>
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' : '#{(a)id.nil? ? 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' : '#{(a)id.nil? ? 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' : '#{(a)id.nil? ? 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