netzke-basepack 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/CHANGELOG.rdoc +197 -183
- data/LICENSE +1 -3
- data/README.rdoc +10 -6
- data/TODO.rdoc +5 -2
- data/VERSION +1 -1
- data/javascripts/basepack.js +20 -10
- data/lib/app/models/netzke_auto_column.rb +1 -1
- data/lib/netzke/basic_app.rb +16 -2
- data/lib/netzke/basic_app_extras/statusbar_ext.js +8 -0
- data/lib/netzke/border_layout_panel.rb +1 -1
- data/lib/netzke/ext.rb +1 -0
- data/lib/netzke/fields_configurator.rb +3 -5
- data/lib/netzke/form_panel.rb +15 -11
- data/lib/netzke/form_panel_js.rb +1 -8
- data/lib/netzke/grid_panel.rb +61 -61
- data/lib/netzke/grid_panel_api.rb +2 -2
- data/lib/netzke/grid_panel_js.rb +200 -177
- data/lib/netzke/plugins/configuration_tool.rb +2 -2
- data/lib/netzke/property_editor.rb +22 -18
- data/lib/netzke/tree_panel.rb +6 -54
- data/stylesheets/basepack.css +5 -0
- data/test/unit/helper_model_test.rb +1 -1
- metadata +3 -4
- data/lib/netzke/grid_panel_extras/javascripts/check-column.js +0 -33
- data/netzke-basepack.gemspec +0 -170
@@ -42,7 +42,7 @@ class NetzkeAutoColumn < ActiveRecord::Base
|
|
42
42
|
end
|
43
43
|
|
44
44
|
# populate the table with data
|
45
|
-
NetzkeAutoColumn.create @@widget.normalized_columns.map(&:deebeefy_values)
|
45
|
+
NetzkeAutoColumn.create @@widget.normalized_columns.map(&:deebeefy_values) rescue ActiveRecord::UnknownAttributeError
|
46
46
|
|
47
47
|
end
|
48
48
|
|
data/lib/netzke/basic_app.rb
CHANGED
@@ -24,6 +24,19 @@ module Netzke
|
|
24
24
|
})
|
25
25
|
end
|
26
26
|
|
27
|
+
def include_js
|
28
|
+
res = []
|
29
|
+
ext_examples = Netzke::Base.config[:ext_location] + "/examples/"
|
30
|
+
res << ext_examples + "ux/StatusBar.js"
|
31
|
+
res << "#{File.dirname(__FILE__)}/basic_app_extras/statusbar_ext.js"
|
32
|
+
end
|
33
|
+
|
34
|
+
# def include_css
|
35
|
+
# res = []
|
36
|
+
# res << Netzke::Base.config[:ext_location] + "/examples/ux/css/StatusBar.css"
|
37
|
+
# res
|
38
|
+
# end
|
39
|
+
|
27
40
|
def js_panels
|
28
41
|
# In status bar we want to show what we are masquerading as
|
29
42
|
if session[:masq_user]
|
@@ -50,6 +63,7 @@ module Netzke
|
|
50
63
|
:id => 'main-statusbar',
|
51
64
|
:xtype => 'statusbar',
|
52
65
|
:region => 'south',
|
66
|
+
:height => 22,
|
53
67
|
:statusAlign => 'right',
|
54
68
|
:busyText => 'Busy...',
|
55
69
|
:default_text => masq.nil? ? "Ready #{"(config mode)" if session[:config_mode]}" : "Masquerading as #{masq}",
|
@@ -181,7 +195,7 @@ module Netzke
|
|
181
195
|
},{
|
182
196
|
text:'As World',
|
183
197
|
handler:function(){
|
184
|
-
Ext.Msg.confirm("Masquerading as World", "Caution! All settings that you will modify will be
|
198
|
+
Ext.Msg.confirm("Masquerading as World", "Caution! All settings that you will modify will be overwritten for all roles and all users. Are you sure you know what you're doing?", function(btn){
|
185
199
|
if (btn === "yes") {
|
186
200
|
this.masquerade = {world:true};
|
187
201
|
w.close();
|
@@ -197,7 +211,7 @@ module Netzke
|
|
197
211
|
},
|
198
212
|
scope:this
|
199
213
|
},{
|
200
|
-
text:'
|
214
|
+
text:'Cancel',
|
201
215
|
handler:function(){
|
202
216
|
w.hide();
|
203
217
|
},
|
@@ -64,7 +64,7 @@ module Netzke
|
|
64
64
|
Ext.netzke.cache.BorderLayoutPanel.superclass.initComponent.call(this);
|
65
65
|
|
66
66
|
// First time on "afterlayout", set resize events
|
67
|
-
this.on('afterlayout', this.setResizeEvents, this, {single: true});
|
67
|
+
if (this.persistentConfig) {this.on('afterlayout', this.setResizeEvents, this, {single: true});}
|
68
68
|
}
|
69
69
|
END_OF_JAVASCRIPT
|
70
70
|
|
data/lib/netzke/ext.rb
CHANGED
@@ -2,5 +2,6 @@ module Netzke
|
|
2
2
|
# Ext-related module. Some constants provide meta-information about the Ext.library.
|
3
3
|
module Ext
|
4
4
|
FORM_FIELD_XTYPES = %w{ textfield numberfield textarea combobox checkbox xdatetime }
|
5
|
+
COLUMN_XTYPES = %w{ gridcolumn booleancolumn numbercolumn datecolumn }
|
5
6
|
end
|
6
7
|
end
|
@@ -31,10 +31,8 @@ module Netzke
|
|
31
31
|
)
|
32
32
|
end
|
33
33
|
|
34
|
-
def
|
35
|
-
|
36
|
-
res[:ext_config][:bbar] = %w{ edit apply - defaults }
|
37
|
-
res
|
34
|
+
def default_bbar
|
35
|
+
%w{ edit apply - defaults }
|
38
36
|
end
|
39
37
|
|
40
38
|
def predefined_columns
|
@@ -44,7 +42,7 @@ module Netzke
|
|
44
42
|
def self.js_extend_properties
|
45
43
|
{
|
46
44
|
# Disable the 'gear' tool for now
|
47
|
-
:
|
45
|
+
:on_gear => <<-END_OF_JAVASCRIPT.l,
|
48
46
|
function(){
|
49
47
|
this.feedback("You can't configure configurator (yet)");
|
50
48
|
}
|
data/lib/netzke/form_panel.rb
CHANGED
@@ -22,15 +22,24 @@ module Netzke
|
|
22
22
|
:config_tool_available => true,
|
23
23
|
|
24
24
|
:default_config => {
|
25
|
+
:persistent_config => true,
|
25
26
|
:ext_config => {
|
26
|
-
:
|
27
|
-
:tools => %w{ }
|
27
|
+
:tools => []
|
28
28
|
},
|
29
|
-
:persistent_config => false
|
30
29
|
}
|
31
30
|
})
|
32
31
|
end
|
33
32
|
|
33
|
+
def initial_config
|
34
|
+
res = super
|
35
|
+
res[:ext_config][:bbar] = default_bbar if res[:ext_config][:bbar].nil?
|
36
|
+
res
|
37
|
+
end
|
38
|
+
|
39
|
+
def default_bbar
|
40
|
+
%w{ apply }
|
41
|
+
end
|
42
|
+
|
34
43
|
# Extra javascripts
|
35
44
|
def self.include_js
|
36
45
|
[
|
@@ -107,16 +116,11 @@ module Netzke
|
|
107
116
|
def self.property_fields
|
108
117
|
res = [
|
109
118
|
{:name => :ext_config__title, :type => :string},
|
110
|
-
{:name => :ext_config__header, :type => :boolean, :default => true}
|
111
|
-
|
112
|
-
# {:name => :ext_config__prohibit_create, :type => :boolean},
|
113
|
-
# {:name => :ext_config__prohibit_update, :type => :boolean},
|
114
|
-
# {:name => :ext_config__prohibit_delete, :type => :boolean},
|
115
|
-
# {:name => :ext_config__prohibit_read, :type => :boolean}
|
119
|
+
{:name => :ext_config__header, :type => :boolean, :default => true},
|
120
|
+
{:name => :ext_config__bbar, :type => :json}
|
116
121
|
]
|
117
122
|
|
118
123
|
res
|
119
|
-
|
120
124
|
end
|
121
125
|
|
122
126
|
# Normalized columns
|
@@ -126,7 +130,7 @@ module Netzke
|
|
126
130
|
|
127
131
|
|
128
132
|
def get_columns
|
129
|
-
if
|
133
|
+
if persistent_config_enabled?
|
130
134
|
persistent_config['layout__columns'] ||= default_columns
|
131
135
|
res = normalize_array_of_columns(persistent_config['layout__columns'])
|
132
136
|
else
|
data/lib/netzke/form_panel_js.rb
CHANGED
@@ -15,7 +15,6 @@ module Netzke
|
|
15
15
|
:auto_scroll => true,
|
16
16
|
:label_width => 150,
|
17
17
|
:default_type => 'textfield',
|
18
|
-
# :label_align => 'top',
|
19
18
|
|
20
19
|
:init_component => <<-END_OF_JAVASCRIPT.l,
|
21
20
|
function(){
|
@@ -87,12 +86,6 @@ module Netzke
|
|
87
86
|
:load_record => <<-END_OF_JAVASCRIPT.l,
|
88
87
|
function(id, neighbour){
|
89
88
|
this.load({id:id});
|
90
|
-
// var proxy = new Ext.data.HttpProxy({url:this.initialConfig.api.load});
|
91
|
-
// proxy.load({id:id, neighbour:neighbour}, this.reader, function(data){
|
92
|
-
// if (data){
|
93
|
-
// this.form.loadRecord(data.records[0])
|
94
|
-
// }
|
95
|
-
// }, this)
|
96
89
|
}
|
97
90
|
END_OF_JAVASCRIPT
|
98
91
|
|
@@ -110,7 +103,7 @@ module Netzke
|
|
110
103
|
# }
|
111
104
|
# END_OF_JAVASCRIPT
|
112
105
|
|
113
|
-
:
|
106
|
+
:on_apply => <<-END_OF_JAVASCRIPT.l
|
114
107
|
function() {
|
115
108
|
if (this.fireEvent('apply', this)) {
|
116
109
|
var values = this.form.getValues();
|
data/lib/netzke/grid_panel.rb
CHANGED
@@ -38,9 +38,9 @@ module Netzke
|
|
38
38
|
# The following config options are available:
|
39
39
|
# * <tt>:data_class_name</tt> - name of the ActiveRecord model that provides data to this GridPanel.
|
40
40
|
# * <tt>:strong_default_attrs</tt> - a hash of attributes to be merged atop of every created/updated record.
|
41
|
-
# * <tt>:scopes</tt> - an array of
|
41
|
+
# * <tt>:scopes</tt> - an array of named scopes to filter grid data, e.g.:
|
42
42
|
#
|
43
|
-
# ["user_id_not", 100]
|
43
|
+
# [["user_id_not", 100], ["name_like", "Peter"]]
|
44
44
|
#
|
45
45
|
# In the <tt>:ext_config</tt> hash (see Netzke::Base) the following GridPanel specific options are available:
|
46
46
|
#
|
@@ -79,7 +79,7 @@ module Netzke
|
|
79
79
|
:config_tool_available => true,
|
80
80
|
:edit_in_form_available => true,
|
81
81
|
:extended_search_available => true,
|
82
|
-
:rows_reordering_available =>
|
82
|
+
:rows_reordering_available => true,
|
83
83
|
|
84
84
|
:default_config => {
|
85
85
|
:ext_config => {
|
@@ -88,18 +88,15 @@ module Netzke
|
|
88
88
|
:enable_column_filters => true,
|
89
89
|
:load_inline_data => true,
|
90
90
|
:enable_context_menu => true,
|
91
|
-
|
91
|
+
:enable_rows_reordering => false, # column drag n drop
|
92
92
|
:enable_pagination => true,
|
93
93
|
:rows_per_page => 25,
|
94
|
+
:tools => %w{ refresh },
|
94
95
|
|
95
|
-
:mode => :normal
|
96
|
-
|
97
|
-
:enable_rows_reordering => false, # drag n drop
|
98
|
-
|
99
|
-
:tools => %w{ refresh }
|
96
|
+
:mode => :normal # when set to :config, :configuration button is enabled
|
100
97
|
},
|
98
|
+
:persistent_config => true
|
101
99
|
|
102
|
-
:persistent_config => false
|
103
100
|
}
|
104
101
|
})
|
105
102
|
end
|
@@ -109,22 +106,26 @@ module Netzke
|
|
109
106
|
res = []
|
110
107
|
|
111
108
|
# Checkcolumn
|
112
|
-
|
109
|
+
ext_examples = Netzke::Base.config[:ext_location] + "/examples/"
|
110
|
+
res << ext_examples + "ux/CheckColumn.js"
|
111
|
+
# res << "#{File.dirname(__FILE__)}/grid_panel_extras/javascripts/check-column.js"
|
112
|
+
|
113
113
|
|
114
114
|
# Filters
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
115
|
+
# Not compatible with Ext 3.0
|
116
|
+
# if config[:column_filters_available]
|
117
|
+
# ext_examples = Netzke::Base.config[:ext_location] + "/examples/"
|
118
|
+
# res << ext_examples + "grid-filtering/menu/EditableItem.js"
|
119
|
+
# res << ext_examples + "grid-filtering/menu/RangeMenu.js"
|
120
|
+
# res << ext_examples + "grid-filtering/grid/GridFilters.js"
|
121
|
+
#
|
122
|
+
# %w{Boolean Date List Numeric String}.unshift("").each do |f|
|
123
|
+
# res << ext_examples + "grid-filtering/grid/filter/#{f}Filter.js"
|
124
|
+
# end
|
125
|
+
#
|
126
|
+
# res << "#{File.dirname(__FILE__)}/grid_panel_extras/javascripts/filters.js"
|
127
|
+
#
|
128
|
+
# end
|
128
129
|
|
129
130
|
# DD
|
130
131
|
if config[:rows_reordering_available]
|
@@ -160,11 +161,17 @@ module Netzke
|
|
160
161
|
{:name => :value},
|
161
162
|
{:name => :header},
|
162
163
|
{:name => :hidden, :type => :boolean, :editor => :checkbox},
|
163
|
-
{:name => :
|
164
|
+
{:name => :editable, :type => :boolean, :editor => :checkbox, :header => "Editable", :default => true},
|
164
165
|
{:name => :editor, :type => :string, :editor => {:xtype => :combobox, :options => Netzke::Ext::FORM_FIELD_XTYPES}},
|
165
166
|
{:name => :renderer, :type => :string},
|
167
|
+
|
168
|
+
# maybe later
|
169
|
+
# {:name => :xtype, :type => :string, :editor => {:xtype => :combobox, :options => Netzke::Ext::COLUMN_XTYPES}},
|
170
|
+
|
166
171
|
# {:name => :renderer, :type => :string, :editor => {:xtype => :jsonfield}},
|
167
|
-
|
172
|
+
|
173
|
+
# Filters not supported in Ext 3.0
|
174
|
+
# {:name => :with_filters, :type => :boolean, :editor => :checkbox, :default => true, :header => "Filters"},
|
168
175
|
|
169
176
|
# some rarely used configurations, hidden
|
170
177
|
{:name => :width, :type => :integer, :editor => :numberfield, :hidden => true},
|
@@ -181,7 +188,7 @@ module Netzke
|
|
181
188
|
{:name => :ext_config__context_menu, :type => :json},
|
182
189
|
{:name => :ext_config__enable_pagination, :type => :boolean, :default => true},
|
183
190
|
{:name => :ext_config__rows_per_page, :type => :integer},
|
184
|
-
|
191
|
+
{:name => :ext_config__bbar, :type => :json},
|
185
192
|
{:name => :ext_config__prohibit_create, :type => :boolean},
|
186
193
|
{:name => :ext_config__prohibit_update, :type => :boolean},
|
187
194
|
{:name => :ext_config__prohibit_delete, :type => :boolean},
|
@@ -195,25 +202,25 @@ module Netzke
|
|
195
202
|
|
196
203
|
end
|
197
204
|
|
198
|
-
def
|
205
|
+
def initial_config
|
199
206
|
res = super
|
200
207
|
|
201
|
-
|
202
|
-
|
203
|
-
res[:ext_config][:bbar] = %w{ add edit apply del }
|
204
|
-
res[:ext_config][:bbar] << "-" << "add_in_form" << "edit_in_form" if res[:ext_config][:enable_edit_in_form]
|
205
|
-
res[:ext_config][:bbar] << "-" << "search" if res[:ext_config][:enable_extended_search]
|
206
|
-
end
|
207
|
-
|
208
|
-
# Context menu
|
209
|
-
res[:ext_config][:context_menu] ||= default_context_menu(res)
|
208
|
+
res[:ext_config][:bbar] = default_bbar if res[:ext_config][:bbar].nil?
|
209
|
+
res[:ext_config][:context_menu] ||= default_context_menu
|
210
210
|
|
211
211
|
res
|
212
212
|
end
|
213
213
|
|
214
|
-
def
|
214
|
+
def default_bbar
|
215
|
+
res = %w{ add edit apply del }
|
216
|
+
res << "-" << "add_in_form" << "edit_in_form" if self.class.config[:edit_in_form_available]
|
217
|
+
res << "-" << "search" if self.class.config[:extended_search_available]
|
218
|
+
res
|
219
|
+
end
|
220
|
+
|
221
|
+
def default_context_menu
|
215
222
|
res = %w{ edit del }
|
216
|
-
res << "-" << "edit_in_form" if
|
223
|
+
res << "-" << "edit_in_form" if self.class.config[:edit_in_form_available]
|
217
224
|
res
|
218
225
|
end
|
219
226
|
|
@@ -238,23 +245,15 @@ module Netzke
|
|
238
245
|
def actions
|
239
246
|
# Defaults
|
240
247
|
res = {
|
241
|
-
:add
|
242
|
-
:edit
|
243
|
-
:del
|
244
|
-
:apply
|
248
|
+
:add => {:text => 'Add', :disabled => ext_config[:prohibit_create]},
|
249
|
+
:edit => {:text => 'Edit', :disabled => true},
|
250
|
+
:del => {:text => 'Delete', :disabled => true},
|
251
|
+
:apply => {:text => 'Apply', :disabled => ext_config[:prohibit_update] && ext_config[:prohibit_create]},
|
252
|
+
:add_in_form => {:text => 'Add in form', :disabled => !ext_config[:enable_edit_in_form]},
|
253
|
+
:edit_in_form => {:text => 'Edit in form', :disabled => true},
|
254
|
+
:search => {:text => 'Search', :disabled => !ext_config[:enable_extended_search]}
|
245
255
|
}
|
246
256
|
|
247
|
-
# Edit in form
|
248
|
-
res.merge!({
|
249
|
-
:add_in_form => {:text => 'Add in form'},
|
250
|
-
:edit_in_form => {:text => 'Edit in form', :disabled => true}
|
251
|
-
}) if ext_config[:enable_edit_in_form]
|
252
|
-
|
253
|
-
# Extended search
|
254
|
-
res.merge!({
|
255
|
-
:search => {:text => 'Search'}
|
256
|
-
}) if ext_config[:enable_extended_search]
|
257
|
-
|
258
257
|
res
|
259
258
|
end
|
260
259
|
|
@@ -265,8 +264,8 @@ module Netzke
|
|
265
264
|
res.merge!({
|
266
265
|
:edit_form => {
|
267
266
|
:widget_class_name => "FormPanel",
|
268
|
-
:persistent_config => true,
|
269
267
|
:data_class_name => config[:data_class_name],
|
268
|
+
:persistent_config => config[:persistent_config],
|
270
269
|
:ext_config => {
|
271
270
|
:bbar => false,
|
272
271
|
:header => false,
|
@@ -276,8 +275,8 @@ module Netzke
|
|
276
275
|
|
277
276
|
:multi_edit_form => {
|
278
277
|
:widget_class_name => "FormPanel",
|
279
|
-
:persistent_config => true,
|
280
278
|
:data_class_name => config[:data_class_name],
|
279
|
+
:persistent_config => config[:persistent_config],
|
281
280
|
:ext_config => {
|
282
281
|
:bbar => false,
|
283
282
|
:header => false,
|
@@ -287,8 +286,8 @@ module Netzke
|
|
287
286
|
|
288
287
|
:new_record_form => {
|
289
288
|
:widget_class_name => "FormPanel",
|
290
|
-
:persistent_config => true,
|
291
289
|
:data_class_name => config[:data_class_name],
|
290
|
+
:persistent_config => config[:persistent_config],
|
292
291
|
:ext_config => {
|
293
292
|
:bbar => false,
|
294
293
|
:header => false,
|
@@ -303,7 +302,7 @@ module Netzke
|
|
303
302
|
:search_panel => {
|
304
303
|
:widget_class_name => "SearchPanel",
|
305
304
|
:search_class_name => config[:data_class_name],
|
306
|
-
:persistent_config =>
|
305
|
+
:persistent_config => config[:persistent_config],
|
307
306
|
:ext_config => {
|
308
307
|
:header => false,
|
309
308
|
:bbar => false,
|
@@ -328,7 +327,7 @@ module Netzke
|
|
328
327
|
end
|
329
328
|
|
330
329
|
def get_columns
|
331
|
-
if
|
330
|
+
if persistent_config_enabled?
|
332
331
|
persistent_config['layout__columns'] ||= default_columns
|
333
332
|
res = normalize_array_of_columns(persistent_config['layout__columns'])
|
334
333
|
else
|
@@ -421,11 +420,12 @@ module Netzke
|
|
421
420
|
# Some default limitations for virtual columns
|
422
421
|
if type == :virtual
|
423
422
|
# disable filters
|
424
|
-
c[:with_filters].nil? && c[:with_filters] = false
|
423
|
+
# c[:with_filters].nil? && c[:with_filters] = false
|
425
424
|
# disable sorting
|
426
425
|
c[:sortable].nil? && c[:sortable] = false
|
427
426
|
# read-only
|
428
|
-
c[:read_only].nil? && c[:read_only] = true
|
427
|
+
# c[:read_only].nil? && c[:read_only] = true
|
428
|
+
c[:editable].nil? && c[:editable] = false
|
429
429
|
end
|
430
430
|
|
431
431
|
# denormalize column (save space)
|
@@ -32,7 +32,7 @@ module Netzke
|
|
32
32
|
if !ext_config[:prohibit_delete]
|
33
33
|
record_ids = ActiveSupport::JSON.decode(params[:records])
|
34
34
|
klass = config[:data_class_name].constantize
|
35
|
-
klass.
|
35
|
+
klass.destroy(record_ids)
|
36
36
|
{:feedback => "Deleted #{record_ids.size} record(s)", :load_store_data => get_data}
|
37
37
|
else
|
38
38
|
{:feedback => "You don't have permissions to delete data"}
|
@@ -96,7 +96,7 @@ module Netzke
|
|
96
96
|
scope_name, *args = s
|
97
97
|
search.send(scope_name, *args)
|
98
98
|
else
|
99
|
-
search.send(s)
|
99
|
+
search.send(s, true)
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|