wice_grid 3.2.0.pre1 → 3.2.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -994,30 +994,33 @@ If you need to disable the default export icon in the grid, add
994
994
 
995
995
  === Detached Filters
996
996
 
997
- It is possible to detach filters and place them anywhere on the page.
998
- To do so, use parameter <tt>:detach_with_id</tt> for a column whose filter needs to
999
- be detached, with an arbitrary string or a symbol value which will be used
1000
- later to identify the filter. As soon as there is one column with
1001
- <tt>:detach_with_id</tt>, the behavior of the +grid+ helper changes - it
1002
- becomes an <i>initializer</i> of the grid and doesn't output any HTML code.
1003
- To render the grid, use <tt>grid</tt> for the second time without the block.
1004
- To render a detached output filter, use helper <tt>grid_filter(grid_object, detached_filter_key)</tt>:
1005
-
1006
- <%= grid(@tasks_grid, :show_filters => :always) do |g|
1007
-
1008
- g.column :name => 'Title', :attribute => 'title', :detach_with_id => :title_filter do |task|
1009
- link_to('Edit', edit_task_path(task.title))
1010
- end
997
+ Filters can also be detached from the grid table and placed anywhere on page.
1011
998
 
1012
- g.column :name => 'Archived', :attribute => 'archived', :detach_with_id => :archived_filter do |task|
1013
- task.archived? ? 'Yes' : 'No'
1014
- end
999
+ This is a 3-step process.
1015
1000
 
1016
- g.column :name => 'Added', :attribute => 'created_at', :detach_with_id => :created_at_filter do |task|
1017
- task.created_at.to_s(:short)
1018
- end
1001
+ First, define the grid with helper +define_grid+ instead of +grid+.
1002
+ Everything should be done the same way as with +grid+, but every column which will have an external filter,
1003
+ add <tt>:detach_with_id => :some_filter_name+</tt> in the column definition. The value of +:detach_with_id+ is an arbitrary string
1004
+ or a symbol value which will be used later to identify the filter.
1005
+
1006
+ <%= define_grid(@tasks_grid, :show_filters => :always) do |g|
1007
+
1008
+ g.column :name => 'Title', :attribute => 'title', :detach_with_id => :title_filter do |task|
1009
+ link_to('Edit', edit_task_path(task.title))
1010
+ end
1011
+
1012
+ g.column :name => 'Archived', :attribute => 'archived', :detach_with_id => :archived_filter do |task|
1013
+ task.archived? ? 'Yes' : 'No'
1014
+ end
1019
1015
 
1020
- end -%>
1016
+ g.column :name => 'Added', :attribute => 'created_at', :detach_with_id => :created_at_filter do |task|
1017
+ task.created_at.to_s(:short)
1018
+ end
1019
+
1020
+ end -%>
1021
+
1022
+
1023
+ Then, use <tt>grid_filter(grid, :some_filter_name)</tt> to render filters:
1021
1024
 
1022
1025
  <% # rendering filter with key :title_filter %>
1023
1026
  <%= grid_filter @tasks_grid, :title_filter %>
@@ -1031,34 +1034,21 @@ end -%>
1031
1034
  <% # Rendering the grid body %>
1032
1035
  <%= grid(@tasks_grid) %>
1033
1036
 
1034
- It is important that the grid initializer goes first, the order of +grid_filter+ and
1035
- the second call to +grid+ is of no importance.
1037
+
1038
+ Finally, use <tt>render_grid(@grid)</tt> to actually output the grid table .
1039
+
1036
1040
 
1037
1041
  Using custom submit and reset buttons together with <tt>:hide_submit_button => true</tt>
1038
- and <tt>:hide_reset_button => true</tt>
1042
+ and <tt>:hide_reset_button => true</tt>
1039
1043
  allows to completely get rid
1040
1044
  of the default filter row and the default icons (see section 'Submit/Reset Buttons').
1041
1045
 
1042
- For CSV export will continue functioning, just make sure the first call to +grid+
1043
- is still in the template of its own and
1044
- is inside of <tt><%= %></tt>, because when CSV is requested, the first +grid+ works
1045
- in the old fashioned way producing CSV formatted output.
1046
1046
 
1047
1047
  If a column was declared with <tt>:detach_with_id</tt>, but never output with +grid_filter+,
1048
1048
  filtering the grid in development mode will result
1049
1049
  in an warning javascript message and the missing filter will be ignored.
1050
1050
  There is no such message in production.
1051
1051
 
1052
- <tt>grid</tt> parameter <tt>:show_filter</tt> must not be set to <tt>:no</tt> for detached filters to work.
1053
-
1054
- ==== How Does It Work? (For the interested)
1055
-
1056
- When there is at least one column with <tt>:detach_with_id</tt>, the generated HTML code is
1057
- stored in a buffer, code for detached filters is stored
1058
- in buffers of their own identified by the given IDs, and nothing is returned to the view.
1059
- When the helper is called for the second time, the buffer outputs its content.
1060
- In a similar fashion, the +grid_filter+ helper outputs buffers for filters.
1061
-
1062
1052
 
1063
1053
 
1064
1054
  === Access to Records From Outside The Grid
@@ -0,0 +1,6 @@
1
+ 1. +will_paginate+ is replaced by +kaminari+.
2
+ 2. The detached filter API has changed. No more magical invocation of the +grid+ helper two times.
3
+ First, +define_grid+ is used in the same way as +grid+, then +grid_filter+,
4
+ and then <tt>render_grid(@grid)</tt> to actually output the grid table .
5
+ 3. No more polluting core Ruby classes like Hash and Array with methods. All such methods
6
+ are now private to the plugin.
data/Rakefile CHANGED
@@ -34,7 +34,7 @@ begin
34
34
  gem.email = "yuri.leikind@gmail.com"
35
35
  gem.homepage = "http://github.com/lekind/wice_grid"
36
36
  gem.authors = ["Yuri Leikind"]
37
- gem.add_development_dependency "will_paginate", ">= 3.0.3"
37
+ gem.add_dependency "kaminari", ">= 0.13.0"
38
38
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
39
39
  end
