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