From: Jan Provaznik jprovazn@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' : '#{@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' : '#{@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' : '#{@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