compass-jquery-plugin 0.3.0.beta.21 → 0.3.0.beta.22
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/README.textile +212 -211
- data/VERSION.yml +5 -5
- data/compass-jquery-plugin.gemspec +25 -2
- data/gem_tasks/jqtouch.rake +221 -201
- data/gem_tasks/jrails.rake +322 -311
- data/lib/compiler.jar +0 -0
- data/lib/jquery/flash_messages.rb +45 -45
- data/lib/jquery/gridify/grid.rb +147 -147
- data/lib/jquery/gridify/grid_column.rb +134 -134
- data/lib/jquery/gridify/grid_finder.rb +223 -211
- data/lib/jquery/gridify/grid_options.rb +279 -279
- data/lib/jquery/gridify/grid_view.rb +435 -436
- data/lib/jquery/gridify.rb +42 -42
- data/templates/dynatree/jquery.dynatree.min.js +1 -1
- data/templates/jqgrid/i18n/jqgrid/locale-bg.min.js +6 -15
- data/templates/jqgrid/i18n/jqgrid/locale-bg1251.min.js +6 -15
- data/templates/jqgrid/i18n/jqgrid/locale-cat.min.js +5 -6
- data/templates/jqgrid/i18n/jqgrid/locale-cn.min.js +5 -8
- data/templates/jqgrid/i18n/jqgrid/locale-cs.min.js +6 -8
- data/templates/jqgrid/i18n/jqgrid/locale-da.min.js +6 -6
- data/templates/jqgrid/i18n/jqgrid/locale-de.min.js +7 -7
- data/templates/jqgrid/i18n/jqgrid/locale-el.min.js +7 -13
- data/templates/jqgrid/i18n/jqgrid/locale-es.min.js +7 -7
- data/templates/jqgrid/i18n/jqgrid/locale-fa.min.js +6 -12
- data/templates/jqgrid/i18n/jqgrid/locale-fr.min.js +7 -7
- data/templates/jqgrid/i18n/jqgrid/locale-gl.min.js +7 -7
- data/templates/jqgrid/i18n/jqgrid/locale-he.min.js +6 -13
- data/templates/jqgrid/i18n/jqgrid/locale-hu.min.js +6 -8
- data/templates/jqgrid/i18n/jqgrid/locale-is.min.js +6 -7
- data/templates/jqgrid/i18n/jqgrid/locale-it.min.js +4 -4
- data/templates/jqgrid/i18n/jqgrid/locale-ja.min.js +5 -10
- data/templates/jqgrid/i18n/jqgrid/locale-no.min.js +6 -6
- data/templates/jqgrid/i18n/jqgrid/locale-pl.min.js +6 -7
- data/templates/jqgrid/i18n/jqgrid/locale-pt-br.min.js +6 -7
- data/templates/jqgrid/i18n/jqgrid/locale-pt.min.js +4 -5
- data/templates/jqgrid/i18n/jqgrid/locale-ro.min.js +7 -8
- data/templates/jqgrid/i18n/jqgrid/locale-ru.min.js +7 -16
- data/templates/jqgrid/i18n/jqgrid/locale-sk.min.js +6 -8
- data/templates/jqgrid/i18n/jqgrid/locale-sv.min.js +6 -7
- data/templates/jqgrid/i18n/jqgrid/locale-tr.min.js +6 -7
- data/templates/jqgrid/i18n/jqgrid/locale-ua.min.js +7 -16
- data/templates/jqgrid/jquery.jqGrid.js +11567 -11565
- data/templates/jqgrid/jquery.jqGrid.min.js +472 -472
- data/templates/jqical/jquery.jqical.js +5 -9
- data/templates/jqical/jquery.jqical.min.js +44 -44
- data/templates/jqical/jquery.ui/jqical.scss +1 -1
- data/templates/jqtouch/config/initializers/jqtouch.rb +5 -4
- data/templates/jqtouch/jqtouch/apple/activeButton.png +0 -0
- data/templates/jqtouch/jqtouch/default/backButton.png +0 -0
- data/templates/jqtouch/jqtouch/default/backButtonActive.png +0 -0
- data/templates/jqtouch/jqtouch/default/bigButton.png +0 -0
- data/templates/jqtouch/jqtouch/default/bigButtonActive.png +0 -0
- data/templates/jqtouch/jqtouch/default/button.png +0 -0
- data/templates/jqtouch/jqtouch/default/buttonActive.png +0 -0
- data/templates/jqtouch/jqtouch/default/chevron.png +0 -0
- data/templates/jqtouch/jqtouch/default/chevronActive.png +0 -0
- data/templates/jqtouch/jqtouch/default/chevronCircle.png +0 -0
- data/templates/jqtouch/jqtouch/default/chevronCircleActive.png +0 -0
- data/templates/jqtouch/jqtouch/default/loading.gif +0 -0
- data/templates/jqtouch/jqtouch/default/toggleSwitch.png +0 -0
- data/templates/jqtouch/jqtouch/default/toolbarBackground.png +0 -0
- data/templates/jqtouch/jqtouch/jqt/back_button_clicked.png +0 -0
- data/templates/jqtouch/jqtouch/jqt.apple.scss +24 -11
- data/templates/jqtouch/jqtouch/jqt.default.scss +537 -0
- data/templates/jqtouch/jqtouch/jqt.jqt.scss +20 -6
- data/templates/jqtouch/jqtouch/jqtouch.scss +173 -1
- data/templates/jqtouch/jqtouch/photo/btnBack.png +0 -0
- data/templates/jqtouch/jqtouch/photo/loading.gif +0 -0
- data/templates/jqtouch/jqtouch/photo/navNext.png +0 -0
- data/templates/jqtouch/jqtouch/photo/navPause.png +0 -0
- data/templates/jqtouch/jqtouch/photo/navPlay.png +0 -0
- data/templates/jqtouch/jqtouch/photo/navPrev.png +0 -0
- data/templates/jqtouch/jqtouch/photo/toolbar.png +0 -0
- data/templates/jqtouch/jquery.jqtouch.js +8219 -632
- data/templates/jqtouch/jquery.jqtouch.min.js +60 -1
- data/templates/jqtouch/manifest.rb +21 -0
- data/templates/jrails/config/initializers/jrails.rb +1 -0
- data/templates/jrails/haml.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-ar.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-az.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-bg.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-bs.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-cs.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-da.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-de.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-el.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-eo.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-et.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-fa.min.js +2 -3
- data/templates/jrails/i18n/jquery.ui/datepicker-fo.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-fr-CH.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-fr.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-he.min.js +2 -3
- data/templates/jrails/i18n/jquery.ui/datepicker-hr.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-hu.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-hy.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-ja.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-ko.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-kz.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-lt.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-lv.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-nl.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-no.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-pl.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-ro.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-ru.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-sk.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-sq.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-sr-SR.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-sr.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-sv.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-ta.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-th.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-tr.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-uk.min.js +2 -4
- data/templates/jrails/i18n/jquery.ui/datepicker-vi.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-zh-CN.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-zh-HK.min.js +2 -2
- data/templates/jrails/i18n/jquery.ui/datepicker-zh-TW.min.js +2 -2
- data/templates/jrails/jquery-1.4.2.min.js +156 -156
- data/templates/jrails/jquery-ui-1.8.5.js +23753 -23341
- data/templates/jrails/jquery-ui-1.8.5.min.js +823 -808
- data/templates/jrails/jquery.contextMenu.min.js +1 -1
- data/templates/jrails/jquery.sparkline.js +1050 -0
- data/templates/jrails/jquery.sparkline.min.js +31 -0
- data/templates/jrails/jquery.ui/_theme.scss +1699 -1634
- data/templates/jrails/manifest.rb +13 -11
- data/templates/jstree/jquery.jstree.min.js +10 -10
- data/templates/ribbon/jquery.ribbon.min.js +6 -6
- metadata +27 -4
|
@@ -1,211 +1,223 @@
|
|
|
1
|
-
module Gridify
|
|
2
|
-
class Grid
|
|
3
|
-
|
|
4
|
-
attr_accessor :search_rules, # current search/filter rules, as hash
|
|
5
|
-
:search_rules_op # :and, :or
|
|
6
|
-
|
|
7
|
-
# finds records based on request params
|
|
8
|
-
# e.g. params from jqGrid
|
|
9
|
-
# :_search do search (true/false) ["false"]
|
|
10
|
-
# :sidx sort index (column to search on) [""]
|
|
11
|
-
# :sord sort direction (desc/asc) ["asc"]
|
|
12
|
-
# :nd ?
|
|
13
|
-
# :rows number of items to get ["20"]
|
|
14
|
-
# :page page number (starts at 1) ["1"]
|
|
15
|
-
|
|
16
|
-
def update_from_params( params )
|
|
17
|
-
params.symbolize_keys!
|
|
18
|
-
params_to_rules params
|
|
19
|
-
self.data_type = params[:datatype] if params[:datatype]
|
|
20
|
-
self.sort_by = params[:sidx] if params[:sidx]
|
|
21
|
-
self.sort_order = params[:sord] if params[:sord]
|
|
22
|
-
self.current_page = params[:page].to_i if params[:page]
|
|
23
|
-
self.rows_per_page = params[:rows].to_i if params[:rows]
|
|
24
|
-
self.total_rows = params[:total_rows].to_i if params[:total_rows]
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# return find args (scope) for current settings
|
|
28
|
-
def current_scope
|
|
29
|
-
#debugger
|
|
30
|
-
find_args = {}
|
|
31
|
-
find_args[:include] = colInclude if colInclude
|
|
32
|
-
if sort_by.present? && col = columns_hash[sort_by]
|
|
33
|
-
if
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
find_args =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
klass = resource.classify.constantize
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
#
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
xml.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
ActiveRecord::Base.include_root_in_json =
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
'
|
|
140
|
-
'
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
'
|
|
146
|
-
'
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
'
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
#
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
# #
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
#
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
1
|
+
module Gridify
|
|
2
|
+
class Grid
|
|
3
|
+
|
|
4
|
+
attr_accessor :search_rules, # current search/filter rules, as hash
|
|
5
|
+
:search_rules_op # :and, :or
|
|
6
|
+
|
|
7
|
+
# finds records based on request params
|
|
8
|
+
# e.g. params from jqGrid
|
|
9
|
+
# :_search do search (true/false) ["false"]
|
|
10
|
+
# :sidx sort index (column to search on) [""]
|
|
11
|
+
# :sord sort direction (desc/asc) ["asc"]
|
|
12
|
+
# :nd ?
|
|
13
|
+
# :rows number of items to get ["20"]
|
|
14
|
+
# :page page number (starts at 1) ["1"]
|
|
15
|
+
|
|
16
|
+
def update_from_params( params )
|
|
17
|
+
params.symbolize_keys!
|
|
18
|
+
params_to_rules params
|
|
19
|
+
self.data_type = params[:datatype] if params[:datatype]
|
|
20
|
+
self.sort_by = params[:sidx] if params[:sidx]
|
|
21
|
+
self.sort_order = params[:sord] if params[:sord]
|
|
22
|
+
self.current_page = params[:page].to_i if params[:page]
|
|
23
|
+
self.rows_per_page = params[:rows].to_i if params[:rows]
|
|
24
|
+
self.total_rows = params[:total_rows].to_i if params[:total_rows]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# return find args (scope) for current settings
|
|
28
|
+
def current_scope
|
|
29
|
+
#debugger
|
|
30
|
+
find_args = {}
|
|
31
|
+
find_args[:include] = colInclude if colInclude
|
|
32
|
+
if sort_by.present? && col = columns_hash[sort_by]
|
|
33
|
+
if (sort_by.include? ".")
|
|
34
|
+
# Workaround for :include and nested attributes
|
|
35
|
+
field = sort_by.split('.', 2)
|
|
36
|
+
if field.length == 2
|
|
37
|
+
self.sort_by = field[0].pluralize + "." + field[1]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
if case_sensitive || !([:string, :text].include?(col.value_type))
|
|
41
|
+
find_args[:order] = "#{sort_by} #{sort_order}"
|
|
42
|
+
else
|
|
43
|
+
find_args[:order] = "upper(#{sort_by}) #{sort_order}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
if total_rows.present? && total_rows > 0
|
|
47
|
+
find_args[:limit] = total_rows
|
|
48
|
+
offset = (current_page.to_i-1) * rows_per_page if current_page.present?
|
|
49
|
+
find_args[:offset] = offset if offset && offset > 0
|
|
50
|
+
elsif rows_per_page.present? && rows_per_page > 0
|
|
51
|
+
find_args[:limit] = rows_per_page
|
|
52
|
+
offset = (current_page.to_i-1) * rows_per_page if current_page.present?
|
|
53
|
+
find_args[:offset] = offset if offset && offset > 0
|
|
54
|
+
end
|
|
55
|
+
cond = rules_to_conditions
|
|
56
|
+
find_args[:conditions] = cond unless cond.blank?
|
|
57
|
+
find_args
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def find( params )
|
|
61
|
+
#debugger
|
|
62
|
+
update_from_params params
|
|
63
|
+
klass = resource.classify.constantize
|
|
64
|
+
records = klass.send( finder, :all, current_scope )
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def encode_records( records, userdata=nil, total_count=nil )
|
|
68
|
+
#debugger
|
|
69
|
+
klass = resource.classify.constantize
|
|
70
|
+
total_count ||= klass.count
|
|
71
|
+
total_pages = total_count / rows_per_page + 1
|
|
72
|
+
#TODO: :only => [attributes], :methods => [virtual attributes]
|
|
73
|
+
case data_type
|
|
74
|
+
when :xml
|
|
75
|
+
if colInclude
|
|
76
|
+
xml = records.to_xml( :include => colInclude, :skip_types => true, :dasherize => false ) do |xml|
|
|
77
|
+
if rows_per_page > 0
|
|
78
|
+
xml.page current_page
|
|
79
|
+
xml.total total_pages
|
|
80
|
+
xml.records total_count
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
else
|
|
84
|
+
xml = records.to_xml( :skip_types => true, :dasherize => false ) do |xml|
|
|
85
|
+
if rows_per_page > 0
|
|
86
|
+
xml.page current_page
|
|
87
|
+
xml.total total_pages
|
|
88
|
+
xml.records total_count
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
when :json
|
|
93
|
+
#debugger
|
|
94
|
+
data = { resource => records }
|
|
95
|
+
if rows_per_page > 0
|
|
96
|
+
data.merge!(
|
|
97
|
+
:page => current_page,
|
|
98
|
+
:total => total_pages,
|
|
99
|
+
:records => total_count
|
|
100
|
+
)
|
|
101
|
+
end
|
|
102
|
+
data.merge!( :userdata => userdata ) if userdata
|
|
103
|
+
save = ActiveRecord::Base.include_root_in_json
|
|
104
|
+
ActiveRecord::Base.include_root_in_json = false
|
|
105
|
+
if colInclude
|
|
106
|
+
json = data.to_json(:include => colInclude)
|
|
107
|
+
else
|
|
108
|
+
json = data.to_json
|
|
109
|
+
end
|
|
110
|
+
ActiveRecord::Base.include_root_in_json = save
|
|
111
|
+
json
|
|
112
|
+
#others...
|
|
113
|
+
else #nop ?
|
|
114
|
+
records.to_s
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def find_and_encode( params )
|
|
119
|
+
encode_records( find( params ) )
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# grid doesnt nest attributes inside the resource
|
|
123
|
+
# could change this behavior in jqGrid, see grid.postext.js ?
|
|
124
|
+
# http://www.trirand.com/jqgridwiki/doku.php?id=wiki:post_data_module
|
|
125
|
+
#
|
|
126
|
+
def member_params( params )
|
|
127
|
+
params.inject({}) {|h, (name, value)| h[name] = value if columns_hash[name]; h }
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
protected
|
|
131
|
+
|
|
132
|
+
OPS = { 'eq' => '=', 'lt' => '<', 'le' => '<=', 'gt' => '>', 'ge' => '>=', 'ne' => '!=' }
|
|
133
|
+
#['eq','ne','lt','le','gt','ge',
|
|
134
|
+
# 'bw','bn','in','ni','ew','en','cn','nc']
|
|
135
|
+
#['equal','not equal', 'less', 'less or equal','greater','greater or equal',
|
|
136
|
+
# 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain']
|
|
137
|
+
|
|
138
|
+
OPS_PATTERN = {
|
|
139
|
+
'bw' => '?%',
|
|
140
|
+
'bn' => '?%',
|
|
141
|
+
# 'in'
|
|
142
|
+
# 'ni'
|
|
143
|
+
'ew' => '%?',
|
|
144
|
+
'en' => '%?',
|
|
145
|
+
'cn' => '%?%',
|
|
146
|
+
'nc' => '%?%',
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
STRING_OPS = {
|
|
150
|
+
'bw' => 'LIKE',
|
|
151
|
+
'bn' => 'NOT LIKE',
|
|
152
|
+
'ew' => 'LIKE',
|
|
153
|
+
'en' => 'NOT LIKE',
|
|
154
|
+
'cn' => 'LIKE',
|
|
155
|
+
'nc' => 'NOT LIKE',
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
# params[:filters] => {"groupOp"=>"AND",
|
|
159
|
+
# "rules"=>[{"data"=>"b", "op"=>"ge", "field"=>"title"}, {"data"=>"f", "op"=>"le", "field"=>"title"}] }
|
|
160
|
+
def params_to_rules( params )
|
|
161
|
+
#debugger
|
|
162
|
+
if params[:_search]=='true' || params[:_search]==true
|
|
163
|
+
if params[:filters]
|
|
164
|
+
# advanced search
|
|
165
|
+
filters = ActiveSupport::JSON.decode( params[:filters] )
|
|
166
|
+
self.search_rules = filters['rules']
|
|
167
|
+
self.search_rules_op = filters['groupOp']
|
|
168
|
+
elsif params[:searchField]
|
|
169
|
+
# simple search
|
|
170
|
+
self.search_rules = [{ "field" => params[:searchField], "op" => params[:searchOper], "data" => params[:searchString]}]
|
|
171
|
+
else
|
|
172
|
+
# toolbar search
|
|
173
|
+
self.search_rules = []
|
|
174
|
+
self.search_rules_op = :and
|
|
175
|
+
colModel.each do |col|
|
|
176
|
+
name = col.name
|
|
177
|
+
data = params[name.to_sym]
|
|
178
|
+
self.search_rules << { "field" => name, "op" => "cn", "data" => data } if data
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
search_rules
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def rules_to_conditions
|
|
186
|
+
# note: ignoring case_sensitive as an option, ActiveRecord find is insensitive by default (have to model the db to let it be case sensitive?)
|
|
187
|
+
return nil if search_rules.blank?
|
|
188
|
+
cond = nil
|
|
189
|
+
expr = ''
|
|
190
|
+
vals = []
|
|
191
|
+
search_rules.each do |rule|
|
|
192
|
+
|
|
193
|
+
# Workaround for :include and nested attributes
|
|
194
|
+
field = rule['field'].split('.', 2)
|
|
195
|
+
if field.length == 2
|
|
196
|
+
rule['field'] = field[0].pluralize + "." + field[1]
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
expr << " #{search_rules_op} " unless expr.blank?
|
|
200
|
+
if op = OPS[rule['op']]
|
|
201
|
+
expr << "#{rule['field']} #{op} ?"
|
|
202
|
+
vals << rule['data']
|
|
203
|
+
elsif op = STRING_OPS[rule['op']]
|
|
204
|
+
expr << "#{rule['field']} #{op} ?"
|
|
205
|
+
vals << OPS_PATTERN[rule['op']].gsub('?', rule['data'])
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
cond = [ expr ] + vals
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# # If you need to display error messages
|
|
214
|
+
# err = ""
|
|
215
|
+
# if user
|
|
216
|
+
# user.errors.entries.each do |error|
|
|
217
|
+
# err << "<strong>#{error[0]}</strong> : #{error[1]}<br/>"
|
|
218
|
+
# end
|
|
219
|
+
# end
|
|
220
|
+
#
|
|
221
|
+
# render :text => "#{err}"
|
|
222
|
+
|
|
223
|
+
# { :add => true, :edit => true, :inline_edit => false, :delete => true, :edit_url => "/users/post_data", :error_handler => "after_submit" }
|