40
40
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.2.0.pre1
1
+ 3.2.0.pre2
@@ -0,0 +1,2 @@
1
+ %li.disabled
2
+ %a{:href=> '#'} ...
@@ -0,0 +1,9 @@
1
+ -# Link to the "Next" page
2
+ -# available local variables
3
+ -# url: url to the next page
4
+ -# current_page: a page object for the currently displayed page
5
+ -# total_pages: total number of pages
6
+ -# per_page: number of items to fetch per page
7
+ -# remote: data-remote
8
+ %li
9
+ = link_to_unless current_page.last?, ::Wice::NlMessage['next_label'], url, :rel => 'next', :remote => remote
@@ -0,0 +1,10 @@
1
+ -# Link showing page number
2
+ -# available local variables
3
+ -# page: a page object for "this" page
4
+ -# url: url to this page
5
+ -# current_page: a page object for the currently displayed page
6
+ -# total_pages: total number of pages
7
+ -# per_page: number of items to fetch per page
8
+ -# remote: data-remote
9
+ %li{:class => page.current? ? 'active' : nil}
10
+ = link_to page, url, {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil}
@@ -0,0 +1,17 @@
1
+ -# The container tag
2
+ -# available local variables
3
+ -# current_page: a page object for the currently displayed page
4
+ -# total_pages: total number of pages
5
+ -# per_page: number of items to fetch per page
6
+ -# remote: data-remote
7
+ -# paginator: the paginator that renders the pagination tags inside
8
+ = paginator.render do
9
+ .pagination
10
+ %ul
11
+ = prev_page_tag unless current_page.first?
12
+ - each_page do |page|
13
+ - if page.left_outer? || page.right_outer? || page.inside_window?
14
+ = page_tag page
15
+ - elsif !page.was_truncated?
16
+ = gap_tag
17
+ = next_page_tag unless current_page.last?
@@ -0,0 +1,9 @@
1
+ -# Link to the "Previous" page
2
+ -# available local variables
3
+ -# url: url to the previous page
4
+ -# current_page: a page object for the currently displayed page
5
+ -# total_pages: total number of pages
6
+ -# per_page: number of items to fetch per page
7
+ -# remote: data-remote
8
+ %li
9
+ = link_to_unless current_page.first?, ::Wice::NlMessage['previous_label'], url, :rel => 'prev', :remote => remote
@@ -3,27 +3,15 @@ module Wice
3
3
 
4
4
  class GridOutputBuffer < String #:nodoc:
5
5
 
6
- attr_reader :stubborn_output_mode
7
6
  attr_accessor :return_empty_strings_for_nonexistent_filters
8
7
 
9
- def stubborn_output_mode=(m)
10
- @stubborn_output_mode = m
11
- end
12
-
13
8
  def initialize(*attrs)
14
9
  super(*attrs)
15
10
  @filters = HashWithIndifferentAccess.new
16
- @first_output = false
17
- @stubborn_output_mode = false
18
11
  end
19
12
 
20
13
  def to_s
21
- if @first_output || ! @stubborn_output_mode
22
- super.html_safe_if_necessary
23
- else
24
- @first_output = true
25
- ''
26
- end
14
+ super.html_safe
27
15
  end
28
16
 
29
17
  def add_filter(detach_with_id, filter_code)
data/lib/grid_renderer.rb CHANGED
@@ -296,7 +296,7 @@ module Wice
296
296
  end
297
297
 
298
298
  if options[:class]
299
- options[:html].add_or_append_class_value!(options[:class])
299
+ Wice::WgHash.add_or_append_class_value!(options[:html], options[:class])
300
300
  options.delete(:class)
301
301
  end
302
302
 
@@ -333,13 +333,13 @@ module Wice
333
333
  elsif options[:custom_filter].class == Array
334
334
  if options[:custom_filter].empty?
335
335
  []
336
- elsif options[:custom_filter].all_items_are_of_class(Symbol)
336
+ elsif Wice::WgEnumerable.all_items_are_of_class(options[:custom_filter], Symbol)
337
337
  lambda{ @grid.distinct_values_for_column_in_resultset(options[:custom_filter]) }
338
338
 
339
- elsif options[:custom_filter].all_items_are_of_class(String) || options[:custom_filter].all_items_are_of_class(Numeric)
339
+ elsif Wice::WgEnumerable.all_items_are_of_class(options[:custom_filter], String) || WgEnumerable.all_items_are_of_class(options[:custom_filter], Numeric)
340
340
  options[:custom_filter].map{|i| [i,i]}
341
341
 
342
- elsif options[:custom_filter].all_items_are_of_class(Array)
342
+ elsif Wice::WgEnumerable.all_items_are_of_class(options[:custom_filter], Array)
343
343
  options[:custom_filter]
344
344
  else
345
345
  raise WiceGridArgumentError.new(
@@ -436,7 +436,7 @@ module Wice
436
436
  end
437
437
 
438
438
  def base_link_for_filter(controller, extra_parameters = {}) #:nodoc:
439
- new_params = controller.params.deep_clone_yl
439
+ new_params = Wice::WgHash.deep_clone controller.params
440
440
  new_params.merge!(extra_parameters)
441
441
 
442
442
  if new_params[@grid.name]
@@ -458,7 +458,7 @@ module Wice
458
458
 
459
459
 
460
460
  def link_for_export(controller, format, extra_parameters = {}) #:nodoc:
461
- new_params = controller.params.deep_clone_yl
461
+ new_params = Wice::WgHash.deep_clone controller.params
462
462
  new_params.merge!(extra_parameters)
463
463
 
464
464
  new_params[@grid.name] = {} unless new_params[@grid.name]
@@ -482,14 +482,14 @@ module Wice
482
482
  @@order_direction_parameter_name => direction
483
483
  }}
484
484
 
485
- cleaned_params = params.deep_clone_yl
485
+ cleaned_params = Wice::WgHash.deep_clone params
486
486
  cleaned_params.merge!(extra_parameters)
487
487
 
488
488
  cleaned_params.delete(:controller)
489
489
  cleaned_params.delete(:action)
490
490
 
491
491
 
492
- query_params = cleaned_params.rec_merge(query_params)
492
+ query_params = Wice::WgHash.rec_merge(cleaned_params, query_params)
493
493
 
494
494
  '?' + query_params.to_query
495
495
  end
@@ -14,7 +14,8 @@ module Wice
14
14
 
15
15
  grid.get_state_as_parameter_value_pairs(true).collect{|param_name, value|
16
16
  hidden_field_tag(param_name, value, :id => "hidden-#{param_name.gsub(/[\[\]]/, '-')}")
17
- }.join("\n").html_safe_if_necessary
17
+ }.join("\n").html_safe
18
+
18
19
  end
19
20
 
20
21
  def dump_state(grid) #:nodoc:
@@ -70,20 +70,23 @@ module Wice
70
70
  # Pease read documentation about the +column+ method to achieve the enlightenment.
71
71
 
72
72
  def grid(grid, opts = {}, &block)
73
+ raise WiceGridArgumentError.new('Missing block for the grid helper.' +
74
+ ' For detached filters use first define_grid with the same API as grid, ' +
75
+ 'then grid_filter to add filters, and then render_grid to actually show the grid' ) if block.nil?
76
+ define_grid(grid, opts, &block)
77
+ render_grid(grid)
78
+ end
79
+
80
+ # Has the same parameters as <tt>grid</tt> but does not output the grid. After <tt>define_grid</tt>
81
+ # <tt>render_grid</tt> can be used to output the grid HTML code.
82
+ # Usually used with detached filters: first <tt>define_grid</tt>, then <tt>grid_filter</tt>s, and then
83
+ # <tt>render_grid</tt>
84
+ def define_grid(grid, opts = {}, &block)
73
85
  # strip the method from HTML stuff
74
86
  unless grid.class == WiceGrid
75
87
  raise WiceGridArgumentError.new("The first argument for the grid helper must be an instance of the WiceGrid class")
76
88
  end
