netzke-basepack 0.3.1 → 0.3.3
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 +22 -0
- data/Manifest +6 -4
- data/README.rdoc +2 -2
- data/Rakefile +1 -1
- data/generators/netzke_form_panel/templates/create_netzke_form_panel_fields.rb +5 -6
- data/generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb +2 -1
- data/javascripts/basepack.js +2 -0
- data/lib/app/models/netzke_form_panel_field.rb +35 -3
- data/lib/app/models/netzke_grid_panel_column.rb +39 -2
- data/lib/netzke-basepack.rb +0 -1
- data/lib/netzke/accordion_panel.rb +51 -15
- data/lib/netzke/ar_ext.rb +14 -6
- data/lib/netzke/basic_app.rb +5 -5
- data/lib/netzke/border_layout_panel.rb +19 -4
- data/lib/netzke/container.rb +2 -6
- data/lib/netzke/db_fields.rb +40 -0
- data/lib/netzke/fields_configurator.rb +10 -18
- data/lib/netzke/form_panel.rb +42 -128
- data/lib/netzke/form_panel_extras/interface.rb +49 -0
- data/lib/netzke/form_panel_extras/js_builder.rb +131 -0
- data/lib/netzke/grid_panel.rb +20 -12
- data/lib/netzke/grid_panel_extras/interface.rb +181 -0
- data/lib/netzke/grid_panel_extras/js_builder.rb +322 -0
- data/lib/netzke/table_editor.rb +110 -0
- data/lib/netzke/wrapper.rb +1 -3
- data/netzke-basepack.gemspec +8 -8
- data/test/app_root/db/migrate/20090102223811_create_netzke_grid_panel_columns.rb +3 -1
- data/test/border_layout_panel_test.rb +8 -12
- data/test/grid_panel_test.rb +3 -3
- data/test/test_helper.rb +8 -0
- metadata +15 -11
- data/lib/netzke/column.rb +0 -50
- data/lib/netzke/grid_panel_interface.rb +0 -167
- data/lib/netzke/grid_panel_js_builder.rb +0 -298
- data/test/column_test.rb +0 -27
@@ -0,0 +1,110 @@
|
|
1
|
+
module Netzke
|
2
|
+
#
|
3
|
+
# A widget used for editing a DB table. It contains a grid and a form which may display different DB fields,
|
4
|
+
# configured by grid_columns and form_fields configuration options respectively
|
5
|
+
#
|
6
|
+
class TableEditor < BorderLayoutPanel
|
7
|
+
|
8
|
+
def self.js_extend_properties
|
9
|
+
super.merge({
|
10
|
+
:get_form_widget => <<-JS.l,
|
11
|
+
function(){
|
12
|
+
return this.getRegionWidget(this.initialConfig.region);
|
13
|
+
}
|
14
|
+
JS
|
15
|
+
|
16
|
+
# a grid row clicked
|
17
|
+
:on_row_click => <<-JS.l,
|
18
|
+
function(grid, index, e){
|
19
|
+
// don't react if the selection hasn't changed
|
20
|
+
if (index == this.lastSelectedRow) return false;
|
21
|
+
this.lastSelectedRow = index;
|
22
|
+
|
23
|
+
// get id of the record
|
24
|
+
var recordId = this.getCenterWidget().getStore().getAt(index).get('id');
|
25
|
+
|
26
|
+
// load the form with the record id
|
27
|
+
this.getRegionWidget(this.initialConfig.region).loadRecord(recordId);
|
28
|
+
}
|
29
|
+
JS
|
30
|
+
|
31
|
+
# after the form is submitted, reload the grid
|
32
|
+
:on_form_actioncomplete => <<-JS.l
|
33
|
+
function(grid, index, e){
|
34
|
+
this.getRegionWidget('center').store.load()
|
35
|
+
}
|
36
|
+
JS
|
37
|
+
})
|
38
|
+
end
|
39
|
+
|
40
|
+
def initial_config
|
41
|
+
# don't show the title on the top level
|
42
|
+
super.merge!({:ext_config => {:title => false}})
|
43
|
+
end
|
44
|
+
|
45
|
+
def js_config
|
46
|
+
# the client side of the widget wants to know which region it uses
|
47
|
+
super.merge({
|
48
|
+
:region => config[:split_region]
|
49
|
+
})
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.js_after_constructor
|
53
|
+
super << <<-JS
|
54
|
+
this.getCenterWidget().on('addclick', function(){
|
55
|
+
this.getFormWidget().getForm().reset();
|
56
|
+
|
57
|
+
var firstEditableField = null;
|
58
|
+
this.getFormWidget().getForm().items.each(function(f){
|
59
|
+
if (!f.hidden && !f.disabled){
|
60
|
+
firstEditableField = f;
|
61
|
+
return false; // break the loop
|
62
|
+
}
|
63
|
+
})
|
64
|
+
if (firstEditableField) firstEditableField.focus();
|
65
|
+
|
66
|
+
this.getFormWidget().ownerCt.expand();
|
67
|
+
|
68
|
+
this.getCenterWidget().getSelectionModel().clearSelections();
|
69
|
+
this.lastSelectedRow = null;
|
70
|
+
return false;
|
71
|
+
}, this)
|
72
|
+
|
73
|
+
this.getCenterWidget().on('rowclick', this.onRowClick, this);
|
74
|
+
JS
|
75
|
+
end
|
76
|
+
|
77
|
+
def initial_aggregatees
|
78
|
+
split_region = config[:split_region] || :east
|
79
|
+
split_size = config[:split_size] || 200
|
80
|
+
{
|
81
|
+
:center => {
|
82
|
+
:widget_class_name => "GridPanel",
|
83
|
+
:data_class_name => config[:data_class_name],
|
84
|
+
:ext_config => {
|
85
|
+
:title => config[:grid_title] || config[:data_class_name].pluralize,
|
86
|
+
:config_tool => true
|
87
|
+
}
|
88
|
+
}.recursive_merge(config[:grid_config] || {}),
|
89
|
+
|
90
|
+
split_region => {
|
91
|
+
:widget_class_name => "FormPanel",
|
92
|
+
:data_class_name => "User",
|
93
|
+
:region_config => {
|
94
|
+
:width => split_size,
|
95
|
+
:height => split_size,
|
96
|
+
:split => true,
|
97
|
+
:collapsible => true
|
98
|
+
},
|
99
|
+
:ext_config => {
|
100
|
+
:title => config[:form_title] || "#{config[:data_class_name]} details",
|
101
|
+
:listeners => {:actioncomplete => {
|
102
|
+
:fn => "function(f, a){this.ownerCt.ownerCt.onFormActioncomplete(f,a)}".l
|
103
|
+
}}
|
104
|
+
}
|
105
|
+
}.recursive_merge(config[:form_config] || {})
|
106
|
+
}
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
data/lib/netzke/wrapper.rb
CHANGED
@@ -6,13 +6,11 @@ module Netzke
|
|
6
6
|
:layout => 'fit',
|
7
7
|
:title => false,
|
8
8
|
:border => false,
|
9
|
-
:items => ["new Ext.
|
9
|
+
:items => ["new Ext.netzke.cache[config.itemConfig.widgetClassName](config.itemConfig)".l]
|
10
10
|
})
|
11
11
|
end
|
12
12
|
|
13
13
|
def initial_aggregatees
|
14
|
-
# item_name = config[:item][:name] ||= 'item'
|
15
|
-
# {item_name.to_sym => config[:item]}
|
16
14
|
{:item => config[:item]}
|
17
15
|
end
|
18
16
|
end
|
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.3"
|
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-
|
9
|
+
s.date = %q{2009-02-12}
|
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/
|
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/
|
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/container.rb", "lib/netzke/db_fields.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/form_panel_extras/interface.rb", "lib/netzke/form_panel_extras/js_builder.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_extras/interface.rb", "lib/netzke/grid_panel_extras/js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/table_editor.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/container.rb", "lib/netzke/db_fields.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/form_panel_extras/interface.rb", "lib/netzke/form_panel_extras/js_builder.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_extras/interface.rb", "lib/netzke/grid_panel_extras/js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.rb", "lib/netzke/table_editor.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/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"]
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.rubyforge_project = %q{netzke-basepack}
|
19
19
|
s.rubygems_version = %q{1.3.1}
|
20
20
|
s.summary = %q{Base Netzke widgets - grid, form, tree, and more}
|
21
|
-
s.test_files = ["test/ar_ext_test.rb", "test/border_layout_panel_test.rb", "test/
|
21
|
+
s.test_files = ["test/ar_ext_test.rb", "test/border_layout_panel_test.rb", "test/grid_panel_test.rb", "test/netzke_basepack_test.rb"]
|
22
22
|
|
23
23
|
if s.respond_to? :specification_version then
|
24
24
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
@@ -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.6"])
|
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.6"])
|
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.6"])
|
37
37
|
end
|
38
38
|
end
|
@@ -4,11 +4,13 @@ class CreateNetzkeGridPanelColumns < ActiveRecord::Migration
|
|
4
4
|
t.string :name
|
5
5
|
t.string :label
|
6
6
|
t.boolean :read_only
|
7
|
-
t.integer :position
|
8
7
|
t.boolean :hidden
|
9
8
|
t.integer :width
|
10
9
|
t.string :editor, :limit => 32
|
10
|
+
t.string :renderer, :limit => 32
|
11
|
+
t.string :ext_config, :limit => 1024
|
11
12
|
|
13
|
+
t.integer :position
|
12
14
|
t.integer :layout_id
|
13
15
|
|
14
16
|
t.timestamps
|
@@ -1,15 +1,11 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require '
|
3
|
-
require 'active_support/test_case'
|
4
|
-
require 'test/unit/testcase'
|
5
|
-
require 'test/unit/autorunner'
|
1
|
+
# require 'rubygems'
|
2
|
+
require 'test_helper'
|
6
3
|
|
7
4
|
require 'netzke-core'
|
8
5
|
require 'netzke/border_layout_panel'
|
9
6
|
require 'netzke/panel'
|
10
7
|
require 'netzke/properties_tool'
|
11
|
-
require 'netzke/
|
12
|
-
require 'netzke/grid_panel_interface'
|
8
|
+
require 'netzke/db_fields'
|
13
9
|
require 'netzke/grid_panel'
|
14
10
|
|
15
11
|
class BorderLayoutPanelTest < ActiveSupport::TestCase
|
@@ -18,11 +14,11 @@ class BorderLayoutPanelTest < ActiveSupport::TestCase
|
|
18
14
|
|
19
15
|
assert(%w{BorderLayoutPanel Panel GridPanel}.all?{|k| widget.dependencies.include?(k)})
|
20
16
|
|
21
|
-
assert(widget.js_missing_code.index("Ext.
|
22
|
-
assert(widget.js_missing_code.index("Ext.
|
23
|
-
assert(!widget.js_missing_code(%w{GridPanel Panel}).index("Ext.
|
24
|
-
assert(!widget.js_missing_code(%w{GridPanel Panel}).index("Ext.
|
25
|
-
assert(!widget.js_missing_code(%w{BorderLayoutPanel}).index("Ext.
|
17
|
+
assert(widget.js_missing_code.index("Ext.netzke.cache['BorderLayoutPanel']"))
|
18
|
+
# assert(widget.js_missing_code.index("Ext.netzke.cache['Panel']"))
|
19
|
+
assert(!widget.js_missing_code(%w{GridPanel Panel}).index("Ext.netzke.cache['GridPanel']"))
|
20
|
+
# assert(!widget.js_missing_code(%w{GridPanel Panel}).index("Ext.netzke.cache['Panel']"))
|
21
|
+
# assert(!widget.js_missing_code(%w{BorderLayoutPanel}).index("Ext.netzke.cache['BorderLayoutPanel']"))
|
26
22
|
|
27
23
|
end
|
28
24
|
end
|
data/test/grid_panel_test.rb
CHANGED
@@ -5,12 +5,12 @@ require 'netzke/properties_tool'
|
|
5
5
|
require 'netzke/container'
|
6
6
|
require 'netzke/accordion_panel'
|
7
7
|
|
8
|
-
require 'netzke/grid_panel_interface'
|
9
|
-
require 'netzke/grid_panel_js_builder'
|
8
|
+
# require 'netzke/grid_panel_interface'
|
9
|
+
# require 'netzke/grid_panel_js_builder'
|
10
10
|
require 'netzke/grid_panel'
|
11
11
|
|
12
12
|
require 'netzke/ar_ext'
|
13
|
-
require 'netzke/column'
|
13
|
+
# require 'netzke/column'
|
14
14
|
|
15
15
|
class GridPanelTest < ActiveSupport::TestCase
|
16
16
|
|
data/test/test_helper.rb
CHANGED
@@ -18,3 +18,11 @@ Test::Unit::TestCase.class_eval do
|
|
18
18
|
self.use_instantiated_fixtures = false
|
19
19
|
self.fixture_path = "#{File.dirname(__FILE__)}/fixtures"
|
20
20
|
end
|
21
|
+
|
22
|
+
# Load models and controllers from lib/app
|
23
|
+
# %w{ models controllers }.each do |dir|
|
24
|
+
# path = File.join(File.dirname(__FILE__), 'app', dir)
|
25
|
+
# $LOAD_PATH << path
|
26
|
+
# ActiveSupport::Dependencies.load_paths << path
|
27
|
+
# ActiveSupport::Dependencies.load_once_paths.delete(path)
|
28
|
+
# 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.3
|
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-
|
12
|
+
date: 2009-02-12 00:00:00 +01: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.6
|
37
37
|
version:
|
38
38
|
description: Base Netzke widgets - grid, form, tree, and more
|
39
39
|
email: sergei@writelesscode.com
|
@@ -49,17 +49,20 @@ extra_rdoc_files:
|
|
49
49
|
- lib/netzke/ar_ext.rb
|
50
50
|
- lib/netzke/basic_app.rb
|
51
51
|
- lib/netzke/border_layout_panel.rb
|
52
|
-
- lib/netzke/column.rb
|
53
52
|
- lib/netzke/container.rb
|
53
|
+
- lib/netzke/db_fields.rb
|
54
54
|
- lib/netzke/fields_configurator.rb
|
55
55
|
- lib/netzke/form_panel.rb
|
56
|
+
- lib/netzke/form_panel_extras/interface.rb
|
57
|
+
- lib/netzke/form_panel_extras/js_builder.rb
|
56
58
|
- lib/netzke/grid_panel.rb
|
57
|
-
- lib/netzke/
|
58
|
-
- lib/netzke/
|
59
|
+
- lib/netzke/grid_panel_extras/interface.rb
|
60
|
+
- lib/netzke/grid_panel_extras/js_builder.rb
|
59
61
|
- lib/netzke/panel.rb
|
60
62
|
- lib/netzke/preference_grid.rb
|
61
63
|
- lib/netzke/properties_tool.rb
|
62
64
|
- lib/netzke/property_grid.rb
|
65
|
+
- lib/netzke/table_editor.rb
|
63
66
|
- lib/netzke/wrapper.rb
|
64
67
|
- lib/netzke-basepack.rb
|
65
68
|
- LICENSE
|
@@ -85,17 +88,20 @@ files:
|
|
85
88
|
- lib/netzke/ar_ext.rb
|
86
89
|
- lib/netzke/basic_app.rb
|
87
90
|
- lib/netzke/border_layout_panel.rb
|
88
|
-
- lib/netzke/column.rb
|
89
91
|
- lib/netzke/container.rb
|
92
|
+
- lib/netzke/db_fields.rb
|
90
93
|
- lib/netzke/fields_configurator.rb
|
91
94
|
- lib/netzke/form_panel.rb
|
95
|
+
- lib/netzke/form_panel_extras/interface.rb
|
96
|
+
- lib/netzke/form_panel_extras/js_builder.rb
|
92
97
|
- lib/netzke/grid_panel.rb
|
93
|
-
- lib/netzke/
|
94
|
-
- lib/netzke/
|
98
|
+
- lib/netzke/grid_panel_extras/interface.rb
|
99
|
+
- lib/netzke/grid_panel_extras/js_builder.rb
|
95
100
|
- lib/netzke/panel.rb
|
96
101
|
- lib/netzke/preference_grid.rb
|
97
102
|
- lib/netzke/properties_tool.rb
|
98
103
|
- lib/netzke/property_grid.rb
|
104
|
+
- lib/netzke/table_editor.rb
|
99
105
|
- lib/netzke/wrapper.rb
|
100
106
|
- lib/netzke-basepack.rb
|
101
107
|
- LICENSE
|
@@ -134,7 +140,6 @@ files:
|
|
134
140
|
- test/app_root/vendor/plugins/acts_as_list/README
|
135
141
|
- test/ar_ext_test.rb
|
136
142
|
- test/border_layout_panel_test.rb
|
137
|
-
- test/column_test.rb
|
138
143
|
- test/console_with_fixtures.rb
|
139
144
|
- test/fixtures/books.yml
|
140
145
|
- test/fixtures/categories.yml
|
@@ -182,6 +187,5 @@ summary: Base Netzke widgets - grid, form, tree, and more
|
|
182
187
|
test_files:
|
183
188
|
- test/ar_ext_test.rb
|
184
189
|
- test/border_layout_panel_test.rb
|
185
|
-
- test/column_test.rb
|
186
190
|
- test/grid_panel_test.rb
|
187
191
|
- test/netzke_basepack_test.rb
|
data/lib/netzke/column.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
module Netzke
|
2
|
-
# TODO: rename this class, or better even, make a module out of it
|
3
|
-
class Column
|
4
|
-
def self.default_dbfields_for_widget(widget, mode = :grid)
|
5
|
-
raise ArgumentError, "No data_class_name specified for widget #{widget.config[:name]}" if widget.config[:data_class_name].nil?
|
6
|
-
|
7
|
-
# layout = NetzkeLayout.create(:widget_name => widget.id_name, :items_class => self.name, :user_id => NetzkeLayout.user_id)
|
8
|
-
|
9
|
-
data_class = widget.config[:data_class_name].constantize
|
10
|
-
exposed_columns = normalize_columns(data_class.exposed_columns) # columns exposed from the data class
|
11
|
-
columns_from_config = widget.config[:columns] && normalize_columns(widget.config[:columns]) # columns specified in widget's config
|
12
|
-
|
13
|
-
if columns_from_config
|
14
|
-
# reverse-merge each column hash from config with each column hash from exposed_columns (columns from config have higher priority)
|
15
|
-
for c in columns_from_config
|
16
|
-
corresponding_exposed_column = exposed_columns.find{ |k| k[:name] == c[:name] }
|
17
|
-
c.reverse_merge!(corresponding_exposed_column) if corresponding_exposed_column
|
18
|
-
end
|
19
|
-
columns_for_create = columns_from_config
|
20
|
-
else
|
21
|
-
# we didn't have columns configured in widget's config, so, use the columns from the data class
|
22
|
-
columns_for_create = exposed_columns
|
23
|
-
end
|
24
|
-
|
25
|
-
res = []
|
26
|
-
for c in columns_for_create
|
27
|
-
# finally reverse-merge them with the defaults from the data_class
|
28
|
-
res << (mode == :grid ? data_class.default_column_config(c) : data_class.default_field_config(c))
|
29
|
-
end
|
30
|
-
|
31
|
-
res
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.default_columns_for_widget(widget)
|
35
|
-
default_dbfields_for_widget(widget, :grid)
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.default_fields_for_widget(widget)
|
39
|
-
default_dbfields_for_widget(widget, :form)
|
40
|
-
end
|
41
|
-
|
42
|
-
protected
|
43
|
-
|
44
|
-
# like this: [:col1, {:name => :col2}, :col3] => [{:name => :col1}, {:name => :col2}, {:name => :col3}]
|
45
|
-
def self.normalize_columns(items)
|
46
|
-
items.map{|c| c.is_a?(Symbol) ? {:name => c} : c}
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
end
|
@@ -1,167 +0,0 @@
|
|
1
|
-
module Netzke::GridPanelInterface
|
2
|
-
def post_data(params)
|
3
|
-
[:create, :update].each do |operation|
|
4
|
-
data = JSON.parse(params.delete("#{operation}d_records".to_sym)) if params["#{operation}d_records".to_sym]
|
5
|
-
process_data(data, operation) if !data.nil?
|
6
|
-
end
|
7
|
-
{:success => true, :flash => @flash}
|
8
|
-
end
|
9
|
-
|
10
|
-
def get_data(params = {})
|
11
|
-
if @permissions[:read]
|
12
|
-
records = get_records(params)
|
13
|
-
{:data => records, :total => records.total_records}
|
14
|
-
else
|
15
|
-
flash :error => "You don't have permissions to read data"
|
16
|
-
{:success => false, :flash => @flash}
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def delete_data(params = {})
|
21
|
-
if @permissions[:delete]
|
22
|
-
record_ids = JSON.parse(params.delete(:records))
|
23
|
-
klass = config[:data_class_name].constantize
|
24
|
-
klass.delete(record_ids)
|
25
|
-
flash :notice => "Deleted #{record_ids.size} record(s)"
|
26
|
-
success = true
|
27
|
-
else
|
28
|
-
flash :error => "You don't have permissions to delete data"
|
29
|
-
success = false
|
30
|
-
end
|
31
|
-
{:success => success, :flash => @flash}
|
32
|
-
end
|
33
|
-
|
34
|
-
def resize_column(params)
|
35
|
-
raise "Called interface_resize_column while not configured to do so" unless config[:ext_config][:enable_column_resize]
|
36
|
-
if layout_manager_class
|
37
|
-
l_item = layout_manager_class.by_widget(id_name).layout_items[params[:index].to_i]
|
38
|
-
l_item.width = params[:size]
|
39
|
-
l_item.save!
|
40
|
-
end
|
41
|
-
{}
|
42
|
-
end
|
43
|
-
|
44
|
-
def move_column(params)
|
45
|
-
raise "Called interface_move_column while not configured to do so" unless config[:ext_config][:enable_column_move]
|
46
|
-
if layout_manager_class
|
47
|
-
layout_manager_class.by_widget(id_name).move_item(params[:old_index].to_i, params[:new_index].to_i)
|
48
|
-
end
|
49
|
-
{}
|
50
|
-
end
|
51
|
-
|
52
|
-
# Return the choices for the column
|
53
|
-
def get_cb_choices(params)
|
54
|
-
column = params[:column]
|
55
|
-
query = params[:query]
|
56
|
-
|
57
|
-
{:data => config[:data_class_name].constantize.choices_for(column, query).map{|s| [s]}}
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
|
-
protected
|
62
|
-
|
63
|
-
# operation => :update || :create
|
64
|
-
def process_data(data, operation)
|
65
|
-
if @permissions[operation]
|
66
|
-
klass = config[:data_class_name].constantize
|
67
|
-
modified_records = 0
|
68
|
-
data.each do |record_hash|
|
69
|
-
id = record_hash.delete('id')
|
70
|
-
record = operation == :create ? klass.create : klass.find(id)
|
71
|
-
logger.debug { "!!! record: #{record.inspect}" }
|
72
|
-
success = true
|
73
|
-
exception = nil
|
74
|
-
|
75
|
-
# process all attirubutes for the same record (OPTIMIZE: we can use update_attributes separately for regular attributes to speed things up)
|
76
|
-
record_hash.each_pair do |k,v|
|
77
|
-
begin
|
78
|
-
record.send("#{k}=",v)
|
79
|
-
rescue ArgumentError => exc
|
80
|
-
flash :error => exc.message
|
81
|
-
success = false
|
82
|
-
break
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
# try to save
|
87
|
-
modified_records += 1 if success && record.save
|
88
|
-
|
89
|
-
# flash eventual errors
|
90
|
-
record.errors.each_full do |msg|
|
91
|
-
flash :error => msg
|
92
|
-
end
|
93
|
-
|
94
|
-
flash :notice => "#{operation.to_s.capitalize}d #{modified_records} record(s)"
|
95
|
-
end
|
96
|
-
else
|
97
|
-
flash :error => "You don't have permissions to #{operation} data"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
# get records
|
102
|
-
def get_records(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
|
-
|
106
|
-
raise ArgumentError, "No data_class_name specified for widget '#{config[:name]}'" if !config[:data_class_name]
|
107
|
-
records = config[:data_class_name].constantize.all(search_params.clone) # clone needed as searchlogic removes :conditions key from the hash
|
108
|
-
# output_array = []
|
109
|
-
columns = get_columns
|
110
|
-
output_array = records.map{|r| r.to_array(columns)}
|
111
|
-
|
112
|
-
# records.each do |r|
|
113
|
-
# r_array = []
|
114
|
-
# self.get_columns.each do |column|
|
115
|
-
# r_array << r.send(column[:name])
|
116
|
-
# end
|
117
|
-
# output_array << r_array
|
118
|
-
# output_array << r.to_array(columns)
|
119
|
-
# end
|
120
|
-
|
121
|
-
# add total_entries accessor to the result
|
122
|
-
class << output_array
|
123
|
-
attr :total_records, true
|
124
|
-
end
|
125
|
-
total_records_count = config[:data_class_name].constantize.count(search_params)
|
126
|
-
output_array.total_records = total_records_count
|
127
|
-
|
128
|
-
output_array
|
129
|
-
end
|
130
|
-
|
131
|
-
def convert_filters(column_filter)
|
132
|
-
res = {}
|
133
|
-
column_filter.each_pair do |k,v|
|
134
|
-
field = v["field"]
|
135
|
-
case v["data"]["type"]
|
136
|
-
when "string"
|
137
|
-
field << "_contains"
|
138
|
-
when "numeric"
|
139
|
-
field << "_#{v["data"]["comparison"]}"
|
140
|
-
end
|
141
|
-
value = v["data"]["value"]
|
142
|
-
res.merge!({field => value})
|
143
|
-
end
|
144
|
-
res
|
145
|
-
end
|
146
|
-
|
147
|
-
# make params understandable to searchlogic
|
148
|
-
def normalize_params(params)
|
149
|
-
# filters
|
150
|
-
conditions = params[:filter] && convert_filters(params[:filter])
|
151
|
-
|
152
|
-
normalized_conditions = {}
|
153
|
-
conditions && conditions.each_pair do |k, v|
|
154
|
-
assoc, method = k.split('__')
|
155
|
-
normalized_conditions.merge!(method.nil? ? {assoc => v} : {assoc => {method => v}})
|
156
|
-
end
|
157
|
-
|
158
|
-
# sorting
|
159
|
-
order_by = if params[:sort]
|
160
|
-
assoc, method = params[:sort].split('__')
|
161
|
-
method.nil? ? assoc : {assoc => method}
|
162
|
-
end
|
163
|
-
|
164
|
-
page = params[:start].to_i/params[:limit].to_i + 1 if params[:limit]
|
165
|
-
{:per_page => params[:limit], :page => page, :order_by => order_by, :order_as => params[:dir], :conditions => normalized_conditions}
|
166
|
-
end
|
167
|
-
end
|