wice_grid 3.5.0 → 3.6.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.inch.yml +3 -0
- data/.rspec +3 -0
- data/.rubocop.yml +181 -0
- data/.travis.yml +22 -0
- data/{CHANGELOG → CHANGELOG.md} +95 -31
- data/Gemfile +4 -1
- data/README.md +1517 -0
- data/Rakefile +51 -7
- data/{SAVED_QUERIES_HOWTO.rdoc → SAVED_QUERIES_HOWTO.md} +34 -31
- data/TODO.md +16 -0
- data/lib/generators/wice_grid/add_migration_for_serialized_queries_generator.rb +4 -6
- data/lib/generators/wice_grid/install_generator.rb +2 -5
- data/lib/generators/wice_grid/templates/create_wice_grid_serialized_queries.rb +1 -0
- data/lib/generators/wice_grid/templates/wice_grid_config.rb +29 -34
- data/lib/wice/active_record_column_wrapper.rb +36 -17
- data/lib/wice/columns.rb +53 -52
- data/lib/wice/columns/column_action.rb +11 -13
- data/lib/wice/columns/column_boolean.rb +9 -11
- data/lib/wice/columns/column_bootstrap_datepicker.rb +48 -0
- data/lib/wice/columns/column_custom_dropdown.rb +22 -23
- data/lib/wice/columns/column_float.rb +2 -6
- data/lib/wice/columns/column_html5_datepicker.rb +31 -0
- data/lib/wice/columns/column_integer.rb +9 -13
- data/lib/wice/columns/column_jquery_datepicker.rb +49 -0
- data/lib/wice/columns/column_processor_index.rb +18 -13
- data/lib/wice/columns/column_rails_date_helper.rb +41 -0
- data/lib/wice/columns/column_rails_datetime_helper.rb +40 -0
- data/lib/wice/columns/column_range.rb +7 -11
- data/lib/wice/columns/column_string.rb +24 -20
- data/lib/wice/columns/common_date_datetime_mixin.rb +20 -0
- data/lib/wice/columns/common_js_date_datetime_conditions_generator_mixin.rb +39 -0
- data/lib/wice/columns/common_js_date_datetime_mixin.rb +15 -0
- data/lib/wice/columns/{column_date.rb → common_rails_date_datetime_conditions_generator_mixin.rb} +4 -22
- data/lib/wice/columns/common_standard_helper_date_datetime_mixin.rb +22 -0
- data/lib/wice/grid_output_buffer.rb +19 -10
- data/lib/wice/grid_renderer.rb +146 -85
- data/lib/wice/helpers/bs_calendar_helpers.rb +6 -7
- data/lib/wice/helpers/js_calendar_helpers.rb +19 -17
- data/lib/wice/helpers/wice_grid_misc_view_helpers.rb +18 -18
- data/lib/wice/helpers/wice_grid_serialized_queries_view_helpers.rb +44 -49
- data/lib/wice/helpers/wice_grid_view_helpers.rb +131 -134
- data/lib/wice/kaminari_monkey_patching.rb +3 -1
- data/lib/wice/table_column_matrix.rb +23 -8
- data/lib/wice/wice_grid_controller.rb +12 -16
- data/lib/wice/wice_grid_core_ext.rb +12 -20
- data/lib/wice/wice_grid_misc.rb +131 -53
- data/lib/wice/wice_grid_serialized_queries_controller.rb +10 -11
- data/lib/wice/wice_grid_serialized_query.rb +4 -3
- data/lib/wice/wice_grid_spreadsheet.rb +19 -18
- data/lib/wice_grid.rb +144 -135
- data/spec/schema.rb +9 -0
- data/spec/spec_helper.rb +75 -0
- data/spec/support/active_record.rb +11 -0
- data/spec/support/wice_grid_test_config.rb +172 -0
- data/spec/wice/grid_output_buffer_spec.rb +41 -0
- data/spec/wice/table_column_matrix_spec.rb +38 -0
- data/spec/wice/wice_grid_misc_spec.rb +159 -0
- data/spec/wice/wice_grid_spreadsheet_spec.rb +14 -0
- data/test/readme.txt +1 -1
- data/vendor/assets/javascripts/wice_grid_init.js.coffee +14 -8
- data/vendor/assets/stylesheets/wice_grid.scss +84 -0
- data/wice_grid.gemspec +32 -16
- metadata +217 -25
- data/README.rdoc +0 -1325
- data/lib/generators/wice_grid/templates/wice_grid.scss +0 -140
- data/lib/wice/columns/column_datetime.rb +0 -171
- data/vendor/assets/images/icons/grid/arrow_down.gif +0 -0
- data/vendor/assets/images/icons/grid/arrow_up.gif +0 -0
- data/vendor/assets/images/icons/grid/calendar_view_month.png +0 -0
- data/vendor/assets/images/icons/grid/collapse.gif +0 -0
- data/vendor/assets/images/icons/grid/delete.png +0 -0
- data/vendor/assets/images/icons/grid/expand.gif +0 -0
- data/vendor/assets/images/icons/grid/page_white_excel.png +0 -0
- data/vendor/assets/images/icons/grid/page_white_find.png +0 -0
- data/vendor/assets/images/icons/grid/table.png +0 -0
- data/vendor/assets/images/icons/grid/table_refresh.png +0 -0
- data/vendor/assets/images/icons/grid/tick_all.png +0 -0
- data/vendor/assets/images/icons/grid/untick_all.png +0 -0
data/lib/wice/columns.rb
CHANGED
@@ -1,37 +1,32 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Wice #:nodoc:
|
2
|
-
|
3
3
|
module Columns #:nodoc:
|
4
|
-
|
5
4
|
mattr_reader :handled_type_view, :handled_type_conditions_generator
|
6
5
|
|
7
6
|
class << self #:nodoc:
|
8
|
-
|
9
7
|
def load_column_processors #:nodoc:
|
10
|
-
|
11
8
|
require_columns
|
12
9
|
|
13
|
-
loaded_view_column_processors = Hash.new
|
14
|
-
|
15
10
|
@@handled_type_view = build_table_of_processors 'view'
|
16
11
|
@@handled_type_conditions_generator = build_table_of_processors 'conditions_generator'
|
17
12
|
|
18
13
|
if Wice::Defaults.const_defined?(:ADDITIONAL_COLUMN_PROCESSORS)
|
19
14
|
|
20
|
-
common_error_prefix =
|
15
|
+
common_error_prefix = 'Error loading Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS. '
|
21
16
|
|
22
17
|
Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS.each do |key, value|
|
23
18
|
unless key.is_a?(Symbol)
|
24
|
-
|
19
|
+
fail common_error_prefix + 'A key of Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS should be a Symbol!'
|
25
20
|
end
|
26
21
|
|
27
|
-
if @@handled_type_view.
|
28
|
-
|
22
|
+
if @@handled_type_view.key?(key)
|
23
|
+
fail common_error_prefix +
|
29
24
|
"Column with key \"#{key}\" already exists in WiceGrid, overwriting existing columns is forbidden, please choose another key!"
|
30
25
|
end
|
31
26
|
|
32
|
-
if !
|
33
|
-
|
34
|
-
|
27
|
+
if !value.is_a?(Array) || value.size != 2
|
28
|
+
fail common_error_prefix +
|
29
|
+
'A value of Wice::Defaults::ADDITIONAL_COLUMN_PROCESSORS should be a a 2-element array!'
|
35
30
|
end
|
36
31
|
|
37
32
|
view_processor, conditions_generator = value.map(&:to_s).map do |klass|
|
@@ -43,22 +38,19 @@ module Wice #:nodoc:
|
|
43
38
|
end
|
44
39
|
|
45
40
|
unless view_processor.ancestors.include?(::Wice::Columns::ViewColumn)
|
46
|
-
|
41
|
+
fail common_error_prefix +
|
47
42
|
"#{view_processor} should be inherited from Wice::Columns::ViewColumn!"
|
48
43
|
end
|
49
44
|
|
50
|
-
|
51
45
|
unless conditions_generator.ancestors.include?(::Wice::Columns::ConditionsGeneratorColumn)
|
52
|
-
|
46
|
+
fail common_error_prefix +
|
53
47
|
"#{conditions_generator} should be inherited from Wice::Columns::ConditionsGeneratorColumn!"
|
54
48
|
end
|
55
49
|
|
56
50
|
@@handled_type_view[key] = view_processor
|
57
51
|
@@handled_type_conditions_generator[key] = conditions_generator
|
58
|
-
|
59
52
|
end
|
60
53
|
end
|
61
|
-
|
62
54
|
end
|
63
55
|
|
64
56
|
def get_view_column_processor(column_type) #:nodoc:
|
@@ -67,22 +59,21 @@ module Wice #:nodoc:
|
|
67
59
|
|
68
60
|
def get_conditions_generator_column_processor(column_type) #:nodoc:
|
69
61
|
column_type = column_type.intern if column_type.is_a? String
|
70
|
-
@@handled_type_conditions_generator[column_type] ||
|
62
|
+
@@handled_type_conditions_generator[column_type] || fail("Could not find conditions generator processor for column_type #{column_type}")
|
71
63
|
end
|
72
64
|
|
73
|
-
|
74
65
|
private
|
75
66
|
|
76
67
|
def build_table_of_processors(prefix)
|
77
|
-
|
78
|
-
loaded_processors =
|
68
|
+
{}.tap do |processor_table|
|
69
|
+
loaded_processors = {}
|
79
70
|
|
80
71
|
Wice::Columns::COLUMN_PROCESSOR_INDEX.each do |column_type, column_source_file|
|
81
72
|
unless loaded_processors[column_source_file]
|
82
73
|
processor_class_name = "#{prefix}_#{column_source_file}".classify
|
83
74
|
|
84
75
|
unless Wice::Columns.const_defined?(processor_class_name.intern)
|
85
|
-
|
76
|
+
fail "#{column_source_file}.rb is expected to define #{processor_class_name}!"
|
86
77
|
end
|
87
78
|
processor_class = eval("Wice::Columns::#{processor_class_name}")
|
88
79
|
|
@@ -99,12 +90,9 @@ module Wice #:nodoc:
|
|
99
90
|
require "wice/columns/#{column_source_file}.rb"
|
100
91
|
end
|
101
92
|
end
|
102
|
-
|
103
93
|
end
|
104
94
|
|
105
95
|
class ViewColumn #:nodoc:
|
106
|
-
|
107
|
-
|
108
96
|
include ActionView::Helpers::FormTagHelper
|
109
97
|
include ActionView::Helpers::TagHelper
|
110
98
|
include ActionView::Helpers::JavaScriptHelper
|
@@ -112,12 +100,29 @@ module Wice #:nodoc:
|
|
112
100
|
|
113
101
|
# fields defined from the options parameter
|
114
102
|
FIELDS = [:attribute, :name, :html, :filter, :model, :allow_multiple_selection,
|
115
|
-
:in_html, :in_csv, :
|
103
|
+
:in_html, :in_csv, :table_alias, :custom_order, :detach_with_id, :ordering, :auto_reload]
|
104
|
+
|
105
|
+
attr_accessor(*FIELDS)
|
106
|
+
|
107
|
+
# a Proc object which would return contents of one cell
|
108
|
+
attr_accessor :cell_rendering_block
|
109
|
+
|
110
|
+
# reference to the WiceGrid instance
|
111
|
+
attr_accessor :grid
|
112
|
+
|
113
|
+
# name of the table
|
114
|
+
attr_accessor :table_name
|
116
115
|
|
117
|
-
|
116
|
+
# name of the main table (first argument to initialize_grid)
|
117
|
+
attr_accessor :main_table
|
118
118
|
|
119
|
-
attr_accessor :
|
119
|
+
# attr_accessor :model
|
120
120
|
|
121
|
+
# specification for a custom filter: an array of option label + option value pairs for the select, or a Proc object which returns this array.
|
122
|
+
# Or nil if it is not a custom filter
|
123
|
+
attr_accessor :custom_filter
|
124
|
+
|
125
|
+
# A boolean flag: whether a column has a text input or not
|
121
126
|
attr_reader :contains_a_text_input
|
122
127
|
|
123
128
|
def initialize(block, options, grid_obj, tname, mtable, cfilter, view) #:nodoc:
|
@@ -133,8 +138,7 @@ module Wice #:nodoc:
|
|
133
138
|
end
|
134
139
|
end
|
135
140
|
|
136
|
-
|
137
|
-
def add_css_class(klass_value)
|
141
|
+
def add_css_class(klass_value) #:nodoc:
|
138
142
|
self.html ||= {}
|
139
143
|
if html[:class].nil?
|
140
144
|
html[:class] = klass_value
|
@@ -157,7 +161,7 @@ module Wice #:nodoc:
|
|
157
161
|
end
|
158
162
|
|
159
163
|
def detachness #:nodoc:
|
160
|
-
(!
|
164
|
+
(!detach_with_id.blank?).to_s
|
161
165
|
end
|
162
166
|
|
163
167
|
def yield_declaration #:nodoc:
|
@@ -171,7 +175,6 @@ module Wice #:nodoc:
|
|
171
175
|
end
|
172
176
|
end
|
173
177
|
|
174
|
-
|
175
178
|
def config #:nodoc:
|
176
179
|
@view.config
|
177
180
|
end
|
@@ -180,22 +183,21 @@ module Wice #:nodoc:
|
|
180
183
|
@view.controller
|
181
184
|
end
|
182
185
|
|
183
|
-
|
184
186
|
def render_filter #:nodoc:
|
185
187
|
params = @grid.filter_params(self)
|
186
188
|
render_filter_internal(params)
|
187
189
|
end
|
188
190
|
|
189
|
-
def render_filter_internal(
|
191
|
+
def render_filter_internal(_params) #:nodoc:
|
190
192
|
'<!-- implement me! -->'
|
191
193
|
end
|
192
194
|
|
193
195
|
def form_parameter_name_id_and_query(v) #:nodoc:
|
194
196
|
query = form_parameter_template(v)
|
195
|
-
query_without_equals_sign = query.sub(/=$/,'')
|
197
|
+
query_without_equals_sign = query.sub(/=$/, '')
|
196
198
|
parameter_name = CGI.unescape(query_without_equals_sign)
|
197
199
|
dom_id = id_out_of_name(parameter_name)
|
198
|
-
|
200
|
+
[query, query_without_equals_sign, parameter_name, dom_id.tr('.', '_')]
|
199
201
|
end
|
200
202
|
|
201
203
|
# bad name, because for the main table the name is not really 'fully_qualified'
|
@@ -207,22 +209,20 @@ module Wice #:nodoc:
|
|
207
209
|
table_alias_or_table_name + '.' + attribute
|
208
210
|
end
|
209
211
|
|
210
|
-
|
211
212
|
def filter_shown? #:nodoc:
|
212
213
|
self.attribute && self.filter
|
213
214
|
end
|
214
215
|
|
215
216
|
def filter_shown_in_main_table? #:nodoc:
|
216
|
-
filter_shown? && !
|
217
|
+
filter_shown? && !self.detach_with_id
|
217
218
|
end
|
218
219
|
|
219
|
-
|
220
220
|
def table_alias_or_table_name #:nodoc:
|
221
221
|
table_alias || table_name
|
222
222
|
end
|
223
223
|
|
224
224
|
def capable_of_hosting_filter_related_icons? #:nodoc:
|
225
|
-
self.attribute.blank? && self.name.blank? && !
|
225
|
+
self.attribute.blank? && self.name.blank? && !self.filter_shown?
|
226
226
|
end
|
227
227
|
|
228
228
|
def has_auto_reloading_input? #:nodoc:
|
@@ -244,7 +244,7 @@ module Wice #:nodoc:
|
|
244
244
|
protected
|
245
245
|
|
246
246
|
def form_parameter_template(v) #:nodoc:
|
247
|
-
{@grid.name => {f: {self.attribute_name_fully_qualified_for_all_but_main_table_columns => v}}}.to_query
|
247
|
+
{ @grid.name => { f: { self.attribute_name_fully_qualified_for_all_but_main_table_columns => v } } }.to_query
|
248
248
|
end
|
249
249
|
|
250
250
|
def form_parameter_name(v) #:nodoc:
|
@@ -252,24 +252,25 @@ module Wice #:nodoc:
|
|
252
252
|
end
|
253
253
|
|
254
254
|
def name_out_of_template(s) #:nodoc:
|
255
|
-
CGI.unescape(s).sub(/=$/,'')
|
255
|
+
CGI.unescape(s).sub(/=$/, '')
|
256
256
|
end
|
257
257
|
|
258
258
|
def id_out_of_name(s) #:nodoc:
|
259
|
-
s.gsub(/[\[\]]+/,'_').sub(/_+$/, '')
|
259
|
+
s.gsub(/[\[\]]+/, '_').sub(/_+$/, '')
|
260
260
|
end
|
261
|
-
|
262
261
|
end
|
263
262
|
|
264
|
-
|
265
263
|
class ConditionsGeneratorColumn #:nodoc:
|
266
|
-
|
267
|
-
|
264
|
+
def initialize(column_wrapper, column_type = nil) #:nodoc:
|
265
|
+
# Wice::ActiveRecordColumnWrapper
|
268
266
|
@column_wrapper = column_wrapper
|
267
|
+
@column_type = column_type
|
269
268
|
end
|
270
|
-
end
|
271
|
-
|
272
|
-
end
|
273
269
|
|
270
|
+
def generate_conditions(_table_alias, _opts) #:nodoc:
|
271
|
+
fail('implement me')
|
272
|
+
end
|
274
273
|
|
275
|
-
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
@@ -1,11 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Wice
|
2
|
-
|
3
3
|
module Columns #:nodoc:
|
4
|
-
|
5
|
-
|
6
4
|
class ViewColumnAction < ViewColumn #:nodoc:
|
7
5
|
def initialize(grid_obj, html, param_name, select_all_buttons, object_property, html_check_box, view, block = nil) #:nodoc:
|
8
|
-
@view
|
6
|
+
@view = view
|
9
7
|
@html_check_box = html_check_box
|
10
8
|
@select_all_buttons = select_all_buttons
|
11
9
|
self.grid = grid_obj
|
@@ -14,7 +12,7 @@ module Wice
|
|
14
12
|
grid_name = self.grid.name
|
15
13
|
@param_name = param_name
|
16
14
|
@cell_rendering_block = lambda do |object, params|
|
17
|
-
if block && !
|
15
|
+
if block && !block.call(object)
|
18
16
|
''
|
19
17
|
else
|
20
18
|
selected = params[grid_name] && params[grid_name][param_name] && params[grid_name][param_name].index(object.send(object_property).to_s)
|
@@ -35,20 +33,20 @@ module Wice
|
|
35
33
|
return '' unless @select_all_buttons
|
36
34
|
|
37
35
|
if @html_check_box
|
38
|
-
check_box_tag :select_all, 1, false,
|
36
|
+
check_box_tag :select_all, 1, false, class: 'wg-select-all'
|
39
37
|
else
|
40
|
-
content_tag(:div,
|
38
|
+
content_tag(:div,
|
39
|
+
content_tag(:i, '', class: 'fa fa-check-square-o'),
|
41
40
|
class: 'clickable select-all',
|
42
41
|
title: NlMessage['select_all']) + ' ' +
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
content_tag(:div,
|
43
|
+
content_tag(:i, '', class: 'fa fa-square-o'),
|
44
|
+
class: 'clickable deselect-all',
|
45
|
+
title: NlMessage['deselect_all'])
|
46
46
|
end
|
47
|
-
|
48
47
|
end
|
49
|
-
|
50
48
|
end
|
51
49
|
|
52
50
|
ConditionsGeneratorColumnAction = ConditionsGeneratorColumn #:nodoc:
|
53
51
|
end
|
54
|
-
end
|
52
|
+
end
|
@@ -1,11 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Wice
|
2
|
-
|
3
3
|
module Columns #:nodoc:
|
4
|
-
|
5
4
|
class ViewColumnBoolean < ViewColumnCustomDropdown #:nodoc:
|
6
5
|
include ActionView::Helpers::FormOptionsHelper
|
7
6
|
|
8
|
-
|
7
|
+
# Text for the true value
|
8
|
+
attr_accessor :boolean_filter_true_label
|
9
|
+
|
10
|
+
# Text for the false value
|
11
|
+
attr_accessor :boolean_filter_false_label
|
9
12
|
|
10
13
|
def render_filter_internal(params) #:nodoc:
|
11
14
|
@custom_filter = {
|
@@ -19,10 +22,9 @@ module Wice
|
|
19
22
|
end
|
20
23
|
end
|
21
24
|
|
22
|
-
|
23
25
|
class ConditionsGeneratorColumnBoolean < ConditionsGeneratorColumn #:nodoc:
|
24
26
|
def generate_conditions(table_alias, opts) #:nodoc:
|
25
|
-
unless
|
27
|
+
unless opts.is_a?(Array) && opts.size == 1
|
26
28
|
Wice.log "invalid parameters for the grid boolean filter - must be an one item array: #{opts.inspect}"
|
27
29
|
return false
|
28
30
|
end
|
@@ -31,12 +33,8 @@ module Wice
|
|
31
33
|
[" (#{@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]
|
32
34
|
elsif opts == 't'
|
33
35
|
[" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} = ?", true]
|
34
|
-
|
35
|
-
nil
|
36
|
-
end
|
36
|
+
end
|
37
37
|
end
|
38
38
|
end
|
39
|
-
|
40
39
|
end
|
41
|
-
|
42
|
-
end
|
40
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Wice
|
3
|
+
module Columns #:nodoc:
|
4
|
+
class ViewColumnBootstrapDatepicker < ViewColumn #:nodoc:
|
5
|
+
|
6
|
+
include Wice::BsCalendarHelpers
|
7
|
+
include Wice::Columns::CommonDateDatetimeMixin
|
8
|
+
include Wice::Columns::CommonJsDateDatetimeMixin
|
9
|
+
|
10
|
+
def do_render(params) #:nodoc:
|
11
|
+
calendar_data_from = prepare_data_for_bscalendar(
|
12
|
+
initial_date: params[:fr],
|
13
|
+
name: @name1,
|
14
|
+
fire_event: auto_reload,
|
15
|
+
grid_name: self.grid.name
|
16
|
+
)
|
17
|
+
|
18
|
+
calendar_data_to = prepare_data_for_bscalendar(
|
19
|
+
initial_date: params[:to],
|
20
|
+
name: @name2,
|
21
|
+
fire_event: auto_reload,
|
22
|
+
grid_name: self.grid.name
|
23
|
+
)
|
24
|
+
|
25
|
+
calendar_data_from.the_other_datepicker_id_to = calendar_data_to.dom_id
|
26
|
+
calendar_data_to.the_other_datepicker_id_from = calendar_data_from.dom_id
|
27
|
+
|
28
|
+
html1 = date_calendar_bs calendar_data_from
|
29
|
+
|
30
|
+
html2 = date_calendar_bs calendar_data_to
|
31
|
+
|
32
|
+
%(<div class="date-filter wg-bootstrap-datepicker">#{html1}#{html2}</div>)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
def has_auto_reloading_calendar? #:nodoc:
|
37
|
+
auto_reload
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
class ConditionsGeneratorColumnBootstrapDatepicker < ConditionsGeneratorColumn #:nodoc:
|
43
|
+
|
44
|
+
include Wice::Columns::CommonJsDateDatetimeConditionsGeneratorMixin
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -1,26 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Wice
|
2
|
-
|
3
3
|
module Columns #:nodoc:
|
4
|
-
|
5
4
|
class ViewColumnCustomDropdown < ViewColumn #:nodoc:
|
6
5
|
include ActionView::Helpers::FormOptionsHelper
|
7
6
|
|
7
|
+
# text in the filter dropdown for an empty <option><option>
|
8
8
|
attr_accessor :filter_all_label
|
9
|
+
|
10
|
+
# contains an array of option label + option value pairs for the select, or a Proc object which returns this array
|
9
11
|
attr_accessor :custom_filter
|
10
12
|
|
11
13
|
def render_filter_internal(params) #:nodoc:
|
12
14
|
@query, @query_without_equals_sign, @parameter_name, @dom_id = form_parameter_name_id_and_query('')
|
13
15
|
@query_without_equals_sign += '%5B%5D='
|
14
16
|
|
15
|
-
@custom_filter = @custom_filter.call if @custom_filter.
|
17
|
+
@custom_filter = @custom_filter.call if @custom_filter.is_a? Proc
|
16
18
|
|
17
|
-
if @custom_filter.
|
18
|
-
@custom_filter = [[@filter_all_label, nil]] + @custom_filter.map
|
19
|
+
if @custom_filter.is_a? Array
|
20
|
+
@custom_filter = [[@filter_all_label, nil]] + @custom_filter.map do|label, value|
|
19
21
|
[label.to_s, value.to_s]
|
20
|
-
|
22
|
+
end
|
21
23
|
end
|
22
24
|
|
23
|
-
select_options = {name: @parameter_name + '[]', id: @dom_id, class: 'custom-dropdown form-control'}
|
25
|
+
select_options = { name: @parameter_name + '[]', id: @dom_id, class: 'custom-dropdown form-control' }
|
24
26
|
|
25
27
|
if @turn_off_select_toggling
|
26
28
|
select_toggle = ''
|
@@ -31,12 +33,16 @@ module Wice
|
|
31
33
|
expand_icon_style, collapse_icon_style = nil, 'display: none'
|
32
34
|
expand_icon_style, collapse_icon_style = collapse_icon_style, expand_icon_style if select_options[:multiple]
|
33
35
|
|
34
|
-
select_toggle = content_tag(
|
36
|
+
select_toggle = content_tag(
|
37
|
+
:span,
|
38
|
+
content_tag(:i, '', class: 'fa fa-plus'),
|
35
39
|
title: NlMessage['expand'],
|
36
40
|
class: 'expand-multi-select-icon clickable',
|
37
41
|
style: expand_icon_style
|
38
42
|
) +
|
39
|
-
content_tag(
|
43
|
+
content_tag(
|
44
|
+
:span,
|
45
|
+
content_tag(:i, '', class: 'fa fa-minus'),
|
40
46
|
title: NlMessage['collapse'],
|
41
47
|
class: 'collapse-multi-select-icon clickable',
|
42
48
|
style: collapse_icon_style
|
@@ -55,11 +61,10 @@ module Wice
|
|
55
61
|
|
56
62
|
'<div class="custom-dropdown-container">'.html_safe +
|
57
63
|
content_tag(:select,
|
58
|
-
|
59
|
-
|
64
|
+
options_for_select(@custom_filter, params_for_select),
|
65
|
+
select_options) + select_toggle.html_safe + '</div>'.html_safe
|
60
66
|
end
|
61
67
|
|
62
|
-
|
63
68
|
def yield_declaration_of_column_filter #:nodoc:
|
64
69
|
{
|
65
70
|
templates: [@query_without_equals_sign],
|
@@ -67,23 +72,20 @@ module Wice
|
|
67
72
|
}
|
68
73
|
end
|
69
74
|
|
70
|
-
|
71
75
|
def has_auto_reloading_select? #:nodoc:
|
72
76
|
auto_reload
|
73
77
|
end
|
74
78
|
end
|
75
79
|
|
76
|
-
|
77
80
|
class ConditionsGeneratorColumnCustomDropdown < ConditionsGeneratorColumn #:nodoc:
|
78
|
-
|
79
81
|
def generate_conditions(table_alias, opts) #:nodoc:
|
80
82
|
if opts.empty? || (opts.is_a?(Array) && opts.size == 1 && opts[0].blank?)
|
81
83
|
return false
|
82
84
|
end
|
83
|
-
opts = (opts.
|
85
|
+
opts = (opts.is_a?(Array) && opts.size == 1) ? opts[0] : opts
|
84
86
|
|
85
|
-
if opts.
|
86
|
-
opts_with_special_values, normal_opts = opts.partition{|v| ::Wice::GridTools.special_value(v)}
|
87
|
+
if opts.is_a?(Array)
|
88
|
+
opts_with_special_values, normal_opts = opts.partition { |v| ::Wice::GridTools.special_value(v) }
|
87
89
|
|
88
90
|
conditions_ar = if normal_opts.size > 0
|
89
91
|
[" #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} IN ( " + (['?'] * normal_opts.size).join(', ') + ' )'] + normal_opts
|
@@ -92,7 +94,7 @@ module Wice
|
|
92
94
|
end
|
93
95
|
|
94
96
|
if opts_with_special_values.size > 0
|
95
|
-
special_conditions = opts_with_special_values.collect{|v| " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is " + v}.join(' or ')
|
97
|
+
special_conditions = opts_with_special_values.collect { |v| " #{@column_wrapper.alias_or_table_name(table_alias)}.#{@column_wrapper.name} is " + v }.join(' or ')
|
96
98
|
if conditions_ar.size > 0
|
97
99
|
conditions_ar[0] = " (#{conditions_ar[0]} or #{special_conditions} ) "
|
98
100
|
else
|
@@ -108,9 +110,6 @@ module Wice
|
|
108
110
|
end
|
109
111
|
end
|
110
112
|
end
|
111
|
-
|
112
113
|
end
|
113
|
-
|
114
114
|
end
|
115
|
-
|
116
|
-
end
|
115
|
+
end
|