compass-jquery-plugin 0.3.0.beta.21 → 0.3.0.beta.22
Sign up to get free protection for your applications and to get access to all the features.
- 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
|