Class: PaginatedTable::TableRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/paginated_table/table_renderer.rb

Instance Method Summary collapse

Constructor Details

#initialize(view, description, data_page, link_renderer) ⇒ TableRenderer

Returns a new instance of TableRenderer.



3
4
5
6
7
8
# File 'lib/paginated_table/table_renderer.rb', line 3

def initialize(view, description, data_page, link_renderer)
  @view = view
  @description = description
  @data_page = data_page
  @link_renderer = link_renderer
end

Instance Method Details

#renderObject



10
11
12
13
14
# File 'lib/paginated_table/table_renderer.rb', line 10

def render
  pagination_area = render_pagination_area
  content = pagination_area + render_table + pagination_area
  @view.('div', content, :class => 'paginated_table')
end

#render_pagination_areaObject



16
17
18
19
# File 'lib/paginated_table/table_renderer.rb', line 16

def render_pagination_area
  content = render_pagination_info + render_pagination_links
  @view.('div', content, :class => 'header')
end

#render_pagination_infoObject



21
22
23
24
25
# File 'lib/paginated_table/table_renderer.rb', line 21

def render_pagination_info
  options = { :model => @description.model_label }
  content = @view.page_entries_info(@data_page.data, options)
  @view.('div', content, :class => 'info')
end


27
28
29
30
# File 'lib/paginated_table/table_renderer.rb', line 27

def render_pagination_links
  content = @view.will_paginate(@data_page.data, :renderer => @link_renderer)
  @view.('div', content, :class => 'links')
end

#render_tableObject



32
33
34
35
# File 'lib/paginated_table/table_renderer.rb', line 32

def render_table
  content = render_table_header + render_table_body
  @view.('table', content, :class => 'paginated')
end

#render_table_bodyObject



78
79
80
81
82
83
# File 'lib/paginated_table/table_renderer.rb', line 78

def render_table_body
  content = @data_page.data.map { |datum|
    render_table_body_rows(datum)
  }.reduce(&:+)
  @view.('tbody', content)
end

#render_table_body_cell(datum, column) ⇒ Object



110
111
112
# File 'lib/paginated_table/table_renderer.rb', line 110

def render_table_body_cell(datum, column)
  @view.('td', column.render_cell(datum), column.html_attributes)
end

#render_table_body_row(row, datum) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/paginated_table/table_renderer.rb', line 91

def render_table_body_row(row, datum)
  content = row.columns.map { |column|
    render_table_body_cell(datum, column)
  }.reduce(&:+)
  options = {}
  if row.cycle
    options[:class] = @view.cycle(*row.cycle)
  end
  if row.hidden
    options[:style] = 'display: none'
  end
  if row.data_type
    options[:"data-type"] = row.data_type
  end
  dom_id = @view.dom_id(datum)
  options[:"data-datum-id"] = dom_id
  @view.('tr', content, options)
end

#render_table_body_rows(datum) ⇒ Object



85
86
87
88
89
# File 'lib/paginated_table/table_renderer.rb', line 85

def render_table_body_rows(datum)
  @description.rows.map { |row|
    render_table_body_row(row, datum)
  }.reduce(&:+)
end

#render_table_headerObject



37
38
39
# File 'lib/paginated_table/table_renderer.rb', line 37

def render_table_header
  @view.('thead', render_table_header_rows)
end

#render_table_header_column(column) ⇒ Object



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

def render_table_header_column(column)
  css = []
  if column.sortable?
    css << 'sortable'
  end
  if @data_page.page.sort_column == column.name.to_s
    css << "sorted_#{@data_page.page.sort_direction}"
  end
  attributes = {}
  attributes[:class] = css.join(' ') unless css.empty?
  @view.('th', render_table_header_column_content(column), attributes)
end

#render_table_header_column_content(column) ⇒ Object



69
70
71
72
73
74
75
76
# File 'lib/paginated_table/table_renderer.rb', line 69

def render_table_header_column_content(column)
  text = column.render_header
  if column.sortable?
    @link_renderer.sort_link(text, column.name.to_s)
  else
    text
  end
end

#render_table_header_row(row) ⇒ Object



49
50
51
52
53
54
# File 'lib/paginated_table/table_renderer.rb', line 49

def render_table_header_row(row)
  content = row.columns.map { |column|
    render_table_header_column(column)
  }.reduce(&:+)
  @view.('tr', content)
end

#render_table_header_rowsObject



41
42
43
44
45
46
47
# File 'lib/paginated_table/table_renderer.rb', line 41

def render_table_header_rows
  @description.rows.select { |row|
    row.title == :header
  }.map { |row|
    render_table_header_row(row)
  }.reduce(&:+)
end