netzke-basepack 0.12.9 → 1.0.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +75 -44
- data/Gemfile +4 -2
- data/LICENSE +2 -6
- data/README.md +22 -24
- data/javascripts/basepack.js +0 -8
- data/javascripts/{columns.js → grid/columns.js} +59 -71
- data/javascripts/grid/event_handlers.js +218 -0
- data/javascripts/netzkeremotecombo.js +5 -13
- data/javascripts/tristate.js +62 -0
- data/javascripts/xdatetime.js +8 -37
- data/lib/netzke-basepack.rb +3 -2
- data/lib/netzke/basepack.rb +1 -1
- data/lib/netzke/basepack/action_column.rb +6 -23
- data/lib/netzke/basepack/active_record.rb +0 -6
- data/lib/netzke/basepack/attr_config.rb +20 -11
- data/lib/netzke/basepack/attribute_config.rb +10 -0
- data/lib/netzke/basepack/attributes.rb +196 -0
- data/lib/netzke/basepack/column_config.rb +47 -39
- data/lib/netzke/basepack/columns.rb +127 -97
- data/lib/netzke/basepack/data_accessor.rb +7 -48
- data/lib/netzke/basepack/data_adapters/abstract_adapter.rb +15 -17
- data/lib/netzke/basepack/data_adapters/active_record_adapter.rb +111 -90
- data/lib/netzke/basepack/dynamic_tab_panel.rb +3 -5
- data/lib/netzke/basepack/dynamic_tab_panel/{javascripts → client}/dynamic_tab_panel.js +6 -5
- data/lib/netzke/basepack/field_config.rb +30 -19
- data/lib/netzke/basepack/fields.rb +22 -12
- data/lib/netzke/basepack/grid_live_search.rb +1 -4
- data/lib/netzke/basepack/grid_live_search/{javascripts → client}/grid_live_search.js +9 -7
- data/lib/netzke/basepack/item_persistence.rb +3 -3
- data/lib/netzke/basepack/item_persistence/events_plugin.rb +8 -10
- data/lib/netzke/basepack/paging_form.rb +7 -11
- data/lib/netzke/basepack/paging_form/{javascripts → client}/paging_form.js +4 -4
- data/lib/netzke/basepack/query_builder.rb +12 -10
- data/lib/netzke/basepack/query_builder/{javascripts → client}/query_builder.js +14 -12
- data/lib/netzke/basepack/record_form_window.rb +8 -8
- data/lib/netzke/basepack/search_panel.rb +4 -6
- data/lib/netzke/basepack/search_panel/{javascripts → client}/condition_field.js +13 -16
- data/lib/netzke/basepack/search_panel/{javascripts → client}/search_panel.js +7 -7
- data/lib/netzke/basepack/search_window.rb +6 -6
- data/lib/netzke/basepack/simple_app/{javascripts → client}/statusbar_ext.js +0 -0
- data/lib/netzke/basepack/version.rb +1 -1
- data/lib/netzke/form/base.rb +166 -0
- data/lib/netzke/{basepack/form/javascripts/form.js → form/base/client/base.js} +77 -38
- data/lib/netzke/form/base/client/readonly_mode.css +4 -0
- data/lib/netzke/{basepack/form/javascripts → form/base/client}/readonly_mode.js +5 -5
- data/lib/netzke/form/endpoints.rb +33 -0
- data/lib/netzke/form/services.rb +74 -0
- data/lib/netzke/grid/actions.rb +52 -0
- data/lib/netzke/grid/base.rb +289 -0
- data/lib/netzke/{basepack/grid/javascripts → grid/base/client}/advanced_search.js +5 -1
- data/lib/netzke/{basepack/grid/javascripts/grid.js → grid/base/client/base.js} +61 -53
- data/lib/netzke/{basepack/grid/javascripts → grid/base/client}/extensions.js +19 -13
- data/lib/netzke/{basepack/grid/javascripts → grid/base/client}/remember_selection.js +0 -1
- data/lib/netzke/grid/client.rb +8 -0
- data/lib/netzke/grid/components.rb +55 -0
- data/lib/netzke/grid/configuration.rb +72 -0
- data/lib/netzke/grid/endpoints.rb +99 -0
- data/lib/netzke/grid/permissions.rb +18 -0
- data/lib/netzke/grid/services.rb +141 -0
- data/lib/netzke/tree/base.rb +173 -0
- data/lib/netzke/{basepack/tree/javascripts/tree.js → tree/base/client/base.js} +55 -26
- data/lib/netzke/{basepack/tree/javascripts → tree/base/client}/extensions.js +7 -7
- data/lib/netzke/tree/endpoints.rb +34 -0
- data/lib/netzke/{basepack/viewport.rb → viewport/base.rb} +3 -3
- data/lib/netzke/{basepack/window.rb → window/base.rb} +7 -8
- data/lib/netzke/window/base/client/base.js +26 -0
- data/locales/de.yml +49 -33
- data/locales/en.yml +32 -39
- data/locales/es.yml +39 -25
- data/locales/nl.yml +39 -25
- data/locales/ru.yml +38 -25
- data/locales/uk.yml +40 -26
- data/stylesheets/basepack.css +10 -0
- metadata +48 -45
- data/javascripts/mixins/grid_event_handlers.js +0 -139
- data/lib/netzke/basepack/accordion.rb +0 -45
- data/lib/netzke/basepack/active_record/relation_extensions.rb +0 -27
- data/lib/netzke/basepack/form.rb +0 -131
- data/lib/netzke/basepack/form/endpoints.rb +0 -35
- data/lib/netzke/basepack/form/services.rb +0 -74
- data/lib/netzke/basepack/form/stylesheets/readonly_mode.css +0 -14
- data/lib/netzke/basepack/grid.rb +0 -570
- data/lib/netzke/basepack/grid/endpoints.rb +0 -111
- data/lib/netzke/basepack/grid/javascripts/edit_in_form.js +0 -51
- data/lib/netzke/basepack/grid/services.rb +0 -148
- data/lib/netzke/basepack/tab_panel.rb +0 -22
- data/lib/netzke/basepack/tab_panel/javascripts/tab_panel.js +0 -11
- data/lib/netzke/basepack/tree.rb +0 -269
- data/lib/netzke/basepack/window/javascripts/window.js +0 -26
- data/lib/netzke/basepack/wrap_lazy_loaded.rb +0 -29
@@ -1,3 +1,7 @@
|
|
1
|
+
/**
|
2
|
+
* Client-side code for [Netzke::Grid::Base](http://www.rubydoc.info/github/netzke/netzke-basepack/Netzke/Grid/Base)
|
3
|
+
* @class Netzke.Grid.Base
|
4
|
+
*/
|
1
5
|
{
|
2
6
|
multiSelect: true,
|
3
7
|
|
@@ -8,17 +12,11 @@
|
|
8
12
|
this.plugins = this.plugins || [];
|
9
13
|
|
10
14
|
// Enable filters feature
|
11
|
-
|
12
|
-
this.plugins.push('gridfilters');
|
13
|
-
}
|
15
|
+
this.plugins.push('gridfilters');
|
14
16
|
|
15
17
|
// Normalize columns. Extract data fields and meta column.
|
16
18
|
this.netzkeProcessColumns();
|
17
19
|
|
18
|
-
this.netzkeBuildModel('Ext.data.Model');
|
19
|
-
|
20
|
-
delete this.fields;
|
21
|
-
|
22
20
|
// Prepare column model config with columns in the correct order; columns out of order go to the end.
|
23
21
|
var colModelConfig = [];
|
24
22
|
var columns = this.columns;
|
@@ -37,17 +35,16 @@
|
|
37
35
|
|
38
36
|
this.columns.items = colModelConfig;
|
39
37
|
|
40
|
-
// data store
|
41
38
|
this.store = this.netzkeBuildStore();
|
42
39
|
|
43
40
|
// Cell editing
|
44
|
-
if (!this.prohibitUpdate && this.
|
41
|
+
if (!this.prohibitUpdate && this.editInline) {
|
45
42
|
this.plugins.push(Ext.create('Ext.grid.plugin.CellEditing', {pluginId: 'celleditor'}));
|
46
43
|
}
|
47
44
|
|
48
45
|
// Toolbar
|
49
46
|
this.dockedItems = this.dockedItems || [];
|
50
|
-
if (this.
|
47
|
+
if (this.paging) {
|
51
48
|
this.dockedItems.push({
|
52
49
|
xtype: 'pagingtoolbar',
|
53
50
|
dock: 'bottom',
|
@@ -55,7 +52,7 @@
|
|
55
52
|
'beforechange': this.disableDirtyPageWarning ? {} : {fn: this.netzkeBeforePageChange, scope: this}
|
56
53
|
},
|
57
54
|
store: this.store,
|
58
|
-
items: this.bbar && ["-"].concat(this.bbar)
|
55
|
+
items: this.bbar && ["-"].concat(this.bbar)
|
59
56
|
});
|
60
57
|
} else if (this.bbar) {
|
61
58
|
this.dockedItems.push({
|
@@ -71,30 +68,10 @@
|
|
71
68
|
|
72
69
|
// Context menu
|
73
70
|
if (this.contextMenu) {
|
74
|
-
this.on('itemcontextmenu', this.
|
75
|
-
}
|
76
|
-
|
77
|
-
// Disabling/enabling editInForm button according to current selection
|
78
|
-
if (this.enableEditInForm && !this.prohibitUpdate) {
|
79
|
-
this.getSelectionModel().on('selectionchange', function(selModel, selected){
|
80
|
-
var disabled;
|
81
|
-
if (selected === undefined || selected.length === 0) { // empty?
|
82
|
-
disabled = true;
|
83
|
-
} else {
|
84
|
-
// Disable "edit in form" button if new record is present in selection
|
85
|
-
Ext.each(selected, function(r){
|
86
|
-
if (r.isNew) { disabled = true; return false; }
|
87
|
-
});
|
88
|
-
};
|
89
|
-
this.actions.editInForm.setDisabled(disabled);
|
90
|
-
}, this);
|
71
|
+
this.on('itemcontextmenu', this.netzkeOnItemContextMenu, this);
|
91
72
|
}
|
92
73
|
|
93
|
-
|
94
|
-
this.getSelectionModel().on('selectionchange', function(selModel){
|
95
|
-
if (this.actions.del) this.actions.del.setDisabled(!selModel.hasSelection() || this.prohibitDelete);
|
96
|
-
if (this.actions.edit) this.actions.edit.setDisabled(selModel.getCount() != 1 || this.prohibitUpdate);
|
97
|
-
}, this);
|
74
|
+
this.netzkeSetActionEvents();
|
98
75
|
|
99
76
|
// When starting editing as assocition column, pre-load the combobox store from the meta column, so that we don't see the real value of this cell (the id of the associated record), but rather the associated record by the configured method.
|
100
77
|
this.on('beforeedit', function(editor, e){
|
@@ -124,19 +101,14 @@
|
|
124
101
|
}, this);
|
125
102
|
|
126
103
|
if(this.getStore().autoSync){
|
127
|
-
// if autoSync is enabled, cancel event and call
|
104
|
+
// if autoSync is enabled, cancel event and call netzkeOnApply() instead
|
128
105
|
this.getStore().on('beforesync', function(){
|
129
|
-
this.
|
106
|
+
this.netzkeOnApply();
|
130
107
|
return false;
|
131
108
|
}, this);
|
132
109
|
}
|
133
110
|
|
134
|
-
|
135
|
-
if (this.enableEditInForm && !this.enableEditInline) {
|
136
|
-
this.on('itemdblclick', function(view, record) {
|
137
|
-
this.onEditInForm();
|
138
|
-
}, this);
|
139
|
-
}
|
111
|
+
this.on('itemdblclick', this.netzkeHandleItemdblclick, this);
|
140
112
|
|
141
113
|
// Remember grid selection on reloads
|
142
114
|
if(this.netzkeRememberSelection && this.netzkeRestoreSelection){
|
@@ -145,16 +117,12 @@
|
|
145
117
|
}
|
146
118
|
},
|
147
119
|
|
120
|
+
/**
|
121
|
+
* @method netzkeBuildStore
|
122
|
+
* @return {Ext.data.Store} Pre-configured instance of the store
|
123
|
+
*/
|
148
124
|
netzkeBuildStore: function() {
|
149
|
-
var store = Ext.create('Ext.data.Store',
|
150
|
-
model: Netzke.modelName(this.id),
|
151
|
-
proxy: this.netzkeBuildProxy(),
|
152
|
-
pruneModifiedRecords: true,
|
153
|
-
remoteSort: true,
|
154
|
-
remoteFilter: true,
|
155
|
-
pageSize: this.rowsPerPage,
|
156
|
-
autoLoad: true
|
157
|
-
}, this.dataStore));
|
125
|
+
var store = Ext.create('Ext.data.Store', this.netzkeStoreConfig());
|
158
126
|
|
159
127
|
delete this.dataStore;
|
160
128
|
|
@@ -165,17 +133,57 @@
|
|
165
133
|
return store;
|
166
134
|
},
|
167
135
|
|
136
|
+
/**
|
137
|
+
* @method netzkeStoreConfig
|
138
|
+
* @return {Object} Configuration for the store
|
139
|
+
*/
|
140
|
+
netzkeStoreConfig: function(){
|
141
|
+
var defaults = {
|
142
|
+
proxy: this.netzkeBuildProxy(),
|
143
|
+
fields: this.fields,
|
144
|
+
pruneModifiedRecords: true,
|
145
|
+
remoteSort: true,
|
146
|
+
remoteFilter: true,
|
147
|
+
buffered: !this.paging
|
148
|
+
};
|
149
|
+
|
150
|
+
if (!this.paging) defaults.pageSize = 300;
|
151
|
+
|
152
|
+
return Ext.apply({}, this.storeConfig, defaults);
|
153
|
+
},
|
154
|
+
|
155
|
+
/**
|
156
|
+
* @method netzkeBuildProxy
|
157
|
+
* @return {Netzke.Grid.Proxy} Instance of the data proxy
|
158
|
+
*/
|
168
159
|
netzkeBuildProxy: function() {
|
169
|
-
return Ext.create('Netzke.
|
160
|
+
return Ext.create('Netzke.Grid.Proxy', this.netzkeProxyConfig());
|
161
|
+
},
|
162
|
+
|
163
|
+
/**
|
164
|
+
* @method netzkeProxyConfig
|
165
|
+
* @return {Object} configuration for data proxy
|
166
|
+
*/
|
167
|
+
netzkeProxyConfig: function(){
|
168
|
+
return {
|
170
169
|
reader: this.netzkeBuildReader(),
|
171
170
|
grid: this
|
172
|
-
}
|
171
|
+
}
|
173
172
|
},
|
174
173
|
|
174
|
+
/**
|
175
|
+
* @method netzkeBuildReader
|
176
|
+
* @return {Netzke.Grid.ArrayReader} Instance of the data reader
|
177
|
+
*/
|
175
178
|
netzkeBuildReader: function() {
|
176
|
-
return Ext.create('Netzke.
|
179
|
+
return Ext.create('Netzke.Grid.ArrayReader');
|
177
180
|
},
|
178
181
|
|
182
|
+
/**
|
183
|
+
* Called before user navigates from page in the grid
|
184
|
+
* @method netzkeBeforePageChange
|
185
|
+
* @return {Boolean} Browser confirmation popup result
|
186
|
+
*/
|
179
187
|
netzkeBeforePageChange: function(){
|
180
188
|
var store = this.getStore();
|
181
189
|
if (store.getNewRecords().length > 0 || store.getModifiedRecords().length > 0) {
|
@@ -1,8 +1,10 @@
|
|
1
1
|
/**
|
2
|
-
*
|
2
|
+
* Data reader which can handle commands from the endpoint, and fires the 'endpointcommands' event
|
3
3
|
* when commands are present in the endpoint response
|
4
|
+
* @class Netzke.Grid.ArrayReader
|
5
|
+
* @extends Ext.data.reader.Array
|
4
6
|
*/
|
5
|
-
Ext.define('Netzke.
|
7
|
+
Ext.define('Netzke.Grid.ArrayReader', {
|
6
8
|
extend: 'Ext.data.reader.Array',
|
7
9
|
config: {
|
8
10
|
rootProperty: 'data',
|
@@ -19,7 +21,12 @@ Ext.define('Netzke.classes.Basepack.Grid.ArrayReader', {
|
|
19
21
|
}
|
20
22
|
});
|
21
23
|
|
22
|
-
|
24
|
+
/**
|
25
|
+
* Data proxy that talks to Grid's endpoints.
|
26
|
+
* @extends Ext.data.proxy.Server
|
27
|
+
* @class Netzke.Grid.Proxy
|
28
|
+
*/
|
29
|
+
Ext.define('Netzke.Grid.Proxy', {
|
23
30
|
extend: 'Ext.data.proxy.Server',
|
24
31
|
|
25
32
|
batch: function(options) {
|
@@ -30,10 +37,11 @@ Ext.define('Netzke.classes.Basepack.Grid.Proxy', {
|
|
30
37
|
}
|
31
38
|
},
|
32
39
|
|
40
|
+
// NOTE: not used, as delete is being called directly from the grid
|
33
41
|
destroy: function(op, callback, scope) {
|
34
42
|
var data = Ext.Array.map(op.getRecords(), function(r) { return r.getData().id; });
|
35
43
|
var store = this.grid.getStore();
|
36
|
-
this.grid.
|
44
|
+
this.grid.server.destroy(data, function(res){
|
37
45
|
var errors = [];
|
38
46
|
for (var id in res) {
|
39
47
|
var error;
|
@@ -51,7 +59,7 @@ Ext.define('Netzke.classes.Basepack.Grid.Proxy', {
|
|
51
59
|
store.commitChanges();
|
52
60
|
|
53
61
|
if (errors.length > 0) {
|
54
|
-
this.grid.
|
62
|
+
this.grid.netzkeNotify(errors);
|
55
63
|
}
|
56
64
|
|
57
65
|
this.grid.getStore().load();
|
@@ -63,7 +71,7 @@ Ext.define('Netzke.classes.Basepack.Grid.Proxy', {
|
|
63
71
|
var records = op.getRecords(),
|
64
72
|
data = Ext.Array.map(records, function(r) { return Ext.apply(r.getData(), {internal_id: r.internalId}); });
|
65
73
|
|
66
|
-
this.grid.
|
74
|
+
this.grid.server.create(data, function(res) {
|
67
75
|
var errors = [];
|
68
76
|
Ext.each(records, function(r) {
|
69
77
|
var rid = r.internalId,
|
@@ -80,7 +88,7 @@ Ext.define('Netzke.classes.Basepack.Grid.Proxy', {
|
|
80
88
|
if (errors.length == 0) {
|
81
89
|
this.grid.getStore().load();
|
82
90
|
} else {
|
83
|
-
this.grid.
|
91
|
+
this.grid.netzkeNotify(errors);
|
84
92
|
}
|
85
93
|
|
86
94
|
}, this);
|
@@ -89,7 +97,7 @@ Ext.define('Netzke.classes.Basepack.Grid.Proxy', {
|
|
89
97
|
update: function(op, callback, scope) {
|
90
98
|
var data = Ext.Array.map(op.getRecords(), function(r) { return r.getData(); });
|
91
99
|
|
92
|
-
this.grid.
|
100
|
+
this.grid.server.update(data, function(res) {
|
93
101
|
var errors = [];
|
94
102
|
Ext.each(op.records, function(r) {
|
95
103
|
var rid = r.getId(),
|
@@ -106,13 +114,13 @@ Ext.define('Netzke.classes.Basepack.Grid.Proxy', {
|
|
106
114
|
if (errors.length == 0) {
|
107
115
|
this.grid.getStore().load();
|
108
116
|
} else {
|
109
|
-
this.grid.
|
117
|
+
this.grid.netzkeNotify(errors);
|
110
118
|
}
|
111
119
|
}, this);
|
112
120
|
},
|
113
121
|
|
114
122
|
read: function(operation, callback, scope) {
|
115
|
-
this.grid.
|
123
|
+
this.grid.server.read(this.paramsFromOperation(operation), function(res) {
|
116
124
|
this.processResponse(true, operation, {}, res, callback, scope);
|
117
125
|
}, this);
|
118
126
|
return {};
|
@@ -138,9 +146,7 @@ Ext.define('Netzke.classes.Basepack.Grid.Proxy', {
|
|
138
146
|
}
|
139
147
|
});
|
140
148
|
|
141
|
-
|
142
|
-
* A fix for CheckColumn
|
143
|
-
*/
|
149
|
+
// Fix for CheckColumn
|
144
150
|
Ext.override(Ext.ux.CheckColumn, {
|
145
151
|
processEvent: function(type) {
|
146
152
|
// by returning true, we'll allow event propagation, so it reacts similarly to other columns
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Netzke
|
2
|
+
module Grid
|
3
|
+
# Child components for Grid and Tree
|
4
|
+
module Components
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
component :add_window do |c|
|
9
|
+
configure_form_window(c)
|
10
|
+
c.title = I18n.t('netzke.grid.base.add_record', model: model.model_name.human)
|
11
|
+
c.items = [:add_form]
|
12
|
+
c.form_config.record = model.new(columns_default_values)
|
13
|
+
c.excluded = !allowed_to?(:create)
|
14
|
+
end
|
15
|
+
|
16
|
+
component :edit_window do |c|
|
17
|
+
configure_form_window(c)
|
18
|
+
c.title = I18n.t('netzke.grid.base.edit_record', model: model.model_name.human)
|
19
|
+
c.items = [:edit_form]
|
20
|
+
c.excluded = !allowed_to?(:update)
|
21
|
+
end
|
22
|
+
|
23
|
+
component :multiedit_window do |c|
|
24
|
+
configure_form_window(c)
|
25
|
+
c.title = I18n.t('netzke.grid.base.edit_records', models: model.model_name.human.pluralize)
|
26
|
+
c.items = [:multiedit_form]
|
27
|
+
c.excluded = !allowed_to?(:update)
|
28
|
+
end
|
29
|
+
|
30
|
+
component :search_window do |c|
|
31
|
+
c.klass = Basepack::SearchWindow
|
32
|
+
c.model = config.model
|
33
|
+
c.fields = attributes_for_search
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def configure_form_window(c)
|
38
|
+
c.klass = Basepack::RecordFormWindow
|
39
|
+
c.form_config = ActiveSupport::OrderedOptions.new
|
40
|
+
configure_form(c.form_config)
|
41
|
+
end
|
42
|
+
|
43
|
+
def configure_form(c)
|
44
|
+
shared_config = %w(mode persistent_config strong_values).reduce({}) do |r, m|
|
45
|
+
r.merge!(m.to_sym => config.send(m))
|
46
|
+
end
|
47
|
+
|
48
|
+
c.model = model
|
49
|
+
c.merge!(shared_config)
|
50
|
+
c.attribute_overrides = attribute_overrides
|
51
|
+
c.items = form_items
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Netzke
|
2
|
+
module Grid
|
3
|
+
# Overridable methods related to configuration of Grid. For example, to add a custom action to the end of the grid's
|
4
|
+
# bbar, you can do:
|
5
|
+
#
|
6
|
+
# def bbar
|
7
|
+
# super + [:my_action]
|
8
|
+
# end
|
9
|
+
module Configuration # WTF: naming it Config causes troubles in 1.9.3
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
def server_side_config_options
|
14
|
+
super + [:scope]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def bbar
|
19
|
+
config.has_key?(:bbar) ? config[:bbar] : default_bbar
|
20
|
+
end
|
21
|
+
|
22
|
+
def default_bbar
|
23
|
+
[].tap do |bbar|
|
24
|
+
bbar << :add if has_add_action?
|
25
|
+
bbar << :edit if has_edit_action?
|
26
|
+
bbar << :apply if has_apply_action?
|
27
|
+
bbar << :delete if has_delete_action?
|
28
|
+
bbar << :search if has_search_action?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def context_menu
|
33
|
+
config.has_key?(:context_menu) ? config.context_menu : default_context_menu
|
34
|
+
end
|
35
|
+
|
36
|
+
def default_context_menu
|
37
|
+
[].tap do |menu|
|
38
|
+
menu << :edit if has_edit_action?
|
39
|
+
menu << :delete if has_delete_action?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def tools
|
44
|
+
config.has_key?(:tools) ? config.tools : default_tools
|
45
|
+
end
|
46
|
+
|
47
|
+
def default_tools
|
48
|
+
[{ type: :refresh, handler: f(:netzke_on_refresh_tool) }]
|
49
|
+
end
|
50
|
+
|
51
|
+
def configure_client(c)
|
52
|
+
super
|
53
|
+
c.title ||= model.name.pluralize
|
54
|
+
c.columns = {items: js_columns}
|
55
|
+
c.columns_order = columns_order
|
56
|
+
c.pri = model_adapter.primary_key
|
57
|
+
if c.default_filters
|
58
|
+
populate_columns_with_filters(c)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def validate_config(c)
|
63
|
+
raise ArgumentError, "Grid requires a model" if model.nil?
|
64
|
+
c.paging = true if c.edit_inline
|
65
|
+
c.tools = tools
|
66
|
+
c.bbar = bbar
|
67
|
+
c.context_menu = context_menu
|
68
|
+
super
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|