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,436 +1,435 @@
|
|
|
1
|
-
# reference: http://github.com/ahe/2dc_jqgrid
|
|
2
|
-
|
|
3
|
-
module Gridify
|
|
4
|
-
class Grid
|
|
5
|
-
|
|
6
|
-
# ----------------------
|
|
7
|
-
# generate the grid javascript for a view
|
|
8
|
-
# options:
|
|
9
|
-
# :script => true generates <script> tag (true)
|
|
10
|
-
# :ready => true generates jquery ready function (true)
|
|
11
|
-
def to_javascript( options={} )
|
|
12
|
-
options = { :script => true, :ready => true }.merge(options)
|
|
13
|
-
|
|
14
|
-
s = ''
|
|
15
|
-
if options[:script]
|
|
16
|
-
s << %Q^
|
|
17
|
-
<script type="text/javascript">
|
|
18
|
-
var lastsel_#{dom_id};
|
|
19
|
-
^
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
s << js_helpers
|
|
23
|
-
|
|
24
|
-
if options[:ready]
|
|
25
|
-
s << %Q^
|
|
26
|
-
jQuery(document).ready(function(){
|
|
27
|
-
^
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
s << jqgrid_javascript(options)
|
|
31
|
-
|
|
32
|
-
if options[:ready]
|
|
33
|
-
s << %Q^
|
|
34
|
-
});
|
|
35
|
-
^
|
|
36
|
-
end
|
|
37
|
-
if options[:script]
|
|
38
|
-
s << %Q^
|
|
39
|
-
</script>
|
|
40
|
-
^
|
|
41
|
-
end
|
|
42
|
-
s
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def to_json
|
|
46
|
-
jqgrid_properties.to_json_with_js
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# alias :to_s, :to_javascript
|
|
50
|
-
def to_s( options={} )
|
|
51
|
-
to_javascript( options )
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# ------------------
|
|
55
|
-
protected
|
|
56
|
-
# ------------------
|
|
57
|
-
|
|
58
|
-
# //{ url: '/notes/{id}', mtype: 'PUT', reloadAfterSubmit: false, closeAfterEdit: true }, // edit settings
|
|
59
|
-
# //{ url: '/notes', mtype: 'POST', reloadAfterSubmit: false, closeAfterEdit: true }, // add settings
|
|
60
|
-
# //{ url: '/notes/{id}', mtype: 'DELETE', reloadAfterSubmit: false }, // delete settings
|
|
61
|
-
|
|
62
|
-
# get the button options
|
|
63
|
-
def edit_button_options
|
|
64
|
-
# 'url' => '/notes/{id}', 'mtype' => 'PUT'
|
|
65
|
-
# {afterSubmit:function(r,data){return #{options[:error_handler_return_value]}(r,data,'edit');}},
|
|
66
|
-
|
|
67
|
-
# note, closeAfterEdit will not close if response returns a non-empty string (even if "success" message)
|
|
68
|
-
merge_options_defaults( edit_button || inline_edit,
|
|
69
|
-
'reloadAfterSubmit' => true,
|
|
70
|
-
'closeAfterEdit' => true,
|
|
71
|
-
'afterSubmit' => "javascript: function(r,data){return #{error_handler_return_value}(r,data,'edit');}"
|
|
72
|
-
)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def add_button_options
|
|
76
|
-
# 'url' => '/notes', 'mtype' => 'POST'
|
|
77
|
-
merge_options_defaults( add_button,
|
|
78
|
-
'reloadAfterSubmit' => true,
|
|
79
|
-
'closeAfterAdd' => true,
|
|
80
|
-
'afterSubmit' => "javascript: function(r,data){return #{error_handler_return_value}(r,data,'add');}"
|
|
81
|
-
)
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def delete_button_options
|
|
85
|
-
# 'url' => '/notes/{id}', 'mtype' => 'DELETE'
|
|
86
|
-
merge_options_defaults( delete_button,
|
|
87
|
-
'reloadAfterSubmit' => true,
|
|
88
|
-
'afterSubmit' => "javascript: function(r,data){return #{error_handler_return_value}(r,data,'delete');}"
|
|
89
|
-
)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def search_button_options
|
|
93
|
-
if search_advanced
|
|
94
|
-
merge_options_defaults( search_advanced, 'multipleSearch' => true)
|
|
95
|
-
else
|
|
96
|
-
merge_options_defaults( search_button)
|
|
97
|
-
end
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
def view_button_options
|
|
101
|
-
merge_options_defaults( view_button)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# generate the jqGrid initial values in json
|
|
105
|
-
# maps our attributes to jqGrid options; omit values when same as jqGrid defaults
|
|
106
|
-
def jqgrid_properties
|
|
107
|
-
vals = {}
|
|
108
|
-
vals[:ajaxGridOptions] = ajax_grid_options if ajax_grid_options
|
|
109
|
-
|
|
110
|
-
# data and request options
|
|
111
|
-
vals[:url] = url if url
|
|
112
|
-
vals[:editurl] = url if editable
|
|
113
|
-
vals[:restful] = true if restful
|
|
114
|
-
vals[:inline_edit] = inline_edit if inline_edit.present?
|
|
115
|
-
vals[:postData] = { :grid => name, :datatype => data_type } #identify which grid making the request
|
|
116
|
-
vals[:colNames] = colNames if colNames.present?
|
|
117
|
-
vals[:colModel] = column_model if colModel.present?
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
vals[:
|
|
132
|
-
vals[:
|
|
133
|
-
vals[:
|
|
134
|
-
vals[:
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
vals[:
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
#vals[:
|
|
144
|
-
|
|
145
|
-
vals[:
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
vals[:
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
vals[:
|
|
156
|
-
|
|
157
|
-
vals[:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
vals[:
|
|
166
|
-
vals[:
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
vals[:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
vals[:
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
vals[:
|
|
178
|
-
vals[:
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
vals[:
|
|
182
|
-
vals[:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
vals[:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
vals[:
|
|
192
|
-
vals[:
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
vals[:
|
|
199
|
-
vals[:
|
|
200
|
-
vals[:
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
vals[:
|
|
208
|
-
vals[:
|
|
209
|
-
vals[:
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
#
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
^
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
#
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
'
|
|
264
|
-
'
|
|
265
|
-
'
|
|
266
|
-
'
|
|
267
|
-
'
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
#{
|
|
274
|
-
#{
|
|
275
|
-
#{
|
|
276
|
-
#{
|
|
277
|
-
#{
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
this.jqGrid('
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
'
|
|
306
|
-
'
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
s
|
|
317
|
-
jQuery("##{dom_id}").jqGrid('navButtonAdd',"##{pager}", { caption:"
|
|
318
|
-
jQuery("##{dom_id}").jqGrid('
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
#
|
|
331
|
-
#
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
#
|
|
335
|
-
#
|
|
336
|
-
#
|
|
337
|
-
#
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
#
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
#
|
|
351
|
-
#
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
#
|
|
380
|
-
# $('#{error_container}').
|
|
381
|
-
#
|
|
382
|
-
# //
|
|
383
|
-
# //
|
|
384
|
-
#
|
|
385
|
-
#
|
|
386
|
-
#
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
include
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
value =
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
end
|
|
1
|
+
# reference: http://github.com/ahe/2dc_jqgrid
|
|
2
|
+
|
|
3
|
+
module Gridify
|
|
4
|
+
class Grid
|
|
5
|
+
|
|
6
|
+
# ----------------------
|
|
7
|
+
# generate the grid javascript for a view
|
|
8
|
+
# options:
|
|
9
|
+
# :script => true generates <script> tag (true)
|
|
10
|
+
# :ready => true generates jquery ready function (true)
|
|
11
|
+
def to_javascript( options={} )
|
|
12
|
+
options = { :script => true, :ready => true }.merge(options)
|
|
13
|
+
|
|
14
|
+
s = ''
|
|
15
|
+
if options[:script]
|
|
16
|
+
s << %Q^
|
|
17
|
+
<script type="text/javascript">
|
|
18
|
+
var lastsel_#{dom_id};
|
|
19
|
+
^
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
s << js_helpers
|
|
23
|
+
|
|
24
|
+
if options[:ready]
|
|
25
|
+
s << %Q^
|
|
26
|
+
jQuery(document).ready(function(){
|
|
27
|
+
^
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
s << jqgrid_javascript(options)
|
|
31
|
+
|
|
32
|
+
if options[:ready]
|
|
33
|
+
s << %Q^
|
|
34
|
+
});
|
|
35
|
+
^
|
|
36
|
+
end
|
|
37
|
+
if options[:script]
|
|
38
|
+
s << %Q^
|
|
39
|
+
</script>
|
|
40
|
+
^
|
|
41
|
+
end
|
|
42
|
+
s
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def to_json
|
|
46
|
+
jqgrid_properties.to_json_with_js
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# alias :to_s, :to_javascript
|
|
50
|
+
def to_s( options={} )
|
|
51
|
+
to_javascript( options )
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# ------------------
|
|
55
|
+
protected
|
|
56
|
+
# ------------------
|
|
57
|
+
|
|
58
|
+
# //{ url: '/notes/{id}', mtype: 'PUT', reloadAfterSubmit: false, closeAfterEdit: true }, // edit settings
|
|
59
|
+
# //{ url: '/notes', mtype: 'POST', reloadAfterSubmit: false, closeAfterEdit: true }, // add settings
|
|
60
|
+
# //{ url: '/notes/{id}', mtype: 'DELETE', reloadAfterSubmit: false }, // delete settings
|
|
61
|
+
|
|
62
|
+
# get the button options
|
|
63
|
+
def edit_button_options
|
|
64
|
+
# 'url' => '/notes/{id}', 'mtype' => 'PUT'
|
|
65
|
+
# {afterSubmit:function(r,data){return #{options[:error_handler_return_value]}(r,data,'edit');}},
|
|
66
|
+
|
|
67
|
+
# note, closeAfterEdit will not close if response returns a non-empty string (even if "success" message)
|
|
68
|
+
merge_options_defaults( edit_button || inline_edit,
|
|
69
|
+
'reloadAfterSubmit' => true,
|
|
70
|
+
'closeAfterEdit' => true,
|
|
71
|
+
'afterSubmit' => "javascript: function(r,data){return #{error_handler_return_value}(r,data,'edit');}"
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def add_button_options
|
|
76
|
+
# 'url' => '/notes', 'mtype' => 'POST'
|
|
77
|
+
merge_options_defaults( add_button,
|
|
78
|
+
'reloadAfterSubmit' => true,
|
|
79
|
+
'closeAfterAdd' => true,
|
|
80
|
+
'afterSubmit' => "javascript: function(r,data){return #{error_handler_return_value}(r,data,'add');}"
|
|
81
|
+
)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def delete_button_options
|
|
85
|
+
# 'url' => '/notes/{id}', 'mtype' => 'DELETE'
|
|
86
|
+
merge_options_defaults( delete_button,
|
|
87
|
+
'reloadAfterSubmit' => true,
|
|
88
|
+
'afterSubmit' => "javascript: function(r,data){return #{error_handler_return_value}(r,data,'delete');}"
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def search_button_options
|
|
93
|
+
if search_advanced
|
|
94
|
+
merge_options_defaults( search_advanced, 'multipleSearch' => true)
|
|
95
|
+
else
|
|
96
|
+
merge_options_defaults( search_button)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def view_button_options
|
|
101
|
+
merge_options_defaults( view_button)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# generate the jqGrid initial values in json
|
|
105
|
+
# maps our attributes to jqGrid options; omit values when same as jqGrid defaults
|
|
106
|
+
def jqgrid_properties
|
|
107
|
+
vals = {}
|
|
108
|
+
vals[:ajaxGridOptions] = ajax_grid_options if ajax_grid_options
|
|
109
|
+
|
|
110
|
+
# data and request options
|
|
111
|
+
vals[:url] = url if url
|
|
112
|
+
vals[:editurl] = url if editable
|
|
113
|
+
vals[:restful] = true if restful
|
|
114
|
+
vals[:inline_edit] = inline_edit if inline_edit.present?
|
|
115
|
+
vals[:postData] = { :grid => name, :datatype => data_type } #identify which grid making the request
|
|
116
|
+
vals[:colNames] = colNames if colNames.present?
|
|
117
|
+
vals[:colModel] = column_model if colModel.present?
|
|
118
|
+
vals[:datatype] = data_type if data_type
|
|
119
|
+
if data_format.present?
|
|
120
|
+
case data_type
|
|
121
|
+
when :xml
|
|
122
|
+
vals[:xmlReader] = data_format
|
|
123
|
+
when :json
|
|
124
|
+
vals[:jsonReader] = data_format
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
vals[:loadonce] = load_once if load_once
|
|
129
|
+
|
|
130
|
+
vals[:sortname] = sort_by if sort_by
|
|
131
|
+
vals[:sortorder] = sort_order if sort_order && sort_by
|
|
132
|
+
vals[:rowNum] = rows_per_page if rows_per_page
|
|
133
|
+
vals[:rowTotal] = total_rows if total_rows
|
|
134
|
+
vals[:page] = current_page if current_page
|
|
135
|
+
|
|
136
|
+
# grid options
|
|
137
|
+
vals[:height] = height if height
|
|
138
|
+
vals[:gridview] = grid_view # faster views, NOTE theres cases when this needs to be disabled
|
|
139
|
+
|
|
140
|
+
case width_fit
|
|
141
|
+
when :fitted
|
|
142
|
+
#vals[:autowidth] = false #default
|
|
143
|
+
#vals[:shrinkToFit] = true #default
|
|
144
|
+
vals[:forceFit] = true
|
|
145
|
+
vals[:width] = width if width
|
|
146
|
+
|
|
147
|
+
when :scroll
|
|
148
|
+
#vals[:autowidth] = false #default
|
|
149
|
+
vals[:shrinkToFit] = false
|
|
150
|
+
#vals[:forceFit] = #ignored by jqGrid
|
|
151
|
+
vals[:width] = width if width
|
|
152
|
+
|
|
153
|
+
else #when :fluid
|
|
154
|
+
vals[:autowidth] = true
|
|
155
|
+
#vals[:shrinkToFit] = true #default
|
|
156
|
+
vals[:forceFit] = true
|
|
157
|
+
#vals[:width] = is ignored
|
|
158
|
+
vals[:resizeStop] = 'javascript: gridify_fluid_recalc_width'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
vals[:sortable] = true if arranger_type.include?(:sortable)
|
|
162
|
+
|
|
163
|
+
# header layer
|
|
164
|
+
vals[:caption] = title if title
|
|
165
|
+
vals[:hidegrid] = false unless collapsible
|
|
166
|
+
vals[:hiddengrid] = true if collapsed
|
|
167
|
+
|
|
168
|
+
# row formatting
|
|
169
|
+
vals[:altrows] = true if alt_rows
|
|
170
|
+
vals[:altclass] = alt_rows if alt_rows.is_a?(String)
|
|
171
|
+
|
|
172
|
+
vals[:rownumbers] = true if row_numbers
|
|
173
|
+
vals[:rownumWidth] = row_numbers if row_numbers.is_a?(Numeric)
|
|
174
|
+
|
|
175
|
+
if inline_edit
|
|
176
|
+
vals[:scrollrows] = true
|
|
177
|
+
vals[:multiselect] = true if multi_select
|
|
178
|
+
vals[:onSelectRow] = "javascript: function(id, status) { if(id && id!==lastsel_#{dom_id}) { jQuery('##{dom_id}').jqGrid('restoreRow', lastsel_#{dom_id}); jQuery('##{dom_id}').jqGrid('editRow', id, true, #{inline_edit_handler}, #{error_handler}); lastsel_#{dom_id}=id}}"
|
|
179
|
+
elsif select_rows #.present?
|
|
180
|
+
vals[:scrollrows] = true
|
|
181
|
+
vals[:onSelectRow] = select_rows
|
|
182
|
+
vals[:multiselect] = true if multi_select
|
|
183
|
+
else
|
|
184
|
+
vals[:hoverrows] = false
|
|
185
|
+
vals[:beforeSelectRow] = "javascript: function(){ false; }"
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# pager layer
|
|
189
|
+
if pager
|
|
190
|
+
vals[:pager] = "##{pager}"
|
|
191
|
+
vals[:viewrecords] = true # display total records in the query (eg "1 - 10 of 25")
|
|
192
|
+
vals[:rowList] = paging_choices
|
|
193
|
+
if paging_controls.is_a?(Hash)
|
|
194
|
+
# allow override of jqGrid pager options
|
|
195
|
+
vals.merge!(paging_controls)
|
|
196
|
+
elsif !paging_controls
|
|
197
|
+
vals[:rowList] = []
|
|
198
|
+
vals[:pgbuttons] = false
|
|
199
|
+
vals[:pginput] = false
|
|
200
|
+
vals[:recordtext] = "{2} records"
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
#subgrid
|
|
205
|
+
if sub_grid
|
|
206
|
+
vals[:subGrid] = sub_grid
|
|
207
|
+
vals[:subGridUrl] = sub_grid_url
|
|
208
|
+
vals[:subGridModel] = sub_grid_model
|
|
209
|
+
vals[:gridview] = false
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
#events
|
|
213
|
+
#vals[:serializeGridData] = serialize_grid_data if serialize_grid_data
|
|
214
|
+
|
|
215
|
+
vals[:loadonce] = load_once if load_once
|
|
216
|
+
|
|
217
|
+
# allow override of native jqGrid options
|
|
218
|
+
vals.merge(jqgrid_options)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# -----------------
|
|
224
|
+
def jqgrid_javascript( options={} )
|
|
225
|
+
s = ''
|
|
226
|
+
|
|
227
|
+
if table_to_grid
|
|
228
|
+
s << %Q^
|
|
229
|
+
tableToGrid("##{dom_id}", #{to_json});
|
|
230
|
+
^
|
|
231
|
+
s << %Q^
|
|
232
|
+
grid_#{dom_id} = jQuery("##{dom_id}")
|
|
233
|
+
^
|
|
234
|
+
else
|
|
235
|
+
s << %Q^
|
|
236
|
+
grid_#{dom_id} = jQuery("##{dom_id}").jqGrid(#{to_json})
|
|
237
|
+
^
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
s << ';'
|
|
241
|
+
|
|
242
|
+
# tag the grid as fluid so we can find it on resize events
|
|
243
|
+
if width_fit == :fluid
|
|
244
|
+
s << %Q^
|
|
245
|
+
jQuery("##{dom_id}").addClass("fluid");
|
|
246
|
+
^
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
# override tableToGrid colmodel options as needed (sortable)
|
|
250
|
+
#s << %Q^ .jqGrid('setColProp','Title',{sortable: false})^
|
|
251
|
+
|
|
252
|
+
# resize method
|
|
253
|
+
if resizable
|
|
254
|
+
s << %Q^
|
|
255
|
+
jQuery("##{dom_id}").jqGrid('gridResize', #{resizable.to_json});
|
|
256
|
+
^
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# pager buttons (navGrid)
|
|
260
|
+
if pager
|
|
261
|
+
nav_params = {
|
|
262
|
+
'edit' => edit_button.present?,
|
|
263
|
+
'add' => add_button.present?,
|
|
264
|
+
'del' => delete_button.present?,
|
|
265
|
+
'search' => search_button.present? || search_advanced.present?,
|
|
266
|
+
'view' => view_button.present?,
|
|
267
|
+
'refresh' => refresh_button.present?
|
|
268
|
+
}.merge(jqgrid_nav_options||{})
|
|
269
|
+
|
|
270
|
+
s << %Q^
|
|
271
|
+
jQuery("##{dom_id}").jqGrid('navGrid', '##{pager}',
|
|
272
|
+
#{nav_params.to_json},
|
|
273
|
+
#{edit_button_options.to_json_with_js},
|
|
274
|
+
#{add_button_options.to_json_with_js},
|
|
275
|
+
#{delete_button_options.to_json_with_js},
|
|
276
|
+
#{search_button_options.to_json_with_js},
|
|
277
|
+
#{view_button_options.to_json_with_js}
|
|
278
|
+
);
|
|
279
|
+
^
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
if arranger_type.include?(:hide_show)
|
|
283
|
+
s << %Q^
|
|
284
|
+
jQuery("##{dom_id}").jqGrid('navButtonAdd','##{pager}',{
|
|
285
|
+
caption: "Columns",
|
|
286
|
+
title: "Hide/Show Columns",
|
|
287
|
+
onClickButton : function (){ jQuery("##{dom_id}").jqGrid('setColumns',
|
|
288
|
+
#{arranger_options(:hide_show).to_json_with_js} );
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
^
|
|
292
|
+
end
|
|
293
|
+
if arranger_type.include?(:chooser)
|
|
294
|
+
# hackey way to build the string but gets it done
|
|
295
|
+
chooser_code = %Q^ function (){ jQuery('##{dom_id}').jqGrid('columnChooser', {
|
|
296
|
+
done : function (perm) {
|
|
297
|
+
if (perm) {
|
|
298
|
+
this.jqGrid('remapColumns', perm, true);
|
|
299
|
+
var gwdth = this.jqGrid('getGridParam','width');
|
|
300
|
+
this.jqGrid('setGridWidth',gwdth);
|
|
301
|
+
}
|
|
302
|
+
} })}^
|
|
303
|
+
chooser_opts = {
|
|
304
|
+
'caption' => 'Columns',
|
|
305
|
+
'title' => 'Arrange Columns',
|
|
306
|
+
'onClickButton' => 'chooser_code'
|
|
307
|
+
}.merge(arranger_options(:chooser))
|
|
308
|
+
s << %Q^
|
|
309
|
+
jQuery("##{dom_id}").jqGrid('navButtonAdd','##{pager}', #{chooser_opts.to_json.gsub('"chooser_code"', chooser_code)} );
|
|
310
|
+
^
|
|
311
|
+
end
|
|
312
|
+
|
|
313
|
+
if search_toolbar
|
|
314
|
+
# I wish we could put this in the header rather than the pager
|
|
315
|
+
s << %Q^
|
|
316
|
+
jQuery("##{dom_id}").jqGrid('navButtonAdd',"##{pager}", { caption:"Toggle", title:"Toggle Search Toolbar", buttonicon: 'ui-icon-pin-s', onClickButton: function(){ grid_#{dom_id}[0].toggleToolbar() } });
|
|
317
|
+
jQuery("##{dom_id}").jqGrid('navButtonAdd',"##{pager}", { caption:"Clear", title:"Clear Search", buttonicon: 'ui-icon-refresh', onClickButton: function(){ grid_#{dom_id}[0].clearToolbar() } });
|
|
318
|
+
jQuery("##{dom_id}").jqGrid('filterToolbar');
|
|
319
|
+
^
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
if sortable_rows
|
|
323
|
+
# I wish we could put this in the header rather than the pager
|
|
324
|
+
s << %Q^
|
|
325
|
+
jQuery("##{dom_id}").jqGrid('sortableRows');
|
|
326
|
+
^
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
# TODO: built in event handlers, eg
|
|
330
|
+
# loadError
|
|
331
|
+
# onSelectRow, onDblClickRow, onRightClickRow etc
|
|
332
|
+
|
|
333
|
+
#unless search_toolbar == :visible
|
|
334
|
+
# s << %Q^
|
|
335
|
+
# grid_#{dom_id}[0].toggleToolbar();
|
|
336
|
+
# ^
|
|
337
|
+
#end
|
|
338
|
+
|
|
339
|
+
# # keep page controls centered (jqgrid bug) [eg appears when :width_fit => :scroll]
|
|
340
|
+
# s << %Q^ $("##{pager}_left").css("width", "auto"); ^
|
|
341
|
+
|
|
342
|
+
s
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
# ------------------
|
|
346
|
+
def js_helpers
|
|
347
|
+
# just move this into appliaction.js?
|
|
348
|
+
|
|
349
|
+
# gridify_fluid_recalc_width: allow grid resize on window resize events
|
|
350
|
+
# recalculate width of grid based on parent container; handles multiple grids
|
|
351
|
+
# ref: http://www.trirand.com/blog/?page_id=393/feature-request/Resizable%20grid/
|
|
352
|
+
|
|
353
|
+
# afterSubmit: display error message in response
|
|
354
|
+
|
|
355
|
+
%Q^
|
|
356
|
+
function gridify_fluid_recalc_width(){
|
|
357
|
+
if (grids = jQuery('.fluid.ui-jqgrid-btable:visible')) {
|
|
358
|
+
grids.each(function(index) {
|
|
359
|
+
gridId = jQuery(this).attr('id');
|
|
360
|
+
gridParentWidth = jQuery('#gbox_' + gridId).parent().width();
|
|
361
|
+
jQuery('#' + gridId).jqGrid('setGridWidth', gridParentWidth);
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
jQuery(window).live('resize', gridify_fluid_recalc_width);
|
|
367
|
+
function gridify_action_error_handler(r, data, action){
|
|
368
|
+
if (r.responseText != '') {
|
|
369
|
+
return [false, r.responseText];
|
|
370
|
+
} else {
|
|
371
|
+
return true;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
^
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
# if(r.responseText != "") {
|
|
379
|
+
# $('#{error_container}').html(r.responseText);
|
|
380
|
+
# $('#{error_container}').slideDown();
|
|
381
|
+
# //window.setTimeout(function() { // Hide error div after 6 seconds
|
|
382
|
+
# // $('#{error_container}').slideUp();
|
|
383
|
+
# //}, 6000);
|
|
384
|
+
# return false;
|
|
385
|
+
# }
|
|
386
|
+
# return true;
|
|
387
|
+
|
|
388
|
+
# lets options be true or a hash, merges into defaults and returns a hash
|
|
389
|
+
def merge_options_defaults( options, defaults={} )
|
|
390
|
+
if options
|
|
391
|
+
defaults.merge( options==true ? {} : options)
|
|
392
|
+
else
|
|
393
|
+
{}
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
end
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
class Hash
|
|
401
|
+
# replace embedded '"javascript: foo"' with 'foo'
|
|
402
|
+
def to_json_with_js
|
|
403
|
+
self.to_json.gsub(/\"javascript: ([^"]*)\"/) {|string| string[1..-2].gsub('javascript:','') }
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
module JqgridJson
|
|
408
|
+
include ActionView::Helpers::JavaScriptHelper
|
|
409
|
+
include HandleAttributes
|
|
410
|
+
|
|
411
|
+
def to_subgrid_json(attributes)
|
|
412
|
+
json = %Q({)
|
|
413
|
+
if self.empty?
|
|
414
|
+
json << "}"
|
|
415
|
+
else
|
|
416
|
+
json <<= %Q("rows":[)
|
|
417
|
+
each do |elem|
|
|
418
|
+
elem.id ||= index(elem)
|
|
419
|
+
json << %Q({"id":"#{elem.id}","cell":[)
|
|
420
|
+
couples = elem.attributes.symbolize_keys
|
|
421
|
+
attributes.each do |atr|
|
|
422
|
+
value = get_atr_value(elem, atr, couples)
|
|
423
|
+
value = escape_javascript(value) if value and value.is_a? String
|
|
424
|
+
json << %Q("#{value}",)
|
|
425
|
+
end
|
|
426
|
+
json.chop! << "]},"
|
|
427
|
+
end
|
|
428
|
+
json.chop! << "]}"
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
class Array
|
|
434
|
+
include JqgridJson
|
|
435
|
+
end
|