77
89
 
78
- if grid.output_buffer
79
- if grid.output_buffer == true
80
- raise WiceGridException.new("Second occurence of grid helper with the same grid object. " +
81
- "Did you intend to use detached filters and forget to define them?")
82
- else
83
- return grid.output_buffer
84
- end
85
- end
86
-
87
90
  options = {
88
91
  :allow_showing_all_records => Defaults::ALLOW_SHOWING_ALL_QUERIES,
89
92
  :class => nil,
@@ -114,25 +117,39 @@ module Wice
114
117
  Defaults::REUSE_LAST_COLUMN_FOR_FILTER_ICONS && rendering.last_column_for_html.capable_of_hosting_filter_related_icons?
115
118
 
116
119
  if grid.output_csv?
117
- content = grid_csv(grid, rendering)
120
+ grid_csv(grid, rendering)
118
121
  else
119
122
  # If blank_slate is defined we don't show any grid at all
120
123
  if rendering.blank_slate_handler && grid.resultset.size == 0 && ! grid.filtering_on?
121
- content = generate_blank_slate(grid, rendering)
122
- return content
124
+ generate_blank_slate(grid, rendering)
125
+ else
126
+ grid_html(grid, options, rendering, reuse_last_column_for_filter_buttons)
123
127
  end
124
-
125
- content = grid_html(grid, options, rendering, reuse_last_column_for_filter_buttons)
126
128
  end
127
129
 
128
130
  grid.view_helper_finished = true
129
- content
131
+
132
+ grid.csv_tempfile ? grid.csv_tempfile.path : nil
133
+ end
134
+
135
+ # Used after <tt>define_grid</tt> to actually output the grid HTML code.
136
+ # Usually used with detached filters: first <tt>define_grid</tt>, then <tt>grid_filter</tt>s, and then
137
+ # <tt>render_grid</tt>
138
+ def render_grid(grid)
139
+ if grid.output_buffer
140
+ grid.output_buffer
141
+ elsif grid.csv_tempfile
142
+ grid.csv_tempfile.path
143
+ else
144
+ raise WiceGridException.new("Attempt to use 'render_grid' without 'define_grid' before.")
145
+ end
130
146
  end
131
147
 
148
+
132
149
  def generate_blank_slate(grid, rendering) #:nodoc:
133
- buff = GridOutputBuffer.new
150
+ grid.output_buffer = GridOutputBuffer.new
134
151
 
135
- buff << if rendering.blank_slate_handler.is_a?(Proc)
152
+ grid.output_buffer << if rendering.blank_slate_handler.is_a?(Proc)
136
153
  call_block(rendering.blank_slate_handler, nil)
137
154
  elsif rendering.blank_slate_handler.is_a?(Hash)
138
155
  render(rendering.blank_slate_handler)
@@ -141,11 +158,8 @@ module Wice
141
158
  end
142
159
 
143
160
  if rendering.find_one_for(:in_html){|column| column.detach_with_id}
144
- buff.stubborn_output_mode = true
145
- buff.return_empty_strings_for_nonexistent_filters = true
146
- grid.output_buffer = buff
161
+ grid.output_buffer.return_empty_strings_for_nonexistent_filters = true
147
162
  end
148
- buff
149
163
  end
150
164
 
151
165
  def call_block(block, ar, extra_argument = nil) #:nodoc:
@@ -157,32 +171,31 @@ module Wice
157
171
 
158
172
  table_html_attrs, header_tr_html = options[:html], options[:header_tr_html]
159
173
 
160
- table_html_attrs.add_or_append_class_value!('wice-grid', true)
174
+ Wice::WgHash.add_or_append_class_value!(table_html_attrs, 'wice-grid', true)
161
175
 
162
176
  if Array === Defaults::DEFAULT_TABLE_CLASSES
163
177
  Defaults::DEFAULT_TABLE_CLASSES.each do |default_class|
164
- table_html_attrs.add_or_append_class_value!(default_class, true)
178
+ Wice::WgHash.add_or_append_class_value!(table_html_attrs, default_class, true)
165
179
  end
166
180
  end
167
181
 
168
182
  if options[:class]
169
- table_html_attrs.add_or_append_class_value!(options[:class])
183
+ Wice::WgHash.add_or_append_class_value!(table_html_attrs, options[:class])
170
184
  options.delete(:class)
171
185
  end
172
186
 
173
-
174
-
175
187
  cycle_class = nil
176
188
  sorting_dependant_row_cycling = options[:sorting_dependant_row_cycling]
177
189
 
178
- content = GridOutputBuffer.new
190
+ grid.output_buffer = GridOutputBuffer.new
191
+
179
192
  # Ruby 1.9.x
180
- content.force_encoding('UTF-8') if content.respond_to?(:force_encoding)
193
+ grid.output_buffer.force_encoding('UTF-8') if grid.output_buffer.respond_to?(:force_encoding)
181
194
 
182
- content << %!<div class="wice-grid-container" id="#{grid.name}"><div id="#{grid.name}_title">!
183
- content << content_tag(:h3, grid.saved_query.name) if grid.saved_query
184
- content << "</div><table #{tag_options(table_html_attrs, true)}>"
185
- content << "<thead>"
195
+ grid.output_buffer << %!<div class="wice-grid-container" id="#{grid.name}"><div id="#{grid.name}_title">!
196
+ grid.output_buffer << content_tag(:h3, grid.saved_query.name) if grid.saved_query
197
+ grid.output_buffer << "</div><table #{tag_options(table_html_attrs, true)}>"
198
+ grid.output_buffer << "<thead>"
186
199
 
187
200
  no_filters_at_all = (options[:show_filters] == :no || rendering.no_filter_needed?) ? true: false
188
201
 
@@ -201,7 +214,7 @@ module Wice
201
214
 
202
215
  pagination_panel_content_html, pagination_panel_content_js = nil, nil
203
216
  if options[:upper_pagination_panel]
204
- content << rendering.pagination_panel(number_of_columns, options[:hide_csv_button]) do
217
+ grid.output_buffer << rendering.pagination_panel(number_of_columns, options[:hide_csv_button]) do
205
218
  pagination_panel_content_html =
206
219
  pagination_panel_content(grid, options[:extra_request_parameters], options[:allow_showing_all_records])
207
220
  pagination_panel_content_html
@@ -209,9 +222,9 @@ module Wice
209
222
  end
210
223
 
211
224
  title_row_attrs = header_tr_html.clone
212
- title_row_attrs.add_or_append_class_value!('wice-grid-title-row', true)
225
+ Wice::WgHash.add_or_append_class_value!(title_row_attrs, 'wice-grid-title-row', true)
213
226
 
214
- content << %!<tr #{tag_options(title_row_attrs, true)}>!
227
+ grid.output_buffer << %!<tr #{tag_options(title_row_attrs, true)}>!
215
228
 
216
229
  filter_row_id = grid.name + '_filter_row'
217
230
 
@@ -243,86 +256,82 @@ module Wice
243
256
  column_name,
244
257
  rendering.column_link(column, direction, params, options[:extra_request_parameters]),
245
258
  :class => link_style)
