lib/magic_grid/helpers.rb in magic_grid-0.10.4 vs lib/magic_grid/helpers.rb in magic_grid-0.11.0

- old
+ new

@@ -2,33 +2,27 @@ if Module.const_defined? :WillPaginate require 'will_paginate/array' end +def MagicGrid::compact_hash(hash) + hash.select {|_,v| v } +end + module MagicGrid module Helpers def normalize_magic(collection, columns = [], options = {}) - if collection.is_a? MagicGrid::Definition - collection - elsif columns.is_a? MagicGrid::Definition - columns - elsif options.is_a? MagicGrid::Definition - options - else - MagicGrid::Definition.new(columns, collection, controller, options) - end + args_enum = [collection, columns, options].to_enum + given_grid = args_enum.find {|e| e.is_a? MagicGrid::Definition } + given_grid || MagicGrid::Definition.new(columns, collection, controller, options) end - def magic_collection(collection, cols, opts = {}) - normalize_magic(collection, cols, opts).collection - end - def magic_grid(collection = nil, cols = nil, opts = {}, &block) grid = normalize_magic(collection, cols, opts) base_params = grid.base_params data = { - :searcher => grid.options[:searcher], + :searcher => grid.searcher, :current => controller.request.fullpath, :live_search => grid.options[:live_search], :listeners => (grid.options[:listeners] unless grid.options[:listeners].empty?), :remote => grid.options[:remote], :default_ajax_handler => grid.options[:default_ajax_handler], @@ -36,21 +30,21 @@ } classes = ['magic_grid'] << grid.options[:class] content_tag('table', :class => classes.join(' '), :id => grid.magic_id, - :data => data.select {|_,v| v } + :data => MagicGrid.compact_hash(data) ) do table = content_tag('thead', :data => {:params => base_params} ) do thead = ''.html_safe has_spinner = false spinner = tag('span', :id => (grid.magic_id.to_s + "_spinner"), :class => "magic_grid_spinner" ) - if grid.options[:needs_searcher] + if grid.needs_searcher? thead << content_tag('tr') do content_tag('td', :class => 'searcher full-width ui-widget-header', :colspan => grid.columns.count) do searcher = search_bar(grid) unless has_spinner @@ -60,22 +54,14 @@ searcher end end end if grid.options[:per_page] and grid.options[:top_pager] - thead << content_tag('tr') do - content_tag('td', :class => 'full-width ui-widget-header', - :colspan => grid.columns.count) do - pager = magic_paginate(grid.collection, - :param_name => grid.param_key(:page), - :params => base_params - ) - unless has_spinner - has_spinner = true - pager << spinner - end - pager + thead << magic_pager(grid, base_params) do + unless has_spinner + has_spinner = true + spinner end end end if thead.empty? and not grid.options[:empty_header] thead = content_tag 'tr' do @@ -94,19 +80,11 @@ magic_rows(grid, &block) end table << content_tag('tfoot') do tfoot = ''.html_safe if grid.options[:per_page] and grid.options[:bottom_pager] - tfoot << content_tag('tr') do - content_tag('td', :class => 'full-width ui-widget-header', - :colspan => grid.columns.count) do - magic_paginate(grid.collection, - :param_name => grid.param_key(:page), - :params => base_params - ) - end - end + tfoot << magic_pager(grid, base_params) end if tfoot.empty? and not grid.options[:empty_footer] tfoot = content_tag 'tr' do content_tag('td', nil, :class => 'full-width ui-widget-header', :colspan => grid.columns.count) @@ -229,13 +207,13 @@ def search_bar(grid) searcher_data = { :min_length => grid.options[:min_search_length], :current => grid.options[:current_search] || "", } - searcher = label_tag(grid.options[:searcher].to_sym, - grid.options[:searcher_label]) - searcher << search_field_tag(grid.options[:searcher].to_sym, + searcher = label_tag(grid.searcher.to_sym, + grid.options[:searcher_label]) + searcher << search_field_tag(grid.searcher.to_sym, grid.param(:q), :placeholder => grid.options[:searcher_tooltip], :size => grid.options[:searcher_size], :data => searcher_data, :form => "a form that doesn't exist") @@ -256,9 +234,23 @@ paginate collection, opts #alias_method :magic_paginate, :paginate else ("<!-- page #{collection.current_page} of #{collection.total_pages} -->" + '<!-- INSTALL WillPaginate or Kaminari for a pager! -->').html_safe + end + end + + def magic_pager(grid, base_params, &block) + content_tag('tr') do + content_tag('td', :class => 'full-width ui-widget-header magic-pager', + :colspan => grid.columns.count) do + pager = magic_paginate(grid.collection, + :param_name => grid.param_key(:page), + :params => base_params + ) + pager << capture(&block) if block_given? + pager + end end end ::ActionView::Base.send :include, self end