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.
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