netzke-basepack 0.3.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/CHANGELOG +22 -0
  2. data/Manifest +6 -4
  3. data/README.rdoc +2 -2
  4. data/Rakefile +1 -1
  5. data/generators/netzke_form_panel/templates/create_netzke_form_panel_fields.rb +5 -6
  6. data/generators/netzke_grid_panel/templates/create_netzke_grid_panel_columns.rb +2 -1
  7. data/javascripts/basepack.js +2 -0
  8. data/lib/app/models/netzke_form_panel_field.rb +35 -3
  9. data/lib/app/models/netzke_grid_panel_column.rb +39 -2
  10. data/lib/netzke-basepack.rb +0 -1
  11. data/lib/netzke/accordion_panel.rb +51 -15
  12. data/lib/netzke/ar_ext.rb +14 -6
  13. data/lib/netzke/basic_app.rb +5 -5
  14. data/lib/netzke/border_layout_panel.rb +19 -4
  15. data/lib/netzke/container.rb +2 -6
  16. data/lib/netzke/db_fields.rb +40 -0
  17. data/lib/netzke/fields_configurator.rb +10 -18
  18. data/lib/netzke/form_panel.rb +42 -128
  19. data/lib/netzke/form_panel_extras/interface.rb +49 -0
  20. data/lib/netzke/form_panel_extras/js_builder.rb +131 -0
  21. data/lib/netzke/grid_panel.rb +20 -12
  22. data/lib/netzke/grid_panel_extras/interface.rb +181 -0
  23. data/lib/netzke/grid_panel_extras/js_builder.rb +322 -0
  24. data/lib/netzke/table_editor.rb +110 -0
  25. data/lib/netzke/wrapper.rb +1 -3
  26. data/netzke-basepack.gemspec +8 -8
  27. data/test/app_root/db/migrate/20090102223811_create_netzke_grid_panel_columns.rb +3 -1
  28. data/test/border_layout_panel_test.rb +8 -12
  29. data/test/grid_panel_test.rb +3 -3
  30. data/test/test_helper.rb +8 -0
  31. metadata +15 -11
  32. data/lib/netzke/column.rb +0 -50
  33. data/lib/netzke/grid_panel_interface.rb +0 -167
  34. data/lib/netzke/grid_panel_js_builder.rb +0 -298
  35. 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
@@ -6,13 +6,11 @@ module Netzke
6
6
  :layout => 'fit',
7
7
  :title => false,
8
8
  :border => false,
9
- :items => ["new Ext.componentCache[config.itemConfig.widgetClassName](config.itemConfig)".l]
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
@@ -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.1"
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-01-28}
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/column.rb", "lib/netzke/container.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_interface.rb", "lib/netzke/grid_panel_js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.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/column.rb", "lib/netzke/container.rb", "lib/netzke/fields_configurator.rb", "lib/netzke/form_panel.rb", "lib/netzke/grid_panel.rb", "lib/netzke/grid_panel_interface.rb", "lib/netzke/grid_panel_js_builder.rb", "lib/netzke/panel.rb", "lib/netzke/preference_grid.rb", "lib/netzke/properties_tool.rb", "lib/netzke/property_grid.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/column_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"]
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/column_test.rb", "test/grid_panel_test.rb", "test/netzke_basepack_test.rb"]
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.4"])
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.4"])
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.4"])
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 'active_support'
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/grid_panel_js_builder'
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.componentCache['BorderLayoutPanel']"))
22
- assert(widget.js_missing_code.index("Ext.componentCache['Panel']"))
23
- assert(!widget.js_missing_code(%w{GridPanel Panel}).index("Ext.componentCache['GridPanel']"))
24
- assert(!widget.js_missing_code(%w{GridPanel Panel}).index("Ext.componentCache['Panel']"))
25
- assert(!widget.js_missing_code(%w{BorderLayoutPanel}).index("Ext.componentCache['BorderLayoutPanel']"))
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
@@ -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.1
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-01-28 00:00:00 -06:00
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.4
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/grid_panel_interface.rb
58
- - lib/netzke/grid_panel_js_builder.rb
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/grid_panel_interface.rb
94
- - lib/netzke/grid_panel_js_builder.rb
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