netzke-basepack 0.5.9 → 0.5.10
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +10 -4
- data/Rakefile +11 -10
- data/javascripts/basepack.js +0 -36
- data/lib/netzke/grid_panel.rb +5 -12
- data/lib/netzke/grid_panel/grid_panel_columns.rb +4 -0
- data/lib/netzke/grid_panel/grid_panel_js.rb +71 -20
- data/lib/netzke/grid_panel/multi_edit_form.rb +14 -0
- data/lib/netzke/search_panel.rb +3 -3
- data/{tasks → lib/tasks}/netzke_basepack_tasks.rake +0 -0
- metadata +29 -7
data/CHANGELOG.rdoc
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
= v0.
|
1
|
+
= v0.5.10 - 2010-06-14
|
2
|
+
* Impr: Checkbox replaced with tri-state checkbox in multi-edit form in GridPanel.
|
3
|
+
* Impr: Column renderers reworked, allowing for more flexibility and cleanness.
|
4
|
+
* Fix: After applying changes to a grid disable "Edit in form" action.
|
5
|
+
* Impr: A grid's forms are now getting the same fields as specified for the grid.
|
6
|
+
|
7
|
+
= v0.5.9 - 2010-06-11
|
2
8
|
* !!!: after updating to this version, run script/generate netzke_basepack
|
3
9
|
* New: tri-state checkbox introduced into the search form
|
4
10
|
* Impr: better defaults for the search form
|
@@ -9,12 +15,12 @@
|
|
9
15
|
* Fix: FieldsConfigurator should now work on Heroku
|
10
16
|
* Fix: GridPanel date filter now should work
|
11
17
|
* New: GridPanel now has a method on_data_changed that can be overridden by children to detect actions that modify data
|
12
|
-
* New: New way of Netzke virtual attributes
|
13
|
-
*
|
18
|
+
* New: New way of configuring Netzke (virtual) attributes for AR models.
|
19
|
+
* Impr: Grid/FormPanel refactoring.
|
14
20
|
* Impr: Multi-level column/fields configuration reworked and made more consistent.
|
15
21
|
* New: New configuration layer introduced between the AR models and the rest of Netzke widgets. Use AttributesConfigurator to access it.
|
16
22
|
* New: FamFamFam Silk icons support.
|
17
|
-
* Impr: Reworked Netzke (virtual) attributes for Grid/FormPanel
|
23
|
+
* Impr: Reworked defining Netzke (virtual) attributes for Grid/FormPanel.
|
18
24
|
|
19
25
|
= v0.5.8 - 2010-03-12
|
20
26
|
* Fix: GertThiel's method_missing-related fix enabling better compatibility with other Ruby libs
|
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
begin
|
2
2
|
require 'jeweler'
|
3
3
|
Jeweler::Tasks.new do |gemspec|
|
4
|
-
gemspec.version = "0.5.
|
4
|
+
gemspec.version = "0.5.10"
|
5
5
|
gemspec.name = "netzke-basepack"
|
6
6
|
gemspec.summary = "Pre-built Rails + ExtJS widgets for your RIA"
|
7
7
|
gemspec.description = "A set of full-featured extendible Netzke widgets (such as FormPanel, GridPanel, Window, BorderLayoutPanel, etc) which can be used as building block for your RIA"
|
@@ -9,23 +9,24 @@ begin
|
|
9
9
|
gemspec.homepage = "http://github.com/skozlov/netzke-basepack"
|
10
10
|
gemspec.rubyforge_project = "netzke-basepack"
|
11
11
|
gemspec.authors = ["Sergei Kozlov"]
|
12
|
-
gemspec.add_dependency("netzke-core", ">=0.5.
|
12
|
+
gemspec.add_dependency("netzke-core", ">=0.5.3")
|
13
13
|
gemspec.add_dependency("searchlogic", ">=2.0.0")
|
14
14
|
gemspec.add_dependency("will_paginate", ">=2.0.0")
|
15
15
|
gemspec.add_dependency("acts_as_list", ">=0.1.2")
|
16
16
|
gemspec.post_install_message = <<-MESSAGE
|
17
17
|
|
18
|
-
|
18
|
+
========================================================================
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
Thanks for installing Netzke Basepack!
|
21
|
+
|
22
|
+
Don't forget to run "./script/generate netzke_basepack" for each
|
23
|
+
Rails app that will be using this gem.
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
Netzke home page: http://netzke.org
|
26
|
+
Netzke Google Groups: http://groups.google.com/group/netzke
|
27
|
+
Netzke tutorials: http://blog.writelesscode.com
|
27
28
|
|
28
|
-
|
29
|
+
========================================================================
|
29
30
|
|
30
31
|
MESSAGE
|
31
32
|
|
data/javascripts/basepack.js
CHANGED
@@ -38,42 +38,6 @@ Ext.netzke.ComboBox = Ext.extend(Ext.form.ComboBox, {
|
|
38
38
|
|
39
39
|
Ext.reg('combobox', Ext.netzke.ComboBox);
|
40
40
|
|
41
|
-
/*
|
42
|
-
Accepts a string which either contains:
|
43
|
-
Ext.util.Format method (e.g. 'usMoney'),
|
44
|
-
or
|
45
|
-
JSON-encoded array, where the first element is Ext.util.Format method (e.g. 'ellipsis'),
|
46
|
-
and the rest of the elements - configuration parameters that should be passed to this method besids
|
47
|
-
the value to be rendered (e.g. '2');
|
48
|
-
|
49
|
-
Example of the latter: ["defaultValue", "MyDefaultValue"]
|
50
|
-
*/
|
51
|
-
Ext.netzke.normalizedRenderer = function(config) {
|
52
|
-
res = null;
|
53
|
-
|
54
|
-
if (config) {
|
55
|
-
try{
|
56
|
-
config = Ext.decode(config); // it's an array consisting of renderer's name *and* eventual options
|
57
|
-
} catch(e) {
|
58
|
-
// leave config as is - it's supposed to be the renderer's name
|
59
|
-
}
|
60
|
-
|
61
|
-
if (Ext.isArray(config)) {
|
62
|
-
res = function(v){
|
63
|
-
var formatMethod = config[0];
|
64
|
-
var valueAndOptions = config.slice(1);
|
65
|
-
valueAndOptions.unshift(v);
|
66
|
-
// call the Format function with the argument *and* configuration
|
67
|
-
return Ext.util.Format[formatMethod] ? Ext.util.Format[formatMethod].apply(this, valueAndOptions) : "Unknown renderer";
|
68
|
-
}
|
69
|
-
} else {
|
70
|
-
res = Ext.util.Format[config] ? Ext.util.Format[config] : function(v){return "Unknown renderer"}
|
71
|
-
}
|
72
|
-
}
|
73
|
-
|
74
|
-
return res;
|
75
|
-
};
|
76
|
-
|
77
41
|
Ext.util.Format.mask = function(v){
|
78
42
|
return "********";
|
79
43
|
};
|
data/lib/netzke/grid_panel.rb
CHANGED
@@ -304,6 +304,7 @@ module Netzke
|
|
304
304
|
:item => {
|
305
305
|
:class_name => "FormPanel",
|
306
306
|
:model => config[:model],
|
307
|
+
:fields => default_fields_for_forms,
|
307
308
|
:persistent_config => config[:persistent_config],
|
308
309
|
:strong_default_attrs => config[:strong_default_attrs],
|
309
310
|
:ext_config => {
|
@@ -325,6 +326,7 @@ module Netzke
|
|
325
326
|
:item => {
|
326
327
|
:class_name => "FormPanel",
|
327
328
|
:model => config[:model],
|
329
|
+
:fields => default_fields_for_forms,
|
328
330
|
:persistent_config => config[:persistent_config],
|
329
331
|
:ext_config => {
|
330
332
|
:bbar => false,
|
@@ -334,17 +336,6 @@ module Netzke
|
|
334
336
|
},
|
335
337
|
},
|
336
338
|
|
337
|
-
# :edit_form => {
|
338
|
-
# :class_name => "FormPanel",
|
339
|
-
# :model => data_class.name,
|
340
|
-
# :persistent_config => config[:persistent_config],
|
341
|
-
# :ext_config => {
|
342
|
-
# :bbar => false,
|
343
|
-
# :header => false,
|
344
|
-
# :mode => ext_config[:mode]
|
345
|
-
# }
|
346
|
-
# },
|
347
|
-
|
348
339
|
:multi_edit_form => {
|
349
340
|
:class_name => "GridPanel::RecordFormWindow",
|
350
341
|
:ext_config => {
|
@@ -352,8 +343,9 @@ module Netzke
|
|
352
343
|
:button_align => "right"
|
353
344
|
},
|
354
345
|
:item => {
|
355
|
-
:class_name => "
|
346
|
+
:class_name => "GridPanel::MultiEditForm",
|
356
347
|
:model => config[:model],
|
348
|
+
:fields => default_fields_for_forms,
|
357
349
|
:persistent_config => config[:persistent_config],
|
358
350
|
:ext_config => {
|
359
351
|
:bbar => false,
|
@@ -368,6 +360,7 @@ module Netzke
|
|
368
360
|
res.merge!({
|
369
361
|
:search_panel => {
|
370
362
|
:class_name => "SearchPanel",
|
363
|
+
:fields => default_fields_for_forms,
|
371
364
|
:search_class_name => config[:model],
|
372
365
|
:persistent_config => config[:persistent_config],
|
373
366
|
:ext_config => {
|
@@ -216,6 +216,10 @@ module Netzke
|
|
216
216
|
c[:editor] = assoc_method_type == :boolean ? editor_for_attr_type(:boolean) : editor_for_association
|
217
217
|
end
|
218
218
|
end
|
219
|
+
|
220
|
+
def default_fields_for_forms
|
221
|
+
columns.map{ |c| {:name => c[:name]} }
|
222
|
+
end
|
219
223
|
|
220
224
|
def self.included(receiver)
|
221
225
|
receiver.extend ClassMethods
|
@@ -28,10 +28,15 @@ module Netzke
|
|
28
28
|
edit_in_form_events = <<-END_OF_JAVASCRIPT if config[:edit_in_form_available]
|
29
29
|
if (this.enableEditInForm) {
|
30
30
|
this.getSelectionModel().on('selectionchange', function(selModel){
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
}
|
31
|
+
var disabled;
|
32
|
+
if (!selModel.hasSelection()) {
|
33
|
+
disabled = true;
|
34
|
+
} else {
|
35
|
+
// Disable "edit in form" button if new record is present in selection
|
36
|
+
disabled = !selModel.each(function(r){
|
37
|
+
if (r.isNew) { return false; }
|
38
|
+
});
|
39
|
+
};
|
35
40
|
this.actions.editInForm.setDisabled(disabled);
|
36
41
|
}, this);
|
37
42
|
}
|
@@ -111,23 +116,26 @@ module Netzke
|
|
111
116
|
c.editor = null;
|
112
117
|
}
|
113
118
|
|
119
|
+
// Normalize the renderer
|
120
|
+
this.normalizeRenderer(c);
|
121
|
+
|
114
122
|
// set the renderer
|
115
|
-
if (c.renderer && !Ext.isArray(c.renderer) && c.renderer.match(/^\\s*function\\s*\\(/)) {
|
116
|
-
// if the renderer is an inline function - eval it (double escaping because we are inside of the Ruby string here...)
|
117
|
-
eval("c.renderer = " + c.renderer + ";");
|
118
|
-
} else if (Ext.isFunction(this[c.renderer])) {
|
119
|
-
// whether the renderer is defined in this.scope
|
120
|
-
c.renderer = this[c.renderer].createDelegate(this);
|
121
|
-
} else {
|
122
|
-
// othrewise it's a string representing the name of the renderer or
|
123
|
-
// where the first parameter is the renderer's name, and the rest - parameters that should be
|
124
|
-
// passed to the renderer at the moment of calling
|
125
|
-
var renderer = Ext.netzke.normalizedRenderer(c.renderer);
|
126
|
-
if (renderer != null) {
|
127
|
-
c.renderer = renderer
|
128
|
-
};
|
129
|
-
}
|
130
|
-
|
123
|
+
// if (c.renderer && !Ext.isArray(c.renderer) && c.renderer.match(/^\\s*function\\s*\\(/)) {
|
124
|
+
// // if the renderer is an inline function - eval it (double escaping because we are inside of the Ruby string here...)
|
125
|
+
// eval("c.renderer = " + c.renderer + ";");
|
126
|
+
// } else if (Ext.isFunction(this[c.renderer])) {
|
127
|
+
// // whether the renderer is defined in this.scope
|
128
|
+
// c.renderer = this[c.renderer].createDelegate(this);
|
129
|
+
// } else {
|
130
|
+
// // othrewise it's a string representing the name of the renderer or a json-encoded array,
|
131
|
+
// // where the first parameter is the renderer's name, and the rest - parameters that should be
|
132
|
+
// // passed to the renderer at the moment of calling
|
133
|
+
// var renderer = Ext.netzke.normalizedRenderer(c.renderer);
|
134
|
+
// if (renderer != null) {
|
135
|
+
// c.renderer = renderer
|
136
|
+
// };
|
137
|
+
// }
|
138
|
+
//
|
131
139
|
// add to the list
|
132
140
|
cmConfig.push(c);
|
133
141
|
}
|
@@ -584,6 +592,7 @@ module Netzke
|
|
584
592
|
}
|
585
593
|
|
586
594
|
this.getView().refresh();
|
595
|
+
this.getSelectionModel().fireEvent('selectionchange', this.getSelectionModel());
|
587
596
|
}
|
588
597
|
END_OF_JAVASCRIPT
|
589
598
|
|
@@ -600,6 +609,48 @@ module Netzke
|
|
600
609
|
this.getSelectionModel().resumeEvents();
|
601
610
|
}
|
602
611
|
END_OF_JAVASCRIPT
|
612
|
+
|
613
|
+
# Normalizes the renderer for a column.
|
614
|
+
# Renderer may be:
|
615
|
+
# 1) a string that contains the name of the function to be used as renderer.
|
616
|
+
# 2) an array, where the first element is the function name, and the rest - the arguments
|
617
|
+
# that will be passed to that function along with the value to be rendered.
|
618
|
+
# The function is searched in the following objects: 1) Ext.util.Format, 2) this.
|
619
|
+
# If not found, it is simply evaluated. Handy, when as renderer we receive an inline JS function,
|
620
|
+
# or reference to a function in some other scope.
|
621
|
+
# So, these will work:
|
622
|
+
# * "uppercase"
|
623
|
+
# * ["ellipsis", 10]
|
624
|
+
# * ["substr", 3, 5]
|
625
|
+
# * "myRenderer" (if this.myRenderer is a function)
|
626
|
+
# * ["Some.scope.Format.customRenderer", 10, 20, 30] (if Some.scope.Format.customRenderer is a function)
|
627
|
+
# * "function(v){ return 'Value: ' + v; }"
|
628
|
+
:normalize_renderer => <<-END_OF_JAVASCRIPT.l,
|
629
|
+
function(c) {
|
630
|
+
if (!c.renderer) return;
|
631
|
+
|
632
|
+
var name, args = [];
|
633
|
+
|
634
|
+
if ('string' === typeof c.renderer) {
|
635
|
+
name = c.renderer;
|
636
|
+
} else {
|
637
|
+
name = c.renderer[0];
|
638
|
+
args = c.renderer.slice(1);
|
639
|
+
}
|
640
|
+
|
641
|
+
// First check whether Ext.util.Format has it
|
642
|
+
if (Ext.isFunction(Ext.util.Format[name])) {
|
643
|
+
c.renderer = Ext.util.Format[name].createDelegate(this, args, 1);
|
644
|
+
} else if (Ext.isFunction(this[name])) {
|
645
|
+
// ... then if our own class has it
|
646
|
+
c.renderer = this[name].createDelegate(this, args, 1);
|
647
|
+
} else {
|
648
|
+
// ... and, as last resort, evaluate it (allows passing inline javascript function as renderer)
|
649
|
+
eval("c.renderer = " + c.renderer + ";");
|
650
|
+
}
|
651
|
+
}
|
652
|
+
END_OF_JAVASCRIPT
|
653
|
+
|
603
654
|
|
604
655
|
# :reorder_columns => <<-END_OF_JAVASCRIPT.l,
|
605
656
|
# function(columns){
|
data/lib/netzke/search_panel.rb
CHANGED
@@ -149,11 +149,11 @@ module Netzke
|
|
149
149
|
|
150
150
|
res.reject!{ |f| f[:virtual] }
|
151
151
|
|
152
|
-
res.each do |f|
|
152
|
+
res.each do |f|
|
153
153
|
f.merge!(:condition => "like", :default_value => nil)
|
154
154
|
f.merge!(:xtype => xtype_for_attr_type(:string), :attr_type => "string") if f[:name].to_s.index("__")
|
155
|
-
f.merge!(:condition => "greater_than") if [:datetime, :integer, :date].include?(f[:attr_type]
|
156
|
-
f.merge!(:condition => "equals") if f[
|
155
|
+
f.merge!(:condition => "greater_than") if [:datetime, :integer, :date].include?(f[:attr_type])
|
156
|
+
f.merge!(:condition => "equals") if f[:attr_type] == :boolean
|
157
157
|
end
|
158
158
|
|
159
159
|
res
|
File without changes
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netzke-basepack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 5
|
8
|
-
-
|
9
|
-
version: 0.5.
|
9
|
+
- 10
|
10
|
+
version: 0.5.10
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Sergei Kozlov
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-06-
|
18
|
+
date: 2010-06-14 00:00:00 +02:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
@@ -25,11 +26,12 @@ dependencies:
|
|
25
26
|
requirements:
|
26
27
|
- - ">="
|
27
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 13
|
28
30
|
segments:
|
29
31
|
- 0
|
30
32
|
- 5
|
31
|
-
-
|
32
|
-
version: 0.5.
|
33
|
+
- 3
|
34
|
+
version: 0.5.3
|
33
35
|
type: :runtime
|
34
36
|
version_requirements: *id001
|
35
37
|
- !ruby/object:Gem::Dependency
|
@@ -40,6 +42,7 @@ dependencies:
|
|
40
42
|
requirements:
|
41
43
|
- - ">="
|
42
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 15
|
43
46
|
segments:
|
44
47
|
- 2
|
45
48
|
- 0
|
@@ -55,6 +58,7 @@ dependencies:
|
|
55
58
|
requirements:
|
56
59
|
- - ">="
|
57
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 15
|
58
62
|
segments:
|
59
63
|
- 2
|
60
64
|
- 0
|
@@ -70,6 +74,7 @@ dependencies:
|
|
70
74
|
requirements:
|
71
75
|
- - ">="
|
72
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 31
|
73
78
|
segments:
|
74
79
|
- 0
|
75
80
|
- 1
|
@@ -130,6 +135,7 @@ files:
|
|
130
135
|
- lib/netzke/grid_panel/grid_panel_columns.rb
|
131
136
|
- lib/netzke/grid_panel/grid_panel_js.rb
|
132
137
|
- lib/netzke/grid_panel/javascripts/rows-dd.js
|
138
|
+
- lib/netzke/grid_panel/multi_edit_form.rb
|
133
139
|
- lib/netzke/grid_panel/record_form_window.rb
|
134
140
|
- lib/netzke/json_array_editor.rb
|
135
141
|
- lib/netzke/masquerade_selector.rb
|
@@ -143,8 +149,8 @@ files:
|
|
143
149
|
- lib/netzke/tree_panel.rb
|
144
150
|
- lib/netzke/window.rb
|
145
151
|
- lib/netzke/wrapper.rb
|
152
|
+
- lib/tasks/netzke_basepack_tasks.rake
|
146
153
|
- stylesheets/basepack.css
|
147
|
-
- tasks/netzke_basepack_tasks.rake
|
148
154
|
- test/app_root/app/controllers/application.rb
|
149
155
|
- test/app_root/app/models/book.rb
|
150
156
|
- test/app_root/app/models/category.rb
|
@@ -199,7 +205,21 @@ has_rdoc: true
|
|
199
205
|
homepage: http://github.com/skozlov/netzke-basepack
|
200
206
|
licenses: []
|
201
207
|
|
202
|
-
post_install_message:
|
208
|
+
post_install_message: |+
|
209
|
+
|
210
|
+
========================================================================
|
211
|
+
|
212
|
+
Thanks for installing Netzke Basepack!
|
213
|
+
|
214
|
+
Don't forget to run "./script/generate netzke_basepack" for each
|
215
|
+
Rails app that will be using this gem.
|
216
|
+
|
217
|
+
Netzke home page: http://netzke.org
|
218
|
+
Netzke Google Groups: http://groups.google.com/group/netzke
|
219
|
+
Netzke tutorials: http://blog.writelesscode.com
|
220
|
+
|
221
|
+
========================================================================
|
222
|
+
|
203
223
|
rdoc_options:
|
204
224
|
- --charset=UTF-8
|
205
225
|
require_paths:
|
@@ -209,6 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
229
|
requirements:
|
210
230
|
- - ">="
|
211
231
|
- !ruby/object:Gem::Version
|
232
|
+
hash: 3
|
212
233
|
segments:
|
213
234
|
- 0
|
214
235
|
version: "0"
|
@@ -217,6 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
217
238
|
requirements:
|
218
239
|
- - ">="
|
219
240
|
- !ruby/object:Gem::Version
|
241
|
+
hash: 3
|
220
242
|
segments:
|
221
243
|
- 0
|
222
244
|
version: "0"
|