rails_jq_grid 0.0.2 → 0.0.3.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +46 -6
- data/Rakefile +12 -1
- data/VERSION +1 -1
- data/app/helpers/rails_jq_grid/jq_grid_css_helper.rb +13 -2
- data/app/helpers/rails_jq_grid/jq_grid_helper.rb +10 -2
- data/app/helpers/rails_jq_grid/jq_grid_js_helper.rb +15 -2
- data/app/models/rails_jq_grid/jq_grid.rb +19 -57
- data/app/models/rails_jq_grid/jq_grid_column.rb +13 -12
- data/app/models/rails_jq_grid/jq_grid_method_missing.rb +26 -16
- data/app/models/rails_jq_grid/jq_grid_nav_grid.rb +133 -0
- data/app/models/rails_jq_grid/jq_grid_nav_grid_parameter.rb +31 -0
- data/app/models/rails_jq_grid/jq_grid_option_or_method.rb +17 -2
- data/lib/rails_jq_grid/acts_as_jq_grid_able.rb +29 -5
- data/lib/rails_jq_grid/engine.rb +11 -10
- data/lib/rails_jq_grid.rb +11 -2
- data/rails_jq_grid.gemspec +6 -4
- metadata +15 -11
- data/lib/rails_jq_grid/acts_as_jq_grid_data_source.rb +0 -34
data/README.rdoc
CHANGED
@@ -18,8 +18,8 @@ RAILS_ROOT\public\stylesheets\rails-jqgrid\themes
|
|
18
18
|
|
19
19
|
def action
|
20
20
|
...
|
21
|
-
|
22
|
-
@records =
|
21
|
+
relation = MyModel.order(order_by).limit(records_per_page).offset(current_offset)
|
22
|
+
@records = relation.all
|
23
23
|
|
24
24
|
respond_to do |format|
|
25
25
|
format.html { }
|
@@ -35,6 +35,14 @@ RAILS_ROOT\public\stylesheets\rails-jqgrid\themes
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
# or shorter
|
39
|
+
respond_to :html, :json
|
40
|
+
|
41
|
+
def action
|
42
|
+
...
|
43
|
+
respond_with(jqgrid_json(:data => @records))
|
44
|
+
end
|
45
|
+
|
38
46
|
=== View
|
39
47
|
<head>
|
40
48
|
...
|
@@ -59,6 +67,35 @@ RAILS_ROOT\public\stylesheets\rails-jqgrid\themes
|
|
59
67
|
|
60
68
|
a.on_select_row raw "function(){alert('test');}"
|
61
69
|
|
70
|
+
a.nav_grid do |n|
|
71
|
+
# Defaults
|
72
|
+
# n.add true
|
73
|
+
# n.del true
|
74
|
+
# n.edit true
|
75
|
+
# n.refresh true
|
76
|
+
# n.search true
|
77
|
+
|
78
|
+
n.prm_edit do |p|
|
79
|
+
p.close_after_edit false
|
80
|
+
end
|
81
|
+
|
82
|
+
n.prm_add do |p|
|
83
|
+
# set some options
|
84
|
+
end
|
85
|
+
|
86
|
+
n.prm_del do |p|
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
n.prm_search do |p|
|
91
|
+
end
|
92
|
+
|
93
|
+
n.prm_view do |p|
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
|
62
99
|
a.column "ean" do |c|
|
63
100
|
c.label "EAN"
|
64
101
|
c.autowidth true
|
@@ -98,7 +135,7 @@ RAILS_ROOT\public\stylesheets\rails-jqgrid\themes
|
|
98
135
|
|
99
136
|
end
|
100
137
|
|
101
|
-
a.jqgrid "
|
138
|
+
a.jqgrid "prices_detail", "prices_detail",
|
102
139
|
url_for(:controller => :prices ,
|
103
140
|
:action => "index"),
|
104
141
|
:caption_append_ids => true,
|
@@ -156,7 +193,9 @@ RAILS_ROOT\public\stylesheets\rails-jqgrid\themes
|
|
156
193
|
=== I18N
|
157
194
|
|
158
195
|
When a column doesn't set label then human_attribute_name is used for the fieldname
|
159
|
-
to guess the label.
|
196
|
+
to guess the label. This also applys to grid title.
|
197
|
+
|
198
|
+
To use I18N just setup your local and create a local file like:
|
160
199
|
|
161
200
|
-RAILS_ROOT
|
162
201
|
|-config
|
@@ -166,8 +205,9 @@ RAILS_ROOT\public\stylesheets\rails-jqgrid\themes
|
|
166
205
|
content for en.yml:
|
167
206
|
en:
|
168
207
|
attributes:
|
169
|
-
|
170
|
-
|
208
|
+
prices_detail: "Prices details table"
|
209
|
+
col1: "Label for col1"
|
210
|
+
col2: "Label for col2"
|
171
211
|
|
172
212
|
|
173
213
|
|
data/Rakefile
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
10
|
+
|
1
11
|
require 'rubygems'
|
2
12
|
require "rake"
|
3
13
|
require 'rake/testtask'
|
@@ -8,6 +18,7 @@ begin
|
|
8
18
|
Jeweler::Tasks.new do |gem|
|
9
19
|
gem.name = "rails_jq_grid"
|
10
20
|
gem.summary = "Add JqGrid to your Rails 3 app"
|
21
|
+
gem.description = "This gems is a Rails 3 Enginge that helps you to create jqGrid. It's bundled with jqGrid and some themes."
|
11
22
|
gem.email = "dieter.spaeth@gmx.de"
|
12
23
|
gem.authors = ["Dieter Spaeth"]
|
13
24
|
gem.homepage = "http://github.com/consu/rails-jqgrid"
|
@@ -43,5 +54,5 @@ Rake::RDocTask.new do |rdoc|
|
|
43
54
|
rdoc.rdoc_dir = 'rdoc'
|
44
55
|
rdoc.title = "ko #{version}"
|
45
56
|
rdoc.rdoc_files.include('README*')
|
46
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
57
|
+
rdoc.rdoc_files.include('lib/**/*.rb', 'app/**/*.rb')
|
47
58
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3.pre1
|
@@ -1,5 +1,11 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
3
9
|
|
4
10
|
module RailsJqGrid
|
5
11
|
module JqGridCssHelper
|
@@ -7,12 +13,17 @@ module RailsJqGrid
|
|
7
13
|
JQUERY_UI_THEMES_BASE = STYLESHEETS_BASE + "/themes"
|
8
14
|
JQUERY_UI_VERSION = "1.8.4"
|
9
15
|
|
16
|
+
# Includes the following stylesheets:
|
17
|
+
# * ui.jqgrid.css
|
18
|
+
# * /stylesheets/rails-jqgrid/themes/[theme_name]/jquery-ui-...custom.css
|
19
|
+
# options:: :theme name of the theme folder, default start
|
10
20
|
def jqgrid_stylesheets_tags(options={})
|
11
21
|
[jqgrid_ui_stylesheet_tag(options),
|
12
22
|
jquery_ui_stylesheet_tag(options)
|
13
23
|
].join("\n").html_safe
|
14
24
|
end
|
15
25
|
|
26
|
+
protected
|
16
27
|
def jqgrid_ui_stylesheet_tag(options={})
|
17
28
|
(stylesheet_link_tag STYLESHEETS_BASE + "/ui.jqgrid.css").html_safe
|
18
29
|
end
|
@@ -1,5 +1,12 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
3
10
|
|
4
11
|
require 'rails_jq_grid/jq_grid'
|
5
12
|
|
@@ -9,6 +16,7 @@ module RailsJqGrid
|
|
9
16
|
include JqGridJsHelper
|
10
17
|
include JqGridCssHelper
|
11
18
|
|
19
|
+
# Creates javascript-code for jqGrid
|
12
20
|
def jqgrid(title, dom_id, url_for_options, options={}, &option_block)
|
13
21
|
if url_for_options.is_a?(Hash)
|
14
22
|
url_for_options[:controller]||=controller.controller_name
|
@@ -1,11 +1,23 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
3
10
|
|
4
11
|
module RailsJqGrid
|
5
12
|
module JqGridJsHelper
|
6
13
|
JS_BASE = "/javascripts/rails-jqgrid"
|
7
14
|
JQUERY_VERSION = "1.4.2"
|
8
15
|
|
16
|
+
# Includes the following javascript libraries:
|
17
|
+
# * jquery-...min.js
|
18
|
+
# * jquery.jqGrid.min.js
|
19
|
+
# * grid.locale-...js
|
20
|
+
# options:: :local local to use, default :en
|
9
21
|
def jqgrid_js_tags(options={})
|
10
22
|
[jquery_js_tag,
|
11
23
|
jqgrid_i18n_js_tag(options),
|
@@ -13,6 +25,7 @@ module RailsJqGrid
|
|
13
25
|
].join("\n").html_safe
|
14
26
|
end
|
15
27
|
|
28
|
+
protected
|
16
29
|
def jquery_js_tag
|
17
30
|
(javascript_include_tag JS_BASE + "/jquery-#{JQUERY_VERSION}.min.js").html_safe
|
18
31
|
end
|
@@ -1,5 +1,11 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
3
9
|
|
4
10
|
module RailsJqGrid
|
5
11
|
class JqGrid
|
@@ -12,7 +18,7 @@ module RailsJqGrid
|
|
12
18
|
include JqGridMethodMissing
|
13
19
|
|
14
20
|
attr_accessor :title, :dom_id, :columns_data, :detail_grids, :sub_grid_data,
|
15
|
-
:proc_binding, :options
|
21
|
+
:proc_binding, :options, :nav_grid_data
|
16
22
|
|
17
23
|
DEFAULT_OPTIONS = {:row_num => '10',
|
18
24
|
:row_list => [10,25,50,100],
|
@@ -53,6 +59,8 @@ module RailsJqGrid
|
|
53
59
|
self.proc_binding = option_block.binding
|
54
60
|
self.options = options
|
55
61
|
|
62
|
+
self.nav_grid_data = JqGridNavGrid.new(dom_id, pager_id)
|
63
|
+
|
56
64
|
#fancier syntax, but heavier to handle
|
57
65
|
#self.instance_eval(&option_block) if block_given?
|
58
66
|
|
@@ -102,7 +110,7 @@ module RailsJqGrid
|
|
102
110
|
end
|
103
111
|
|
104
112
|
def column(field,&block)
|
105
|
-
find_or_create_column(field).
|
113
|
+
find_or_create_column(field).set_jqgrid_options(&block)
|
106
114
|
end
|
107
115
|
|
108
116
|
def find_or_create_column(field)
|
@@ -114,6 +122,10 @@ module RailsJqGrid
|
|
114
122
|
col
|
115
123
|
end
|
116
124
|
|
125
|
+
def nav_grid(&block)
|
126
|
+
self.nav_grid_data.set_jqgrid_options(&block)
|
127
|
+
end
|
128
|
+
|
117
129
|
def to_html
|
118
130
|
parts =[]
|
119
131
|
parts << javascript_tag(jq_grid_function_js)
|
@@ -171,64 +183,14 @@ module RailsJqGrid
|
|
171
183
|
end
|
172
184
|
|
173
185
|
def nav_grid_js
|
174
|
-
|
175
|
-
params.push(nav_grid_restful_extensions).flatten! if is_restful?
|
186
|
+
self.nav_grid_data.restfull = is_restful?
|
176
187
|
|
177
|
-
|
178
|
-
jQuery("##{dom_id}").jqGrid('navGrid','##{pager_id}',#{params.join(",\n")} );
|
179
|
-
EO_JS
|
188
|
+
nav_grid_data.to_js
|
180
189
|
end
|
181
190
|
|
182
191
|
def is_restful?
|
183
192
|
self.options[:restful]
|
184
|
-
end
|
185
|
-
|
186
|
-
def nav_grid_parameters
|
187
|
-
<<-EO_JS
|
188
|
-
{edit:#{jq_grid_js_options[:edit]},
|
189
|
-
add:#{jq_grid_js_options[:add]},
|
190
|
-
del:#{jq_grid_js_options[:delete]},
|
191
|
-
search:#{jq_grid_js_options[:search]},
|
192
|
-
refresh:#{jq_grid_js_options[:refresh]}
|
193
|
-
}
|
194
|
-
EO_JS
|
195
|
-
end
|
196
|
-
|
197
|
-
def nav_grid_restful_extensions
|
198
|
-
#url = articles_path
|
199
|
-
[restful_param_edit, restful_param_add, restful_param_delete]
|
200
|
-
end
|
201
|
-
|
202
|
-
def restful_param_edit
|
203
|
-
<<-EO_JS
|
204
|
-
{ mtype: "PUT",
|
205
|
-
onclickSubmit: function(rp_ge, postdata) {
|
206
|
-
selrow = jQuery("##{dom_id}").jqGrid('getGridParam','selrow');
|
207
|
-
if (selrow!=null){
|
208
|
-
rp_ge.url = jQuery("##{dom_id}").jqGrid('getGridParam','editurl') + '/' + selrow;
|
209
|
-
}
|
210
|
-
return {};
|
211
|
-
}
|
212
|
-
}
|
213
|
-
EO_JS
|
214
|
-
end
|
215
|
-
|
216
|
-
def restful_param_add
|
217
|
-
<<-EO_JS
|
218
|
-
{ mtype: "POST" }
|
219
|
-
EO_JS
|
220
|
-
end
|
221
|
-
|
222
|
-
def restful_param_delete
|
223
|
-
<<-EO_JS
|
224
|
-
{ mtype: "DELETE",
|
225
|
-
onclickSubmit: function(rp_ge, postdata) {
|
226
|
-
rp_ge.url = jQuery("##{dom_id}").jqGrid('getGridParam','editurl') + '/' + postdata
|
227
|
-
return {};
|
228
|
-
}
|
229
|
-
}
|
230
|
-
EO_JS
|
231
|
-
end
|
193
|
+
end
|
232
194
|
|
233
195
|
def detail_grids_html
|
234
196
|
self.detail_grids.map do |detail_grid|
|
@@ -1,7 +1,15 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
3
10
|
|
4
11
|
module RailsJqGrid
|
12
|
+
# Container for all options and methods for a column in jqgrid
|
5
13
|
class JqGridColumn
|
6
14
|
extend ActiveModel::Translation
|
7
15
|
|
@@ -13,17 +21,10 @@ module RailsJqGrid
|
|
13
21
|
self.field = field
|
14
22
|
self.init_jq_grid_js_options "name" => field, "index" => field
|
15
23
|
|
16
|
-
self.label JqGridColumn.human_attribute_name(field)
|
17
|
-
|
18
|
-
#fancier syntax, but heavier to handle
|
19
|
-
#self.instance_eval(&option_block) if block_given?
|
20
|
-
|
21
|
-
set_column_options(&option_block)
|
22
|
-
end
|
24
|
+
self.label JqGridColumn.human_attribute_name(field)
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
-
end
|
26
|
+
set_jqgrid_options(&option_block)
|
27
|
+
end
|
27
28
|
|
28
29
|
def name
|
29
30
|
self.jq_grid_js_options[:label]
|
@@ -1,36 +1,41 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
3
10
|
|
4
11
|
module RailsJqGrid
|
12
|
+
|
13
|
+
# Method-Missing implementation
|
14
|
+
# converts unknown method to options
|
15
|
+
# and save it's values
|
5
16
|
module JqGridMethodMissing
|
6
17
|
attr_accessor :jq_grid_js_options
|
7
18
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# call_parent symbol, *args, &block
|
12
|
-
#else
|
13
|
-
# RAILS_DEFAULT_LOGGER.debug "Method Missing #{symbol} #{args.inspect}"
|
19
|
+
# every unknown method is treated as a jqgrid
|
20
|
+
# option oder method name
|
21
|
+
def method_missing(symbol, *args, &block)
|
14
22
|
self.jq_grid_js_options ||={}
|
15
23
|
self.jq_grid_js_options[symbol] = JqGridOptionOrMethod.new(symbol, args[0])
|
16
24
|
#end
|
17
|
-
end
|
18
|
-
|
19
|
-
# def call_parent(*args)
|
20
|
-
# # Dirty Hack to get url_for to work
|
21
|
-
# # when called from a detail jqgrid in a block
|
22
|
-
# parent_context = eval('self', self.proc_binding)
|
23
|
-
# parent_context.send *args
|
24
|
-
# end
|
25
|
+
end
|
25
26
|
|
27
|
+
# Values market with raw are not convertet to_json
|
28
|
+
# they will be outputet as they are see JqGridOptionOrMethod.escaped_value
|
26
29
|
def raw(*args)
|
27
30
|
{:type => :raw, :value => args[0]}
|
28
31
|
end
|
29
32
|
|
33
|
+
# returns the value of a option
|
30
34
|
def get_jq_grid_js_options(symbol)
|
31
35
|
self.jq_grid_js_options[symbol]
|
32
36
|
end
|
33
37
|
|
38
|
+
# initialize options with default values
|
34
39
|
def init_jq_grid_js_options(new_options)
|
35
40
|
self.jq_grid_js_options ||={}
|
36
41
|
new_options.each do |key, value|
|
@@ -38,6 +43,7 @@ module RailsJqGrid
|
|
38
43
|
end
|
39
44
|
end
|
40
45
|
|
46
|
+
# converts options to a string for jqgrid
|
41
47
|
def options_to_jqgrid_options
|
42
48
|
jqgrid_options = []
|
43
49
|
self.jq_grid_js_options.each_value { |option|
|
@@ -46,5 +52,9 @@ module RailsJqGrid
|
|
46
52
|
jqgrid_options.sort.join(",\n ")
|
47
53
|
end
|
48
54
|
|
55
|
+
def set_jqgrid_options(&option_block)
|
56
|
+
option_block.call(self) if block_given?
|
57
|
+
end
|
58
|
+
|
49
59
|
end
|
50
60
|
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
10
|
+
module RailsJqGrid
|
11
|
+
class JqGridNavGrid
|
12
|
+
include JqGridMethodMissing
|
13
|
+
|
14
|
+
DEFAULT_OPTIONS = {:add => true,
|
15
|
+
:del => true,
|
16
|
+
:edit => true,
|
17
|
+
:refresh => true,
|
18
|
+
:search => true,
|
19
|
+
}
|
20
|
+
|
21
|
+
DEFAULT_PRM_OPTIONS = { :close_after_add => true,
|
22
|
+
:close_after_edit => true,
|
23
|
+
:close_on_escape => true
|
24
|
+
}
|
25
|
+
|
26
|
+
attr_accessor :dom_id, :pager_id, :restfull,
|
27
|
+
:prm_edit_data, :prm_add_data, :prm_del_data, :prm_search_data,
|
28
|
+
:prm_view_data
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
def initialize(dom_id, pager_id , &option_block)
|
33
|
+
self.dom_id = dom_id
|
34
|
+
self.pager_id = pager_id
|
35
|
+
|
36
|
+
self.prm_edit_data = JqGridNavGridParameter.new(DEFAULT_PRM_OPTIONS)
|
37
|
+
self.prm_add_data = JqGridNavGridParameter.new(DEFAULT_PRM_OPTIONS)
|
38
|
+
self.prm_del_data = JqGridNavGridParameter.new(DEFAULT_PRM_OPTIONS)
|
39
|
+
self.prm_search_data = JqGridNavGridParameter.new(DEFAULT_PRM_OPTIONS)
|
40
|
+
self.prm_view_data = JqGridNavGridParameter.new(DEFAULT_PRM_OPTIONS)
|
41
|
+
|
42
|
+
self.init_jq_grid_js_options DEFAULT_OPTIONS
|
43
|
+
|
44
|
+
option_block.call(self) if block_given?
|
45
|
+
end
|
46
|
+
|
47
|
+
def prm_edit(&block)
|
48
|
+
prm_edit_data.set_jqgrid_options(&block)
|
49
|
+
end
|
50
|
+
|
51
|
+
def prm_add(&block)
|
52
|
+
prm_add_data.set_jqgrid_options(&block)
|
53
|
+
end
|
54
|
+
|
55
|
+
def prm_del(&block)
|
56
|
+
prm_del_data.set_jqgrid_options(&block)
|
57
|
+
end
|
58
|
+
|
59
|
+
def prm_search(&block)
|
60
|
+
prm_search_data.set_jqgrid_options(&block)
|
61
|
+
end
|
62
|
+
|
63
|
+
def prm_view(&block)
|
64
|
+
prm_view_data.set_jqgrid_options(&block)
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
def to_js
|
69
|
+
params=[nav_grid_parameters]
|
70
|
+
|
71
|
+
if is_restful?
|
72
|
+
set_nav_grid_restful_extensions
|
73
|
+
end
|
74
|
+
|
75
|
+
params.push([prm_edit_data.to_js,
|
76
|
+
prm_add_data.to_js,
|
77
|
+
prm_del_data.to_js,
|
78
|
+
prm_search_data.to_js,
|
79
|
+
prm_view_data.to_js]).flatten!
|
80
|
+
|
81
|
+
<<-EO_JS
|
82
|
+
jQuery("##{dom_id}").jqGrid('navGrid','##{pager_id}',#{params.join(",\n")} );
|
83
|
+
EO_JS
|
84
|
+
end
|
85
|
+
|
86
|
+
def nav_grid_parameters
|
87
|
+
<<-EO_JS
|
88
|
+
{
|
89
|
+
#{options_to_jqgrid_options}
|
90
|
+
}
|
91
|
+
EO_JS
|
92
|
+
end
|
93
|
+
|
94
|
+
def set_nav_grid_restful_extensions
|
95
|
+
restful_param_edit
|
96
|
+
restful_param_add
|
97
|
+
restful_param_delete
|
98
|
+
end
|
99
|
+
|
100
|
+
def restful_param_edit
|
101
|
+
prm_edit_data.mtype "PUT"
|
102
|
+
prm_edit_data.onclick_submit raw <<-EO_JS
|
103
|
+
function(rp_ge, postdata) {
|
104
|
+
selrow = jQuery("##{dom_id}").jqGrid('getGridParam','selrow');
|
105
|
+
if (selrow!=null){
|
106
|
+
rp_ge.url = jQuery("##{dom_id}").jqGrid('getGridParam','editurl') + '/' + selrow;
|
107
|
+
}
|
108
|
+
return {};
|
109
|
+
}
|
110
|
+
EO_JS
|
111
|
+
end
|
112
|
+
|
113
|
+
def restful_param_add
|
114
|
+
prm_add_data.mtype "POST"
|
115
|
+
end
|
116
|
+
|
117
|
+
def restful_param_delete
|
118
|
+
prm_del_data.mtype "DELETE"
|
119
|
+
prm_del_data.onclick_submit raw <<-EO_JS
|
120
|
+
function(rp_ge, postdata) {
|
121
|
+
rp_ge.url = jQuery("##{dom_id}").jqGrid('getGridParam','editurl') + '/' + postdata
|
122
|
+
return {};
|
123
|
+
}
|
124
|
+
EO_JS
|
125
|
+
end
|
126
|
+
|
127
|
+
def is_restfull?
|
128
|
+
self.restfull
|
129
|
+
end
|
130
|
+
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
10
|
+
module RailsJqGrid
|
11
|
+
class JqGridNavGridParameter
|
12
|
+
include JqGridMethodMissing
|
13
|
+
|
14
|
+
def initialize(default_options = {}, &option_block)
|
15
|
+
self.jq_grid_js_options ||={}
|
16
|
+
|
17
|
+
self.init_jq_grid_js_options default_options
|
18
|
+
|
19
|
+
option_block.call(self) if block_given?
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_js
|
23
|
+
<<-EO_JS
|
24
|
+
{
|
25
|
+
#{options_to_jqgrid_options}
|
26
|
+
}
|
27
|
+
EO_JS
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -1,7 +1,16 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
3
10
|
|
4
11
|
module RailsJqGrid
|
12
|
+
|
13
|
+
# Contains all information for one option or method
|
5
14
|
class JqGridOptionOrMethod
|
6
15
|
include ActiveSupport::Inflector
|
7
16
|
|
@@ -20,16 +29,22 @@ module RailsJqGrid
|
|
20
29
|
|
21
30
|
end
|
22
31
|
|
32
|
+
# works like JqGridMethodMissing.raw
|
23
33
|
def <<(*args)
|
24
34
|
RAILS_DEFAULT_LOGGER.debug "#{args.inspect}"
|
25
35
|
self.type = :raw
|
26
36
|
self.value = args[0]
|
27
37
|
end
|
28
38
|
|
39
|
+
# option name ist camalized with a lower start character
|
40
|
+
# transforms from ruby style to jqgrid style
|
41
|
+
# before_submit => beforeSubmit
|
29
42
|
def escaped_name
|
30
43
|
self.name.to_s.camelize(:lower)
|
31
44
|
end
|
32
45
|
|
46
|
+
# every value is transformed to json
|
47
|
+
# as lang es it isn't marked es raw
|
33
48
|
def escaped_value
|
34
49
|
if self.type == :raw
|
35
50
|
self.value
|
@@ -1,5 +1,12 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
3
10
|
|
4
11
|
module RailsJqGrid
|
5
12
|
module ActsAsJqGridAble
|
@@ -8,7 +15,8 @@ module RailsJqGrid
|
|
8
15
|
end
|
9
16
|
|
10
17
|
module ActsAsClassMethod
|
11
|
-
|
18
|
+
# any method placed here will apply to classes
|
19
|
+
|
12
20
|
def acts_as_jqgrid_able
|
13
21
|
send :include, InstanceMethods
|
14
22
|
cattr_accessor :allowed_order_by_cols
|
@@ -18,16 +26,25 @@ module RailsJqGrid
|
|
18
26
|
end
|
19
27
|
|
20
28
|
module ClassMethods
|
29
|
+
|
30
|
+
# Contains an array of column names which can safely be used
|
31
|
+
# for order by. Columns not configured here can't be user
|
32
|
+
# by #order_by
|
21
33
|
def order_by_cols(*args)
|
22
34
|
self.allowed_order_by_cols ||= []
|
23
35
|
self.allowed_order_by_cols.push(args.map{|arg| arg.to_s})
|
24
36
|
self.allowed_order_by_cols.flatten!
|
25
|
-
|
26
|
-
logger.info "Array: " + self.allowed_order_by_cols.inspect
|
37
|
+
|
27
38
|
end
|
28
39
|
end
|
29
40
|
|
30
41
|
module InstanceMethods
|
42
|
+
|
43
|
+
# creates json string for jqGrid
|
44
|
+
# options:: :total_records count records totaly to display in grid, default :data.count
|
45
|
+
# :default_records_per_page when nothing is specified how many
|
46
|
+
# records are shown on a page, default :data.count
|
47
|
+
# :data the records as an array
|
31
48
|
def jqgrid_json(options)
|
32
49
|
options[:total_records] ||= options[:data].count
|
33
50
|
options[:default_records_per_page] ||= options[:data].count
|
@@ -41,18 +58,25 @@ module RailsJqGrid
|
|
41
58
|
json_data.to_json
|
42
59
|
end
|
43
60
|
|
61
|
+
# calculates the current offset by page and records per page
|
44
62
|
def current_offset(default_recs_per_page = 10)
|
45
63
|
(current_page - 1) * records_per_page(default_recs_per_page)
|
46
64
|
end
|
47
65
|
|
66
|
+
# returns the current page retrieved from jqgrid request
|
67
|
+
# default 1
|
48
68
|
def current_page
|
49
69
|
(params[:page] || 1).to_i
|
50
70
|
end
|
51
71
|
|
72
|
+
# returns records per page retrieved from jqgrid request
|
73
|
+
# default 1
|
52
74
|
def records_per_page(default_recs_per_page = 10)
|
53
75
|
(params[:rows] || default_recs_per_page).to_i
|
54
76
|
end
|
55
77
|
|
78
|
+
# tests jqgrid request parameter sidx and sord
|
79
|
+
# and returns a sanatized order by statement
|
56
80
|
def order_by
|
57
81
|
order_column = params[:sidx] || ""
|
58
82
|
|
data/lib/rails_jq_grid/engine.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
10
|
+
|
1
11
|
require 'rails_jq_grid'
|
2
12
|
require 'rails'
|
3
13
|
|
4
14
|
module RailsJqGrid
|
5
15
|
class Engine < Rails::Engine
|
6
|
-
config.autoload_paths += %W(#{config.root}/lib)
|
7
|
-
|
8
|
-
# paths.app.controllers = "app/controllers"
|
9
|
-
# paths.app.helpers = "app/helpers"
|
10
|
-
# paths.app.models = "app/models"
|
11
|
-
# paths.app.views = "app/views"
|
12
|
-
# paths.lib "lib"
|
13
|
-
# paths.lib.tasks "lib/tasks", :glob => "**/*.rake"
|
14
|
-
|
15
|
-
|
16
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
16
17
|
|
17
18
|
initializer "static assets" do |app|
|
18
19
|
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
|
data/lib/rails_jq_grid.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
|
+
|
2
|
+
# This program is free software; you can redistribute it and/or
|
3
|
+
# modify it under the terms of the GNU General Public License
|
4
|
+
# as published by the Free Software Foundation; either version 3
|
5
|
+
# of the License, or (at your option) any later version.
|
6
|
+
|
7
|
+
# Author:: Dieter Spaeth (mailto:dieter.spaeth@gmx.de)
|
8
|
+
# Copyright:: Copyright (c) 2010 Dieter Spaeth
|
9
|
+
|
10
|
+
|
1
11
|
module RailsJqGrid
|
2
12
|
if defined?(Rails)
|
3
|
-
require 'rails_jq_grid/engine'
|
4
|
-
#require 'rails_jq_grid/jq_grid'
|
13
|
+
require 'rails_jq_grid/engine'
|
5
14
|
end
|
6
15
|
end
|
7
16
|
|
data/rails_jq_grid.gemspec
CHANGED
@@ -5,11 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rails_jq_grid}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3.pre1"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dieter Spaeth"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-10}
|
13
|
+
s.description = %q{This gems is a Rails 3 Enginge that helps you to create jqGrid. It's bundled with jqGrid and some themes.}
|
13
14
|
s.email = %q{dieter.spaeth@gmx.de}
|
14
15
|
s.extra_rdoc_files = [
|
15
16
|
"README.rdoc"
|
@@ -26,10 +27,11 @@ Gem::Specification.new do |s|
|
|
26
27
|
"app/models/rails_jq_grid/jq_grid.rb",
|
27
28
|
"app/models/rails_jq_grid/jq_grid_column.rb",
|
28
29
|
"app/models/rails_jq_grid/jq_grid_method_missing.rb",
|
30
|
+
"app/models/rails_jq_grid/jq_grid_nav_grid.rb",
|
31
|
+
"app/models/rails_jq_grid/jq_grid_nav_grid_parameter.rb",
|
29
32
|
"app/models/rails_jq_grid/jq_grid_option_or_method.rb",
|
30
33
|
"lib/rails_jq_grid.rb",
|
31
34
|
"lib/rails_jq_grid/acts_as_jq_grid_able.rb",
|
32
|
-
"lib/rails_jq_grid/acts_as_jq_grid_data_source.rb",
|
33
35
|
"lib/rails_jq_grid/engine.rb",
|
34
36
|
"lib/tasks/rails_jq_grid.rake",
|
35
37
|
"public/javascripts/rails-jqgrid/Changes.txt",
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_jq_grid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 270495468
|
5
|
+
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
|
9
|
+
- 3
|
10
|
+
- pre1
|
11
|
+
version: 0.0.3.pre1
|
11
12
|
platform: ruby
|
12
13
|
authors:
|
13
14
|
- Dieter Spaeth
|
@@ -15,7 +16,7 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2010-10-
|
19
|
+
date: 2010-10-10 00:00:00 +02:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
@@ -34,7 +35,7 @@ dependencies:
|
|
34
35
|
version: 1.2.9
|
35
36
|
type: :development
|
36
37
|
version_requirements: *id001
|
37
|
-
description:
|
38
|
+
description: This gems is a Rails 3 Enginge that helps you to create jqGrid. It's bundled with jqGrid and some themes.
|
38
39
|
email: dieter.spaeth@gmx.de
|
39
40
|
executables: []
|
40
41
|
|
@@ -54,10 +55,11 @@ files:
|
|
54
55
|
- app/models/rails_jq_grid/jq_grid.rb
|
55
56
|
- app/models/rails_jq_grid/jq_grid_column.rb
|
56
57
|
- app/models/rails_jq_grid/jq_grid_method_missing.rb
|
58
|
+
- app/models/rails_jq_grid/jq_grid_nav_grid.rb
|
59
|
+
- app/models/rails_jq_grid/jq_grid_nav_grid_parameter.rb
|
57
60
|
- app/models/rails_jq_grid/jq_grid_option_or_method.rb
|
58
61
|
- lib/rails_jq_grid.rb
|
59
62
|
- lib/rails_jq_grid/acts_as_jq_grid_able.rb
|
60
|
-
- lib/rails_jq_grid/acts_as_jq_grid_data_source.rb
|
61
63
|
- lib/rails_jq_grid/engine.rb
|
62
64
|
- lib/tasks/rails_jq_grid.rake
|
63
65
|
- public/javascripts/rails-jqgrid/Changes.txt
|
@@ -223,12 +225,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
223
225
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
224
226
|
none: false
|
225
227
|
requirements:
|
226
|
-
- - "
|
228
|
+
- - ">"
|
227
229
|
- !ruby/object:Gem::Version
|
228
|
-
hash:
|
230
|
+
hash: 25
|
229
231
|
segments:
|
230
|
-
-
|
231
|
-
|
232
|
+
- 1
|
233
|
+
- 3
|
234
|
+
- 1
|
235
|
+
version: 1.3.1
|
232
236
|
requirements: []
|
233
237
|
|
234
238
|
rubyforge_project:
|
@@ -1,34 +0,0 @@
|
|
1
|
-
|
2
|
-
module RailsJqGrid
|
3
|
-
module ActsAsJqGridDataSource
|
4
|
-
|
5
|
-
# To include this Module parente Class has to define
|
6
|
-
# [] each and count
|
7
|
-
def self.included(base)
|
8
|
-
base.send :extend, ClassMethods
|
9
|
-
end
|
10
|
-
|
11
|
-
module ClassMethods
|
12
|
-
## any method placed here will apply to classes, like Hickwall
|
13
|
-
def acts_as_jqgrid
|
14
|
-
send :include, InstanceMethods
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_jqgrid_data(current_page=nil, records_per_page=nil)
|
18
|
-
current_page ||= 1
|
19
|
-
records_per_page ||= count
|
20
|
-
total_records = count
|
21
|
-
total_pages = (count + records_per_page - 1).div(records_per_page)
|
22
|
-
|
23
|
-
json_data = {:currentpage => current_page, :totalpages => total_pages , :totalrecords => total_records }
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
module InstanceMethods
|
30
|
-
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|