netzke-basepack 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +6 -0
- data/Manifest +2 -0
- data/Rakefile +1 -1
- data/generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb +1 -0
- data/javascripts/basepack.js +95 -67
- data/javascripts/check_column.js +33 -0
- data/lib/netzke-basepack.rb +1 -0
- data/lib/netzke/ar_ext.rb +2 -0
- data/lib/netzke/border_layout_panel.rb +2 -2
- data/lib/netzke/column.rb +2 -4
- data/lib/netzke/container.rb +9 -9
- data/lib/netzke/fields_configurator.rb +66 -0
- data/lib/netzke/form_panel.rb +11 -14
- data/lib/netzke/grid_panel.rb +19 -27
- data/lib/netzke/grid_panel_interface.rb +3 -1
- data/lib/netzke/grid_panel_js_builder.rb +99 -83
- data/lib/netzke/properties_tool.rb +14 -14
- data/lib/netzke/property_grid.rb +1 -1
- data/lib/netzke/wrapper.rb +2 -2
- data/netzke-basepack.gemspec +7 -7
- metadata +6 -3
data/CHANGELOG
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
v0.3.1
|
2
|
+
Added the "conditions" configuration option to GridPanel to limit the search
|
3
|
+
Basic column editor for grids has been replaced with FieldsConfigurator, which can do a bit more
|
4
|
+
Added Checkbox column/form-field type for boolean fields
|
5
|
+
"renderer" configuration option added for grid columns - any Ext.util.Format renderer can be specified there (thanks to Josh Holt for the initial idea)
|
6
|
+
|
1
7
|
v0.3.0
|
2
8
|
Added BasicApp widget - the base for a Ext.Viewport based ("application") widget with support for dynamic widget loading, browser history, authentification, and more. See the demo an http://netzke-demo.writelesscode.com
|
3
9
|
|
data/Manifest
CHANGED
@@ -9,6 +9,7 @@ generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb
|
|
9
9
|
init.rb
|
10
10
|
install.rb
|
11
11
|
javascripts/basepack.js
|
12
|
+
javascripts/check_column.js
|
12
13
|
javascripts/filters.js
|
13
14
|
lib/app/models/netzke_form_panel_field.rb
|
14
15
|
lib/app/models/netzke_grid_panel_column.rb
|
@@ -18,6 +19,7 @@ lib/netzke/basic_app.rb
|
|
18
19
|
lib/netzke/border_layout_panel.rb
|
19
20
|
lib/netzke/column.rb
|
20
21
|
lib/netzke/container.rb
|
22
|
+
lib/netzke/fields_configurator.rb
|
21
23
|
lib/netzke/form_panel.rb
|
22
24
|
lib/netzke/grid_panel.rb
|
23
25
|
lib/netzke/grid_panel_interface.rb
|
data/Rakefile
CHANGED
@@ -5,7 +5,7 @@ Echoe.new("netzke-basepack") do |p|
|
|
5
5
|
p.email = "sergei@writelesscode.com"
|
6
6
|
p.summary = "Base Netzke widgets - grid, form, tree, and more"
|
7
7
|
p.url = "http://writelesscode.com"
|
8
|
-
p.runtime_dependencies = ["searchlogic >=1.6.2", "netzke-core >= 0.2.
|
8
|
+
p.runtime_dependencies = ["searchlogic >=1.6.2", "netzke-core >= 0.2.4"]
|
9
9
|
p.development_dependencies = []
|
10
10
|
p.test_pattern = 'test/**/*_test.rb'
|
11
11
|
|
data/javascripts/basepack.js
CHANGED
@@ -1,82 +1,110 @@
|
|
1
1
|
// Editors for grid cells and form fields
|
2
2
|
Ext.netzke.editors = {
|
3
|
-
|
4
|
-
|
3
|
+
combo_box: function(c, config){
|
4
|
+
var row = Ext.data.Record.create([{name:'id'}])
|
5
5
|
var store = new Ext.data.Store({
|
6
|
-
proxy: new Ext.data.HttpProxy({url:config.interface.getCbChoices, jsonData:{column:c.name}}),
|
7
|
-
reader: new Ext.data.ArrayReader({root:'data', id:0}, row)
|
6
|
+
proxy : new Ext.data.HttpProxy({url:config.interface.getCbChoices, jsonData:{column:c.name}}),
|
7
|
+
reader : new Ext.data.ArrayReader({root:'data', id:0}, row)
|
8
8
|
})
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
|
10
|
+
var comboBox = new Ext.form.ComboBox({
|
11
|
+
mode : 'remote',
|
12
|
+
displayField : 'id',
|
13
|
+
valueField : 'id',
|
14
|
+
triggerAction : 'all',
|
15
|
+
typeAhead : true,
|
16
|
+
selectOnFocus : true,
|
17
|
+
store : store
|
15
18
|
})
|
16
|
-
|
19
|
+
|
20
|
+
// let user enter values that are not in the store
|
21
|
+
comboBox.on('blur', function(cb){
|
22
|
+
cb.setValue(cb.getRawValue());
|
23
|
+
});
|
24
|
+
comboBox.on('specialkey', function(cb, event){
|
25
|
+
if (event.getKey() == 9 || event.getKey() == 13) {cb.setValue(cb.getRawValue());}
|
26
|
+
});
|
27
|
+
|
28
|
+
return comboBox;
|
29
|
+
},
|
17
30
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
31
|
+
text_field: function(c, config){
|
32
|
+
return new Ext.form.TextField({
|
33
|
+
selectOnFocus:true
|
34
|
+
})
|
35
|
+
},
|
36
|
+
|
37
|
+
checkbox: function(c, config){
|
38
|
+
return new Ext.form.TextField({
|
39
|
+
selectOnFocus:true
|
40
|
+
})
|
41
|
+
},
|
42
|
+
|
43
|
+
number_field: function(c, config){
|
44
|
+
return new Ext.form.NumberField({
|
45
|
+
selectOnFocus:true
|
46
|
+
})
|
47
|
+
},
|
48
|
+
|
49
|
+
// TODO: it's simply a text field for now
|
50
|
+
datetime: function(c, config){
|
51
|
+
return new Ext.form.TextField({
|
52
|
+
selectOnFocus:true
|
53
|
+
})
|
54
|
+
}
|
42
55
|
};
|
43
56
|
|
57
|
+
Ext.netzke.renderer = function(renderer, c, config){
|
58
|
+
res = Ext.emptyFn;
|
59
|
+
switch (renderer) {
|
60
|
+
|
61
|
+
// custom renderers can be later added like this:
|
62
|
+
case 'my_renderer':
|
63
|
+
res = function(value){ return "Not implemented" };
|
64
|
+
break
|
65
|
+
|
66
|
+
// falls back to Ext.util.Format renderers
|
67
|
+
default:
|
68
|
+
res = Ext.util.Format[renderer]
|
69
|
+
break
|
70
|
+
}
|
71
|
+
return res
|
72
|
+
}
|
73
|
+
|
44
74
|
// Mapping of editor field to grid filters
|
45
75
|
Ext.netzke.filterMap = {
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
76
|
+
number_field:'Numeric',
|
77
|
+
text_field:'String',
|
78
|
+
datetime:'String',
|
79
|
+
checkbox:'Boolean',
|
80
|
+
combo_box:'String',
|
81
|
+
date:'Date'
|
52
82
|
}
|
53
83
|
|
54
84
|
Ext.data.RecordArrayReader = Ext.extend(Ext.data.JsonReader, {
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
values[f.name] = v;
|
76
|
-
}
|
77
|
-
var record = new recordType(values, id);
|
78
|
-
record.json = n;
|
79
|
-
// }
|
80
|
-
return record;
|
85
|
+
/**
|
86
|
+
* Create a data block containing Ext.data.Records from an Array.
|
87
|
+
* @param {Object} o An Array of row objects which represents the dataset.
|
88
|
+
* @return {Object} data A data block which is used by an Ext.data.Store object as
|
89
|
+
* a cache of Ext.data.Records.
|
90
|
+
*/
|
91
|
+
readRecord : function(o){
|
92
|
+
var sid = this.meta ? this.meta.id : null;
|
93
|
+
var recordType = this.recordType, fields = recordType.prototype.fields;
|
94
|
+
var records = [];
|
95
|
+
var root = o;
|
96
|
+
var n = root;
|
97
|
+
var values = {};
|
98
|
+
var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
|
99
|
+
for(var j = 0, jlen = fields.length; j < jlen; j++){
|
100
|
+
var f = fields.items[j];
|
101
|
+
var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j;
|
102
|
+
var v = n[k] !== undefined ? n[k] : f.defaultValue;
|
103
|
+
v = f.convert(v, n);
|
104
|
+
values[f.name] = v;
|
81
105
|
}
|
106
|
+
var record = new recordType(values, id);
|
107
|
+
record.json = n;
|
108
|
+
return record;
|
109
|
+
}
|
82
110
|
});
|
@@ -0,0 +1,33 @@
|
|
1
|
+
// CheckColumn
|
2
|
+
Ext.grid.CheckColumn = function(config){
|
3
|
+
Ext.apply(this, config);
|
4
|
+
if(!this.id){
|
5
|
+
this.id = Ext.id();
|
6
|
+
}
|
7
|
+
this.renderer = this.renderer.createDelegate(this);
|
8
|
+
};
|
9
|
+
|
10
|
+
Ext.grid.CheckColumn.prototype ={
|
11
|
+
init : function(grid){
|
12
|
+
this.grid = grid;
|
13
|
+
if (this.disabled) return; // SK
|
14
|
+
this.grid.on('render', function(){
|
15
|
+
var view = this.grid.getView();
|
16
|
+
view.mainBody.on('mousedown', this.onMouseDown, this);
|
17
|
+
}, this);
|
18
|
+
},
|
19
|
+
|
20
|
+
onMouseDown : function(e, t){
|
21
|
+
if(t.className && t.className.indexOf('x-grid3-cc-'+this.id) != -1){
|
22
|
+
e.stopEvent();
|
23
|
+
var index = this.grid.getView().findRowIndex(t);
|
24
|
+
var record = this.grid.store.getAt(index);
|
25
|
+
record.set(this.dataIndex, !record.data[this.dataIndex]);
|
26
|
+
}
|
27
|
+
},
|
28
|
+
|
29
|
+
renderer : function(v, p, record){
|
30
|
+
p.css += ' x-grid3-check-col-td';
|
31
|
+
return '<div class="x-grid3-check-col'+(v?'-on':'')+' x-grid3-cc-'+this.id+'"> </div>';
|
32
|
+
}
|
33
|
+
};
|
data/lib/netzke-basepack.rb
CHANGED
@@ -18,6 +18,7 @@ end
|
|
18
18
|
|
19
19
|
# Include the javascript
|
20
20
|
Netzke::Base.config[:javascripts] << "#{File.dirname(__FILE__)}/../javascripts/basepack.js"
|
21
|
+
Netzke::Base.config[:javascripts] << "#{File.dirname(__FILE__)}/../javascripts/check_column.js"
|
21
22
|
|
22
23
|
# TODO: implement configurable loading of JS, to spare the traffic at the initial loading
|
23
24
|
extjs_dir = "#{RAILS_ROOT}/public/extjs"
|
data/lib/netzke/ar_ext.rb
CHANGED
@@ -160,6 +160,8 @@ module Netzke
|
|
160
160
|
assoc_method = %w{name title label}.detect{|m| (assoc.klass.instance_methods + assoc.klass.column_names).include?(m) } || assoc.klass.primary_key
|
161
161
|
res[:name] = "#{assoc.name}__#{assoc_method}"
|
162
162
|
end
|
163
|
+
|
164
|
+
res[:width] = 50 if res[:editor] == :checkbox # more narrow column for checkboxes
|
163
165
|
|
164
166
|
# merge with the given confg, which has the priority
|
165
167
|
config.delete(:name) # because we might have changed the name
|
@@ -50,7 +50,7 @@ module Netzke
|
|
50
50
|
});
|
51
51
|
panel.oldSize.width = w;
|
52
52
|
}
|
53
|
-
|
53
|
+
return true;
|
54
54
|
}, this);
|
55
55
|
else if (item.region == 'south' || item.region == 'north') item.on('resize', function(panel, w, h){
|
56
56
|
if (panel.oldSize.height != h) {
|
@@ -60,7 +60,7 @@ module Netzke
|
|
60
60
|
});
|
61
61
|
panel.oldSize.height = h;
|
62
62
|
}
|
63
|
-
|
63
|
+
return true;
|
64
64
|
}, this);
|
65
65
|
}, this);
|
66
66
|
this.un('afterlayout', this.setResizeEvents, this); // to avoid redefinition of resize events
|
data/lib/netzke/column.rb
CHANGED
@@ -6,10 +6,8 @@ module Netzke
|
|
6
6
|
|
7
7
|
# layout = NetzkeLayout.create(:widget_name => widget.id_name, :items_class => self.name, :user_id => NetzkeLayout.user_id)
|
8
8
|
|
9
|
-
data_class
|
10
|
-
|
11
|
-
exposed_columns = normalize_columns(data_class.exposed_columns) # columns exposed from the data class
|
12
|
-
|
9
|
+
data_class = widget.config[:data_class_name].constantize
|
10
|
+
exposed_columns = normalize_columns(data_class.exposed_columns) # columns exposed from the data class
|
13
11
|
columns_from_config = widget.config[:columns] && normalize_columns(widget.config[:columns]) # columns specified in widget's config
|
14
12
|
|
15
13
|
if columns_from_config
|
data/lib/netzke/container.rb
CHANGED
@@ -46,16 +46,16 @@ module Netzke
|
|
46
46
|
def self.js_items
|
47
47
|
items.inject([]) do |a,i|
|
48
48
|
a << {
|
49
|
-
:title
|
50
|
-
:layout
|
51
|
-
:id
|
52
|
-
# :id
|
53
|
-
:items
|
49
|
+
:title => i.to_s.humanize,
|
50
|
+
:layout => 'fit',
|
51
|
+
:id => i.to_s,
|
52
|
+
# :id => "#{config[:name]}_#{i.to_s}",
|
53
|
+
:items => ([i.to_s.to_js.l] if !aggregatees[i][:late_aggregation]),
|
54
54
|
# these listeners will be different for tab_panel and accordion
|
55
|
-
:collapsed
|
56
|
-
:listeners
|
57
|
-
|
58
|
-
|
55
|
+
:collapsed => !aggregatees[i][:active],
|
56
|
+
:listeners => {
|
57
|
+
# :activate => {:fn => "function(p){this.feedback(p.id)}".l, :scope => this},
|
58
|
+
:expand => {:fn => "this.loadItemWidget".l, :scope => this}
|
59
59
|
}
|
60
60
|
}
|
61
61
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Netzke
|
2
|
+
class FieldsConfigurator < GridPanel
|
3
|
+
interface :load_defaults
|
4
|
+
|
5
|
+
def initialize(*args)
|
6
|
+
super
|
7
|
+
|
8
|
+
# process config[:layout]
|
9
|
+
config[:conditions] = {:layout_id => (config[:layout] && config[:layout].id)}
|
10
|
+
config[:columns] = [
|
11
|
+
:id,
|
12
|
+
:label,
|
13
|
+
{:name => :read_only, :label => "R/O"},
|
14
|
+
:hidden,
|
15
|
+
{:name => :width, :width => 50},
|
16
|
+
{:name => :editor, :editor => :combo_box},
|
17
|
+
{:name => :renderer, :editor => :combo_box}
|
18
|
+
]
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def initial_config
|
23
|
+
super.recursive_merge({
|
24
|
+
:name => 'columns',
|
25
|
+
:widget_class_name => "GridPanel",
|
26
|
+
:data_class_name => "NetzkeGridPanelColumn",
|
27
|
+
:ext_config => {:title => false},
|
28
|
+
# :conditions => {:layout_id => config[:layout].id},
|
29
|
+
:active => true
|
30
|
+
})
|
31
|
+
end
|
32
|
+
|
33
|
+
def actions
|
34
|
+
super + [{
|
35
|
+
:text => 'Restore defaults', :handler => 'loadDefaults'
|
36
|
+
}]
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.js_extend_properties
|
40
|
+
super.merge({
|
41
|
+
:load_defaults => <<-JS.l,
|
42
|
+
function(){
|
43
|
+
Ext.Msg.confirm('Confirm', 'Are you sure?', function(btn){
|
44
|
+
if (btn == 'yes') {
|
45
|
+
Ext.Ajax.request({
|
46
|
+
url:this.initialConfig.interface.loadDefaults,
|
47
|
+
callback:function(){
|
48
|
+
this.store.reload();
|
49
|
+
},
|
50
|
+
scope:this
|
51
|
+
})
|
52
|
+
}
|
53
|
+
}, this);
|
54
|
+
}
|
55
|
+
JS
|
56
|
+
})
|
57
|
+
end
|
58
|
+
|
59
|
+
def load_defaults(params)
|
60
|
+
NetzkeLayout.destroy(config[:layout].id)
|
61
|
+
NetzkeGridPanelColumn.create_layout_for_widget(parent.parent)
|
62
|
+
{}
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
data/lib/netzke/form_panel.rb
CHANGED
@@ -21,14 +21,14 @@ module Netzke
|
|
21
21
|
|
22
22
|
def js_default_config
|
23
23
|
super.merge({
|
24
|
-
:auto_scroll
|
25
|
-
:bbar
|
26
|
-
# :plugins
|
27
|
-
:items
|
28
|
-
:default_type
|
29
|
-
:body_style
|
30
|
-
:label_width
|
31
|
-
:listeners
|
24
|
+
:auto_scroll => true,
|
25
|
+
:bbar => "config.actions".l,
|
26
|
+
# :plugins => "plugins".l,
|
27
|
+
:items => "fields".l,
|
28
|
+
:default_type => 'textfield',
|
29
|
+
:body_style => 'padding:5px 5px 0',
|
30
|
+
:label_width => 150,
|
31
|
+
:listeners => {:afterlayout => {:fn => "this.afterlayoutHandler".l, :scope => this}},
|
32
32
|
|
33
33
|
#custom configs
|
34
34
|
:auto_load_data => true,
|
@@ -152,12 +152,9 @@ module Netzke
|
|
152
152
|
logger.debug { "!!! params: #{params.inspect}" }
|
153
153
|
klass = config[:data_class_name].constantize
|
154
154
|
case params[:neighbour]
|
155
|
-
when "previous"
|
156
|
-
|
157
|
-
|
158
|
-
book = klass.next(params[:id])
|
159
|
-
else
|
160
|
-
book = klass.find(params[:id])
|
155
|
+
when "previous" then book = klass.previous(params[:id])
|
156
|
+
when "next" then book = klass.next(params[:id])
|
157
|
+
else book = klass.find(params[:id])
|
161
158
|
end
|
162
159
|
[book && book.to_array(get_fields)].to_json
|
163
160
|
end
|
data/lib/netzke/grid_panel.rb
CHANGED
@@ -47,45 +47,38 @@ module Netzke
|
|
47
47
|
def initial_config
|
48
48
|
{
|
49
49
|
:ext_config => {
|
50
|
-
:config_tool
|
51
|
-
:enable_column_filters => Netzke::Base.config[:grid_panel][:filters],
|
52
|
-
:enable_column_move
|
53
|
-
:enable_column_resize
|
54
|
-
:border
|
55
|
-
:load_mask
|
50
|
+
:config_tool => false,
|
51
|
+
:enable_column_filters => Netzke::Base.config[:grid_panel][:filters],
|
52
|
+
:enable_column_move => true,
|
53
|
+
:enable_column_resize => true,
|
54
|
+
:border => true,
|
55
|
+
:load_mask => true
|
56
56
|
},
|
57
57
|
:persistent_layout => true,
|
58
58
|
:persistent_config => true
|
59
59
|
}
|
60
60
|
end
|
61
61
|
|
62
|
+
def initial_dependencies
|
63
|
+
["FieldsConfigurator"] # TODO: make this happen automatically
|
64
|
+
end
|
65
|
+
|
62
66
|
def property_widgets
|
63
67
|
[{
|
64
|
-
:name
|
65
|
-
:widget_class_name => "
|
66
|
-
:
|
67
|
-
:
|
68
|
-
:
|
68
|
+
:name => 'columns',
|
69
|
+
:widget_class_name => "FieldsConfigurator",
|
70
|
+
:ext_config => {:title => false},
|
71
|
+
:active => true,
|
72
|
+
:layout => NetzkeLayout.by_widget(id_name)
|
69
73
|
},{
|
70
|
-
:name
|
71
|
-
:widget_class_name
|
72
|
-
:host_widget_name
|
74
|
+
:name => 'general',
|
75
|
+
:widget_class_name => "PreferenceGrid",
|
76
|
+
:host_widget_name => id_name,
|
73
77
|
:default_properties => available_permissions.map{ |k| {:name => "permissions.#{k}", :value => @permissions[k.to_sym]}},
|
74
|
-
:ext_config
|
78
|
+
:ext_config => {:title => false}
|
75
79
|
}]
|
76
80
|
end
|
77
81
|
|
78
|
-
## Data for properties grid
|
79
|
-
def properties__columns__get_data(params = {})
|
80
|
-
# add extra filter to show only the columns for the current grid (filtered by layout_id)
|
81
|
-
layout_id = layout_manager_class.by_widget(id_name).id
|
82
|
-
params[:filter] ||= {}
|
83
|
-
params[:filter].merge!(:extra_conditions => {:field => 'layout_id', :data => {:type => 'numeric', :value => layout_id}})
|
84
|
-
|
85
|
-
columns_widget = aggregatee_instance(:properties__columns)
|
86
|
-
columns_widget.interface_get_data(params)
|
87
|
-
end
|
88
|
-
|
89
82
|
def properties__general__load_source(params = {})
|
90
83
|
w = aggregatee_instance(:properties__general)
|
91
84
|
w.interface_load_source(params)
|
@@ -134,7 +127,6 @@ module Netzke
|
|
134
127
|
# [{:text => "config.dataClassName".l, :menu => "config.actions".l}]
|
135
128
|
# end
|
136
129
|
|
137
|
-
# include ColumnOperations
|
138
130
|
include PropertiesTool # it will load aggregation with name :properties into a modal window
|
139
131
|
end
|
140
132
|
end
|
@@ -100,7 +100,9 @@ module Netzke::GridPanelInterface
|
|
100
100
|
|
101
101
|
# get records
|
102
102
|
def get_records(params)
|
103
|
-
search_params = normalize_params(params)
|
103
|
+
search_params = normalize_params(params) # make params coming from the browser understandable by searchlogic
|
104
|
+
search_params[:conditions].recursive_merge!(config[:conditions] || {}) # merge with conditions coming from the config
|
105
|
+
|
104
106
|
raise ArgumentError, "No data_class_name specified for widget '#{config[:name]}'" if !config[:data_class_name]
|
105
107
|
records = config[:data_class_name].constantize.all(search_params.clone) # clone needed as searchlogic removes :conditions key from the hash
|
106
108
|
# output_array = []
|
@@ -29,25 +29,25 @@ module Netzke::GridPanelJsBuilder
|
|
29
29
|
|
30
30
|
def js_default_config
|
31
31
|
super.merge({
|
32
|
-
:store
|
33
|
-
:cm
|
34
|
-
:sel_model
|
35
|
-
:auto_scroll
|
36
|
-
:click_to_edit
|
32
|
+
:store => "ds".l,
|
33
|
+
:cm => "cm".l,
|
34
|
+
:sel_model => "new Ext.grid.RowSelectionModel()".l,
|
35
|
+
:auto_scroll => true,
|
36
|
+
:click_to_edit => 2,
|
37
37
|
:track_mouse_over => true,
|
38
|
-
# :bbar
|
39
|
-
:bbar
|
40
|
-
:plugins
|
38
|
+
# :bbar => "config.actions".l,
|
39
|
+
:bbar => js_bbar,
|
40
|
+
:plugins => "plugins".l,
|
41
41
|
|
42
42
|
#custom configs
|
43
|
-
:auto_load_data
|
43
|
+
:auto_load_data => true
|
44
44
|
})
|
45
45
|
end
|
46
46
|
|
47
47
|
def js_before_constructor
|
48
48
|
<<-JS
|
49
49
|
var plugins = [];
|
50
|
-
|
50
|
+
if (!config.columns) this.feedback('No columns defined for grid '+config.id);
|
51
51
|
this.recordConfig = [];
|
52
52
|
Ext.each(config.columns, function(column){this.recordConfig.push({name:column.name})}, this);
|
53
53
|
this.Row = Ext.data.Record.create(this.recordConfig);
|
@@ -65,15 +65,31 @@ module Netzke::GridPanelJsBuilder
|
|
65
65
|
this.cmConfig = [];
|
66
66
|
Ext.each(config.columns, function(c){
|
67
67
|
var editor = (c.readOnly || !config.permissions.update) ? null : Ext.netzke.editors[c.editor](c, config);
|
68
|
+
var renderer = Ext.netzke.renderer(c.renderer);
|
69
|
+
|
70
|
+
if (c.editor == 'checkbox') {
|
71
|
+
var plugin = new Ext.grid.CheckColumn({
|
72
|
+
header: c.label || c.name,
|
73
|
+
dataIndex: c.name,
|
74
|
+
disabled: c.readOnly,
|
75
|
+
hidden: c.hidden,
|
76
|
+
width: c.width
|
77
|
+
});
|
78
|
+
plugins.push(plugin);
|
79
|
+
this.cmConfig.push(plugin);
|
80
|
+
|
81
|
+
} else {
|
82
|
+
this.cmConfig.push({
|
83
|
+
header: c.label || c.name,
|
84
|
+
dataIndex: c.name,
|
85
|
+
hidden: c.hidden,
|
86
|
+
width: c.width,
|
87
|
+
editor: editor,
|
88
|
+
renderer: renderer,
|
89
|
+
sortable: true
|
90
|
+
})
|
91
|
+
}
|
68
92
|
|
69
|
-
this.cmConfig.push({
|
70
|
-
header: c.label || c.name,
|
71
|
-
dataIndex: c.name,
|
72
|
-
hidden: c.hidden,
|
73
|
-
width: c.width,
|
74
|
-
editor: editor,
|
75
|
-
sortable: true
|
76
|
-
})
|
77
93
|
}, this);
|
78
94
|
|
79
95
|
var cm = new Ext.grid.ColumnModel(this.cmConfig);
|
@@ -86,7 +102,7 @@ module Netzke::GridPanelJsBuilder
|
|
86
102
|
Ext.each(config.columns, function(c){
|
87
103
|
filters.push({type:Ext.netzke.filterMap[c.editor], dataIndex:c.name})
|
88
104
|
})
|
89
|
-
|
105
|
+
var gridFilters = new Ext.grid.GridFilters({filters:filters});
|
90
106
|
plugins.push(gridFilters);
|
91
107
|
}
|
92
108
|
|
@@ -96,7 +112,7 @@ module Netzke::GridPanelJsBuilder
|
|
96
112
|
def js_listeners
|
97
113
|
super.merge({
|
98
114
|
:columnresize => {:fn => "this.onColumnResize".l, :scope => this},
|
99
|
-
:columnmove
|
115
|
+
:columnmove => {:fn => "this.onColumnMove".l, :scope => this}
|
100
116
|
})
|
101
117
|
end
|
102
118
|
|
@@ -136,12 +152,12 @@ module Netzke::GridPanelJsBuilder
|
|
136
152
|
var r = new this.Row(rowConfig); // TODO: add default values
|
137
153
|
r.set('id', -r.id); // to distinguish new records by negative values
|
138
154
|
this.stopEditing();
|
139
|
-
|
140
|
-
|
141
|
-
|
155
|
+
this.store.add(r);
|
156
|
+
this.store.newRecords = this.store.newRecords || []
|
157
|
+
this.store.newRecords.push(r);
|
142
158
|
// console.info(this.store.newRecords);
|
143
159
|
this.tryStartEditing(this.store.indexOf(r));
|
144
|
-
|
160
|
+
}
|
145
161
|
JS
|
146
162
|
|
147
163
|
:edit => <<-JS.l,
|
@@ -155,17 +171,17 @@ module Netzke::GridPanelJsBuilder
|
|
155
171
|
|
156
172
|
# try editing the first editable (not hidden, not read-only) sell
|
157
173
|
:try_start_editing => <<-JS.l,
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
174
|
+
function(row){
|
175
|
+
if (row == null) return;
|
176
|
+
var editableColumns = this.getColumnModel().getColumnsBy(function(columnConfig, index){
|
177
|
+
return !columnConfig.hidden && !!columnConfig.editor;
|
178
|
+
});
|
179
|
+
// console.info(editableColumns);
|
180
|
+
var firstEditableColumn = editableColumns[0];
|
181
|
+
if (firstEditableColumn){
|
182
|
+
this.startEditing(row, firstEditableColumn.id);
|
183
|
+
}
|
184
|
+
}
|
169
185
|
JS
|
170
186
|
|
171
187
|
:delete => <<-JS.l,
|
@@ -175,19 +191,19 @@ module Netzke::GridPanelJsBuilder
|
|
175
191
|
if (btn == 'yes') {
|
176
192
|
var records = []
|
177
193
|
this.getSelectionModel().each(function(r){
|
178
|
-
|
194
|
+
records.push(r.get('id'));
|
179
195
|
}, this);
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
196
|
+
Ext.Ajax.request({
|
197
|
+
url: this.initialConfig.interface.deleteData,
|
198
|
+
params: {records: Ext.encode(records)},
|
199
|
+
success:function(r){
|
200
|
+
var m = Ext.decode(r.responseText);
|
201
|
+
this.store.reload();
|
186
202
|
// this.loadWithFeedback();
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
203
|
+
this.feedback(m.flash);
|
204
|
+
},
|
205
|
+
scope:this
|
206
|
+
});
|
191
207
|
}
|
192
208
|
}, this);
|
193
209
|
}
|
@@ -198,46 +214,46 @@ module Netzke::GridPanelJsBuilder
|
|
198
214
|
|
199
215
|
var newRecords = [];
|
200
216
|
if (this.store.newRecords){
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
217
|
+
Ext.each(this.store.newRecords, function(r){
|
218
|
+
newRecords.push(r.getChanges())
|
219
|
+
r.commit() // commit the changes, so that they are not picked up by getModifiedRecords() further down
|
220
|
+
}, this);
|
221
|
+
delete this.store.newRecords;
|
222
|
+
}
|
223
|
+
|
224
|
+
var updatedRecords = [];
|
225
|
+
Ext.each(this.store.getModifiedRecords(),
|
226
|
+
function(record) {
|
227
|
+
var completeRecordData = {};
|
228
|
+
Ext.apply(completeRecordData, Ext.apply(record.getChanges(), {id:record.get('id')}));
|
229
|
+
updatedRecords.push(completeRecordData);
|
230
|
+
},
|
231
|
+
this);
|
216
232
|
|
217
233
|
if (newRecords.length > 0 || updatedRecords.length > 0) {
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
234
|
+
Ext.Ajax.request({
|
235
|
+
url:this.initialConfig.interface.postData,
|
236
|
+
params: {
|
237
|
+
updated_records: Ext.encode(updatedRecords),
|
238
|
+
created_records: Ext.encode(newRecords),
|
239
|
+
filters: this.store.baseParams.filters
|
240
|
+
},
|
241
|
+
success:function(response){
|
242
|
+
var m = Ext.decode(response.responseText);
|
243
|
+
if (m.success) {
|
244
|
+
this.store.reload();
|
229
245
|
// this.loadWithFeedback();
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
246
|
+
this.store.commitChanges();
|
247
|
+
this.feedback(m.flash);
|
248
|
+
} else {
|
249
|
+
this.feedback(m.flash);
|
250
|
+
}
|
251
|
+
},
|
252
|
+
failure:function(response){
|
253
|
+
this.feedback('Bad response from server');
|
254
|
+
},
|
255
|
+
scope:this
|
256
|
+
});
|
241
257
|
}
|
242
258
|
|
243
259
|
}
|
@@ -28,31 +28,31 @@ module Netzke
|
|
28
28
|
var w = new Ext.Window({
|
29
29
|
title:'Config',
|
30
30
|
layout:'fit',
|
31
|
-
|
31
|
+
modal:true,
|
32
32
|
width:window.innerWidth*.9,
|
33
33
|
height:window.innerHeight*.9,
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
closeAction:'destroy',
|
35
|
+
buttons:[{
|
36
|
+
text:'Submit',
|
37
|
+
handler:function(){this.ownerCt.closeRes = 'OK'; this.ownerCt.destroy()}
|
38
|
+
}]
|
39
39
|
|
40
|
-
|
40
|
+
});
|
41
41
|
|
42
|
-
|
42
|
+
w.show(null, function(){
|
43
43
|
w.loadWidget(this.initialConfig.id+"__properties__get_widget");
|
44
|
-
|
44
|
+
}, this);
|
45
45
|
|
46
|
-
|
47
|
-
|
46
|
+
w.on('destroy', function(){
|
47
|
+
if (w.closeRes == 'OK'){
|
48
48
|
widget = this;
|
49
|
-
|
49
|
+
if (widget.ownerCt) {
|
50
50
|
widget.ownerCt.loadWidget(widget.initialConfig.interface.getWidget);
|
51
51
|
} else {
|
52
52
|
this.feedback('Reload current window') // no aggregation
|
53
53
|
}
|
54
|
-
|
55
|
-
|
54
|
+
}
|
55
|
+
}, this)
|
56
56
|
}
|
57
57
|
JS
|
58
58
|
})
|
data/lib/netzke/property_grid.rb
CHANGED
data/lib/netzke/wrapper.rb
CHANGED
@@ -4,9 +4,9 @@ module Netzke
|
|
4
4
|
# make us an invisible 'fit'-layout panel
|
5
5
|
super.merge({
|
6
6
|
:layout => 'fit',
|
7
|
-
:title
|
7
|
+
:title => false,
|
8
8
|
:border => false,
|
9
|
-
:items
|
9
|
+
:items => ["new Ext.componentCache[config.itemConfig.widgetClassName](config.itemConfig)".l]
|
10
10
|
})
|
11
11
|
end
|
12
12
|
|
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.3.
|
5
|
+
s.version = "0.3.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{2009-01-
|
9
|
+
s.date = %q{2009-01-28}
|
10
10
|
s.description = %q{Base Netzke widgets - grid, form, tree, and more}
|
11
11
|
s.email = %q{sergei@writelesscode.com}
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "lib/app/models/netzke_form_panel_field.rb", "lib/app/models/netzke_grid_panel_column.rb", "lib/netzke/accordion_panel.rb", "lib/netzke/ar_ext.rb", "lib/netzke/basic_app.rb", "lib/netzke/border_layout_panel.rb", "lib/netzke/column.rb", "lib/netzke/container.rb", "lib/netzke/form_panel.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_interface.rb", "lib/netzke/grid_panel_js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/wrapper.rb", "lib/netzke-basepack.rb", "LICENSE", "README.rdoc", "tasks/netzke_basepack_tasks.rake"]
|
13
|
-
s.files = ["CHANGELOG", "css/basepack.css", "generators/netzke_basepack/netzke_basepack_generator.rb", "generators/netzke_basepack/USAGE", "generators/netzke_form_panel/netzke_form_panel_generator.rb", "generators/netzke_form_panel/templates/create_netzke_form_panel_fields.rb", "generators/netzke_grid_panel/netzke_grid_panel_generator.rb", "generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb", "init.rb", "install.rb", "javascripts/basepack.js", "javascripts/filters.js", "lib/app/models/netzke_form_panel_field.rb", "lib/app/models/netzke_grid_panel_column.rb", "lib/netzke/accordion_panel.rb", "lib/netzke/ar_ext.rb", "lib/netzke/basic_app.rb", "lib/netzke/border_layout_panel.rb", "lib/netzke/column.rb", "lib/netzke/container.rb", "lib/netzke/form_panel.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_interface.rb", "lib/netzke/grid_panel_js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/wrapper.rb", "lib/netzke-basepack.rb", "LICENSE", "Manifest", "Rakefile", "README.rdoc", "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/db/migrate/20090102223630_create_netzke_layouts.rb", "test/app_root/db/migrate/20090102223811_create_netzke_grid_panel_columns.rb", "test/app_root/script/console", "test/app_root/vendor/plugins/acts_as_list/init.rb", "test/app_root/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb", "test/app_root/vendor/plugins/acts_as_list/README", "test/ar_ext_test.rb", "test/border_layout_panel_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_panel_test.rb", "test/netzke_basepack_test.rb", "test/schema.rb", "test/test_helper.rb", "uninstall.rb", "netzke-basepack.gemspec"]
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "lib/app/models/netzke_form_panel_field.rb", "lib/app/models/netzke_grid_panel_column.rb", "lib/netzke/accordion_panel.rb", "lib/netzke/ar_ext.rb", "lib/netzke/basic_app.rb", "lib/netzke/border_layout_panel.rb", "lib/netzke/column.rb", "lib/netzke/container.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_interface.rb", "lib/netzke/grid_panel_js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/wrapper.rb", "lib/netzke-basepack.rb", "LICENSE", "README.rdoc", "tasks/netzke_basepack_tasks.rake"]
|
13
|
+
s.files = ["CHANGELOG", "css/basepack.css", "generators/netzke_basepack/netzke_basepack_generator.rb", "generators/netzke_basepack/USAGE", "generators/netzke_form_panel/netzke_form_panel_generator.rb", "generators/netzke_form_panel/templates/create_netzke_form_panel_fields.rb", "generators/netzke_grid_panel/netzke_grid_panel_generator.rb", "generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb", "init.rb", "install.rb", "javascripts/basepack.js", "javascripts/check_column.js", "javascripts/filters.js", "lib/app/models/netzke_form_panel_field.rb", "lib/app/models/netzke_grid_panel_column.rb", "lib/netzke/accordion_panel.rb", "lib/netzke/ar_ext.rb", "lib/netzke/basic_app.rb", "lib/netzke/border_layout_panel.rb", "lib/netzke/column.rb", "lib/netzke/container.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_interface.rb", "lib/netzke/grid_panel_js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/wrapper.rb", "lib/netzke-basepack.rb", "LICENSE", "Manifest", "Rakefile", "README.rdoc", "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/db/migrate/20090102223630_create_netzke_layouts.rb", "test/app_root/db/migrate/20090102223811_create_netzke_grid_panel_columns.rb", "test/app_root/script/console", "test/app_root/vendor/plugins/acts_as_list/init.rb", "test/app_root/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb", "test/app_root/vendor/plugins/acts_as_list/README", "test/ar_ext_test.rb", "test/border_layout_panel_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_panel_test.rb", "test/netzke_basepack_test.rb", "test/schema.rb", "test/test_helper.rb", "uninstall.rb", "netzke-basepack.gemspec"]
|
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.rdoc"]
|
@@ -26,13 +26,13 @@ Gem::Specification.new do |s|
|
|
26
26
|
|
27
27
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
28
28
|
s.add_runtime_dependency(%q<searchlogic>, [">= 1.6.2"])
|
29
|
-
s.add_runtime_dependency(%q<netzke-core>, [">= 0", "= 0.2.
|
29
|
+
s.add_runtime_dependency(%q<netzke-core>, [">= 0", "= 0.2.4"])
|
30
30
|
else
|
31
31
|
s.add_dependency(%q<searchlogic>, [">= 1.6.2"])
|
32
|
-
s.add_dependency(%q<netzke-core>, [">= 0", "= 0.2.
|
32
|
+
s.add_dependency(%q<netzke-core>, [">= 0", "= 0.2.4"])
|
33
33
|
end
|
34
34
|
else
|
35
35
|
s.add_dependency(%q<searchlogic>, [">= 1.6.2"])
|
36
|
-
s.add_dependency(%q<netzke-core>, [">= 0", "= 0.2.
|
36
|
+
s.add_dependency(%q<netzke-core>, [">= 0", "= 0.2.4"])
|
37
37
|
end
|
38
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netzke-basepack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.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: 2009-01-
|
12
|
+
date: 2009-01-28 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: "0"
|
34
34
|
- - "="
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 0.2.
|
36
|
+
version: 0.2.4
|
37
37
|
version:
|
38
38
|
description: Base Netzke widgets - grid, form, tree, and more
|
39
39
|
email: sergei@writelesscode.com
|
@@ -51,6 +51,7 @@ extra_rdoc_files:
|
|
51
51
|
- lib/netzke/border_layout_panel.rb
|
52
52
|
- lib/netzke/column.rb
|
53
53
|
- lib/netzke/container.rb
|
54
|
+
- lib/netzke/fields_configurator.rb
|
54
55
|
- lib/netzke/form_panel.rb
|
55
56
|
- lib/netzke/grid_panel.rb
|
56
57
|
- lib/netzke/grid_panel_interface.rb
|
@@ -76,6 +77,7 @@ files:
|
|
76
77
|
- init.rb
|
77
78
|
- install.rb
|
78
79
|
- javascripts/basepack.js
|
80
|
+
- javascripts/check_column.js
|
79
81
|
- javascripts/filters.js
|
80
82
|
- lib/app/models/netzke_form_panel_field.rb
|
81
83
|
- lib/app/models/netzke_grid_panel_column.rb
|
@@ -85,6 +87,7 @@ files:
|
|
85
87
|
- lib/netzke/border_layout_panel.rb
|
86
88
|
- lib/netzke/column.rb
|
87
89
|
- lib/netzke/container.rb
|
90
|
+
- lib/netzke/fields_configurator.rb
|
88
91
|
- lib/netzke/form_panel.rb
|
89
92
|
- lib/netzke/grid_panel.rb
|
90
93
|
- lib/netzke/grid_panel_interface.rb
|