mongoid_wice_grid 4.0.0
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/.gitignore +9 -0
- data/CHANGELOG +409 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +140 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +1188 -0
- data/Rakefile +40 -0
- data/SAVED_QUERIES_HOWTO.rdoc +123 -0
- data/VERSION +1 -0
- data/lib/filter_conditions_generators.rb +126 -0
- data/lib/generators/wice_grid/templates/calendarview.css +107 -0
- data/lib/generators/wice_grid/templates/calendarview.js +1168 -0
- data/lib/generators/wice_grid/templates/icons/arrow_down.gif +0 -0
- data/lib/generators/wice_grid/templates/icons/arrow_up.gif +0 -0
- data/lib/generators/wice_grid/templates/icons/calendar_view_month.png +0 -0
- data/lib/generators/wice_grid/templates/icons/delete.png +0 -0
- data/lib/generators/wice_grid/templates/icons/expand.png +0 -0
- data/lib/generators/wice_grid/templates/icons/page_white_excel.png +0 -0
- data/lib/generators/wice_grid/templates/icons/page_white_find.png +0 -0
- data/lib/generators/wice_grid/templates/icons/table.png +0 -0
- data/lib/generators/wice_grid/templates/icons/table_refresh.png +0 -0
- data/lib/generators/wice_grid/templates/icons/tick_all.png +0 -0
- data/lib/generators/wice_grid/templates/icons/untick_all.png +0 -0
- data/lib/generators/wice_grid/templates/wice_grid.css +173 -0
- data/lib/generators/wice_grid/templates/wice_grid.yml +269 -0
- data/lib/generators/wice_grid/templates/wice_grid_config.rb +215 -0
- data/lib/generators/wice_grid/templates/wice_grid_jquery.js +161 -0
- data/lib/generators/wice_grid/templates/wice_grid_prototype.js +153 -0
- data/lib/generators/wice_grid/wice_grid_assets_jquery_generator.rb +32 -0
- data/lib/generators/wice_grid/wice_grid_assets_prototype_generator.rb +34 -0
- data/lib/grid_output_buffer.rb +52 -0
- data/lib/grid_renderer.rb +547 -0
- data/lib/helpers/js_calendar_helpers.rb +183 -0
- data/lib/helpers/wice_grid_misc_view_helpers.rb +113 -0
- data/lib/helpers/wice_grid_serialized_queries_view_helpers.rb +82 -0
- data/lib/helpers/wice_grid_view_helpers.rb +761 -0
- data/lib/js_adaptors/jquery_adaptor.rb +145 -0
- data/lib/js_adaptors/js_adaptor.rb +12 -0
- data/lib/js_adaptors/prototype_adaptor.rb +168 -0
- data/lib/mongoid_field.rb +50 -0
- data/lib/tasks/wice_grid_tasks.rake +28 -0
- data/lib/view_columns.rb +464 -0
- data/lib/views/create.rjs +13 -0
- data/lib/views/delete.rjs +12 -0
- data/lib/wice_grid.rb +521 -0
- data/lib/wice_grid_controller.rb +165 -0
- data/lib/wice_grid_core_ext.rb +179 -0
- data/lib/wice_grid_misc.rb +99 -0
- data/lib/wice_grid_serialized_queries_controller.rb +77 -0
- data/lib/wice_grid_serialized_query.rb +14 -0
- data/lib/wice_grid_spreadsheet.rb +33 -0
- data/test/.gitignore +2 -0
- data/test/blueprint.rb +17 -0
- data/test/database.yml +21 -0
- data/test/public/javascripts/jquery-1.4.2.min.js +154 -0
- data/test/public/javascripts/wice_grid.js +163 -0
- data/test/rails_mongoid_test.rb +104 -0
- data/test/rails_test_app.rb +71 -0
- data/test/require_gems.rb +19 -0
- data/test/schema.rb +33 -0
- data/test/spec_helper.rb +22 -0
- data/test/test_helper.rb +89 -0
- data/test/views/projects_and_people_grid.html.erb +12 -0
- data/test/views/projects_and_people_grid_invalid.html.erb +12 -0
- data/test/views/simple_projects_grid.html.erb +9 -0
- data/test/wice_grid_core_ext_test.rb +183 -0
- data/test/wice_grid_functional_test.rb +68 -0
- data/test/wice_grid_initializer.rb +215 -0
- data/test/wice_grid_misc_test.rb +41 -0
- data/test/wice_grid_test.rb +42 -0
- data/test/wice_grid_view_helper_test.rb +12 -0
- metadata +150 -0
@@ -0,0 +1,145 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice::JsAdaptor #:nodoc:
|
3
|
+
|
4
|
+
module Jquery #:nodoc:
|
5
|
+
|
6
|
+
def self.included(base) #:nodoc:
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods #:nodoc:
|
11
|
+
|
12
|
+
def init #:nodoc:
|
13
|
+
end
|
14
|
+
|
15
|
+
def dom_loaded #:nodoc:
|
16
|
+
%/$(document).ready(function(){\n/
|
17
|
+
end
|
18
|
+
|
19
|
+
def reset_button_initialization(grid_name, reset_grid_javascript) #:nodoc:
|
20
|
+
%/ $('div##{grid_name}.wice_grid_container .reset').click(function(e){\n/+
|
21
|
+
%/ #{reset_grid_javascript};\n/+
|
22
|
+
%/ });\n/
|
23
|
+
end
|
24
|
+
|
25
|
+
def submit_button_initialization(grid_name, submit_grid_javascript) #:nodoc:
|
26
|
+
%/ $('div##{grid_name}.wice_grid_container .submit').click(function(e){\n/+
|
27
|
+
%/ #{submit_grid_javascript};\n/+
|
28
|
+
%/ });\n/
|
29
|
+
end
|
30
|
+
|
31
|
+
def show_hide_button_initialization(grid_name, filter_row_id) #:nodoc:
|
32
|
+
%/ $('##{grid_name}_show_icon').click(function(){\n/+
|
33
|
+
%/ $('##{grid_name}_show_icon').hide();\n/+
|
34
|
+
%/ $('##{grid_name}_hide_icon').show();\n/+
|
35
|
+
%/ $('##{filter_row_id}').show();\n/+
|
36
|
+
%/ })\n/+
|
37
|
+
%/ $('##{grid_name}_hide_icon').click(function(){\n/+
|
38
|
+
%/ $('##{grid_name}_show_icon').show();\n/+
|
39
|
+
%/ $('##{grid_name}_hide_icon').hide();\n/+
|
40
|
+
%/ $('##{filter_row_id}').hide();\n/+
|
41
|
+
%/ });\n/
|
42
|
+
end
|
43
|
+
|
44
|
+
def enter_key_event_registration(grid_name) #:nodoc:
|
45
|
+
%! $('div##{grid_name}.wice_grid_container .wice_grid_filter_row input[type=text]').keydown(function(event){\n! +
|
46
|
+
%! if (event.keyCode == 13) {#{grid_name}.process()}\n! +
|
47
|
+
%! });\n!
|
48
|
+
end
|
49
|
+
|
50
|
+
def csv_export_icon_initialization(grid_name) #:nodoc:
|
51
|
+
%! $('div##{grid_name}.wice_grid_container .export_to_csv_button').click(function(e){\n! +
|
52
|
+
%! #{grid_name}.export_to_csv()\n! +
|
53
|
+
%! });\n!
|
54
|
+
end
|
55
|
+
|
56
|
+
def auto_reloading_selects_event_initialization(grid_name) #:nodoc:
|
57
|
+
%! $('div##{grid_name}.wice_grid_container select.auto_reload, .#{grid_name}_detached_filter select.auto_reload').change(function(e){\n! +
|
58
|
+
%! #{grid_name}.process()\n! +
|
59
|
+
%! });\n!
|
60
|
+
end
|
61
|
+
|
62
|
+
def auto_reloading_inputs_event_initialization(grid_name) #:nodoc:
|
63
|
+
%! $('div##{grid_name}.wice_grid_container input.auto_reload, .#{grid_name}_detached_filter input.auto_reload').keyup(function(event, element){\n! +
|
64
|
+
%! #{grid_name}.process(this.id);\n! +
|
65
|
+
%! });\n!
|
66
|
+
end
|
67
|
+
|
68
|
+
def auto_reloading_inputs_with_negation_checkboxes_event_initialization(grid_name) #:nodoc:
|
69
|
+
%! $('div##{grid_name}.wice_grid_container input.negation_checkbox, .#{grid_name}_detached_filter input.negation_checkbox').click(function(event, element){\n! +
|
70
|
+
%! #{grid_name}.process(this.id);\n! +
|
71
|
+
%! });\n!
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
def auto_reloading_calendar_event_initialization(grid_name) #:nodoc:
|
76
|
+
%! $(document).bind('wg:calendarChanged', function(event){\n! +
|
77
|
+
%! #{grid_name}.process()\n! +
|
78
|
+
%! });\n!
|
79
|
+
end
|
80
|
+
|
81
|
+
def show_all_link_initialization(grid_name, confirmation, parameters_json) #:nodoc:
|
82
|
+
%/ $('div##{grid_name}.wice_grid_container .show_all_link').click(function(e){ \n/ +
|
83
|
+
%/ #{confirmation} #{grid_name}.reload_page_for_given_grid_state(#{parameters_json}) \n/ +
|
84
|
+
%/})\n/
|
85
|
+
end
|
86
|
+
|
87
|
+
def back_to_pagination_link_initialization(grid_name, parameters_json) #:nodoc:
|
88
|
+
%/ $('div##{grid_name}.wice_grid_container .show_all_link').click(function(e){\n/ +
|
89
|
+
%/ #{grid_name}.reload_page_for_given_grid_state(#{parameters_json})\n/ +
|
90
|
+
%/ })\n/
|
91
|
+
end
|
92
|
+
|
93
|
+
def call_to_save_query_and_key_event_initialization_for_saving_queries(
|
94
|
+
id_and_name, grid_name, base_path_to_query_controller, parameters_json, ids_json) #:nodoc:
|
95
|
+
%/ function #{grid_name}_save_query(){\n/ +
|
96
|
+
%` if ( typeof(#{grid_name}) != "undefined")\n` +
|
97
|
+
%! #{grid_name}.save_query($('##{id_and_name}')[0].value, '#{base_path_to_query_controller}', #{parameters_json}, #{ids_json})\n! +
|
98
|
+
%/}\n/ +
|
99
|
+
%/ $('##{id_and_name}').keydown(function(event){\n/ +
|
100
|
+
%/ if (event.keyCode == 13) #{grid_name}_save_query();\n/ +
|
101
|
+
%/ })\n/
|
102
|
+
end
|
103
|
+
|
104
|
+
def js_framework_specific_calendar_assets(view) #:nodoc:
|
105
|
+
''
|
106
|
+
end
|
107
|
+
|
108
|
+
def js_framework_specific_calendar_js_name #:nodoc:
|
109
|
+
nil
|
110
|
+
end
|
111
|
+
|
112
|
+
def js_framework_specific_calendar_css_name #:nodoc:
|
113
|
+
nil
|
114
|
+
end
|
115
|
+
|
116
|
+
def action_column_initialization(grid_name) #:nodoc:
|
117
|
+
%! $('div##{grid_name}.wice_grid_container .select_all').click(function(e){\n! +
|
118
|
+
%! $('div##{grid_name}.wice_grid_container .sel input').each(function(i, checkbox){\n! +
|
119
|
+
%! checkbox.checked = true;\n! +
|
120
|
+
%! })\n! +
|
121
|
+
%! })\n! +
|
122
|
+
%! $('div##{grid_name}.wice_grid_container .deselect_all').click(function(e){\n! +
|
123
|
+
%! $('div##{grid_name}.wice_grid_container .sel input').each(function(i, checkbox){\n! +
|
124
|
+
%! checkbox.checked = false;\n! +
|
125
|
+
%! })\n! +
|
126
|
+
%! })\n!
|
127
|
+
end
|
128
|
+
|
129
|
+
def fade_this #:nodoc:
|
130
|
+
'jQuery([]).pushStack(this).fadeOut()'
|
131
|
+
end
|
132
|
+
|
133
|
+
def focus_element(element_to_focus) #:nodoc:
|
134
|
+
%! var elements = $('##{element_to_focus}');\n! +
|
135
|
+
%! if (elements[0]){\n! +
|
136
|
+
%! var elToFocus = elements[0];\n! +
|
137
|
+
%! elToFocus.value = elToFocus.value;\n! + # this will just place the cursor at the end of the text input
|
138
|
+
%! elToFocus.focus();\n! +
|
139
|
+
%! }\n!
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Wice::JsAdaptor #:nodoc:
|
4
|
+
mattr_accessor :calendar_module
|
5
|
+
def self.init #:nodoc:
|
6
|
+
if Wice::Defaults::JS_FRAMEWORK == :prototype
|
7
|
+
include Wice::JsAdaptor::Prototype
|
8
|
+
else
|
9
|
+
include Wice::JsAdaptor::Jquery
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice::JsAdaptor #:nodoc:
|
3
|
+
|
4
|
+
module Prototype #:nodoc:
|
5
|
+
|
6
|
+
def self.included(base) #:nodoc:
|
7
|
+
base.extend(ClassMethods)
|
8
|
+
end
|
9
|
+
|
10
|
+
module ClassMethods #:nodoc:
|
11
|
+
def init #:nodoc:
|
12
|
+
end
|
13
|
+
|
14
|
+
def dom_loaded #:nodoc:
|
15
|
+
%/ document.observe("dom:loaded", function() {\n/
|
16
|
+
end
|
17
|
+
|
18
|
+
def reset_button_initialization(grid_name, reset_grid_javascript) #:nodoc:
|
19
|
+
%/ $$('div##{grid_name}.wice_grid_container .reset').each(function(e){\n/+
|
20
|
+
%/ e.observe('click', function(){\n/+
|
21
|
+
%/ #{reset_grid_javascript};\n/+
|
22
|
+
%/ })\n/+
|
23
|
+
%/ });\n/
|
24
|
+
end
|
25
|
+
|
26
|
+
def submit_button_initialization(grid_name, submit_grid_javascript) #:nodoc:
|
27
|
+
%/ $$('div##{grid_name}.wice_grid_container .submit').each(function(e){\n/+
|
28
|
+
%/ e.observe('click', function(){\n/+
|
29
|
+
%/ #{submit_grid_javascript};\n/+
|
30
|
+
%/ })\n/+
|
31
|
+
%/ });\n/
|
32
|
+
end
|
33
|
+
|
34
|
+
def show_hide_button_initialization(grid_name, filter_row_id) #:nodoc:
|
35
|
+
%/ $('#{grid_name}_show_icon').observe('click', function(){\n/+
|
36
|
+
%/ Element.toggle('#{grid_name}_show_icon');\n/+
|
37
|
+
%/ Element.toggle('#{grid_name}_hide_icon');\n/+
|
38
|
+
%/ $('#{filter_row_id}').show();\n/+
|
39
|
+
%/ })\n/+
|
40
|
+
%/ $('#{grid_name}_hide_icon').observe('click', function(){\n/+
|
41
|
+
%/ Element.toggle('#{grid_name}_show_icon');\n/+
|
42
|
+
%/ Element.toggle('#{grid_name}_hide_icon');\n/+
|
43
|
+
%/ $('#{filter_row_id}').hide();\n/+
|
44
|
+
%/ });\n/
|
45
|
+
end
|
46
|
+
|
47
|
+
def enter_key_event_registration(grid_name) #:nodoc:
|
48
|
+
%! $$('div##{grid_name}.wice_grid_container .wice_grid_filter_row input[type=text]').each(function(e){\n! +
|
49
|
+
%! e.observe('keydown', function(event){\n! +
|
50
|
+
%! if (event.keyCode == 13) {#{grid_name}.process()}\n! +
|
51
|
+
%! })\n! +
|
52
|
+
%! });\n!
|
53
|
+
end
|
54
|
+
|
55
|
+
def csv_export_icon_initialization(grid_name) #:nodoc:
|
56
|
+
%! $$('div##{grid_name}.wice_grid_container .export_to_csv_button').each(function(e){\n! +
|
57
|
+
%! e.observe('click', function(event){\n! +
|
58
|
+
%! #{grid_name}.export_to_csv()\n! +
|
59
|
+
%! })\n! +
|
60
|
+
%! });\n!
|
61
|
+
end
|
62
|
+
|
63
|
+
def auto_reloading_selects_event_initialization(grid_name) #:nodoc:
|
64
|
+
%! $$('div##{grid_name}.wice_grid_container select.auto_reload', '.#{grid_name}_detached_filter select.auto_reload').each(function(e){\n! +
|
65
|
+
%! e.observe('change', function(event){\n! +
|
66
|
+
%! #{grid_name}.process()\n! +
|
67
|
+
%! })\n! +
|
68
|
+
%! });\n!
|
69
|
+
end
|
70
|
+
|
71
|
+
def auto_reloading_inputs_event_initialization(grid_name) #:nodoc:
|
72
|
+
%! $$('div##{grid_name}.wice_grid_container input.auto_reload', '.#{grid_name}_detached_filter input.auto_reload').each(function(e){\n! +
|
73
|
+
%! e.observe('keyup', function(event){\n! +
|
74
|
+
%! #{grid_name}.process(event.element().id)\n! +
|
75
|
+
%! })\n! +
|
76
|
+
%! });\n!
|
77
|
+
end
|
78
|
+
|
79
|
+
def auto_reloading_inputs_with_negation_checkboxes_event_initialization(grid_name) #:nodoc:
|
80
|
+
%! $$('div##{grid_name}.wice_grid_container input.negation_checkbox', '.#{grid_name}_detached_filter input.negation_checkbox').each(function(e){\n! +
|
81
|
+
%! e.observe('click', function(event){\n! +
|
82
|
+
%! #{grid_name}.process(event.element().id)\n! +
|
83
|
+
%! })\n! +
|
84
|
+
%! });\n!
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
def auto_reloading_calendar_event_initialization(grid_name) #:nodoc:
|
89
|
+
%! document.observe('wg:calendarChanged', function(event){\n! +
|
90
|
+
%! #{grid_name}.process()\n! +
|
91
|
+
%! });\n!
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
def show_all_link_initialization(grid_name, confirmation, parameters_json) #:nodoc:
|
96
|
+
%/ $$('div##{grid_name}.wice_grid_container .show_all_link').each(function(e){\n/ +
|
97
|
+
%/ e.observe('click', function(){\n/ +
|
98
|
+
%/ #{confirmation} #{grid_name}.reload_page_for_given_grid_state(#{parameters_json})\n/ +
|
99
|
+
%/ })\n/ +
|
100
|
+
%/ })\n/
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
def back_to_pagination_link_initialization(grid_name, parameters_json) #:nodoc:
|
105
|
+
%/ $$('div##{grid_name}.wice_grid_container .show_all_link').each(function(e){\n/ +
|
106
|
+
%/ e.observe('click', function(){\n/ +
|
107
|
+
%/ #{grid_name}.reload_page_for_given_grid_state(#{parameters_json})\n/ +
|
108
|
+
%/ })\n/ +
|
109
|
+
%/ })\n/
|
110
|
+
end
|
111
|
+
|
112
|
+
def call_to_save_query_and_key_event_initialization_for_saving_queries(
|
113
|
+
id_and_name, grid_name, base_path_to_query_controller, parameters_json, ids_json) #:nodoc:
|
114
|
+
%/ function #{grid_name}_save_query(){\n/ +
|
115
|
+
%` if ( typeof(#{grid_name}) != "undefined")\n` +
|
116
|
+
%/ #{grid_name}.save_query($F('#{id_and_name}'), '#{base_path_to_query_controller}', #{parameters_json}, #{ids_json})\n/ +
|
117
|
+
%/ }\n/ +
|
118
|
+
%/ $('#{id_and_name}').observe('keydown', function(event){\n/ +
|
119
|
+
%/ if (event.keyCode == 13) #{grid_name}_save_query();\n/ +
|
120
|
+
%/ })\n/
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
def js_framework_specific_calendar_assets(view) #:nodoc:
|
125
|
+
view.stylesheet_link_tag("calendarview.css") + view.javascript_include_tag("calendarview.js")
|
126
|
+
end
|
127
|
+
|
128
|
+
def js_framework_specific_calendar_js_name #:nodoc:
|
129
|
+
'calendarview.js'
|
130
|
+
end
|
131
|
+
|
132
|
+
def js_framework_specific_calendar_css_name #:nodoc:
|
133
|
+
'calendarview.css'
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
def action_column_initialization(grid_name) #:nodoc:
|
138
|
+
%! $$('div##{grid_name}.wice_grid_container .select_all').each(function(e){\n! +
|
139
|
+
%! e.observe('click', function(){\n! +
|
140
|
+
%! $$('div##{grid_name}.wice_grid_container .sel input').each(function(checkbox){\n! +
|
141
|
+
%! checkbox.checked = true;\n! +
|
142
|
+
%! })\n! +
|
143
|
+
%! })\n! +
|
144
|
+
%! })\n! +
|
145
|
+
%! $$('div##{grid_name}.wice_grid_container .deselect_all').each(function(e){\n! +
|
146
|
+
%! e.observe('click', function(){\n! +
|
147
|
+
%! $$('div##{grid_name}.wice_grid_container .sel input').each(function(checkbox){\n! +
|
148
|
+
%! checkbox.checked = false;\n! +
|
149
|
+
%! })\n! +
|
150
|
+
%! })\n! +
|
151
|
+
%! })\n!
|
152
|
+
end
|
153
|
+
|
154
|
+
def fade_this #:nodoc:
|
155
|
+
'new Effect.Fade(this)'
|
156
|
+
end
|
157
|
+
|
158
|
+
def focus_element(element_to_focus) #:nodoc:
|
159
|
+
%! var elToFocus = $('#{element_to_focus}');\n! +
|
160
|
+
%! elToFocus.focus();\n! +
|
161
|
+
%! elToFocus.value = elToFocus.value;\n! # this will just place the cursor at the end of the text input
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
168
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'filter_conditions_generators'
|
2
|
+
|
3
|
+
module Wice
|
4
|
+
# to be mixed in into Mongoid::Field
|
5
|
+
module MongoidField
|
6
|
+
def wice_add_filter_criteria(all_filter_params, criteria, custom_filter_active) #:nodoc:
|
7
|
+
request_params = all_filter_params ? all_filter_params[name] : nil
|
8
|
+
return nil unless request_params
|
9
|
+
|
10
|
+
# Preprocess incoming parameters for datetime, if what's coming in is
|
11
|
+
# a datetime (with custom_filter it can be anything else, and not
|
12
|
+
# the datetime hash {"fr" => ..., "to" => ...})
|
13
|
+
if (self.type == Time) && request_params.is_a?(Hash)
|
14
|
+
["fr", "to"].each do |sym|
|
15
|
+
if request_params[sym]
|
16
|
+
if request_params[sym].is_a?(String)
|
17
|
+
request_params[sym] = Time.parse(Wice::Defaults::DATETIME_PARSER.call(request_params[sym]).to_s)
|
18
|
+
elsif request_params[sym].is_a?(Hash)
|
19
|
+
request_params[sym] = Time.parse(::Wice::GridTools.params_2_datetime(request_params[sym]).to_s)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Preprocess incoming parameters for date, if what's coming in is
|
26
|
+
# a date (with custom_filter it can be anything else, and not
|
27
|
+
# the date hash {"fr" => ..., "to" => ...})
|
28
|
+
if self.type == Date && request_params.is_a?(Hash)
|
29
|
+
["fr", "to"].each do |sym|
|
30
|
+
if request_params[sym]
|
31
|
+
if request_params[sym].is_a?(String)
|
32
|
+
request_params[sym] = Wice::Defaults::DATE_PARSER.call(request_params[sym]).to_time
|
33
|
+
elsif request_params[sym].is_a?(Hash)
|
34
|
+
request_params[sym] = ::Wice::GridTools.params_2_date(request_params[sym]).to_time
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
processor_klass = ::Wice::FilterConditionsGeneratorCustomFilter if custom_filter_active
|
41
|
+
processor_klass = ::Wice::FilterConditionsGenerator.handled_type[self.type] unless processor_klass
|
42
|
+
unless processor_klass
|
43
|
+
Wice.log("No processor for database type #{self.type}!!!")
|
44
|
+
return nil
|
45
|
+
end
|
46
|
+
processor_klass.new(self, criteria).generate_conditions(request_params)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
namespace "wice_grid" do
|
2
|
+
|
3
|
+
desc "Create a table to store saved queries"
|
4
|
+
task :create_queries_table => :environment do
|
5
|
+
|
6
|
+
class CreateWiceGridSerializedQueriesTable < ::ActiveRecord::Migration
|
7
|
+
def self.up
|
8
|
+
create_table :wice_grid_serialized_queries do |t|
|
9
|
+
t.column :name, :string
|
10
|
+
t.column :grid_name, :string
|
11
|
+
t.column :query, :text
|
12
|
+
|
13
|
+
t.timestamps
|
14
|
+
end
|
15
|
+
add_index :wice_grid_serialized_queries, :grid_name
|
16
|
+
add_index :wice_grid_serialized_queries, [:grid_name, :id]
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.down
|
20
|
+
drop_table :wice_grid_serialized_queries
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
CreateWiceGridSerializedQueriesTable.up
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
data/lib/view_columns.rb
ADDED
@@ -0,0 +1,464 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module Wice
|
3
|
+
|
4
|
+
class ViewColumn
|
5
|
+
include ActionView::Helpers::FormTagHelper
|
6
|
+
include ActionView::Helpers::TagHelper
|
7
|
+
include ActionView::Helpers::JavaScriptHelper
|
8
|
+
include ActionView::Helpers::AssetTagHelper
|
9
|
+
|
10
|
+
# fields defined from the options parameter
|
11
|
+
FIELDS = [:attribute_name, :column_name, :icon, :td_html_attrs, :no_filter, :model_class, :allow_multiple_selection,
|
12
|
+
:in_html, :in_csv, :helper_style, :table_alias, :custom_order, :detach_with_id, :allow_ordering, :auto_reload]
|
13
|
+
|
14
|
+
attr_accessor *FIELDS
|
15
|
+
|
16
|
+
attr_accessor :cell_rendering_block, :grid, :css_class, :table_name, :main_table, :model_class, :custom_filter
|
17
|
+
|
18
|
+
attr_reader :contains_a_text_input
|
19
|
+
|
20
|
+
def initialize(block, options, grid_obj, tname, mtable, cfilter, view) #:nodoc:
|
21
|
+
self.cell_rendering_block = block
|
22
|
+
self.grid = grid_obj
|
23
|
+
self.table_name = tname
|
24
|
+
self.main_table = mtable
|
25
|
+
self.custom_filter = cfilter
|
26
|
+
@view = view
|
27
|
+
|
28
|
+
FIELDS.each do |field|
|
29
|
+
self.send("#{field}=", options[field])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
cattr_accessor :handled_type
|
34
|
+
@@handled_type = Hash.new
|
35
|
+
|
36
|
+
def css_class #:nodoc:
|
37
|
+
@css_class || ''
|
38
|
+
end
|
39
|
+
|
40
|
+
def yield_declaration_of_column_filter #:nodoc:
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def detachness #:nodoc:
|
45
|
+
(! detach_with_id.blank?).to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
def yield_javascript #:nodoc:
|
49
|
+
declaration = yield_declaration_of_column_filter
|
50
|
+
if declaration
|
51
|
+
%!#{@grid.name}.register( {
|
52
|
+
filter_name : "#{self.column_name}",
|
53
|
+
detached : #{detachness},
|
54
|
+
#{declaration}
|
55
|
+
} ); !
|
56
|
+
else
|
57
|
+
''
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
def config
|
63
|
+
@view.config
|
64
|
+
end
|
65
|
+
|
66
|
+
def controller
|
67
|
+
@view.controller
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def render_filter #:nodoc:
|
72
|
+
params = @grid.filter_params(self)
|
73
|
+
res = render_filter_internal(params)
|
74
|
+
return (res.is_a?(Array)) ? res : [res, nil]
|
75
|
+
end
|
76
|
+
|
77
|
+
def render_filter_internal(params) #:nodoc:
|
78
|
+
'<!-- implement me! -->'
|
79
|
+
end
|
80
|
+
|
81
|
+
def form_parameter_name_id_and_query(v) #:nodoc:
|
82
|
+
query = form_parameter_template(v)
|
83
|
+
query_without_equals_sign = query.sub(/=$/,'')
|
84
|
+
parameter_name = CGI.unescape(query_without_equals_sign)
|
85
|
+
dom_id = id_out_of_name(parameter_name)
|
86
|
+
return query, query_without_equals_sign, parameter_name, dom_id.tr('.', '_')
|
87
|
+
end
|
88
|
+
|
89
|
+
def filter_shown? #:nodoc:
|
90
|
+
self.attribute_name && ! self.no_filter
|
91
|
+
end
|
92
|
+
|
93
|
+
def filter_shown_in_main_table? #:nodoc:
|
94
|
+
filter_shown? && ! self.detach_with_id
|
95
|
+
end
|
96
|
+
|
97
|
+
def capable_of_hosting_filter_related_icons? #:nodoc:
|
98
|
+
self.attribute_name.blank? && self.column_name.blank? && ! self.filter_shown?
|
99
|
+
end
|
100
|
+
|
101
|
+
def has_auto_reloading_input? #:nodoc:
|
102
|
+
false
|
103
|
+
end
|
104
|
+
|
105
|
+
def auto_reloading_input_with_negation_checkbox? #:nodoc:
|
106
|
+
false
|
107
|
+
end
|
108
|
+
|
109
|
+
def has_auto_reloading_select? #:nodoc:
|
110
|
+
false
|
111
|
+
end
|
112
|
+
|
113
|
+
def has_auto_reloading_calendar? #:nodoc:
|
114
|
+
false
|
115
|
+
end
|
116
|
+
|
117
|
+
protected
|
118
|
+
|
119
|
+
def form_parameter_template(v) #:nodoc:
|
120
|
+
{@grid.name => {:f => {self.attribute_name => v}}}.to_query
|
121
|
+
end
|
122
|
+
|
123
|
+
def form_parameter_name(v) #:nodoc:
|
124
|
+
form_parameter_template_hash(v).to_query
|
125
|
+
end
|
126
|
+
|
127
|
+
def name_out_of_template(s) #:nodoc:
|
128
|
+
CGI.unescape(s).sub(/=$/,'')
|
129
|
+
end
|
130
|
+
|
131
|
+
def id_out_of_name(s) #:nodoc:
|
132
|
+
s.gsub(/[\[\]]+/,'_').sub(/_+$/, '')
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
class ActionViewColumn < ViewColumn #:nodoc:
|
138
|
+
def initialize(grid_obj, td_html_attrs, param_name, select_all_buttons, object_property, view) #:nodoc:
|
139
|
+
@view = view
|
140
|
+
@select_all_buttons = select_all_buttons
|
141
|
+
self.grid = grid_obj
|
142
|
+
self.td_html_attrs = td_html_attrs
|
143
|
+
self.td_html_attrs.add_or_append_class_value!('sel')
|
144
|
+
grid_name = self.grid.name
|
145
|
+
@param_name = param_name
|
146
|
+
@cell_rendering_block = lambda do |object, params|
|
147
|
+
selected = if params[grid_name] && params[grid_name][param_name] &&
|
148
|
+
params[grid_name][param_name].index(object.send(object_property).to_s)
|
149
|
+
true
|
150
|
+
else
|
151
|
+
false
|
152
|
+
end
|
153
|
+
check_box_tag("#{grid_name}[#{param_name}][]", object.send(object_property), selected, :id => nil)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def in_html #:nodoc:
|
158
|
+
true
|
159
|
+
end
|
160
|
+
|
161
|
+
def capable_of_hosting_filter_related_icons? #:nodoc:
|
162
|
+
false
|
163
|
+
end
|
164
|
+
|
165
|
+
def column_name #:nodoc:
|
166
|
+
return '' unless @select_all_buttons
|
167
|
+
select_all_tootip = WiceGridNlMessageProvider.get_message(:SELECT_ALL)
|
168
|
+
deselect_all_tootip = WiceGridNlMessageProvider.get_message(:DESELECT_ALL)
|
169
|
+
|
170
|
+
html = content_tag(:span, image_tag(Defaults::TICK_ALL_ICON, :alt => select_all_tootip),
|
171
|
+
:class => 'clickable select_all', :title => select_all_tootip) + ' ' +
|
172
|
+
content_tag(:span, image_tag(Defaults::UNTICK_ALL_ICON, :alt => deselect_all_tootip),
|
173
|
+
:class => 'clickable deselect_all', :title => deselect_all_tootip)
|
174
|
+
|
175
|
+
js = JsAdaptor.action_column_initialization(grid.name)
|
176
|
+
|
177
|
+
[html, js]
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
181
|
+
|
182
|
+
class ViewColumnInteger < ViewColumn #:nodoc:
|
183
|
+
@@handled_type[Integer] = self
|
184
|
+
|
185
|
+
def render_filter_internal(params) #:nodoc:
|
186
|
+
@contains_a_text_input = true
|
187
|
+
|
188
|
+
@query, _, parameter_name, @dom_id = form_parameter_name_id_and_query(:fr => '')
|
189
|
+
@query2, _, parameter_name2, @dom_id2 = form_parameter_name_id_and_query(:to => '')
|
190
|
+
|
191
|
+
opts1 = {:size => 3, :id => @dom_id}
|
192
|
+
opts2 = {:size => 3, :id => @dom_id2}
|
193
|
+
|
194
|
+
if auto_reload
|
195
|
+
opts1[:class] = ' auto_reload'
|
196
|
+
opts2[:class] = ' auto_reload'
|
197
|
+
end
|
198
|
+
|
199
|
+
text_field_tag(parameter_name, params[:fr], opts1) + text_field_tag(parameter_name2, params[:to], opts2)
|
200
|
+
end
|
201
|
+
|
202
|
+
def yield_declaration_of_column_filter #:nodoc:
|
203
|
+
%$templates : ['#{@query}', '#{@query2}'],
|
204
|
+
ids : ['#{@dom_id}', '#{@dom_id2}'] $
|
205
|
+
end
|
206
|
+
|
207
|
+
def has_auto_reloading_input? #:nodoc:
|
208
|
+
auto_reload
|
209
|
+
end
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
class ViewColumnFloat < ViewColumnInteger #:nodoc:
|
214
|
+
@@handled_type[BigDecimal] = self
|
215
|
+
@@handled_type[Float] = self
|
216
|
+
end
|
217
|
+
|
218
|
+
class ViewColumnCustomDropdown < ViewColumn #:nodoc:
|
219
|
+
include ActionView::Helpers::FormOptionsHelper
|
220
|
+
|
221
|
+
attr_accessor :filter_all_label
|
222
|
+
attr_accessor :custom_filter
|
223
|
+
|
224
|
+
def render_filter_internal(params) #:nodoc:
|
225
|
+
@query, @query_without_equals_sign, @parameter_name, @dom_id = form_parameter_name_id_and_query('')
|
226
|
+
@query_without_equals_sign += '%5B%5D='
|
227
|
+
|
228
|
+
@custom_filter = @custom_filter.call if @custom_filter.kind_of? Proc
|
229
|
+
|
230
|
+
if @custom_filter.kind_of? Array
|
231
|
+
|
232
|
+
@custom_filter = [[@filter_all_label, nil]] + @custom_filter.map{|label, value|
|
233
|
+
[label.to_s, value.to_s]
|
234
|
+
}
|
235
|
+
|
236
|
+
end
|
237
|
+
|
238
|
+
select_options = {:name => @parameter_name, :id => @dom_id, :class => 'custom_dropdown'}
|
239
|
+
|
240
|
+
if @turn_off_select_toggling
|
241
|
+
select_toggle = ''
|
242
|
+
else
|
243
|
+
if self.allow_multiple_selection
|
244
|
+
select_options[:multiple] = params.is_a?(Array) && params.size > 1
|
245
|
+
select_toggle = content_tag(:a,
|
246
|
+
tag(:img, :alt => 'Expand/Collapse', :src => Defaults::TOGGLE_MULTI_SELECT_ICON),
|
247
|
+
:href => "javascript: toggle_multi_select('#{@dom_id}', this, 'Expand', 'Collapse');", # TO DO: to locales
|
248
|
+
:class => 'toggle_multi_select_icon', :title => 'Expand')
|
249
|
+
else
|
250
|
+
select_options[:multiple] = false
|
251
|
+
select_toggle = ''
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
if auto_reload
|
256
|
+
select_options[:class] += ' auto_reload'
|
257
|
+
end
|
258
|
+
|
259
|
+
'<span class="custom_dropdown_container">'.html_safe_if_necessary +
|
260
|
+
content_tag(:select, options_for_select(@custom_filter, params), select_options) +
|
261
|
+
select_toggle.html_safe_if_necessary + '</span>'.html_safe_if_necessary
|
262
|
+
end
|
263
|
+
|
264
|
+
def yield_declaration_of_column_filter #:nodoc:
|
265
|
+
%$templates : ['#{@query_without_equals_sign}'],
|
266
|
+
ids : ['#{@dom_id}'] $
|
267
|
+
end
|
268
|
+
|
269
|
+
def has_auto_reloading_select? #:nodoc:
|
270
|
+
auto_reload
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
class ViewColumnBoolean < ViewColumnCustomDropdown #:nodoc:
|
275
|
+
@@handled_type[Boolean] = self
|
276
|
+
include ActionView::Helpers::FormOptionsHelper
|
277
|
+
|
278
|
+
attr_accessor :boolean_filter_true_label, :boolean_filter_false_label
|
279
|
+
|
280
|
+
def render_filter_internal(params) #:nodoc:
|
281
|
+
@custom_filter = {@filter_all_label => nil,
|
282
|
+
@boolean_filter_true_label => 't',
|
283
|
+
@boolean_filter_false_label => 'f' }
|
284
|
+
@turn_off_select_toggling = true
|
285
|
+
super(params)
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
289
|
+
class ViewColumnDatetime < ViewColumn #:nodoc:
|
290
|
+
@@handled_type[DateTime] = self
|
291
|
+
@@handled_type[Time] = self
|
292
|
+
include ActionView::Helpers::DateHelper
|
293
|
+
include Wice::JsCalendarHelpers
|
294
|
+
|
295
|
+
|
296
|
+
# name_and_id_from_options in Rails Date helper does not substitute '.' with '_'
|
297
|
+
# like all other simpler form helpers do. Thus, overriding it here.
|
298
|
+
def name_and_id_from_options(options, type) #:nodoc:
|
299
|
+
options[:name] = (options[:prefix] || DEFAULT_PREFIX) + (options[:discard_type] ? '' : "[#{type}]")
|
300
|
+
options[:id] = options[:name].gsub(/([\[\(])|(\]\[)/, '_').gsub(/[\]\)]/, '').gsub(/\./, '_').gsub(/_+/, '_')
|
301
|
+
end
|
302
|
+
|
303
|
+
@@datetime_chunk_names = %w(year month day hour minute)
|
304
|
+
|
305
|
+
def prepare_for_standard_filter #:nodoc:
|
306
|
+
x = lambda{|sym|
|
307
|
+
@@datetime_chunk_names.collect{|datetime_chunk_name|
|
308
|
+
triple = form_parameter_name_id_and_query(sym => {datetime_chunk_name => ''})
|
309
|
+
[triple[0], triple[3]]
|
310
|
+
}
|
311
|
+
}
|
312
|
+
|
313
|
+
@queris_ids = x.call(:fr) + x.call(:to)
|
314
|
+
|
315
|
+
_, _, @name1, _ = form_parameter_name_id_and_query({:fr => ''})
|
316
|
+
_, _, @name2, _ = form_parameter_name_id_and_query({:to => ''})
|
317
|
+
end
|
318
|
+
|
319
|
+
|
320
|
+
def prepare_for_calendar_filter #:nodoc:
|
321
|
+
query, _, @name1, @dom_id = form_parameter_name_id_and_query(:fr => '')
|
322
|
+
query2, _, @name2, @dom_id2 = form_parameter_name_id_and_query(:to => '')
|
323
|
+
|
324
|
+
@queris_ids = [[query, @dom_id], [query2, @dom_id2] ]
|
325
|
+
end
|
326
|
+
|
327
|
+
|
328
|
+
def render_standard_filter_internal(params) #:nodoc:
|
329
|
+
'<div class="date-filter">' +
|
330
|
+
select_datetime(params[:fr], {:include_blank => true, :prefix => @name1}) + '<br/>' +
|
331
|
+
select_datetime(params[:to], {:include_blank => true, :prefix => @name2}) +
|
332
|
+
'</div>'
|
333
|
+
end
|
334
|
+
|
335
|
+
def render_calendar_filter_internal(params) #:nodoc:
|
336
|
+
html1, js1 = datetime_calendar_prototype(params[:fr], @view,
|
337
|
+
{:include_blank => true, :prefix => @name1, :id => @dom_id, :fire_event => auto_reload},
|
338
|
+
:title => WiceGridNlMessageProvider.get_message(:DATE_SELECTOR_TOOLTIP_FROM))
|
339
|
+
html2, js2 = datetime_calendar_prototype(params[:to], @view,
|
340
|
+
{:include_blank => true, :prefix => @name2, :id => @dom_id2, :fire_event => auto_reload},
|
341
|
+
:title => WiceGridNlMessageProvider.get_message(:DATE_SELECTOR_TOOLTIP_TO))
|
342
|
+
[%!<div class="date-filter">#{html1}<br/>#{html2}</div>!, js1 + js2]
|
343
|
+
end
|
344
|
+
|
345
|
+
|
346
|
+
def render_filter_internal(params) #:nodoc:
|
347
|
+
# falling back to the Rails helpers for Datetime
|
348
|
+
if helper_style == :standard || Defaults::JS_FRAMEWORK == :jquery
|
349
|
+
prepare_for_standard_filter
|
350
|
+
render_standard_filter_internal(params)
|
351
|
+
else
|
352
|
+
prepare_for_calendar_filter
|
353
|
+
render_calendar_filter_internal(params)
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
def yield_declaration_of_column_filter #:nodoc:
|
358
|
+
%$templates : [ #{@queris_ids.collect{|tuple| "'" + tuple[0] + "'"}.join(', ')} ],
|
359
|
+
ids : [ #{@queris_ids.collect{|tuple| "'" + tuple[1] + "'"}.join(', ')} ] $
|
360
|
+
end
|
361
|
+
|
362
|
+
def has_auto_reloading_calendar? #:nodoc:
|
363
|
+
auto_reload && helper_style == :calendar
|
364
|
+
end
|
365
|
+
|
366
|
+
end
|
367
|
+
|
368
|
+
class ViewColumnDate < ViewColumnDatetime #:nodoc:
|
369
|
+
@@handled_type[Date] = self
|
370
|
+
|
371
|
+
@@datetime_chunk_names = %w(year month day)
|
372
|
+
|
373
|
+
def render_standard_filter_internal(params) #:nodoc:
|
374
|
+
'<div class="date-filter">' +
|
375
|
+
select_date(params[:fr], {:include_blank => true, :prefix => @name1, :id => @dom_id}) + '<br/>' +
|
376
|
+
select_date(params[:to], {:include_blank => true, :prefix => @name2, :id => @dom_id2}) +
|
377
|
+
'</div>'
|
378
|
+
end
|
379
|
+
|
380
|
+
def render_calendar_filter_internal(params) #:nodoc:
|
381
|
+
|
382
|
+
calendar_helper_method = if Wice::Defaults::JS_FRAMEWORK == :prototype
|
383
|
+
:date_calendar_prototype
|
384
|
+
else
|
385
|
+
:date_calendar_jquery
|
386
|
+
end
|
387
|
+
|
388
|
+
html1, js1 = send(calendar_helper_method, params[:fr], @view,
|
389
|
+
{:include_blank => true, :prefix => @name1, :fire_event => auto_reload},
|
390
|
+
:title => WiceGridNlMessageProvider.get_message(:DATE_SELECTOR_TOOLTIP_FROM))
|
391
|
+
html2, js2 = send(calendar_helper_method, params[:to], @view,
|
392
|
+
{:include_blank => true, :prefix => @name2, :fire_event => auto_reload},
|
393
|
+
:title => WiceGridNlMessageProvider.get_message(:DATE_SELECTOR_TOOLTIP_TO))
|
394
|
+
|
395
|
+
[%!<div class="date-filter">#{html1}<br/>#{html2}</div>!, js1 + js2]
|
396
|
+
end
|
397
|
+
|
398
|
+
def render_filter_internal(params) #:nodoc:
|
399
|
+
|
400
|
+
if helper_style == :standard
|
401
|
+
prepare_for_standard_filter
|
402
|
+
render_standard_filter_internal(params)
|
403
|
+
else
|
404
|
+
prepare_for_calendar_filter
|
405
|
+
render_calendar_filter_internal(params)
|
406
|
+
end
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
class ViewColumnString < ViewColumn #:nodoc:
|
411
|
+
@@handled_type[String] = self
|
412
|
+
# @@handled_type[:text] = self
|
413
|
+
|
414
|
+
attr_accessor :negation, :auto_reloading_input_with_negation_checkbox
|
415
|
+
|
416
|
+
def render_filter_internal(params) #:nodoc:
|
417
|
+
@contains_a_text_input = true
|
418
|
+
css_class = auto_reload ? 'auto_reload' : nil
|
419
|
+
|
420
|
+
if negation
|
421
|
+
self.auto_reloading_input_with_negation_checkbox = true if auto_reload
|
422
|
+
|
423
|
+
@query, _, parameter_name, @dom_id = form_parameter_name_id_and_query(:v => '')
|
424
|
+
@query2, _, parameter_name2, @dom_id2 = form_parameter_name_id_and_query(:n => '')
|
425
|
+
|
426
|
+
'<div class="text_filter_container">' +
|
427
|
+
text_field_tag(parameter_name, params[:v], :size => 8, :id => @dom_id, :class => css_class) +
|
428
|
+
if defined?(::Wice::Defaults::NEGATION_CHECKBOX_LABEL) && ! ::Wice::Defaults::NEGATION_CHECKBOX_LABEL.blank?
|
429
|
+
::Wice::Defaults::NEGATION_CHECKBOX_LABEL
|
430
|
+
else
|
431
|
+
''
|
432
|
+
end +
|
433
|
+
check_box_tag(parameter_name2, '1', (params[:n] == '1'),
|
434
|
+
:id => @dom_id2,
|
435
|
+
:title => WiceGridNlMessageProvider.get_message(:NEGATION_CHECKBOX_TITLE),
|
436
|
+
:class => 'negation_checkbox') +
|
437
|
+
'</div>'
|
438
|
+
else
|
439
|
+
@query, _, parameter_name, @dom_id = form_parameter_name_id_and_query('')
|
440
|
+
text_field_tag(parameter_name, (params.blank? ? '' : params), :size => 8, :id => @dom_id, :class => css_class)
|
441
|
+
end
|
442
|
+
end
|
443
|
+
|
444
|
+
def yield_declaration_of_column_filter #:nodoc:
|
445
|
+
if negation
|
446
|
+
%$templates : ['#{@query}', '#{@query2}'],
|
447
|
+
ids : ['#{@dom_id}', '#{@dom_id2}'] $
|
448
|
+
else
|
449
|
+
%$templates : ['#{@query}'],
|
450
|
+
ids : ['#{@dom_id}'] $
|
451
|
+
end
|
452
|
+
end
|
453
|
+
|
454
|
+
def has_auto_reloading_input? #:nodoc:
|
455
|
+
auto_reload
|
456
|
+
end
|
457
|
+
|
458
|
+
def auto_reloading_input_with_negation_checkbox? #:nodoc:
|
459
|
+
self.auto_reloading_input_with_negation_checkbox
|
460
|
+
end
|
461
|
+
|
462
|
+
end
|
463
|
+
|
464
|
+
end
|