wice_grid 3.2.0 → 3.2.1.pre1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +9 -6
- data/README.rdoc +29 -0
- data/VERSION +1 -1
- data/lib/active_record_column_wrapper.rb +105 -0
- data/lib/columns/column_action.rb +50 -0
- data/lib/columns/column_boolean.rb +43 -0
- data/lib/columns/column_custom_dropdown.rb +119 -0
- data/lib/columns/column_date.rb +23 -0
- data/lib/columns/column_datetime.rb +113 -0
- data/lib/columns/column_float.rb +14 -0
- data/lib/columns/column_integer.rb +63 -0
- data/lib/columns/column_processor_index.rb +19 -0
- data/lib/columns/column_range.rb +74 -0
- data/lib/columns/column_string.rb +89 -0
- data/lib/columns.rb +223 -0
- data/lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb +1 -1
- data/lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb +2 -2
- data/lib/grid_renderer.rb +19 -9
- data/lib/helpers/wice_grid_view_helpers.rb +6 -10
- data/lib/kaminari_monkey_patching.rb +4 -4
- data/lib/wice_grid.rb +15 -245
- data/lib/wice_grid_controller.rb +4 -4
- data/lib/wice_grid_core_ext.rb +3 -3
- data/wice_grid.gemspec +15 -13
- metadata +17 -15
- data/lib/view_columns/action_view_column.rb +0 -45
- data/lib/view_columns/column_processor_index.rb +0 -16
- data/lib/view_columns/view_column_boolean.rb +0 -23
- data/lib/view_columns/view_column_custom_dropdown.rb +0 -80
- data/lib/view_columns/view_column_date.rb +0 -17
- data/lib/view_columns/view_column_datetime.rb +0 -85
- data/lib/view_columns/view_column_float.rb +0 -7
- data/lib/view_columns/view_column_integer.rb +0 -38
- data/lib/view_columns/view_column_string.rb +0 -63
- data/lib/view_columns.rb +0 -177
data/CHANGELOG
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
-
to do:
|
2
1
|
|
3
|
-
|
4
|
-
|
2
|
+
action_column can now also take a block. If the block returns a falsy value, no checkbox will be rendered
|
3
|
+
|
4
|
+
A fix: the css class submitted to column is also added to <th> tags of the column
|
5
|
+
|
6
|
+
Filter related code has been refactored: condition generators are unified together with view column processors into one module. Writing your own filters has been simplified.
|
7
|
+
|
8
|
+
The default filter for numeric columns has been replaced by a simple one field filter which checks the values for equality, not the inclusion in a range.
|
9
|
+
New column parameter :filter_type allows to load custom alternative filters. The old numeric range filter can still be used by specifying filter_type: :range.
|
10
|
+
See lib/columns/column_processor_index.rb</tt> for the list of available filters.
|
5
11
|
|
6
12
|
+++++++
|
7
13
|
+++++++
|
@@ -83,9 +89,6 @@ This version of WiceGrid is accompanied by an application called _WiceGrid Examp
|
|
83
89
|
|
84
90
|
Here's a list of changes as compared with "version 0.4":https://blog.wice.eu/2009/7/6/moving-to-github-and-wicegrid-version-0-4 :
|
85
91
|
|
86
|
-
h4. selected_records
|
87
|
-
|
88
|
-
Method @selected_records@ of WiceGrid instances allows to access the list of all records of the current selection throughout all pages in the context of a view:
|
89
92
|
|
90
93
|
--- RHTML
|
91
94
|
<%= grid(@tasks_grid) do |g|
|
data/README.rdoc
CHANGED
@@ -624,6 +624,17 @@ To only allow single selection use <tt>:allow_multiple_selection</tt>:
|
|
624
624
|
end
|
625
625
|
|
626
626
|
|
627
|
+
==== Numeric Filters
|
628
|
+
|
629
|
+
Before version 3.2.1 the filter used for numeric columns was a range filter with two limits. Beginning with version 3.2.1
|
630
|
+
the default is a direct comparison filter with one input field. The old range filter can still be loaded using parameter <tt>:filter_type</tt>
|
631
|
+
with value <tt>:range</tt>:
|
632
|
+
|
633
|
+
g.column :filter_type => :range do |task|
|
634
|
+
...
|
635
|
+
end
|
636
|
+
|
637
|
+
|
627
638
|
=== Defaults
|
628
639
|
|
629
640
|
Default values like can be changed in <tt>config/initializers/wice_grid_config.rb</tt>.
|
@@ -801,6 +812,24 @@ taken care of by the application code.
|
|
801
812
|
By default the name of the HTTP parameter follows pattern <tt>"#{grid_name}[#{param_name}][]"</tt>, thus
|
802
813
|
<tt>params[grid_name][param_name]</tt> will contain an array of object IDs.
|
803
814
|
|
815
|
+
|
816
|
+
You can hide a certain action checkbox if you add the usual block to +g.action_column+, just like with the
|
817
|
+
+g.column+ definition. If the block returns +nil+ or +false+ no checkbox will be rendered.
|
818
|
+
|
819
|
+
<%= grid(@tasks_grid, :show_filters => :always) do |g|
|
820
|
+
|
821
|
+
...
|
822
|
+
|
823
|
+
g.action_column do |task|
|
824
|
+
task.finished?
|
825
|
+
end
|
826
|
+
|
827
|
+
...
|
828
|
+
|
829
|
+
end -%>
|
830
|
+
|
831
|
+
|
832
|
+
|
804
833
|
WiceGrid is form-friendly: submitting grid in a form retains the state of the form.
|
805
834
|
|
806
835
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.2.
|
1
|
+
3.2.1.pre1
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice
|
3
|
+
|
4
|
+
# to be mixed in into ActiveRecord::ConnectionAdapters::Column
|
5
|
+
module WiceGridExtentionToActiveRecordColumn #:nodoc:
|
6
|
+
attr_accessor :model
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
class ActiveRecordColumnWrapper #:nodoc:
|
12
|
+
def initialize(column, all_filter_params, main_table, table_alias, custom_filter_active, filter_type) #:nodoc:
|
13
|
+
@column = column
|
14
|
+
@filter_type = filter_type
|
15
|
+
@all_filter_params, @main_table, @table_alias, @custom_filter_active =
|
16
|
+
all_filter_params, main_table, table_alias, custom_filter_active
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def wg_initialize_request_parameters #:nodoc:
|
21
|
+
@request_params = nil
|
22
|
+
return if @all_filter_params.nil?
|
23
|
+
|
24
|
+
# if the parameter does not specify the table name we only allow columns in the default table to use these parameters
|
25
|
+
if @main_table && @request_params = @all_filter_params[@column.name]
|
26
|
+
current_parameter_name = @column.name
|
27
|
+
elsif @request_params = @all_filter_params[alias_or_table_name(@table_alias) + '.' + @column.name]
|
28
|
+
current_parameter_name = alias_or_table_name(@table_alias) + '.' + @column.name
|
29
|
+
end
|
30
|
+
|
31
|
+
# Preprocess incoming parameters for datetime, if what's coming in is
|
32
|
+
# a datetime (with custom_filter it can be anything else, and not
|
33
|
+
# the datetime hash {:fr => ..., :to => ...})
|
34
|
+
if @request_params
|
35
|
+
if (@column.type == :datetime || @column.type == :timestamp) && @request_params.is_a?(Hash)
|
36
|
+
[:fr, :to].each do |sym|
|
37
|
+
if @request_params[sym]
|
38
|
+
if @request_params[sym].is_a?(String)
|
39
|
+
@request_params[sym] = Wice::ConfigurationProvider.value_for(:DATETIME_PARSER).call(@request_params[sym])
|
40
|
+
elsif @request_params[sym].is_a?(Hash)
|
41
|
+
@request_params[sym] = Wice::GridTools.params_2_datetime(@request_params[sym])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
# Preprocess incoming parameters for date, if what's coming in is
|
49
|
+
# a date (with custom_filter it can be anything else, and not
|
50
|
+
# the date hash {:fr => ..., :to => ...})
|
51
|
+
if @column.type == :date && @request_params.is_a?(Hash)
|
52
|
+
[:fr, :to].each do |sym|
|
53
|
+
if @request_params[sym]
|
54
|
+
if @request_params[sym].is_a?(String)
|
55
|
+
@request_params[sym] = Wice::ConfigurationProvider.value_for(:DATE_PARSER).call(@request_params[sym])
|
56
|
+
elsif @request_params[sym].is_a?(Hash)
|
57
|
+
@request_params[sym] = ::Wice::GridTools.params_2_date(@request_params[sym])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
return wg_generate_conditions, current_parameter_name
|
65
|
+
end
|
66
|
+
|
67
|
+
def wg_generate_conditions #:nodoc:
|
68
|
+
return nil if @request_params.nil?
|
69
|
+
|
70
|
+
if @custom_filter_active
|
71
|
+
custom_processor_klass = ::Wice::Columns.get_conditions_generator_column_processor(:custom)
|
72
|
+
custom_processor = custom_processor_klass.new(self)
|
73
|
+
return custom_processor.generate_conditions(@table_alias, @request_params)
|
74
|
+
end
|
75
|
+
|
76
|
+
column_type = @filter_type || @column.type.to_s
|
77
|
+
|
78
|
+
processor_class = ::Wice::Columns.get_conditions_generator_column_processor(column_type)
|
79
|
+
|
80
|
+
if processor_class
|
81
|
+
return processor_class.new(self).generate_conditions(@table_alias, @request_params)
|
82
|
+
else
|
83
|
+
Wice.log("No processor for database type #{column_type}!!!")
|
84
|
+
nil
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def name #:nodoc:
|
89
|
+
@column.name
|
90
|
+
end
|
91
|
+
|
92
|
+
def model #:nodoc:
|
93
|
+
@column.model
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
def alias_or_table_name(table_alias) #:nodoc:
|
98
|
+
table_alias || @column.model.table_name
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice
|
3
|
+
|
4
|
+
module Columns #:nodoc:
|
5
|
+
|
6
|
+
|
7
|
+
class ViewColumnAction < ViewColumn #:nodoc:
|
8
|
+
def initialize(grid_obj, html, param_name, select_all_buttons, object_property, view, block = nil) #:nodoc:
|
9
|
+
@view = view
|
10
|
+
@select_all_buttons = select_all_buttons
|
11
|
+
self.grid = grid_obj
|
12
|
+
self.html = html
|
13
|
+
Wice::WgHash.add_or_append_class_value!(self.html, 'sel')
|
14
|
+
grid_name = self.grid.name
|
15
|
+
@param_name = param_name
|
16
|
+
@cell_rendering_block = lambda do |object, params|
|
17
|
+
if block && ! block.call(object)
|
18
|
+
''
|
19
|
+
else
|
20
|
+
selected = params[grid_name] && params[grid_name][param_name] && params[grid_name][param_name].index(object.send(object_property).to_s)
|
21
|
+
check_box_tag("#{grid_name}[#{param_name}][]", object.send(object_property), selected, :id => nil)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def in_html #:nodoc:
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
def capable_of_hosting_filter_related_icons? #:nodoc:
|
31
|
+
false
|
32
|
+
end
|
33
|
+
|
34
|
+
def name #:nodoc:
|
35
|
+
return '' unless @select_all_buttons
|
36
|
+
|
37
|
+
content_tag(:div, '',
|
38
|
+
:class => 'clickable select-all',
|
39
|
+
:title => NlMessage['select_all']) + ' ' +
|
40
|
+
content_tag(:div, '',
|
41
|
+
:class => 'clickable deselect-all',
|
42
|
+
:title => NlMessage['deselect_all'])
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
ConditionsGeneratorColumnAction = ConditionsGeneratorColumn #:nodoc:
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice
|
3
|
+
|
4
|
+
module Columns #:nodoc:
|
5
|
+
|
6
|
+
class ViewColumnBoolean < ViewColumnCustomDropdown #:nodoc:
|
7
|
+
include ActionView::Helpers::FormOptionsHelper
|
8
|
+
|
9
|
+
attr_accessor :boolean_filter_true_label, :boolean_filter_false_label
|
10
|
+
|
11
|
+
def render_filter_internal(params) #:nodoc:
|
12
|
+
@custom_filter = {
|
13
|
+
@filter_all_label => nil,
|
14
|
+
@boolean_filter_true_label => 't',
|
15
|
+
@boolean_filter_false_label => 'f'
|
16
|
+
}
|
17
|
+
|
18
|
+
@turn_off_select_toggling = true
|
19
|
+
super(params)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
class ConditionsGeneratorColumnBoolean < ConditionsGeneratorColumn #:nodoc:
|
25
|
+
def generate_conditions(table_alias, opts) #:nodoc:
|
26
|
+
unless (opts.kind_of?(Array) && opts.size == 1)
|
27
|
+
Wice.log "invalid parameters for the grid boolean filter - must be an one item array: #{opts.inspect}"
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
opts = opts[0]
|
31
|
+
if opts == 'f'
|
32
|
+
[" (#{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ? or #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is null) ", false]
|
33
|
+
elsif opts == 't'
|
34
|
+
[" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ?", true]
|
35
|
+
else
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice
|
3
|
+
|
4
|
+
module Columns #:nodoc:
|
5
|
+
|
6
|
+
class ViewColumnCustomDropdown < ViewColumn #:nodoc:
|
7
|
+
include ActionView::Helpers::FormOptionsHelper
|
8
|
+
|
9
|
+
attr_accessor :filter_all_label
|
10
|
+
attr_accessor :custom_filter
|
11
|
+
|
12
|
+
def render_filter_internal(params) #:nodoc:
|
13
|
+
@query, @query_without_equals_sign, @parameter_name, @dom_id = form_parameter_name_id_and_query('')
|
14
|
+
@query_without_equals_sign += '%5B%5D='
|
15
|
+
|
16
|
+
@custom_filter = @custom_filter.call if @custom_filter.kind_of? Proc
|
17
|
+
|
18
|
+
if @custom_filter.kind_of? Array
|
19
|
+
|
20
|
+
@custom_filter = [[@filter_all_label, nil]] + @custom_filter.map{|label, value|
|
21
|
+
[label.to_s, value.to_s]
|
22
|
+
}
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
select_options = {:name => @parameter_name + '[]', :id => @dom_id, :class => 'custom-dropdown'}
|
27
|
+
|
28
|
+
if @turn_off_select_toggling
|
29
|
+
select_toggle = ''
|
30
|
+
else
|
31
|
+
if self.allow_multiple_selection
|
32
|
+
select_options[:multiple] = params.is_a?(Array) && params.size > 1
|
33
|
+
|
34
|
+
expand_icon_style, collapse_icon_style = nil, 'display: none'
|
35
|
+
expand_icon_style, collapse_icon_style = collapse_icon_style, expand_icon_style if select_options[:multiple]
|
36
|
+
|
37
|
+
select_toggle = content_tag(:span, '',
|
38
|
+
:title => NlMessage['expand'],
|
39
|
+
:class => 'expand-multi-select-icon clickable',
|
40
|
+
:style => expand_icon_style
|
41
|
+
) +
|
42
|
+
content_tag(:span, '',
|
43
|
+
:title => NlMessage['collapse'],
|
44
|
+
:class => 'collapse-multi-select-icon clickable',
|
45
|
+
:style => collapse_icon_style
|
46
|
+
)
|
47
|
+
else
|
48
|
+
select_options[:multiple] = false
|
49
|
+
select_toggle = ''
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
if auto_reload
|
54
|
+
select_options[:class] += ' auto-reload'
|
55
|
+
end
|
56
|
+
|
57
|
+
params_for_select = (params.is_a?(Hash) && params.empty?) ? [nil] : params
|
58
|
+
|
59
|
+
'<div class="custom-dropdown-container">'.html_safe +
|
60
|
+
content_tag(:select,
|
61
|
+
options_for_select(@custom_filter, params_for_select),
|
62
|
+
select_options) + select_toggle.html_safe + '</div>'.html_safe
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
def yield_declaration_of_column_filter #:nodoc:
|
67
|
+
{
|
68
|
+
:templates => [@query_without_equals_sign],
|
69
|
+
:ids => [@dom_id]
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
def has_auto_reloading_select? #:nodoc:
|
75
|
+
auto_reload
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
class ConditionsGeneratorColumnCustomDropdown < ConditionsGeneratorColumn #:nodoc:
|
81
|
+
|
82
|
+
def generate_conditions(table_alias, opts) #:nodoc:
|
83
|
+
if opts.empty? || (opts.is_a?(Array) && opts.size == 1 && opts[0].blank?)
|
84
|
+
return false
|
85
|
+
end
|
86
|
+
opts = (opts.kind_of?(Array) && opts.size == 1) ? opts[0] : opts
|
87
|
+
|
88
|
+
if opts.kind_of?(Array)
|
89
|
+
opts_with_special_values, normal_opts = opts.partition{|v| ::Wice::GridTools.special_value(v)}
|
90
|
+
|
91
|
+
conditions_ar = if normal_opts.size > 0
|
92
|
+
[" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} IN ( " + (['?'] * normal_opts.size).join(', ') + ' )'] + normal_opts
|
93
|
+
else
|
94
|
+
[]
|
95
|
+
end
|
96
|
+
|
97
|
+
if opts_with_special_values.size > 0
|
98
|
+
special_conditions = opts_with_special_values.collect{|v| " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is " + v}.join(' or ')
|
99
|
+
if conditions_ar.size > 0
|
100
|
+
conditions_ar[0] = " (#{conditions_ar[0]} or #{special_conditions} ) "
|
101
|
+
else
|
102
|
+
conditions_ar = " ( #{special_conditions} ) "
|
103
|
+
end
|
104
|
+
end
|
105
|
+
conditions_ar
|
106
|
+
else
|
107
|
+
if ::Wice::GridTools.special_value(opts)
|
108
|
+
" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is " + opts
|
109
|
+
else
|
110
|
+
[" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ?", opts]
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice
|
3
|
+
|
4
|
+
module Columns #:nodoc:
|
5
|
+
|
6
|
+
class ViewColumnDate < ViewColumnDatetime #:nodoc:
|
7
|
+
|
8
|
+
@@datetime_chunk_names = %w(year month day)
|
9
|
+
|
10
|
+
def render_standard_filter_internal(params) #:nodoc:
|
11
|
+
'<div class="date-filter">' +
|
12
|
+
select_date(params[:fr], {:include_blank => true, :prefix => @name1, :id => @dom_id}) + '<br/>' +
|
13
|
+
select_date(params[:to], {:include_blank => true, :prefix => @name2, :id => @dom_id2}) +
|
14
|
+
'</div>'
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
ConditionsGeneratorColumnDate = ConditionsGeneratorColumnDatetime #:nodoc:
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice
|
3
|
+
|
4
|
+
module Columns #:nodoc:
|
5
|
+
|
6
|
+
class ViewColumnDatetime < ViewColumn #:nodoc:
|
7
|
+
include ActionView::Helpers::DateHelper
|
8
|
+
include Wice::JsCalendarHelpers
|
9
|
+
|
10
|
+
|
11
|
+
# name_and_id_from_options in Rails Date helper does not substitute '.' with '_'
|
12
|
+
# like all other simpler form helpers do. Thus, overriding it here.
|
13
|
+
def name_and_id_from_options(options, type) #:nodoc:
|
14
|
+
options[:name] = (options[:prefix] || DEFAULT_PREFIX) + (options[:discard_type] ? '' : "[#{type}]")
|
15
|
+
options[:id] = options[:name].gsub(/([\[\(])|(\]\[)/, '_').gsub(/[\]\)]/, '').gsub(/\./, '_').gsub(/_+/, '_')
|
16
|
+
end
|
17
|
+
|
18
|
+
@@datetime_chunk_names = %w(year month day hour minute)
|
19
|
+
|
20
|
+
def prepare_for_standard_filter #:nodoc:
|
21
|
+
x = lambda{|sym|
|
22
|
+
@@datetime_chunk_names.collect{|datetime_chunk_name|
|
23
|
+
triple = form_parameter_name_id_and_query(sym => {datetime_chunk_name => ''})
|
24
|
+
[triple[0], triple[3]]
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
@queris_ids = x.call(:fr) + x.call(:to)
|
29
|
+
|
30
|
+
_, _, @name1, _ = form_parameter_name_id_and_query({:fr => ''})
|
31
|
+
_, _, @name2, _ = form_parameter_name_id_and_query({:to => ''})
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
def prepare_for_calendar_filter #:nodoc:
|
36
|
+
query, _, @name1, @dom_id = form_parameter_name_id_and_query(:fr => '')
|
37
|
+
query2, _, @name2, @dom_id2 = form_parameter_name_id_and_query(:to => '')
|
38
|
+
|
39
|
+
@queris_ids = [[query, @dom_id], [query2, @dom_id2] ]
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
def render_standard_filter_internal(params) #:nodoc:
|
44
|
+
'<div class="date-filter">' +
|
45
|
+
select_datetime(params[:fr], {:include_blank => true, :prefix => @name1}) + '<br/>' +
|
46
|
+
select_datetime(params[:to], {:include_blank => true, :prefix => @name2}) +
|
47
|
+
'</div>'
|
48
|
+
end
|
49
|
+
|
50
|
+
def render_calendar_filter_internal(params) #:nodoc:
|
51
|
+
|
52
|
+
html1 = date_calendar_jquery(
|
53
|
+
params[:fr], NlMessage['date_selector_tooltip_from'], :prefix => @name1, :fire_event => auto_reload, :grid_name => self.grid.name)
|
54
|
+
|
55
|
+
html2 = date_calendar_jquery(
|
56
|
+
params[:to], NlMessage['date_selector_tooltip_to'], :prefix => @name2, :fire_event => auto_reload, :grid_name => self.grid.name)
|
57
|
+
|
58
|
+
%!<div class="date-filter">#{html1}<br/>#{html2}</div>!
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
def render_filter_internal(params) #:nodoc:
|
63
|
+
if helper_style == :standard
|
64
|
+
prepare_for_standard_filter
|
65
|
+
render_standard_filter_internal(params)
|
66
|
+
else
|
67
|
+
prepare_for_calendar_filter
|
68
|
+
render_calendar_filter_internal(params)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
def yield_declaration_of_column_filter #:nodoc:
|
74
|
+
{
|
75
|
+
:templates => @queris_ids.collect{|tuple| tuple[0] },
|
76
|
+
:ids => @queris_ids.collect{|tuple| tuple[1] }
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
def has_auto_reloading_calendar? #:nodoc:
|
82
|
+
auto_reload && helper_style == :calendar
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
class ConditionsGeneratorColumnDatetime < ConditionsGeneratorColumn #:nodoc:
|
90
|
+
|
91
|
+
def generate_conditions(table_alias, opts) #:nodoc:
|
92
|
+
conditions = [[]]
|
93
|
+
if opts[:fr]
|
94
|
+
conditions[0] << " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} >= ? "
|
95
|
+
conditions << opts[:fr]
|
96
|
+
end
|
97
|
+
|
98
|
+
if opts[:to]
|
99
|
+
conditions[0] << " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} <= ? "
|
100
|
+
conditions << opts[:to]
|
101
|
+
end
|
102
|
+
|
103
|
+
return false if conditions.size == 1
|
104
|
+
|
105
|
+
conditions[0] = conditions[0].join(' and ')
|
106
|
+
conditions
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice
|
3
|
+
|
4
|
+
module Columns #:nodoc:
|
5
|
+
|
6
|
+
class ViewColumnInteger < ViewColumn #:nodoc:
|
7
|
+
|
8
|
+
def render_filter_internal(params) #:nodoc:
|
9
|
+
@contains_a_text_input = true
|
10
|
+
|
11
|
+
@query, _, parameter_name, @dom_id = form_parameter_name_id_and_query(:eq => '')
|
12
|
+
|
13
|
+
opts = {:size => 3, :id => @dom_id, :class => 'range-start'}
|
14
|
+
|
15
|
+
if auto_reload
|
16
|
+
opts[:class] += ' auto-reload'
|
17
|
+
end
|
18
|
+
|
19
|
+
text_field_tag(parameter_name, params[:eq], opts)
|
20
|
+
end
|
21
|
+
|
22
|
+
def yield_declaration_of_column_filter #:nodoc:
|
23
|
+
{
|
24
|
+
:templates => [@query],
|
25
|
+
:ids => [@dom_id]
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def has_auto_reloading_input? #:nodoc:
|
30
|
+
auto_reload
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
class ConditionsGeneratorColumnInteger < ConditionsGeneratorColumn #:nodoc:
|
36
|
+
|
37
|
+
def generate_conditions(table_alias, opts) #:nodoc:
|
38
|
+
unless opts.kind_of? Hash
|
39
|
+
Wice.log "invalid parameters for the grid integer filter - must be a hash"
|
40
|
+
return false
|
41
|
+
end
|
42
|
+
conditions = [[]]
|
43
|
+
if opts[:eq]
|
44
|
+
if opts[:eq] =~ /\d/
|
45
|
+
conditions[0] << " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ? "
|
46
|
+
conditions << opts[:eq]
|
47
|
+
else
|
48
|
+
opts.delete(:eq)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
if conditions.size == 1
|
53
|
+
return false
|
54
|
+
end
|
55
|
+
|
56
|
+
conditions[0] = conditions[0].join(' and ')
|
57
|
+
|
58
|
+
conditions
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice #:nodoc:
|
3
|
+
module Columns #:nodoc:
|
4
|
+
COLUMN_PROCESSOR_INDEX = ActiveSupport::OrderedHash[ #:nodoc:
|
5
|
+
:action , 'column_action', # Special processor for action column, columns with checkboxes
|
6
|
+
:text , 'column_string',
|
7
|
+
:string , 'column_string',
|
8
|
+
:timestamp, 'column_datetime',
|
9
|
+
:datetime , 'column_datetime',
|
10
|
+
:date , 'column_date',
|
11
|
+
:integer , 'column_integer',
|
12
|
+
:range , 'column_range',
|
13
|
+
:float , 'column_float',
|
14
|
+
:decimal , 'column_float',
|
15
|
+
:custom , 'column_custom_dropdown', # Special processor for custom filter columns
|
16
|
+
:boolean , 'column_boolean'
|
17
|
+
]
|
18
|
+
end
|
19
|
+
end
|