netzke-basepack 0.6.0 → 0.6.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.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
|
});
|