246
- content << content_tag(:th, col_link, Hash.make_hash(:class, css_class))
259
+ grid.output_buffer << content_tag(:th, col_link, Wice::WgHash.make_hash(:class, css_class))
247
260
  column.css_class = css_class
248
261
  else
249
262
  if reuse_last_column_for_filter_buttons && last
250
- content << content_tag(:th,
263
+ grid.output_buffer << content_tag(:th,
251
264
  hide_show_icon(filter_row_id, grid, filter_shown, no_filter_row, options[:show_filters], rendering)
252
265
  )
253
266
  else
254
- content << content_tag(:th, column_name)
267
+ grid.output_buffer << content_tag(:th, column_name)
255
268
  end
256
269
  end
257
270
  end
258
271
 
259
- content << content_tag(:th,
272
+ grid.output_buffer << content_tag(:th,
260
273
  hide_show_icon(filter_row_id, grid, filter_shown, no_filter_row, options[:show_filters], rendering)
261
274
  ) unless no_rightmost_column
262
275
 
263
- content << '</tr>'
276
+ grid.output_buffer << '</tr>'
264
277
  # rendering first row end
265
278
 
266
279
 
267
280
  unless no_filters_at_all # there are filters, we don't know where, in the table or detached
268
281
  if no_filter_row # they are all detached
269
- content.stubborn_output_mode = true
270
282
  rendering.each_column(:in_html) do |column|
271
283
  if column.filter_shown?
272
- filter_html_code = column.render_filter
273
- filter_html_code = filter_html_code.html_safe_if_necessary
274
- content.add_filter(column.detach_with_id, filter_html_code)
284
+ filter_html_code = column.render_filter.html_safe
285
+ grid.output_buffer.add_filter(column.detach_with_id, filter_html_code)
275
286
  end
276
287
  end
277
288
 
278
289
  else # some filters are present in the table
279
290
 
280
291
  filter_row_attrs = header_tr_html.clone
281
- filter_row_attrs.add_or_append_class_value!('wg-filter-row', true)
292
+ Wice::WgHash.add_or_append_class_value!(filter_row_attrs, 'wg-filter-row', true)
282
293
  filter_row_attrs['id'] = filter_row_id
283
294
 
284
- content << %!<tr #{tag_options(filter_row_attrs, true)} !
285
- content << 'style="display:none"' unless filter_shown
286
- content << '>'
295
+ grid.output_buffer << %!<tr #{tag_options(filter_row_attrs, true)} !
296
+ grid.output_buffer << 'style="display:none"' unless filter_shown
297
+ grid.output_buffer << '>'
287
298
 
288
299
  rendering.each_column_aware_of_one_last_one(:in_html) do |column, last|
289
300
  if column.filter_shown?
290
301
 
291
- filter_html_code = column.render_filter
292
- filter_html_code = filter_html_code.html_safe_if_necessary
302
+ filter_html_code = column.render_filter.html_safe
293
303
  if column.detach_with_id
294
- content.stubborn_output_mode = true
295
- content << content_tag(:th, '', Hash.make_hash(:class, column.css_class))
296
- content.add_filter(column.detach_with_id, filter_html_code)
304
+ grid.output_buffer << content_tag(:th, '', Wice::WgHash.make_hash(:class, column.css_class))
305
+ grid.output_buffer.add_filter(column.detach_with_id, filter_html_code)
297
306
  else
298
- content << content_tag(:th, filter_html_code, Hash.make_hash(:class, column.css_class))
307
+ grid.output_buffer << content_tag(:th, filter_html_code, Wice::WgHash.make_hash(:class, column.css_class))
299
308
  end
300
309
  else
301
310
  if reuse_last_column_for_filter_buttons && last
302
- content << content_tag(:th,
311
+ grid.output_buffer << content_tag(:th,
303
312
  reset_submit_buttons(options, grid, rendering),
304
- Hash.make_hash(:class, column.css_class).add_or_append_class_value!('filter_icons')
313
+ Wice::WgHash.add_or_append_class_value!(Wice::WgHash.make_hash(:class, column.css_class), 'filter_icons')
305
314
  )
306
315
  else
307
- content << content_tag(:th, '', Hash.make_hash(:class, column.css_class))
316
+ grid.output_buffer << content_tag(:th, '', Wice::WgHash.make_hash(:class, column.css_class))
308
317
  end
309
318
  end
310
319
  end
311
320
  unless no_rightmost_column
312
- content << content_tag(:th, reset_submit_buttons(options, grid, rendering), :class => 'filter_icons' )
321
+ grid.output_buffer << content_tag(:th, reset_submit_buttons(options, grid, rendering), :class => 'filter_icons' )
313
322
  end
314
- content << '</tr>'
323
+ grid.output_buffer << '</tr>'
315
324
  end
316
325
  end
317
326
 
318
327
  rendering.each_column(:in_html) do |column|
319
328
  unless column.css_class.blank?
320
- column.html.add_or_append_class_value!(column.css_class)
329
+ Wice::WgHash.add_or_append_class_value!(column.html, column.css_class)
321
330
  end
322
331
  end
323
332
 
324
- content << '</thead><tfoot>'
325
- content << rendering.pagination_panel(number_of_columns, options[:hide_csv_button]) do
333
+ grid.output_buffer << '</thead><tfoot>'
334
+ grid.output_buffer << rendering.pagination_panel(number_of_columns, options[:hide_csv_button]) do
326
335
  if pagination_panel_content_html
327
336
  pagination_panel_content_html
328
337
  else
@@ -332,7 +341,7 @@ module Wice
332
341
  end
333
342
  end
334
343
 
335
- content << '</tfoot><tbody>'
344
+ grid.output_buffer << '</tfoot><tbody>'
336
345
 
337
346
 
338
347
  # rendering rows
@@ -388,7 +397,7 @@ module Wice
388
397
  additional_opts.delete('class')
389
398
  end
390
399
  opts.merge!(additional_opts)
391
- opts.add_or_append_class_value!(additional_css_class) unless additional_css_class.blank?
400
+ Wice::WgHash.add_or_append_class_value!(opts, additional_css_class) unless additional_css_class.blank?
392
401
  end
393
402
 
394
403
  if sorting_dependant_row_cycling && column.attribute && grid.ordered_by?(column)
@@ -406,13 +415,13 @@ module Wice
406
415
  cycle_class = cycle('odd', 'even', :name => grid.name)
407
416
  end
408
417
 
409
- row_attributes.add_or_append_class_value!(cycle_class)
418
+ Wice::WgHash.add_or_append_class_value!(row_attributes, cycle_class)
410
419
 
411
- content << before_row_output if before_row_output
412
- content << "<tr #{tag_options(row_attributes)}>#{row_content}"
413
- content << content_tag(:td, '') unless no_rightmost_column
414
- content << '</tr>'
415
- content << after_row_output if after_row_output
420
+ grid.output_buffer << before_row_output if before_row_output
421
+ grid.output_buffer << "<tr #{tag_options(row_attributes)}>#{row_content}"
422
+ grid.output_buffer << content_tag(:td, '') unless no_rightmost_column
423
+ grid.output_buffer << '</tr>'
424
+ grid.output_buffer << after_row_output if after_row_output
416
425
  end
417
426
 
418
427
  last_row_output = if rendering.last_row_handler
@@ -421,9 +430,9 @@ module Wice
421
430
  nil
422
431
  end
423
432
 
424
- content << last_row_output if last_row_output
433
+ grid.output_buffer << last_row_output if last_row_output
425
434
 
426
- content << '</tbody></table>'
435
+ grid.output_buffer << '</tbody></table>'
427
436
 
428
437
  base_link_for_filter, base_link_for_show_all_records = rendering.base_link_for_filter(controller, options[:extra_request_parameters])
429
438
 
@@ -451,12 +460,12 @@ module Wice
451
460
 
452
461
  wg_data['data-foc'] = grid.status['foc'] if grid.status['foc']
453
462
 
454
- content << content_tag(:div, '', wg_data)
463
+ grid.output_buffer << content_tag(:div, '', wg_data)
455
464
 
456
- content << '</div>'
465
+ grid.output_buffer << '</div>'
457
466
 
458
467
  if Rails.env == 'development'
459
- content << javascript_tag(%/ $(document).ready(function(){ \n/ +
468
+ grid.output_buffer << javascript_tag(%/ $(document).ready(function(){ \n/ +
460
469
  %$ if (typeof(WiceGridProcessor) == "undefined"){\n$ +
461
470
  %$ alert("wice_grid.js not loaded, WiceGrid cannot proceed!\\n" +\n$ +
462
471
  %$ "Make sure that you have loaded wice_grid.js.\\n" +\n$ +
@@ -466,14 +475,7 @@ module Wice
466
475
  %$ }) $)
467
476
  end
468
477
 
469
- if content.stubborn_output_mode
470
- grid.output_buffer = content
471
- else
472
- # this will serve as a flag that the grid helper has already processed the grid but in a normal mode,
473
- # not in the mode with detached filters.
474
- grid.output_buffer = true
475
- end
476
- return content
478
+ grid.output_buffer
477
479
  end
478
480
 
479
481
  def hide_show_icon(filter_row_id, grid, filter_shown, no_filter_row, show_filters, rendering) #:nodoc:
@@ -504,7 +506,7 @@ module Wice
504
506
  end
505
507
 
506
508
  def reset_submit_buttons(options, grid, rendering) #:nodoc:
507
- (if options[:hide_submit_button]
509
+ if options[:hide_submit_button]
508
510
  ''
509
511
  else
510
512
  content_tag(:div, '',
@@ -512,7 +514,7 @@ module Wice
512
514
  :id => grid.name + '_submit_grid_icon',
513
515
  :class => 'submit clickable'
514
516
  )
515
- end + ' ' +
517
+ end.html_safe + ' ' +
516
518
  if options[:hide_reset_button]
517
519
  ''
518
520
  else
@@ -522,7 +524,7 @@ module Wice
522
524
  :id => grid.name + '_reset_grid_icon',
523
525
  :class => 'reset clickable'
524
526
  )
525
- end).html_safe_if_necessary
527
+ end.html_safe
526
528
  end
527
529
 
528
530
  # Renders a detached filter. The parameters are:
@@ -572,7 +574,6 @@ module Wice
572
574
  spreadsheet << row
573
575
  end
574
576
  grid.csv_tempfile = spreadsheet.tempfile
575
- return grid.csv_tempfile.path
576
577
  end
577
578
 
578
579
  def pagination_panel_content(grid, extra_request_parameters, allow_showing_all_records) #:nodoc:
@@ -583,13 +584,13 @@ module Wice
583
584
 
584
585
  html = pagination_info(grid, allow_showing_all_records)
585
586
 
586
- will_paginate(grid.resultset,
587
- :previous_label => NlMessage['previous_label'],
588
- :next_label => NlMessage['next_label'],
589
- :param_name => "#{grid.name}[page]",
590
- :renderer => ::Wice::WillPaginatePaginator,
591
- :params => extra_request_parameters).to_s +
592
- (' <div class="pagination_status">' + html + '</div>').html_safe_if_necessary
587
+ paginate(grid.resultset,
588
+ :theme => 'wice_grid',
589
+ :param_name => "#{grid.name}[page]",
590
+ :inner_window => 4,
591
+ :outer_window => 2
592
+ ) +
593
+ (' <div class="pagination_status">' + html + '</div>').html_safe
593
594
  end
594
595
 
595
596
 
@@ -622,19 +623,29 @@ module Wice
622
623
  end
623
624
 
624
625
  def pagination_info(grid, allow_showing_all_records) #:nodoc:
626
+
627
+
625
628
  collection = grid.resultset
626
629
 
627
- collection_total_entries = collection.total_entries
628
- collection_total_entries_str = collection_total_entries.to_s
630
+ collection_total_entries = collection.total_count
631
+
632
+
633
+ current_page = grid.ar_options[:page].to_i
634
+ per_page = grid.ar_options[:per_page].to_i
635
+
636
+ first = collection.offset_value + 1
637
+ last = collection.last_page? ? collection.total_count : collection.offset_value + collection.limit_value
638
+
639
+
629
640
  parameters = grid.get_state_as_parameter_value_pairs
630
641
 
631
642
  js = ''
632
- html = if (collection.total_pages < 2 && collection.length == 0)
643
+ html = if (collection.num_pages < 2 && collection.length == 0)
633
644
  '0'
634
645
  else
635
- parameters << ["#{grid.name}[pp]", collection_total_entries_str]
646
+ parameters << ["#{grid.name}[pp]", collection_total_entries]
636
647
 
637
- "#{collection.offset + 1}-#{collection.offset + collection.length} / #{collection_total_entries_str} " +
648
+ "#{first}-#{last} / #{collection_total_entries} " +
638
649
  if (! allow_showing_all_records) || collection_total_entries <= collection.length
639
650
  ''
640
651
  else
@@ -0,0 +1,13 @@
1
+ # encoding: UTF-8
2
+ # It is here only until this pull request is pulled: https://github.com/amatsuda/kaminari/pull/267
3
+ module Kaminari
4
+ module Helpers
5
+ class Tag
6
+ def page_url_for(page)
7
+ current_page_params_as_query_string = @param_name.to_s + '=' + (page <= 1 ? nil : page).to_s
8
+ current_page_params_as_hash = Rack::Utils.parse_nested_query(current_page_params_as_query_string)
9
+ @template.url_for Wice::WgHash.rec_merge(@params, current_page_params_as_hash).symbolize_keys
10
+ end
11
+ end
12
+ end
13
+ end
@@ -7,7 +7,7 @@ module Wice
7
7
  @select_all_buttons = select_all_buttons
8
8
  self.grid = grid_obj
9
9
  self.html = html
10
- self.html.add_or_append_class_value!('sel')
10
+ Wice::WgHash.add_or_append_class_value!(self.html, 'sel')
11
11
  grid_name = self.grid.name
12
12
  @param_name = param_name
13
13
  @cell_rendering_block = lambda do |object, params|
@@ -55,11 +55,10 @@ module Wice
55
55
 
56
56
  params_for_select = (params.is_a?(Hash) && params.empty?) ? [nil] : params
57
57
 
58
- '<div class="custom-dropdown-container">'.html_safe_if_necessary +
58
+ '<div class="custom-dropdown-container">'.html_safe +
59
59
  content_tag(:select,
60
60
  options_for_select(@custom_filter, params_for_select),
61
- select_options) +
62
- select_toggle.html_safe_if_necessary + '</div>'.html_safe_if_necessary
61
+ select_options) + select_toggle.html_safe + '</div>'.html_safe
63
62
  end
64
63
 
65
64
 
data/lib/wice_grid.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'will_paginate.rb'
4
3
  require 'wice_grid_misc.rb'
5
4
  require 'wice_grid_core_ext.rb'
6
5
  require 'grid_renderer.rb'
@@ -16,7 +15,7 @@ require 'wice_grid_spreadsheet.rb'
16
15
  require 'wice_grid_serialized_queries_controller.rb'
17
16
  require 'view_columns/column_processor_index.rb'
18
17
  require 'view_columns.rb'
19
-
18
+ require 'kaminari.rb'
20
19
 
21
20
 
22
21
  ActionController::Base.send(:helper_method, :wice_grid_custom_filter_params)
@@ -45,15 +44,13 @@ module Wice
45
44
  JsCalendarHelpers.send(:include, m)
46
45
  end
47
46
 
48
- Wice::GridRenderer.send(:include, ::WillPaginate::ViewHelpers)
49
47
  ViewColumn.load_column_processors
50
48
  require 'wice_grid_serialized_query.rb'
51
- end
52
-
53
- require 'will_paginate_paginator.rb'
54
49
 
50
+ # It is here only until this pull request is pulled: https://github.com/amatsuda/kaminari/pull/267
51
+ require 'kaminari_monkey_patching.rb'
52
+ end
55
53
  end
56
-
57
54
  end
58
55
 
59
56
  class WiceGrid
@@ -110,7 +107,6 @@ module Wice
110
107
  :page => 1,
111
108
  :per_page => Defaults::PER_PAGE,
112
109
  :saved_query => nil,
113
- :select => nil,
114
110
  :total_entries => nil,
115
111
  :with_paginated_resultset => nil,
116
112
  :with_resultset => nil
@@ -281,16 +277,31 @@ module Wice
281
277
  @ar_options[:joins] = @options[:joins]
282
278
  @ar_options[:include] = @options[:include]
283
279
  @ar_options[:group] = @options[:group]
284
- @ar_options[:select] = @options[:select]
285
280
  end
286
281
 
282
+
283
+ # TO DO: what to do with other @ar_options values?
287
284
  def read #:nodoc:
288
285
  form_ar_options
289
286
  @klass.unscoped do
290
287
  @resultset = if self.output_csv?
291
- @relation.find(:all, @ar_options)
288
+ # @relation.find(:all, @ar_options)
289
+ @relation.
290
+ includes(@ar_options[:include]).
291
+ joins( @ar_options[:joins]).
292
+ order( @ar_options[:order]).
293
+ where( @ar_options[:conditions])
294
+
292
295
  else
293
- @relation.paginate(@ar_options)
296
+ # p @ar_options
297
+ @relation.
298
+ page( @ar_options[:page]).
299
+ per( @ar_options[:per_page]).
300
+ includes(@ar_options[:include]).
301
+ joins( @ar_options[:joins]).
302
+ order( @ar_options[:order]).
303
+ where( @ar_options[:conditions])
304
+
294
305
  end
295
306
  end
296
307
  invoke_resultset_callbacks
@@ -355,7 +366,7 @@ module Wice
355
366
  def get_state_as_parameter_value_pairs(including_saved_query_request = false) #:nodoc:
356
367
  res = []
357
368
  unless status[:f].blank?
358
- status[:f].parameter_names_and_values([name, 'f']).collect do |param_name, value|
369
+ Wice::WgHash.parameter_names_and_values(status[:f], [name, 'f']).collect do |param_name, value|
359
370
  if value.is_a?(Array)
360
371
  param_name_ar = param_name + '[]'
361
372
  value.each do |v|
@@ -1,112 +1,121 @@
1
1
  # encoding: UTF-8
2
- module WGHashExtensions #:nodoc:
3
2
 
4
- def self.included(base) #:nodoc:
5
- base.extend(ClassMethods)
6
- end
7
-
8
-
9
- # if there's a hash of hashes, the original structure and the
10
- # returned structure should not contain any shared deep hashes
11
- def deep_clone_yl #:nodoc:
12
- cloned = self.clone
13
- cloned.keys.each do |k|
14
- if cloned[k].kind_of?(Hash)
15
- cloned[k] = cloned[k].deep_clone_yl
3
+ module Wice
4
+ module WgHash
5
+ class << self
6
+
7
+ # if there's a hash of hashes, the original structure and the
8
+ # returned structure should not contain any shared deep hashes
9
+ def deep_clone(hash) #:nodoc:
10
+ cloned = hash.clone
11
+ cloned.keys.each do |k|
12
+ if cloned[k].kind_of?(Hash)
13
+ cloned[k] = Wice::WgHash.deep_clone cloned[k]
14
+ end
15
+ end
16
+ cloned
16
17
  end
17
- end
18
- cloned
19
- end
20
18
 
21
- # Used to modify options submitted to view helpers. If there is no :klass option,
22
- # it will be added, if there is, the css class name will be appended to the existing
23
- # class name(s)
24
- def add_or_append_class_value!(klass_value, prepend = false) #:nodoc:
25
- if self.has_key?('class')
26
- self[:class] = self['class']
27
- self.delete('class')
28
- end
19
+ # Used to modify options submitted to view helpers. If there is no :klass option,
20
+ # it will be added, if there is, the css class name will be appended to the existing
21
+ # class name(s)
22
+ def add_or_append_class_value!(hash, klass_value, prepend = false) #:nodoc:
23
+ if hash.has_key?('class')
24
+ hash[:class] = hash['class']
25
+ hash.delete('class')
26
+ end
27
+
28
+ hash[:class] = if hash.has_key?(:class)
29
+ if prepend
30
+ "#{klass_value} #{hash[:class]}"
31
+ else
32
+ "#{hash[:class]} #{klass_value}"
33
+ end
34
+ else
35
+ klass_value
36
+ end
37
+
38
+ hash
39
+ end
29
40
 
30
- self[:class] = if self.has_key?(:class)
31
- if prepend
32
- "#{klass_value} #{self[:class]}"
33
- else
34
- "#{self[:class]} #{klass_value}"
41
+ # Used mostly for submitting options to view helpers, that is, like this:
42
+ # content_tag(:th, col_link, Wice::WgHash.make_hash(:class, css_class))
43
+ # In some it is important that if the value is empty, no option
44
+ # is submitted at all. Thus, there's a check for an empty value
45
+ def make_hash(key, value) #:nodoc:
46
+ value.blank? ? {} : {key => value}
35
47
  end
36
- else
37
- klass_value
38
- end
39
48
 
40
- return self
41
- end
42
49
 
50
+ # A deep merge of two hashes.
51
+ # That is, if both hashes have the same key and the values are hashes, these two hashes should also be merged.
52
+ # Used for merging two sets of params.
53
+ def rec_merge(hash, other) #:nodoc:
54
+ res = hash.clone
55
+ other.each do |key, other_value|
56
+ value = res[key]
57
+ if value.is_a?(Hash) && other_value.is_a?(Hash)
58
+ res[key] = rec_merge value, other_value
59
+ else
60
+ res[key] = other_value
61
+ end
62
+ end
63
+ res
64
+ end
43
65
 
44
- # Used to transform a traditional params hash
45
- # into an array of two element arrays where element zero is a parameter name as it appears in HTTP requests,
46
- # and the first element is the value:
47
- # { :a => { :b => 3, :c => 4, :d => { :e => 5 }} }.parameter_names_and_values #=> [["a[d][e]", 5], ["a[b]", 3], ["a[c]", 4]]
48
- # The parameter is an optional array of parameter names to prepend:
49
- # { :a => { :b => 3, :c => 4, :d => { :e => 5 }} }.parameter_names_and_values(['foo', 'baz']) #=>
50
- # [["foo[baz][a][d][e]", 5], ["foo[baz][a][b]", 3], ["foo[baz][a][c]", 4]]
51
- def parameter_names_and_values(initial = []) #:nodoc:
52
- res = []
53
- recursively_gather_finite_non_hash_values_with_key_path(res, [])
54
- res.collect do |parameter_struct|
55
- parameter_struct[0] = initial + parameter_struct[0]
56
- [parameter_struct[0].to_parameter_name, parameter_struct[1]]
57
- end
58
- end
66
+ # Used to transform a traditional params hash
67
+ # into an array of two element arrays where element zero is a parameter name as it appears in HTTP requests,
68
+ # and the first element is the value:
69
+ # { :a => { :b => 3, :c => 4, :d => { :e => 5 }} }.parameter_names_and_values #=> [["a[d][e]", 5], ["a[b]", 3], ["a[c]", 4]]
70
+ # The parameter is an optional array of parameter names to prepend:
71
+ # { :a => { :b => 3, :c => 4, :d => { :e => 5 }} }.parameter_names_and_values(['foo', 'baz']) #=>
72
+ # [["foo[baz][a][d][e]", 5], ["foo[baz][a][b]", 3], ["foo[baz][a][c]", 4]]
73
+ def parameter_names_and_values(hash, initial = []) #:nodoc:
74
+ res = []
75
+ recursively_gather_finite_non_hash_values_with_key_path(hash, res, [])
76
+ res.collect do |parameter_struct|
77
+ parameter_struct[0] = initial + parameter_struct[0]
78
+ [Wice::WgArray.to_parameter_name(parameter_struct[0]), parameter_struct[1]]
79
+ end
80
+ end
59
81
 
82
+ protected
60
83
 
61
- # A deep merge of two hashes.
62
- # That is, if both hashes have the same key and the values are hashes, these two hashes should also be merged.
63
- # Used for merging two sets of params.
64
- def rec_merge(other) #:nodoc:
65
- res = self.clone
66
- other.each do |key, other_value|
67
- value = res[key]
68
- if value.is_a?(Hash) && other_value.is_a?(Hash)
69
- res[key] = value.rec_merge other_value
70
- else
71
- res[key] = other_value
84
+ def recursively_gather_finite_non_hash_values_with_key_path(hash, res, stack = []) #:nodoc:
85
+ hash.each do |key, value|
86
+ if value.kind_of?(Hash)
87
+ recursively_gather_finite_non_hash_values_with_key_path(value, res, stack + [key])
88
+ else
89
+ res << [stack + [key], value]
90
+ end
91
+ end
72
92
  end
93
+
73
94
  end
74
- res
75
95
  end
76
96
 
77
97
 
78
- module ClassMethods #:nodoc:
98
+ module WgEnumerable #:nodoc:
79
99
 
80
- # Used mostly for submitting options to view helpers, that is, like this:
81
- # content_tag(:th, col_link, Hash.make_hash(:class, css_class))
82
- # In some it is important that if the value is empty, no option
83
- # is submitted at all. Thus, there's a check for an empty value
84
- def make_hash(key, value) #:nodoc:
85
- value.blank? ? {} : {key => value}
100
+ # Used to check the validity of :custom_filter parameter of column
101
+ def self.all_items_are_of_class(enumerable, klass) #:nodoc:
102
+ return false if enumerable.empty?
103
+ enumerable.inject(true){|memo, o| (o.is_a? klass) && memo}
86
104
  end
87
105
 
88
-
89
106
  end
90
107
 
91
- protected
92
-
93
- def recursively_gather_finite_non_hash_values_with_key_path(res, stack = []) #:nodoc:
94
- self.each do |key, value|
95
- if value.kind_of?(Hash)
96
- value.recursively_gather_finite_non_hash_values_with_key_path(res, stack + [key])
97
- else
98
- res << [stack + [key], value]
99
- end
108
+ module WgArray
109
+ # Only used by Hash#parameter_names_and_values
110
+ # Transforms ['foo', 'bar', 'baz'] to 'foo[bar][baz]'
111
+ def self.to_parameter_name(array) #:nodoc:
112
+ array[0].to_s + (array[1..-1] || []).collect{|k| '[' + k.to_s + ']'}.join('')
100
113
  end
101
114
  end
102
115
 
103
116
  end
104
117
 
105
118
 
106
- class Hash #:nodoc:
107
- include WGHashExtensions
108
- end
109
-
110
119
  # tag_options is a Rails views private method that takes a hash op options for
111
120
  # an HTM hash and produces a string ready to be added to the tag.
112
121
  # Here we are changing its visibility in order to be able to use it.
@@ -119,17 +128,6 @@ module ActionView #:nodoc:
119
128
  end
120
129
 
121
130
 
122
-
123
- module Enumerable #:nodoc:
124
-
125
- # Used to check the validity of :custom_filter parameter of column
126
- def all_items_are_of_class(klass) #:nodoc:
127
- return false if self.empty?
128
- self.inject(true){|memo, o| (o.is_a? klass) && memo}
129
- end
130
-
131
- end
132
-
133
131
  module WGObjectExtensions #:nodoc:
134
132
 
135
133
  # takes a list of messages, sends message 1 to self, then message 2 is sent to the result of the first message, ans so on
@@ -152,28 +150,3 @@ class Object #:nodoc:
152
150
  include WGObjectExtensions
153
151
  end
154
152
 
155
- module WGArrayExtensions #:nodoc:
156
- # Only used by Hash#parameter_names_and_values
157
- # Transforms ['foo', 'bar', 'baz'] to 'foo[bar][baz]'
158
- def to_parameter_name #:nodoc:
159
- self[0].to_s + (self[1..-1] || []).collect{|k| '[' + k.to_s + ']'}.join('')
160
- end
161
- end
162
-
163
- class Array #:nodoc:
164
- include WGArrayExtensions
165
- end
166
-
167
- module StringExt #:nodoc:
168
- def html_safe_if_necessary #:nodoc:
169
- if respond_to?(:html_safe)
170
- html_safe
171
- else
172
- self
173
- end
174
- end
175
- end
176
-
177
- class String #:nodoc:
178
- include StringExt
179
- end
data/wice_grid.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "wice_grid"
8
- s.version = "3.2.0.pre1"
8
+ s.version = "3.2.0.pre2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Yuri Leikind"]
12
- s.date = "2012-07-22"
12
+ s.date = "2012-08-04"
13
13
  s.description = "A Rails grid plugin to create grids with sorting, pagination, and (automatically generated) filters "
14
14
  s.email = "yuri.leikind@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -20,9 +20,15 @@ Gem::Specification.new do |s|
20
20
  "MIT-LICENSE",
21
21
  "README.rdoc",
22
22
  "RELEASE_NOTES_3.2.pre1.rdoc",
23
+ "RELEASE_NOTES_3.2.pre2.rdoc",
23
24
  "Rakefile",
24
25
  "SAVED_QUERIES_HOWTO.rdoc",
25
26
  "VERSION",
27
+ "app/views/kaminari/wice_grid/_gap.html.haml",
28
+ "app/views/kaminari/wice_grid/_next_page.html.haml",
29
+ "app/views/kaminari/wice_grid/_page.html.haml",
30
+ "app/views/kaminari/wice_grid/_paginator.html.haml",
31
+ "app/views/kaminari/wice_grid/_prev_page.html.haml",
26
32
  "lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb",
27
33
  "lib/generators/wice_grid/install_generator.rb",
28
34
  "lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb",
@@ -35,6 +41,7 @@ Gem::Specification.new do |s|
35
41
  "lib/helpers/wice_grid_misc_view_helpers.rb",
36
42
  "lib/helpers/wice_grid_serialized_queries_view_helpers.rb",
37
43
  "lib/helpers/wice_grid_view_helpers.rb",
44
+ "lib/kaminari_monkey_patching.rb",
38
45
  "lib/table_column_matrix.rb",
39
46
  "lib/view_columns.rb",
40
47
  "lib/view_columns/action_view_column.rb",
@@ -53,7 +60,6 @@ Gem::Specification.new do |s|
53
60
  "lib/wice_grid_serialized_queries_controller.rb",
54
61
  "lib/wice_grid_serialized_query.rb",
55
62
  "lib/wice_grid_spreadsheet.rb",
56
- "lib/will_paginate_paginator.rb",
57
63
  "test/readme.txt",
58
64
  "vendor/assets/images/icons/grid/arrow_down.gif",
59
65
  "vendor/assets/images/icons/grid/arrow_up.gif",
@@ -82,12 +88,12 @@ Gem::Specification.new do |s|
82
88
  s.specification_version = 3
83
89
 
84
90
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
85
- s.add_development_dependency(%q<will_paginate>, [">= 3.0.3"])
91
+ s.add_runtime_dependency(%q<kaminari>, [">= 0.13.0"])
86
92
  else
87
- s.add_dependency(%q<will_paginate>, [">= 3.0.3"])
93
+ s.add_dependency(%q<kaminari>, [">= 0.13.0"])
88
94
  end
89
95
  else
90
- s.add_dependency(%q<will_paginate>, [">= 3.0.3"])
96
+ s.add_dependency(%q<kaminari>, [">= 0.13.0"])
91
97
  end
92
98
  end
93
99
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wice_grid
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0.pre1
4
+ version: 3.2.0.pre2
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,24 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-22 00:00:00.000000000 Z
12
+ date: 2012-08-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: will_paginate
15
+ name: kaminari
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 3.0.3
22
- type: :development
21
+ version: 0.13.0
22
+ type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 3.0.3
29
+ version: 0.13.0
30
30
  description: ! 'A Rails grid plugin to create grids with sorting, pagination, and
31
31
  (automatically generated) filters '
32
32
  email: yuri.leikind@gmail.com
@@ -39,9 +39,15 @@ files:
39
39
  - MIT-LICENSE
40
40
  - README.rdoc
41
41
  - RELEASE_NOTES_3.2.pre1.rdoc
42
+ - RELEASE_NOTES_3.2.pre2.rdoc
42
43
  - Rakefile
43
44
  - SAVED_QUERIES_HOWTO.rdoc
44
45
  - VERSION
46
+ - app/views/kaminari/wice_grid/_gap.html.haml
47
+ - app/views/kaminari/wice_grid/_next_page.html.haml
48
+ - app/views/kaminari/wice_grid/_page.html.haml
49
+ - app/views/kaminari/wice_grid/_paginator.html.haml
50
+ - app/views/kaminari/wice_grid/_prev_page.html.haml
45
51
  - lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb
46
52
  - lib/generators/wice_grid/install_generator.rb
47
53
  - lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb
@@ -54,6 +60,7 @@ files:
54
60
  - lib/helpers/wice_grid_misc_view_helpers.rb
55
61
  - lib/helpers/wice_grid_serialized_queries_view_helpers.rb
56
62
  - lib/helpers/wice_grid_view_helpers.rb
63
+ - lib/kaminari_monkey_patching.rb
57
64
  - lib/table_column_matrix.rb
58
65
  - lib/view_columns.rb
59
66
  - lib/view_columns/action_view_column.rb
@@ -72,7 +79,6 @@ files:
72
79
  - lib/wice_grid_serialized_queries_controller.rb
73
80
  - lib/wice_grid_serialized_query.rb
74
81
  - lib/wice_grid_spreadsheet.rb
75
- - lib/will_paginate_paginator.rb
76
82
  - test/readme.txt
77
83
  - vendor/assets/images/icons/grid/arrow_down.gif
78
84
  - vendor/assets/images/icons/grid/arrow_up.gif
@@ -1,31 +0,0 @@
1
- module Wice
2
- class WillPaginatePaginator < ::WillPaginate::ActionView::LinkRenderer
3
- def html_container(html)
4
- tag(:div,
5
- tag(:ul, html),
6
- container_attributes
7
- )
8
- end
9
-
10
- def page_number(page)
11
- if page == current_page
12
- tag(:li, link(page, page, :rel => rel_value(page)), :class => 'active')
13
- else
14
- tag(:li, link(page, page, :rel => rel_value(page)))
15
- end
16
- end
17
-
18
- def previous_or_next_page(page, text, classname)
19
- if page
20
- tag(:li, link(text, page))
21
- else
22
- tag(:li, link(text, page), :class => 'disabled')
23
- end
24
- end
25
-
26
- def gap
27
- '<li class="disabled"><a href="#">...</a></li>'
28
- end
29
-
30
- end
31
- end