Class: MagicGrid::HtmlGrid
- Inherits:
-
Object
- Object
- MagicGrid::HtmlGrid
- Defined in:
- lib/magic_grid/html_grid.rb
Instance Method Summary collapse
- #filler_block(content = nil, &block) ⇒ Object
- #grid_cell(column, record) ⇒ Object
- #grid_row(record, &row_renderer) ⇒ Object
-
#initialize(grid_definition, view, controller = nil) ⇒ HtmlGrid
constructor
A new instance of HtmlGrid.
- #magic_column_headers ⇒ Object
- #magic_grid_foot ⇒ Object
- #magic_grid_head ⇒ Object
- #magic_pager(collection, opts = {}) ⇒ Object
- #magic_pager_block(&spinner) ⇒ Object
- #magic_rows(&row_renderer) ⇒ Object
- #order_class(order = -1)) ⇒ Object
- #order_icon(order = -1)) ⇒ Object
- #order_icon_class(order = -1)) ⇒ Object
- #render(&row_renderer) ⇒ Object
- #render_empty_collection(fallback) ⇒ Object
- #reverse_order(order) ⇒ Object
- #searcher_block(&spinner) ⇒ Object
- #searcher_input(&spinner) ⇒ Object
- #sortable_header(col) ⇒ Object
- #spinner_generator ⇒ Object
- #tbody(&row_renderer) ⇒ Object
- #tfoot ⇒ Object
- #thead ⇒ Object
- #unordered ⇒ Object
Constructor Details
#initialize(grid_definition, view, controller = nil) ⇒ HtmlGrid
Returns a new instance of HtmlGrid.
6 7 8 9 10 11 12 13 14 |
# File 'lib/magic_grid/html_grid.rb', line 6 def initialize(grid_definition, view, controller = nil) @grid = grid_definition @view ||= view if controller @current_url = controller.request.fullpath else @current_url = nil end end |
Instance Method Details
#filler_block(content = nil, &block) ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/magic_grid/html_grid.rb', line 88 def filler_block(content = nil, &block) @view.content_tag 'tr' do @view.content_tag('td', content, :class => 'full-width ui-widget-header', :colspan => @grid.columns.count, &block) end end |
#grid_cell(column, record) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/magic_grid/html_grid.rb', line 144 def grid_cell(column, record) @view.content_tag('td', :class => column.html_classes) do method = column.reader if method.respond_to? :call method.call(record).to_s elsif record.respond_to? method record.send(method).to_s else "" end end end |
#grid_row(record, &row_renderer) ⇒ Object
134 135 136 137 138 139 140 141 142 |
# File 'lib/magic_grid/html_grid.rb', line 134 def grid_row(record, &row_renderer) if row_renderer @view.capture(record, &row_renderer) else @view.content_tag 'tr', :class => @view.cycle('odd', 'even') do @grid.columns.map { |c| grid_cell(c, record) }.join.html_safe end end end |
#magic_column_headers ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/magic_grid/html_grid.rb', line 97 def magic_column_headers @view.content_tag 'tr' do @grid.columns.reduce(''.html_safe) do |acc, col| classes = ['ui-state-default'] << col.html_classes acc << if col.sortable? sortable_header(col) else @view.content_tag 'th', col.label.html_safe, :class => classes.join(' ') end end end end |
#magic_grid_foot ⇒ Object
80 81 82 83 84 85 86 |
# File 'lib/magic_grid/html_grid.rb', line 80 def magic_grid_foot if @grid.[:per_page] and @grid.[:bottom_pager] magic_pager_block elsif not @grid.[:collapse_emtpy_footer] filler_block end end |
#magic_grid_head ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/magic_grid/html_grid.rb', line 64 def magic_grid_head spinner = self.method(:spinner_generator) thead = [] if @grid.needs_searcher? thead << searcher_block(&spinner) end if @grid.[:per_page] and @grid.[:top_pager] thead << magic_pager_block(&spinner) end if thead.empty? and not @grid.[:collapse_emtpy_header] thead << filler_block(&spinner) end thead << magic_column_headers thead.join.html_safe end |
#magic_pager(collection, opts = {}) ⇒ Object
242 243 244 245 246 247 248 249 250 251 252 253 |
# File 'lib/magic_grid/html_grid.rb', line 242 def magic_pager(collection, opts={}) if @view.respond_to? :will_paginate # WillPaginate @view.will_paginate collection.collection, opts elsif @view.respond_to? :paginate #Kaminari, or something else.. @view.paginate collection.collection, opts else ("<!-- page #{collection.current_page} of #{collection.total_pages} -->" + '<!-- INSTALL WillPaginate or Kaminari for a pager! -->').html_safe end end |
#magic_pager_block(&spinner) ⇒ Object
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
# File 'lib/magic_grid/html_grid.rb', line 255 def magic_pager_block(&spinner) @view.content_tag('tr') do @view.content_tag('td', :class => 'full-width ui-widget-header magic-pager', :colspan => @grid.columns.count) do pager = magic_pager(@grid.magic_collection, :param_name => @grid.param_key(:page), :params => @grid.base_params ) if spinner pager << @view.capture(&spinner) end pager end end end |
#magic_rows(&row_renderer) ⇒ Object
111 112 113 114 115 116 117 |
# File 'lib/magic_grid/html_grid.rb', line 111 def magic_rows(&row_renderer) rows = @grid.collection.map { |row| grid_row(row, &row_renderer) } if rows.empty? rows << render_empty_collection(@grid.[:if_empty]) end rows.join.html_safe end |
#order_class(order = -1)) ⇒ Object
177 178 179 180 181 182 183 |
# File 'lib/magic_grid/html_grid.rb', line 177 def order_class(order = -1) case order.to_i when 0 then 'sort-asc' when 1 then 'sort-desc' else 'sort-none' end end |
#order_icon(order = -1)) ⇒ Object
165 166 167 |
# File 'lib/magic_grid/html_grid.rb', line 165 def order_icon(order = -1) @view.content_tag 'span', '', :class => "ui-icon #{order_icon_class(order)}" end |
#order_icon_class(order = -1)) ⇒ Object
169 170 171 172 173 174 175 |
# File 'lib/magic_grid/html_grid.rb', line 169 def order_icon_class(order = -1) case order.to_i when 0 then 'ui-icon-triangle-1-n' when 1 then 'ui-icon-triangle-1-s' else 'ui-icon-carat-2-n-s' end end |
#render(&row_renderer) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/magic_grid/html_grid.rb', line 16 def render(&row_renderer) @spinner_drawn = false grid_data = { :searcher => @grid.searcher, :current => @current_url, :live_search => @grid.[:live_search], :listeners => @grid.[:listeners], :remote => @grid.[:remote], :default_ajax_handler => @grid.[:default_ajax_handler], :params => @grid.base_params, } = { :class => (['magic_grid'] << @grid.[:class]).join(' '), :id => @grid.magic_id, :data => grid_data.select {|_,v| v } } @view.content_tag('table', ) do thead + tbody(&row_renderer) + tfoot end end |
#render_empty_collection(fallback) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/magic_grid/html_grid.rb', line 119 def render_empty_collection(fallback) if fallback @view.content_tag 'tr' do @view.content_tag('td', :colspan => @grid.columns.count, :class => 'if-empty') do if fallback.respond_to? :call fallback.call(@grid).to_s else fallback end end end end end |
#reverse_order(order) ⇒ Object
161 162 163 |
# File 'lib/magic_grid/html_grid.rb', line 161 def reverse_order(order) order.to_i == 0 ? 1 : 0 end |
#searcher_block(&spinner) ⇒ Object
212 213 214 215 216 217 218 219 |
# File 'lib/magic_grid/html_grid.rb', line 212 def searcher_block(&spinner) @view.content_tag('tr') do @view.content_tag('td', :class => 'searcher full-width ui-widget-header', :colspan => @grid.columns.count) do searcher_input(&spinner) end end end |
#searcher_input(&spinner) ⇒ Object
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
# File 'lib/magic_grid/html_grid.rb', line 221 def searcher_input(&spinner) searcher_data = { :min_length => @grid.[:min_search_length], :current => @grid.current_search || "", } searcher = @view.label_tag(@grid.searcher.to_sym, @grid.[:searcher_label]) searcher << @view.search_field_tag(@grid.searcher.to_sym, @grid.param(:q), :placeholder => @grid.[:searcher_tooltip], :size => @grid.[:searcher_size], :data => searcher_data, :form => "a form that doesn't exist") if @grid.[:search_button] searcher << @view.(@grid.[:searcher_button], :class => 'magic-grid-search-button') end searcher << yield if block_given? searcher end |
#sortable_header(col) ⇒ Object
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/magic_grid/html_grid.rb', line 185 def sortable_header(col) id = col.id label = col.label || id.titleize default_sort_order = @grid.order(@grid.default_order) my_params = @grid.base_params.merge({ @grid.param_key(:col) => id, }) column_link_params = HashWithIndifferentAccess.new(my_params) order = unordered classes = ['sorter ui-state-default'] << col.html_classes if id.to_s == @grid.current_sort_col.to_s order = @grid.current_order classes << "sort-current" << order_class(order) column_link_params[@grid.param_key(:order)] = reverse_order(order) else column_link_params.delete @grid.param_key(:order) end if column_link_params[@grid.param_key(:order)].to_i == default_sort_order.to_i column_link_params.delete(@grid.param_key(:order)) end @view.content_tag 'th', :class => classes.join(' ') do @view.link_to column_link_params, :remote => @grid.[:remote] do label.html_safe << order_icon(order) end end end |
#spinner_generator ⇒ Object
55 56 57 58 59 60 61 62 |
# File 'lib/magic_grid/html_grid.rb', line 55 def spinner_generator unless @spinner_drawn @spinner_drawn = true @view.tag('span', :id => (@grid.magic_id.to_s + "_spinner"), :class => "magic_grid_spinner") end end |
#tbody(&row_renderer) ⇒ Object
43 44 45 46 47 |
# File 'lib/magic_grid/html_grid.rb', line 43 def tbody(&row_renderer) @view.content_tag('tbody', :class => "ui-widget-content") do magic_rows &row_renderer end end |
#tfoot ⇒ Object
49 50 51 52 53 |
# File 'lib/magic_grid/html_grid.rb', line 49 def tfoot @view.content_tag('tfoot') do magic_grid_foot end end |
#thead ⇒ Object
37 38 39 40 41 |
# File 'lib/magic_grid/html_grid.rb', line 37 def thead @view.content_tag('thead', :data => {:params => @grid.base_params}) do magic_grid_head end end |
#unordered ⇒ Object
157 158 159 |
# File 'lib/magic_grid/html_grid.rb', line 157 def unordered -1 end |