Module: Datagrid::Helper

Defined in:
lib/datagrid/helper.rb

Instance Method Summary collapse

Instance Method Details

#datagrid_format_value(report, column, asset) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/datagrid/helper.rb', line 6

def datagrid_format_value(report, column, asset)
  value = column.value(asset, report)
  if column.options[:url]
    link_to(value, column.options[:url].call(asset))
  else
    case column.format
    when :url
      link_to(column.label  ? asset.send(column.label) : I18n.t("datagrid.table.url_label", :default => "URL"), value)
    else
      _safe(value)
    end
  end
end

#datagrid_header(grid, options = {}) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/datagrid/helper.rb', line 32

def datagrid_header(grid, options = {})
  header = empty_string
  options[:order] = true unless options.has_key?(:order)
  grid.columns.each do |column|
    data = _safe(column.header)
    if options[:order] && column.order
      data << datagrid_order_for(grid, column)
    end
    header << (:th, data)
  end
  header
end

#datagrid_order_for(grid, column) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/datagrid/helper.rb', line 56

def datagrid_order_for(grid, column)
  (:div, :class => "order") do
    link_to(
      I18n.t("datagrid.table.order.asc", :default => "ASC"), 
      url_for(grid.param_name => grid.attributes.merge(:order => column.name, :descending => false)),
      :class => "order asc"
    ) + " " + link_to(
      I18n.t("datagrid.table.order.desc", :default => "DESC"),
      url_for(grid.param_name => grid.attributes.merge(:order => column.name, :descending => true )),
      :class => "order desc"
    )
  end
end

#datagrid_rows(report, assets, options) ⇒ Object



45
46
47
48
49
50
51
52
53
54
# File 'lib/datagrid/helper.rb', line 45

def datagrid_rows(report, assets, options)
  columns = report.columns
  result = assets.map do |asset|
    content = columns.map do |column|
      (:td, datagrid_format_value(report, column, asset))
    end.join(empty_string)
    (:tr, _safe(content), :class => options[:cycle] && cycle(*options[:cycle]))
  end.join(empty_string)
  _safe(result)
end

#datagrid_table(report, *args) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/datagrid/helper.rb', line 20

def datagrid_table(report, *args)
  options = args.extract_options!
  html = options[:html] || {}
  html[:class] ||= "datagrid"
  assets = report.assets
  paginate = options[:paginate]
  assets = assets.paginate(paginate) if paginate 
  content = (:tr, datagrid_header(report, options)) + datagrid_rows(report, assets, options)
  (:table, content, html)
end