skozlov-netzke-basepack 0.1.0.1 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +5 -0
- data/Manifest +1 -0
- data/javascripts/basepack.js +11 -0
- data/javascripts/filters.js +7 -0
- data/lib/netzke-basepack.rb +15 -1
- data/lib/netzke/grid.rb +4 -16
- data/lib/netzke/grid_interface.rb +29 -4
- data/lib/netzke/grid_js_builder.rb +60 -33
- data/netzke-basepack.gemspec +3 -3
- metadata +3 -2
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
data/javascripts/basepack.js
CHANGED
@@ -33,9 +33,20 @@ Ext.netzke.editors = {
|
|
33
33
|
})
|
34
34
|
},
|
35
35
|
|
36
|
+
// TODO: it's simply a text field for now
|
36
37
|
datetime: function(c, config){
|
37
38
|
return new Ext.form.TextField({
|
38
39
|
selectOnFocus:true
|
39
40
|
})
|
40
41
|
}
|
42
|
+
};
|
43
|
+
|
44
|
+
// Mapping of showsAs field to grid filters
|
45
|
+
Ext.netzke.filterMap = {
|
46
|
+
number_field:'Numeric',
|
47
|
+
text_field:'String',
|
48
|
+
datetime:'String',
|
49
|
+
checkbox:'Boolean',
|
50
|
+
combo_box:'String',
|
51
|
+
date:'Date'
|
41
52
|
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Ext.menu.RangeMenu.prototype.icons = {
|
2
|
+
gt: '/extjs/examples/grid-filtering/img/greater_then.png',
|
3
|
+
lt: '/extjs/examples/grid-filtering/img/less_then.png',
|
4
|
+
eq: '/extjs/examples/grid-filtering/img/equals.png'
|
5
|
+
};
|
6
|
+
|
7
|
+
Ext.grid.filter.StringFilter.prototype.icon = '/extjs/examples/grid-filtering/img/find.png';
|
data/lib/netzke-basepack.rb
CHANGED
@@ -11,4 +11,18 @@ require 'netzke/ar_ext'
|
|
11
11
|
ActiveSupport::Dependencies.load_once_paths.delete(path)
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
# Include the javascript
|
15
|
+
Netzke::Base.config[:javascripts] << "#{File.dirname(__FILE__)}/../javascripts/basepack.js"
|
16
|
+
|
17
|
+
# TODO: implement configurable loading of JS, to spare the traffic at the initial loading
|
18
|
+
extjs_dir = "#{File.dirname(RAILS_ROOT)}/netzke_tutorial/public/extjs"
|
19
|
+
Netzke::Base.config[:javascripts] << "#{extjs_dir}/examples/grid-filtering/menu/EditableItem.js"
|
20
|
+
Netzke::Base.config[:javascripts] << "#{extjs_dir}/examples/grid-filtering/menu/RangeMenu.js"
|
21
|
+
Netzke::Base.config[:javascripts] << "#{extjs_dir}/examples/grid-filtering/grid/GridFilters.js"
|
22
|
+
%w{Boolean Date List Numeric String}.unshift("").each do |f|
|
23
|
+
Netzke::Base.config[:javascripts] << "#{extjs_dir}/examples/grid-filtering/grid/filter/#{f}Filter.js"
|
24
|
+
end
|
25
|
+
Netzke::Base.config[:javascripts] << "#{File.dirname(__FILE__)}/../javascripts/filters.js"
|
26
|
+
|
27
|
+
# Make this plugin reloadable for easier development
|
28
|
+
ActiveSupport::Dependencies.load_once_paths.delete(File.join(File.dirname(__FILE__)))
|
data/lib/netzke/grid.rb
CHANGED
@@ -18,8 +18,10 @@ module Netzke
|
|
18
18
|
|
19
19
|
def initial_config
|
20
20
|
{
|
21
|
-
:ext_config => {:properties => true},
|
22
|
-
:layout_manager => "NetzkeLayout"
|
21
|
+
:ext_config => {:properties => true, :column_filters => true},
|
22
|
+
:layout_manager => "NetzkeLayout",
|
23
|
+
:column_resize => true,
|
24
|
+
:column_move => true
|
23
25
|
}
|
24
26
|
end
|
25
27
|
|
@@ -54,20 +56,6 @@ module Netzke
|
|
54
56
|
w.interface_load_source(params)
|
55
57
|
end
|
56
58
|
|
57
|
-
# we pass column config at the time of instantiating the JS class
|
58
|
-
def js_config
|
59
|
-
res = super
|
60
|
-
res.merge!(:columns => get_columns || config[:columns]) # first try to get columns from DB, then from config
|
61
|
-
res.merge!(:data_class_name => config[:data_class_name])
|
62
|
-
res
|
63
|
-
end
|
64
|
-
|
65
|
-
def js_listeners
|
66
|
-
super.merge({
|
67
|
-
:columnresize => (config[:column_resize] ? {:fn => "this.onColumnResize".l, :scope => this} : nil),
|
68
|
-
:columnmove => (config[:column_move] ? {:fn => "this.onColumnMove".l, :scope => this} : nil)
|
69
|
-
})
|
70
|
-
end
|
71
59
|
|
72
60
|
|
73
61
|
protected
|
@@ -95,9 +95,9 @@ module Netzke::GridInterface
|
|
95
95
|
|
96
96
|
# get records
|
97
97
|
def get_records(params)
|
98
|
-
|
98
|
+
search_params = normalize_params(params)
|
99
99
|
raise ArgumentError, "No data_class_name specified for widget '#{config[:name]}'" if !config[:data_class_name]
|
100
|
-
records = config[:data_class_name].constantize.all(conditions
|
100
|
+
records = config[:data_class_name].constantize.all(search_params.clone) # clone needed as searchlogic removes :conditions key from the hash
|
101
101
|
output_array = []
|
102
102
|
records.each do |r|
|
103
103
|
r_array = []
|
@@ -111,14 +111,39 @@ module Netzke::GridInterface
|
|
111
111
|
class << output_array
|
112
112
|
attr :total_records, true
|
113
113
|
end
|
114
|
-
total_records_count = config[:data_class_name].constantize.count(
|
114
|
+
total_records_count = config[:data_class_name].constantize.count(search_params)
|
115
115
|
output_array.total_records = total_records_count
|
116
116
|
|
117
117
|
output_array
|
118
118
|
end
|
119
119
|
|
120
|
+
def convert_filters(column_filter)
|
121
|
+
res = {}
|
122
|
+
column_filter.each_pair do |k,v|
|
123
|
+
field = v["field"]
|
124
|
+
case v["data"]["type"]
|
125
|
+
when "string"
|
126
|
+
field << "_contains"
|
127
|
+
when "numeric"
|
128
|
+
field << "_#{v["data"]["comparison"]}"
|
129
|
+
end
|
130
|
+
value = v["data"]["value"]
|
131
|
+
res.merge!({field => value})
|
132
|
+
end
|
133
|
+
res
|
134
|
+
end
|
135
|
+
|
120
136
|
# make params understandable to searchlogic
|
121
137
|
def normalize_params(params)
|
138
|
+
# filters
|
139
|
+
conditions = params[:filter] && convert_filters(params[:filter])
|
140
|
+
|
141
|
+
normalized_conditions = {}
|
142
|
+
conditions && conditions.each_pair do |k, v|
|
143
|
+
assoc, method = k.split('__')
|
144
|
+
normalized_conditions.merge!(method.nil? ? {assoc => v} : {assoc => {method => v}})
|
145
|
+
end
|
146
|
+
|
122
147
|
# sorting
|
123
148
|
order_by = if params[:sort]
|
124
149
|
assoc, method = params[:sort].split('__')
|
@@ -126,6 +151,6 @@ module Netzke::GridInterface
|
|
126
151
|
end
|
127
152
|
|
128
153
|
page = params[:start].to_i/params[:limit].to_i + 1 if params[:limit]
|
129
|
-
{:per_page => params[:limit], :page => page, :order_by => order_by, :order_as => params[:dir]}
|
154
|
+
{:per_page => params[:limit], :page => page, :order_by => order_by, :order_as => params[:dir], :conditions => normalized_conditions}
|
130
155
|
end
|
131
156
|
end
|
@@ -23,6 +23,7 @@ module Netzke::GridJsBuilder
|
|
23
23
|
:track_mouse_over => true,
|
24
24
|
# :bbar => "config.actions".l,
|
25
25
|
:bbar => js_bbar,
|
26
|
+
:plugins => "plugins".l,
|
26
27
|
|
27
28
|
#custom configs
|
28
29
|
:auto_load_data => true
|
@@ -31,20 +32,22 @@ module Netzke::GridJsBuilder
|
|
31
32
|
|
32
33
|
def js_before_constructor
|
33
34
|
<<-JS
|
35
|
+
var plugins = [];
|
36
|
+
if (!config.columns) this.feedback('No columns defined for grid '+config.id);
|
34
37
|
this.recordConfig = [];
|
35
|
-
|
36
|
-
if (!config.columns) {
|
37
|
-
this.feedback('No columns defined for grid '+config.id);
|
38
|
-
}
|
39
|
-
|
40
38
|
Ext.each(config.columns, function(column){this.recordConfig.push({name:column.name})}, this);
|
41
39
|
this.Row = Ext.data.Record.create(this.recordConfig);
|
40
|
+
|
42
41
|
var ds = new Ext.data.Store({
|
43
42
|
proxy: this.proxy = new Ext.data.HttpProxy({url:config.interface.getData}),
|
44
43
|
reader: new Ext.data.ArrayReader({root: "data", totalProperty: "total", successProperty: "succes", id:0}, this.Row),
|
45
|
-
remoteSort: true
|
44
|
+
remoteSort: true,
|
45
|
+
listeners:{'loadexception':{
|
46
|
+
fn:this.loadExceptionHandler,
|
47
|
+
scope:this
|
48
|
+
}}
|
46
49
|
});
|
47
|
-
|
50
|
+
|
48
51
|
this.cmConfig = [];
|
49
52
|
Ext.each(config.columns, function(c){
|
50
53
|
var editor = c.readOnly ? null : Ext.netzke.editors[c.showsAs](c, config);
|
@@ -62,41 +65,62 @@ module Netzke::GridJsBuilder
|
|
62
65
|
var cm = new Ext.grid.ColumnModel(this.cmConfig);
|
63
66
|
|
64
67
|
this.addEvents("refresh");
|
65
|
-
|
68
|
+
|
69
|
+
// Filters
|
70
|
+
if (config.columnFilters) {
|
71
|
+
var filters = []
|
72
|
+
Ext.each(config.columns, function(c){
|
73
|
+
filters.push({type:Ext.netzke.filterMap[c.showsAs], dataIndex:c.name})
|
74
|
+
})
|
75
|
+
var gridFilters = new Ext.grid.GridFilters({filters:filters});
|
76
|
+
plugins.push(gridFilters);
|
77
|
+
}
|
78
|
+
|
66
79
|
JS
|
67
80
|
end
|
68
81
|
|
82
|
+
def js_config
|
83
|
+
res = super
|
84
|
+
# we pass column config at the time of instantiating the JS class
|
85
|
+
res.merge!(:columns => get_columns || config[:columns]) # first try to get columns from DB, then from config
|
86
|
+
res.merge!(:data_class_name => config[:data_class_name])
|
87
|
+
res
|
88
|
+
end
|
89
|
+
|
90
|
+
def js_listeners
|
91
|
+
super.merge({
|
92
|
+
:columnresize => (config[:column_resize] ? {:fn => "this.onColumnResize".l, :scope => this} : nil),
|
93
|
+
:columnmove => (config[:column_move] ? {:fn => "this.onColumnMove".l, :scope => this} : nil)
|
94
|
+
})
|
95
|
+
end
|
96
|
+
|
97
|
+
|
69
98
|
def js_extend_properties
|
70
99
|
{
|
71
100
|
:on_widget_load => <<-JS.l,
|
72
101
|
function(){
|
102
|
+
// auto-load
|
73
103
|
if (this.initialConfig.autoLoadData) {
|
74
|
-
|
104
|
+
// if we have a paging toolbar, load the first page, otherwise
|
105
|
+
if (this.getBottomToolbar().changePage) this.getBottomToolbar().changePage(0); else this.store.load();
|
75
106
|
}
|
76
107
|
}
|
77
108
|
JS
|
78
|
-
|
79
|
-
:load_with_feedback => <<-JS.l,
|
80
|
-
function(params){
|
81
|
-
if (!params) params = {};
|
82
|
-
var exceptionHandler = function(proxy, options, response, error){
|
83
|
-
if (response.status == 200 && (responseObject = Ext.decode(response.responseText)) && responseObject.flash){
|
84
|
-
this.feedback(responseObject.flash)
|
85
|
-
} else {
|
86
|
-
if (error){
|
87
|
-
this.feedback(error.message);
|
88
|
-
} else {
|
89
|
-
this.feedback(response.statusText)
|
90
|
-
}
|
91
|
-
}
|
92
|
-
}.createDelegate(this);
|
93
|
-
this.store.proxy.on('loadexception', exceptionHandler);
|
94
|
-
this.store.load({callback:function(r, options, success){
|
95
|
-
this.store.proxy.un('loadexception', exceptionHandler);
|
96
|
-
}, params: params, scope:this});
|
97
|
-
}
|
98
|
-
JS
|
99
109
|
|
110
|
+
:load_exception_handler => <<-JS.l,
|
111
|
+
function(proxy, options, response, error){
|
112
|
+
if (response.status == 200 && (responseObject = Ext.decode(response.responseText)) && responseObject.flash){
|
113
|
+
this.feedback(responseObject.flash)
|
114
|
+
} else {
|
115
|
+
if (error){
|
116
|
+
this.feedback(error.message);
|
117
|
+
} else {
|
118
|
+
this.feedback(response.statusText)
|
119
|
+
}
|
120
|
+
}
|
121
|
+
}
|
122
|
+
JS
|
123
|
+
|
100
124
|
:add => <<-JS.l,
|
101
125
|
function(){
|
102
126
|
var rowConfig = {};
|
@@ -153,7 +177,8 @@ module Netzke::GridJsBuilder
|
|
153
177
|
params: {records: Ext.encode(records)},
|
154
178
|
success:function(r){
|
155
179
|
var m = Ext.decode(r.responseText);
|
156
|
-
this.
|
180
|
+
this.store.reload();
|
181
|
+
// this.loadWithFeedback();
|
157
182
|
this.feedback(m.flash);
|
158
183
|
},
|
159
184
|
scope:this
|
@@ -195,7 +220,8 @@ module Netzke::GridJsBuilder
|
|
195
220
|
success:function(response){
|
196
221
|
var m = Ext.decode(response.responseText);
|
197
222
|
if (m.success) {
|
198
|
-
this.
|
223
|
+
this.store.reload();
|
224
|
+
// this.loadWithFeedback();
|
199
225
|
this.store.commitChanges();
|
200
226
|
this.feedback(m.flash);
|
201
227
|
} else {
|
@@ -215,7 +241,8 @@ module Netzke::GridJsBuilder
|
|
215
241
|
:refresh_click => <<-JS.l,
|
216
242
|
function() {
|
217
243
|
// console.info(this);
|
218
|
-
if (this.fireEvent('refresh', this) !== false) this.loadWithFeedback();
|
244
|
+
// if (this.fireEvent('refresh', this) !== false) this.loadWithFeedback();
|
245
|
+
if (this.fireEvent('refresh', this) !== false) this.store.reload();
|
219
246
|
}
|
220
247
|
JS
|
221
248
|
|
data/netzke-basepack.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{netzke-basepack}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Sergei Kozlov"]
|
9
|
-
s.date = %q{2008-12-
|
9
|
+
s.date = %q{2008-12-28}
|
10
10
|
s.description = %q{Base Netzke widgets - grid, form, tree, and more}
|
11
11
|
s.email = %q{sergei@writelesscode.com}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "lib/app/models/netzke_grid_column.rb", "lib/netzke/accordion.rb", "lib/netzke/ar_ext.rb", "lib/netzke/column.rb", "lib/netzke/container.rb", "lib/netzke/grid.rb", "lib/netzke/grid_interface.rb", "lib/netzke/grid_js_builder.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke-basepack.rb", "LICENSE", "README.mdown", "tasks/netzke_basepack_tasks.rake"]
|
13
|
-
s.files = ["CHANGELOG", "generators/netzke_basepack/netzke_basepack_generator.rb", "generators/netzke_basepack/netzke_grid_generator.rb", "generators/netzke_basepack/templates/create_netzke_grid_columns.rb", "generators/netzke_basepack/USAGE", "init.rb", "install.rb", "javascripts/basepack.js", "lib/app/models/netzke_grid_column.rb", "lib/netzke/accordion.rb", "lib/netzke/ar_ext.rb", "lib/netzke/column.rb", "lib/netzke/container.rb", "lib/netzke/grid.rb", "lib/netzke/grid_interface.rb", "lib/netzke/grid_js_builder.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke-basepack.rb", "LICENSE", "Manifest", "netzke-basepack.gemspec", "Rakefile", "README.mdown", "tasks/netzke_basepack_tasks.rake", "test/app_root/app/controllers/application.rb", "test/app_root/app/models/book.rb", "test/app_root/app/models/category.rb", "test/app_root/app/models/city.rb", "test/app_root/app/models/continent.rb", "test/app_root/app/models/country.rb", "test/app_root/app/models/genre.rb", "test/app_root/config/boot.rb", "test/app_root/config/database.yml", "test/app_root/config/environment.rb", "test/app_root/config/environments/in_memory.rb", "test/app_root/config/environments/mysql.rb", "test/app_root/config/environments/postgresql.rb", "test/app_root/config/environments/sqlite.rb", "test/app_root/config/environments/sqlite3.rb", "test/app_root/config/routes.rb", "test/app_root/db/migrate/20081222033343_create_books.rb", "test/app_root/db/migrate/20081222033440_create_genres.rb", "test/app_root/db/migrate/20081222035855_create_netzke_preferences.rb", "test/app_root/db/migrate/20081223024935_create_categories.rb", "test/app_root/db/migrate/20081223025635_create_countries.rb", "test/app_root/db/migrate/20081223025653_create_continents.rb", "test/app_root/db/migrate/20081223025732_create_cities.rb", "test/app_root/script/console", "test/ar_ext_test.rb", "test/column_test.rb", "test/console_with_fixtures.rb", "test/fixtures/books.yml", "test/fixtures/categories.yml", "test/fixtures/cities.yml", "test/fixtures/continents.yml", "test/fixtures/countries.yml", "test/fixtures/genres.yml", "test/grid_test.rb", "test/netzke_basepack_test.rb", "test/schema.rb", "test/test_helper.rb", "uninstall.rb"]
|
13
|
+
s.files = ["CHANGELOG", "generators/netzke_basepack/netzke_basepack_generator.rb", "generators/netzke_basepack/netzke_grid_generator.rb", "generators/netzke_basepack/templates/create_netzke_grid_columns.rb", "generators/netzke_basepack/USAGE", "init.rb", "install.rb", "javascripts/basepack.js", "javascripts/filters.js", "lib/app/models/netzke_grid_column.rb", "lib/netzke/accordion.rb", "lib/netzke/ar_ext.rb", "lib/netzke/column.rb", "lib/netzke/container.rb", "lib/netzke/grid.rb", "lib/netzke/grid_interface.rb", "lib/netzke/grid_js_builder.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke-basepack.rb", "LICENSE", "Manifest", "netzke-basepack.gemspec", "Rakefile", "README.mdown", "tasks/netzke_basepack_tasks.rake", "test/app_root/app/controllers/application.rb", "test/app_root/app/models/book.rb", "test/app_root/app/models/category.rb", "test/app_root/app/models/city.rb", "test/app_root/app/models/continent.rb", "test/app_root/app/models/country.rb", "test/app_root/app/models/genre.rb", "test/app_root/config/boot.rb", "test/app_root/config/database.yml", "test/app_root/config/environment.rb", "test/app_root/config/environments/in_memory.rb", "test/app_root/config/environments/mysql.rb", "test/app_root/config/environments/postgresql.rb", "test/app_root/config/environments/sqlite.rb", "test/app_root/config/environments/sqlite3.rb", "test/app_root/config/routes.rb", "test/app_root/db/migrate/20081222033343_create_books.rb", "test/app_root/db/migrate/20081222033440_create_genres.rb", "test/app_root/db/migrate/20081222035855_create_netzke_preferences.rb", "test/app_root/db/migrate/20081223024935_create_categories.rb", "test/app_root/db/migrate/20081223025635_create_countries.rb", "test/app_root/db/migrate/20081223025653_create_continents.rb", "test/app_root/db/migrate/20081223025732_create_cities.rb", "test/app_root/script/console", "test/ar_ext_test.rb", "test/column_test.rb", "test/console_with_fixtures.rb", "test/fixtures/books.yml", "test/fixtures/categories.yml", "test/fixtures/cities.yml", "test/fixtures/continents.yml", "test/fixtures/countries.yml", "test/fixtures/genres.yml", "test/grid_test.rb", "test/netzke_basepack_test.rb", "test/schema.rb", "test/test_helper.rb", "uninstall.rb"]
|
14
14
|
s.has_rdoc = true
|
15
15
|
s.homepage = %q{http://writelesscode.com}
|
16
16
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Netzke-basepack", "--main", "README.mdown"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skozlov-netzke-basepack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergei Kozlov
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-12-
|
12
|
+
date: 2008-12-28 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- init.rb
|
78
78
|
- install.rb
|
79
79
|
- javascripts/basepack.js
|
80
|
+
- javascripts/filters.js
|
80
81
|
- lib/app/models/netzke_grid_column.rb
|
81
82
|
- lib/netzke/accordion.rb
|
82
83
|
- lib/netzke/ar_ext.rb
|