netzke-basepack 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +14 -6
- data/README.rdoc +16 -31
- data/Rakefile +22 -16
- data/TODO.rdoc +1 -1
- data/app/models/netzke_field_list.rb +29 -29
- data/app/models/netzke_model_attr_list.rb +4 -4
- data/app/models/netzke_persistent_array_auto_model.rb +9 -9
- data/config/database.yml +2 -35
- data/features/accordion_panel.feature +1 -1
- data/features/form_panel.feature +2 -2
- data/features/grid_panel.feature +15 -3
- data/features/search_in_grid.feature +4 -4
- data/features/simple_panel.feature +4 -4
- data/features/step_definitions/pickle_steps.rb +2 -2
- data/features/step_definitions/web_steps.rb +5 -5
- data/features/support/env.rb +6 -6
- data/features/tab_panel.feature +1 -1
- data/javascripts/basepack.js +28 -28
- data/lib/netzke-basepack.rb +5 -5
- data/lib/netzke/active_record.rb +1 -1
- data/lib/netzke/active_record/association_attributes.rb +9 -9
- data/lib/netzke/active_record/attributes.rb +24 -23
- data/lib/netzke/active_record/combobox_options.rb +3 -3
- data/lib/netzke/active_record/relation_extensions.rb +4 -4
- data/lib/netzke/basepack.rb +4 -4
- data/{app/components → lib}/netzke/basepack/accordion_panel.rb +7 -7
- data/{app/components → lib}/netzke/basepack/basic_app.rb +18 -18
- data/{app/components → lib}/netzke/basepack/basic_app/statusbar_ext.js +0 -0
- data/lib/netzke/basepack/border_layout_panel.rb +101 -0
- data/{app/components → lib}/netzke/basepack/form_panel.rb +21 -21
- data/{app/components → lib}/netzke/basepack/form_panel/fields.rb +29 -36
- data/{app/components → lib}/netzke/basepack/form_panel/javascripts/netzkefileupload.js +0 -0
- data/{app/components → lib}/netzke/basepack/form_panel/javascripts/pre.js +9 -9
- data/{app/components → lib}/netzke/basepack/form_panel/javascripts/xcheckbox.js +1 -1
- data/{app/components → lib}/netzke/basepack/form_panel/services.rb +11 -11
- data/{app/components → lib}/netzke/basepack/grid_panel.rb +74 -92
- data/{app/components → lib}/netzke/basepack/grid_panel/columns.rb +34 -36
- data/{app/components → lib}/netzke/basepack/grid_panel/javascript.rb +7 -7
- data/{app/components → lib}/netzke/basepack/grid_panel/javascripts/advanced_search.js +10 -10
- data/{app/components → lib}/netzke/basepack/grid_panel/javascripts/edit_in_form.js +2 -2
- data/{app/components → lib}/netzke/basepack/grid_panel/javascripts/pre.js +31 -31
- data/{app/components → lib}/netzke/basepack/grid_panel/javascripts/rows-dd.js +1 -1
- data/{app/components → lib}/netzke/basepack/grid_panel/multi_edit_form.rb +2 -2
- data/{app/components → lib}/netzke/basepack/grid_panel/record_form_window.rb +3 -3
- data/{app/components → lib}/netzke/basepack/grid_panel/search_window.rb +11 -11
- data/{app/components → lib}/netzke/basepack/grid_panel/services.rb +28 -28
- data/{app/components → lib}/netzke/basepack/panel.rb +0 -0
- data/{app/components → lib}/netzke/basepack/search_panel.rb +11 -11
- data/{app/components → lib}/netzke/basepack/tab_panel.rb +7 -7
- data/lib/netzke/basepack/version.rb +1 -1
- data/{app/components → lib}/netzke/basepack/window.rb +14 -14
- data/{app/components → lib}/netzke/basepack/wrapper.rb +6 -6
- data/lib/netzke/data_accessor.rb +18 -18
- data/lib/netzke/fields_configurator.rb +30 -30
- data/lib/netzke/json_array_editor.rb +9 -9
- data/lib/netzke/masquerade_selector.rb +5 -5
- data/locale/en.yml +1 -1
- data/netzke-basepack.gemspec +252 -240
- data/spec/active_record/attributes_spec.rb +6 -1
- data/spec/active_record/relation_extensions_spec.rb +11 -11
- data/spec/components/form_panel_spec.rb +13 -19
- data/spec/components/grid_panel_spec.rb +1 -1
- data/test/rails_app/Gemfile +4 -3
- data/test/rails_app/Gemfile.lock +42 -50
- data/test/rails_app/app/components/book_grid.rb +4 -0
- data/test/rails_app/app/components/generic_user_form.rb +2 -2
- data/test/rails_app/app/components/simple_basic_app.rb +3 -3
- data/test/rails_app/app/components/simple_panel.rb +1 -1
- data/test/rails_app/app/components/some_border_layout.rb +12 -11
- data/test/rails_app/app/components/some_search_panel.rb +5 -5
- data/test/rails_app/app/components/user_form.rb +1 -1
- data/test/rails_app/app/components/window_component_loader.rb +2 -2
- data/test/rails_app/app/models/author.rb +7 -0
- data/test/rails_app/app/models/book.rb +3 -0
- data/test/rails_app/app/models/user.rb +1 -1
- data/test/rails_app/config/locales/es.yml +0 -1
- data/test/rails_app/config/routes.rb +2 -2
- data/test/rails_app/db/development_structure.sql +28 -3
- data/test/rails_app/db/migrate/20101026185816_create_authors.rb +14 -0
- data/test/rails_app/db/migrate/20101026190021_create_books.rb +17 -0
- data/test/rails_app/db/schema.rb +18 -1
- data/test/rails_app/public/javascripts/effects.js +1 -1
- data/test/rails_app/spec/models/author_spec.rb +5 -0
- data/test/rails_app/spec/models/book_spec.rb +5 -0
- data/test/test_helper.rb +1 -1
- data/test/unit/accordion_panel_test.rb +2 -2
- data/test/unit/active_record_basepack_test.rb +9 -9
- data/test/unit/fields_configuration_test.rb +4 -4
- data/test/unit/grid_panel_test.rb +8 -8
- data/test/unit/tab_panel_test.rb +2 -2
- metadata +49 -36
- data/.gitignore +0 -10
- data/app/components/netzke/basepack/border_layout_panel.rb +0 -39
@@ -31,7 +31,7 @@ module Netzke
|
|
31
31
|
# Whether the column will be in the hidden state (hide/show columns from the column menu, if it's enabled).
|
32
32
|
{:name => "hidden", :attr_type => :boolean},
|
33
33
|
|
34
|
-
# Whether the column should have "grid filters" enabled
|
34
|
+
# Whether the column should have "grid filters" enabled
|
35
35
|
# (see here: http://www.extjs.com/deploy/dev/examples/grid-filtering/grid-filter-local.html)
|
36
36
|
{:name => "with_filters", :attr_type => :boolean, :default_value => true, :header => "Filters"},
|
37
37
|
|
@@ -49,9 +49,9 @@ module Netzke
|
|
49
49
|
{:name => "sortable", :attr_type => :boolean, :default_value => true, :hidden => true},
|
50
50
|
]
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
# Normalized columns for the grid, e.g.:
|
56
56
|
# [{:name => :id, :hidden => true, ...}, {:name => :name, :editable => false, ...}, ...]
|
57
57
|
def columns(only_included = true)
|
@@ -65,7 +65,7 @@ module Netzke
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
# Columns that we fall back to when neither persistent columns, nor configured columns are present.
|
70
70
|
# If there's a model-level field configuration, it's being used.
|
71
71
|
# Otherwise the defaults straight from the ActiveRecord model ("netzke_attributes").
|
@@ -73,18 +73,18 @@ module Netzke
|
|
73
73
|
def default_columns
|
74
74
|
@default_columns ||= load_model_level_attrs || data_class.netzke_attributes
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
# Columns that represent a smart merge of default_columns and columns passed during the configuration.
|
78
78
|
def initial_columns(only_included = true)
|
79
79
|
# Normalize here, as from the config we can get symbols (names) instead of hashes
|
80
80
|
columns_from_config = config[:columns] && normalize_attrs(config[:columns])
|
81
|
-
|
82
|
-
|
81
|
+
|
82
|
+
|
83
83
|
if columns_from_config
|
84
84
|
# automatically add a column that reflects the primary key (unless specified in the config)
|
85
85
|
columns_from_config.insert(0, {:name => data_class.primary_key}) unless columns_from_config.any?{ |c| c[:name] == data_class.primary_key }
|
86
|
-
|
87
|
-
# reverse-merge each column hash from config with each column hash from exposed_attributes
|
86
|
+
|
87
|
+
# reverse-merge each column hash from config with each column hash from exposed_attributes
|
88
88
|
# (columns from config have higher priority)
|
89
89
|
for c in columns_from_config
|
90
90
|
corresponding_default_column = default_columns.find{ |k| k[:name] == c[:name] }
|
@@ -95,9 +95,9 @@ module Netzke
|
|
95
95
|
# we didn't have columns configured in component's config, so, use the columns from the data class
|
96
96
|
columns_for_create = default_columns
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
filter_out_excluded_columns(columns_for_create) if only_included
|
100
|
-
|
100
|
+
|
101
101
|
# Make the column config complete with the defaults
|
102
102
|
columns_for_create.each do |c|
|
103
103
|
detect_association(c)
|
@@ -112,65 +112,65 @@ module Netzke
|
|
112
112
|
|
113
113
|
columns_for_create
|
114
114
|
end
|
115
|
-
|
115
|
+
|
116
116
|
private
|
117
117
|
def filter_out_excluded_columns(cols)
|
118
118
|
cols.reject!{ |c| c[:included] == false }
|
119
119
|
end
|
120
|
-
|
120
|
+
|
121
121
|
# Stores modified columns in persistent storage
|
122
122
|
def save_columns!
|
123
123
|
# NetzkeFieldList.update_list_for_current_authority(global_id, columns(false), original_data_class.name) if persistent_config_enabled?
|
124
124
|
end
|
125
|
-
|
125
|
+
|
126
126
|
def load_columns
|
127
127
|
# NetzkeFieldList.read_list(global_id) if persistent_config_enabled?
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
def load_model_level_attrs
|
131
131
|
# NetzkeModelAttrList.read_list(data_class.name) if persistent_config_enabled?
|
132
132
|
end
|
133
|
-
|
133
|
+
|
134
134
|
def set_default_header(c)
|
135
135
|
c[:label] ||= c[:name].humanize
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
def set_default_editor(c)
|
139
139
|
c[:editor] ||= editor_for_attr_type(c[:attr_type])
|
140
140
|
c[:editor] = {:xtype => c[:editor]} if c[:editor].is_a?(Symbol)
|
141
141
|
end
|
142
|
-
|
142
|
+
|
143
143
|
def set_default_width(c)
|
144
144
|
c[:width] ||= 50 if c[:attr_type] == :boolean
|
145
145
|
c[:width] ||= 150 if c[:attr_type] == :datetime
|
146
146
|
end
|
147
|
-
|
147
|
+
|
148
148
|
def set_default_hidden(c)
|
149
149
|
c[:hidden] = true if primary_key_attr?(c) && c[:hidden].nil?
|
150
150
|
end
|
151
|
-
|
151
|
+
|
152
152
|
def set_default_editable(c)
|
153
153
|
c[:editable] = c[:read_only].nil? ? !(primary_key_attr?(c) || c[:virtual]) : !c[:read_only]
|
154
154
|
c.delete(:read_only)
|
155
155
|
end
|
156
|
-
|
156
|
+
|
157
157
|
def set_default_sortable(c)
|
158
158
|
c[:sortable] = !c[:virtual] if c[:sortable].nil?
|
159
159
|
end
|
160
|
-
|
160
|
+
|
161
161
|
def set_default_filterable(c)
|
162
162
|
c[:filterable] = !c[:virtual] if c[:filterable].nil?
|
163
163
|
end
|
164
|
-
|
164
|
+
|
165
165
|
# Returns editor's xtype for a column type
|
166
166
|
def editor_for_attr_type(type)
|
167
167
|
attr_type_to_editor_map[type]
|
168
168
|
end
|
169
|
-
|
169
|
+
|
170
170
|
def editor_for_association
|
171
171
|
:combobox
|
172
172
|
end
|
173
|
-
|
173
|
+
|
174
174
|
# Returns a hash that maps a column type to the editor xtype. Override if you want different editors.
|
175
175
|
def attr_type_to_editor_map
|
176
176
|
{
|
@@ -182,46 +182,44 @@ module Netzke
|
|
182
182
|
:string => :textfield
|
183
183
|
}
|
184
184
|
end
|
185
|
-
|
185
|
+
|
186
186
|
# Detects an association column and sets up the proper editor.
|
187
187
|
def detect_association(c)
|
188
188
|
# double-underscore notation? surely an association column
|
189
189
|
if c[:name].index('__')
|
190
190
|
assoc_name, assoc_method = c[:name].split('__')
|
191
|
-
assoc = data_class.reflect_on_association(assoc_name.to_sym)
|
192
|
-
|
193
|
-
if assoc && assoc_method
|
191
|
+
if assoc_method && assoc = data_class.reflect_on_association(assoc_name.to_sym)
|
194
192
|
assoc_column = assoc.klass.columns_hash[assoc_method]
|
195
193
|
assoc_method_type = assoc_column.try(:type)
|
196
|
-
|
194
|
+
|
197
195
|
# if association column is boolean, display a checkbox (or alike), otherwise - a combobox (or alike)
|
198
196
|
c[:editor] ||= assoc_method_type == :boolean ? editor_for_attr_type(:boolean) : editor_for_association
|
199
197
|
end
|
200
198
|
end
|
201
199
|
end
|
202
|
-
|
200
|
+
|
203
201
|
# Default fields that will be displayed in the Add/Edit/Search forms
|
204
202
|
def default_fields_for_forms
|
205
203
|
form_klass = "Netzke::ModelExtensions::#{config[:model]}ForFormPanel".constantize rescue nil
|
206
204
|
form_klass ||= original_data_class
|
207
|
-
|
205
|
+
|
208
206
|
# Select only those fields that are known to the form_klass
|
209
207
|
selected_columns = columns.select do |c|
|
210
208
|
form_klass.column_names.include?(c[:name]) ||
|
211
209
|
form_klass.instance_methods.include?("#{c[:name]}=") ||
|
212
210
|
association_attr?(c[:name])
|
213
211
|
end
|
214
|
-
|
212
|
+
|
215
213
|
selected_columns.map do |c|
|
216
214
|
field_config = {:name => c[:name]}
|
217
|
-
|
215
|
+
|
218
216
|
# scopes for combobox options
|
219
217
|
field_config[:scopes] = c[:editor].is_a?(Hash) && c[:editor][:scopes]
|
220
|
-
|
218
|
+
|
221
219
|
field_config
|
222
220
|
end
|
223
221
|
end
|
224
|
-
|
222
|
+
|
225
223
|
# Receives 2 arrays of columns. Merges the missing config from the +source+ into +dest+, matching columns by name
|
226
224
|
def reverse_merge_equally_named_columns(dest, source)
|
227
225
|
dest.each{ |dc| dc.reverse_merge!(source.detect{ |sc| sc[:name] == dc[:name] } || {}) }
|
@@ -4,12 +4,12 @@ module Netzke
|
|
4
4
|
# (Dynamic) JavaScript for GridPanel
|
5
5
|
module Javascript
|
6
6
|
extend ActiveSupport::Concern
|
7
|
-
|
7
|
+
|
8
8
|
included do
|
9
9
|
js_base_class "Netzke.pre.GridPanel"
|
10
10
|
js_method :init_component, js_init_component
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
module InstanceMethods
|
14
14
|
# The result of this method (a hash) is converted to a JSON object and passed as the configuration parameter
|
15
15
|
# to the constructor of our JavaScript class. Override it when you want to pass any extra configuration
|
@@ -28,7 +28,7 @@ module Netzke
|
|
28
28
|
|
29
29
|
module ClassMethods
|
30
30
|
private
|
31
|
-
|
31
|
+
|
32
32
|
# Ext.Component#initComponent, built up from pices (dependent on class-level configuration)
|
33
33
|
def js_init_component
|
34
34
|
# Optional "edit in form"-related events
|
@@ -48,7 +48,7 @@ module Netzke
|
|
48
48
|
}, this);
|
49
49
|
}
|
50
50
|
END_OF_JAVASCRIPT
|
51
|
-
|
51
|
+
|
52
52
|
# Result
|
53
53
|
<<-END_OF_JAVASCRIPT
|
54
54
|
function(){
|
@@ -56,13 +56,13 @@ module Netzke
|
|
56
56
|
#{js_full_class_name}.superclass.initComponent.call(this);
|
57
57
|
#{edit_in_form_events}
|
58
58
|
}
|
59
|
-
|
59
|
+
|
60
60
|
END_OF_JAVASCRIPT
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
# end private
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
@@ -1,18 +1,18 @@
|
|
1
1
|
Ext.override(Netzke.pre.GridPanel, {
|
2
2
|
onSearch: function(el){
|
3
3
|
el.toggle(el.toggled); // do not toggle immediately
|
4
|
-
|
4
|
+
|
5
5
|
this.loadComponent({name: 'search_form', callback: function(win){
|
6
6
|
var currentConditionsString = this.getStore().baseParams.extra_conditions;
|
7
7
|
if (currentConditionsString) {
|
8
8
|
win.items.first().getForm().setValues(Ext.decode(currentConditionsString));
|
9
9
|
}
|
10
|
-
|
10
|
+
|
11
11
|
win.items.first().on('apply', function(){
|
12
12
|
win.onSearch();
|
13
13
|
return false; // do not propagate the 'apply' event
|
14
14
|
}, this);
|
15
|
-
|
15
|
+
|
16
16
|
win.on('close', function(){
|
17
17
|
if (win.closeRes == 'OK'){
|
18
18
|
var searchConditions = win.conditions;
|
@@ -30,7 +30,7 @@ Ext.override(Netzke.pre.GridPanel, {
|
|
30
30
|
}
|
31
31
|
}, this);
|
32
32
|
}, scope: this});
|
33
|
-
|
33
|
+
|
34
34
|
// delete this.searchWindow;
|
35
35
|
// this.searchWindow = new Ext.Window({
|
36
36
|
// title:'Advanced search',
|
@@ -52,15 +52,15 @@ Ext.override(Netzke.pre.GridPanel, {
|
|
52
52
|
// }],
|
53
53
|
// closePositively : function(){
|
54
54
|
// this.conditions = this.getNetzkeComponent().getForm().getValues();
|
55
|
-
// this.closeRes = 'OK';
|
55
|
+
// this.closeRes = 'OK';
|
56
56
|
// this.close();
|
57
57
|
// },
|
58
58
|
// closeNegatively: function(){
|
59
|
-
// this.closeRes = 'cancel';
|
59
|
+
// this.closeRes = 'cancel';
|
60
60
|
// this.close();
|
61
61
|
// }
|
62
62
|
// });
|
63
|
-
//
|
63
|
+
//
|
64
64
|
// this.searchWindow.on('close', function(){
|
65
65
|
// if (this.searchWindow.closeRes == 'OK'){
|
66
66
|
// var searchConditions = this.searchWindow.conditions;
|
@@ -77,20 +77,20 @@ Ext.override(Netzke.pre.GridPanel, {
|
|
77
77
|
// this.getStore().load();
|
78
78
|
// }
|
79
79
|
// }, this);
|
80
|
-
//
|
80
|
+
//
|
81
81
|
// this.searchWindow.on('add', function(container, searchPanel){
|
82
82
|
// searchPanel.on('apply', function(component){
|
83
83
|
// this.searchWindow.closePositively();
|
84
84
|
// return false; // stop the event
|
85
85
|
// }, this);
|
86
86
|
// }, this);
|
87
|
-
//
|
87
|
+
//
|
88
88
|
// this.searchWindow.show(null, function(){
|
89
89
|
// this.searchWindow.closeRes = 'cancel';
|
90
90
|
// if (!this.searchWindow.getNetzkeComponent()){
|
91
91
|
// this.loadComponent({id:"searchPanel", container:this.searchWindow.id});
|
92
92
|
// }
|
93
93
|
// }, this);
|
94
|
-
//
|
94
|
+
//
|
95
95
|
}
|
96
96
|
});
|
@@ -15,7 +15,7 @@ Ext.override(Netzke.pre.GridPanel, {
|
|
15
15
|
if (!form.baseParams) form.baseParams = {};
|
16
16
|
form.baseParams.ids = Ext.encode(ids);
|
17
17
|
}, this);
|
18
|
-
|
18
|
+
|
19
19
|
w.on('close', function(){
|
20
20
|
if (w.closeRes === "ok") {
|
21
21
|
this.store.reload();
|
@@ -35,7 +35,7 @@ Ext.override(Netzke.pre.GridPanel, {
|
|
35
35
|
}, scope: this});
|
36
36
|
}
|
37
37
|
},
|
38
|
-
|
38
|
+
|
39
39
|
onAddInForm: function(){
|
40
40
|
this.loadComponent({name: "add_form", callback: function(form){
|
41
41
|
form.on('close', function(){
|
@@ -1,11 +1,11 @@
|
|
1
|
-
/*
|
1
|
+
/*
|
2
2
|
Static part of GridPanel's JavaScript class.
|
3
3
|
*/
|
4
4
|
Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
5
5
|
trackMouseOver: true,
|
6
6
|
loadMask: true,
|
7
7
|
autoScroll: true,
|
8
|
-
|
8
|
+
|
9
9
|
initComponent: function(){
|
10
10
|
this.plugins = []; // checkbox colums is a special case, being a plugin
|
11
11
|
|
@@ -31,7 +31,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
31
31
|
} else {
|
32
32
|
c.editor = {xtype: this.attrTypeEditorMap[c.attrType] || 'textfield'}
|
33
33
|
}
|
34
|
-
|
34
|
+
|
35
35
|
// if comboboxOptions are provided, we render a combobox instead of textfield
|
36
36
|
if (c.comboboxOptions && c.editor.xtype === "textfield") {
|
37
37
|
c.editor = {xtype: "combobox", options: c.comboboxOptions.split('\\n')}
|
@@ -80,7 +80,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
80
80
|
// c.renderer = renderer
|
81
81
|
// };
|
82
82
|
// }
|
83
|
-
//
|
83
|
+
//
|
84
84
|
// add to the list
|
85
85
|
// cmConfig.push(c);
|
86
86
|
}
|
@@ -107,7 +107,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
107
107
|
this.plugins.push(this.ddPlugin);
|
108
108
|
}
|
109
109
|
|
110
|
-
// Explicitely create the connection to get grid's data,
|
110
|
+
// Explicitely create the connection to get grid's data,
|
111
111
|
// because we don't want the app-wide Ext.Ajax to be used,
|
112
112
|
// as we are going to subscribe to its events
|
113
113
|
var connection = new Ext.data.Connection({
|
@@ -168,10 +168,10 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
168
168
|
// Now let Ext.grid.EditorGridPanel do the rest
|
169
169
|
// Original initComponent
|
170
170
|
Netzke.pre.GridPanel.superclass.initComponent.call(this);
|
171
|
-
|
171
|
+
|
172
172
|
// Hidden change event
|
173
173
|
if (this.persistentConfig) {this.getColumnModel().on('hiddenchange', this.onColumnHiddenChange, this);}
|
174
|
-
|
174
|
+
|
175
175
|
// Inform the server part about column operations
|
176
176
|
if (this.persistentConfig) {
|
177
177
|
this.on('columnresize', this.onColumnResize, this);
|
@@ -243,12 +243,12 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
243
243
|
// r.set('id', r.id); // otherwise later r.get('id') returns empty string
|
244
244
|
this.stopEditing();
|
245
245
|
this.getStore().add(r);
|
246
|
-
|
246
|
+
|
247
247
|
// Set default values
|
248
248
|
this.getStore().fields.each(function(field){
|
249
249
|
r.set(field.name, field.defaultValue);
|
250
250
|
});
|
251
|
-
|
251
|
+
|
252
252
|
this.tryStartEditing(this.store.indexOf(r));
|
253
253
|
},
|
254
254
|
|
@@ -283,7 +283,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
283
283
|
} else {
|
284
284
|
updatedRecords.push(Ext.apply(r.getChanges(), {id:r.id}));
|
285
285
|
}
|
286
|
-
},
|
286
|
+
},
|
287
287
|
this);
|
288
288
|
|
289
289
|
if (newRecords.length > 0 || updatedRecords.length > 0) {
|
@@ -292,22 +292,22 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
292
292
|
if (newRecords.length > 0) {
|
293
293
|
params.created_records = Ext.encode(newRecords);
|
294
294
|
}
|
295
|
-
|
295
|
+
|
296
296
|
if (updatedRecords.length > 0) {
|
297
297
|
params.updated_records = Ext.encode(updatedRecords);
|
298
298
|
}
|
299
|
-
|
299
|
+
|
300
300
|
if (this.store.baseParams !== {}) {
|
301
301
|
params.base_params = Ext.encode(this.store.baseParams);
|
302
302
|
}
|
303
|
-
|
303
|
+
|
304
304
|
this.postData(params);
|
305
305
|
}
|
306
306
|
|
307
307
|
},
|
308
308
|
|
309
309
|
// Handlers for tools
|
310
|
-
//
|
310
|
+
//
|
311
311
|
|
312
312
|
onRefresh: function() {
|
313
313
|
if (this.fireEvent('refresh', this) !== false) {
|
@@ -316,7 +316,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
316
316
|
},
|
317
317
|
|
318
318
|
// Event handlers
|
319
|
-
//
|
319
|
+
//
|
320
320
|
|
321
321
|
onColumnResize: function(index, size){
|
322
322
|
this.resizeColumn({
|
@@ -348,15 +348,15 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
348
348
|
onRowContextMenu: function(grid, rowIndex, e){
|
349
349
|
e.stopEvent();
|
350
350
|
var coords = e.getXY();
|
351
|
-
|
351
|
+
|
352
352
|
if (!grid.getSelectionModel().isSelected(rowIndex)) {
|
353
353
|
grid.getSelectionModel().selectRow(rowIndex);
|
354
354
|
}
|
355
|
-
|
355
|
+
|
356
356
|
var menu = new Ext.menu.Menu({
|
357
357
|
items: this.contextMenu
|
358
358
|
});
|
359
|
-
|
359
|
+
|
360
360
|
menu.showAt(coords);
|
361
361
|
},
|
362
362
|
|
@@ -369,7 +369,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
369
369
|
},
|
370
370
|
|
371
371
|
// Other methods
|
372
|
-
//
|
372
|
+
//
|
373
373
|
|
374
374
|
loadExceptionHandler: function(proxy, options, response, error){
|
375
375
|
if (response.status == 200 && (responseObject = Ext.decode(response.responseText)) && responseObject.flash){
|
@@ -379,7 +379,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
379
379
|
this.feedback(error.message);
|
380
380
|
} else {
|
381
381
|
this.feedback(response.statusText);
|
382
|
-
}
|
382
|
+
}
|
383
383
|
}
|
384
384
|
},
|
385
385
|
|
@@ -403,7 +403,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
403
403
|
}
|
404
404
|
editableIndex++;
|
405
405
|
});
|
406
|
-
|
406
|
+
|
407
407
|
if (editableIndex < this.getColumnModel().config.length) {this.startEditing(row, editableIndex);}
|
408
408
|
},
|
409
409
|
|
@@ -430,7 +430,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
430
430
|
for (var k in records){
|
431
431
|
records[k] = this.store.reader.readRecords([records[k]]).records[0];
|
432
432
|
}
|
433
|
-
|
433
|
+
|
434
434
|
// for each new record write the data returned by the server, and commit the record
|
435
435
|
Ext.each(modRecordsInGrid, function(recordInGrid){
|
436
436
|
if (mod ^ recordInGrid.isNew) {
|
@@ -438,7 +438,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
438
438
|
var recordId = recordInGrid.id;
|
439
439
|
// new data that the server sent us to update this record (identified by the id)
|
440
440
|
var newData = records[recordId];
|
441
|
-
|
441
|
+
|
442
442
|
if (newData){
|
443
443
|
for (var k in newData.data){
|
444
444
|
recordInGrid.set(k, newData.get(k));
|
@@ -447,10 +447,10 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
447
447
|
recordInGrid.isNew = false;
|
448
448
|
recordInGrid.commit();
|
449
449
|
}
|
450
|
-
|
450
|
+
|
451
451
|
}
|
452
452
|
}, this);
|
453
|
-
|
453
|
+
|
454
454
|
// clear the selections
|
455
455
|
this.getSelectionModel().clearSelections();
|
456
456
|
|
@@ -459,7 +459,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
459
459
|
if (modRecords.length == 0) {
|
460
460
|
// if all records are accepted, reload the grid (so that eventual order/filtering is correct)
|
461
461
|
this.store.reload();
|
462
|
-
|
462
|
+
|
463
463
|
// ... and set default getRowClass function
|
464
464
|
this.getView().getRowClass = this.defaultGetRowClass;
|
465
465
|
} else {
|
@@ -467,7 +467,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
467
467
|
return r.dirty ? "grid-dirty-record" : ""
|
468
468
|
}
|
469
469
|
}
|
470
|
-
|
470
|
+
|
471
471
|
this.getView().refresh();
|
472
472
|
this.getSelectionModel().fireEvent('selectionchange', this.getSelectionModel());
|
473
473
|
},
|
@@ -481,7 +481,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
481
481
|
this.getSelectionModel().selectRow(0);
|
482
482
|
this.getSelectionModel().resumeEvents();
|
483
483
|
},
|
484
|
-
|
484
|
+
|
485
485
|
// Normalizes the renderer for a column.
|
486
486
|
// Renderer may be:
|
487
487
|
// 1) a string that contains the name of the function to be used as renderer.
|
@@ -508,7 +508,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
508
508
|
name = c.renderer[0];
|
509
509
|
args = c.renderer.slice(1);
|
510
510
|
}
|
511
|
-
|
511
|
+
|
512
512
|
// First check whether Ext.util.Format has it
|
513
513
|
if (Ext.isFunction(Ext.util.Format[name])) {
|
514
514
|
c.renderer = Ext.util.Format[name].createDelegate(this, args, 1);
|
@@ -528,7 +528,7 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
528
528
|
this.tryStartEditing(this.store.indexOf(row));
|
529
529
|
}
|
530
530
|
}
|
531
|
-
|
531
|
+
|
532
532
|
// :reorder_columns => <<-END_OF_JAVASCRIPT.l,
|
533
533
|
// function(columns){
|
534
534
|
// columnsInNewShipment = [];
|
@@ -539,5 +539,5 @@ Netzke.pre.GridPanel = Ext.extend(Ext.grid.EditorGridPanel, {
|
|
539
539
|
// this.store.reader.recordType = newRecordType; // yes, recordType is a protected property, but that's the only way we can do it, and it seems to work for now
|
540
540
|
// }
|
541
541
|
// END_OF_JAVASCRIPT
|
542
|
-
|
542
|
+
|
543
543
|
});
|