netzke-basepack 0.12.0.beta → 0.12.0.rc1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85ed177b26ec3cc46b9a5a1606117072bcdcc146
4
- data.tar.gz: 2aa3f06ae50956fe74c668a9e4e020a145e318e1
3
+ metadata.gz: 817d2e083cf6654f2cda858ad90bcce10f0186d0
4
+ data.tar.gz: f6eea32b664e1167d575c1dceaefb04a8e39c01a
5
5
  SHA512:
6
- metadata.gz: 41640719dcc8209666ba2c5ea6f76a2609ddd77e76455b365b53cfd80895fa560fe428f58925e3bc23b91821daa1671236357da4174aaf13da2998cc3410e73b
7
- data.tar.gz: 74fb7310e03390c8522e10c58fb2faa57c52a888ebbfd40fecee2a985067ed47059128e8b2c7bd52dec93e981cda64b7fe6e78cedeee20f8a49e6db95adbb9bf
6
+ metadata.gz: 1618ba135de66f165e85463dbdd9f0a3907b97bd8a065dacd67d77707a8b3dda2543f6096b7ac5d76b0ee1048044a1fca94532422c37b0fbf83386b923c4fe43
7
+ data.tar.gz: 7df2684b6ccb8bf81a9235896f2fe7e1f12345cdf11b578330eee7f033d8da40fc1b2767e8c7e4c72de8e851980aed0a49210065d30436d5be2aa8948e72acb0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.12.0 - WIP
2
+ * ExtJS 5
3
+ * New component: DynamicTabPanel
4
+
1
5
  # 0.11.0 - 2015-02-05
2
6
  * Rails 4.2
3
7
  * A few fixes from AlexKovynev
data/README.md CHANGED
@@ -28,9 +28,9 @@ enhancing any grid with live search functionality
28
28
 
29
29
  ## Requirements
30
30
 
31
- * Ruby ~> 1.9.2
31
+ * Ruby > 2.0.0
32
32
  * Rails ~> 4.2.0
33
- * Ext JS = 4.2.1
33
+ * Ext JS = 5.1.0
34
34
 
35
35
  ## Installation
36
36
 
@@ -26,3 +26,11 @@ Ext.override(Ext.view.BoundList, {
26
26
  this.callParent(arguments);
27
27
  },
28
28
  });
29
+
30
+ Netzke.isModelDefined = function(name) {
31
+ return !!(Netzke.models || {})[name];
32
+ };
33
+
34
+ Netzke.modelName = function(name){
35
+ return "Netzke.models." + name;
36
+ };
@@ -8,20 +8,24 @@ Ext.define('Ext.netzke.ComboBox', {
8
8
  forceSelection: true,
9
9
 
10
10
  initComponent : function(){
11
- var modelName = this.parentId + "_" + this.name;
11
+ var parent = this.netzkeParent || this.findParentBy(function(c) { return c.isNetzke; }),
12
+ modelName = parent.id + "_" + this.name;
12
13
 
13
14
  if (this.blankLine == undefined) this.blankLine = "---";
14
15
 
15
- Ext.define(modelName, {
16
+ if (!Netzke.isModelDefined(modelName)) {
17
+ Ext.define(Netzke.modelName(modelName), {
16
18
  extend: 'Ext.data.Model',
17
19
  fields: ['value', 'text']
18
- });
20
+ });
21
+ };
19
22
 
20
23
  var store = new Ext.data.Store({
21
- model: modelName,
24
+ model: Netzke.modelName(modelName),
22
25
  proxy: {
23
26
  type: 'direct',
24
- directFn: Netzke.providers[this.parentId].getComboboxOptions,
27
+ directFn: Netzke.providers[parent.id].getComboboxOptions,
28
+ extraParams: {configs: parent.buildParentClientConfigs()},
25
29
  reader: {
26
30
  type: 'array',
27
31
  rootProperty: 'data'
@@ -37,7 +41,7 @@ Ext.define('Ext.netzke.ComboBox', {
37
41
  if (this.blankLine) {
38
42
  store.on('load', function(self, params) {
39
43
  // append a selectable "empty line" which will allow remove the association
40
- self.add(Ext.create(modelName, {value: -1, text: this.blankLine}));
44
+ self.add(Ext.create(Netzke.modelName(modelName), {value: -1, text: this.blankLine}));
41
45
  }, this);
42
46
  }
43
47
 
@@ -47,6 +51,5 @@ Ext.define('Ext.netzke.ComboBox', {
47
51
  this.store = store;
48
52
 
49
53
  this.callParent();
50
- },
51
-
54
+ }
52
55
  });
@@ -12,7 +12,7 @@ module Netzke
12
12
  # end
13
13
  #
14
14
  # def columns
15
- # super + [:basic_actions, :extra_actions]
15
+ # super + [:actions]
16
16
  # end
17
17
  #
18
18
  # column :actions do |c|
@@ -38,20 +38,10 @@ module Netzke
38
38
  module ActionColumn
39
39
  extend ActiveSupport::Concern
40
40
 
41
- included do |base|
42
- js_configure do |c|
43
- c.require :action_column
44
- end
45
- end
46
-
47
- # This can be optimized in order to generate less json in the column getter
48
41
  def augment_column_config(c)
49
42
  if c[:type] == :action
50
- c.xtype = :netzkeactioncolumn
51
-
52
- c[:getter] = lambda do |r|
53
- c.actions.map {|a| build_action_config(a)}.netzke_jsonify.to_json
54
- end
43
+ c.xtype = :actioncolumn
44
+ c.items = c.actions.map {|a| build_action_config(a)}.netzke_jsonify
55
45
  end
56
46
 
57
47
  super
@@ -61,10 +51,21 @@ module Netzke
61
51
 
62
52
  def build_action_config(a)
63
53
  a = {name: a} if a.is_a?(Symbol)
54
+ a[:handler] ||= a[:name]
64
55
  a.tap do |a|
65
56
  a[:tooltip] ||= a[:name].to_s.humanize
66
57
  a[:icon] ||= a[:name].to_sym
67
- a[:handler] ||= "on_#{a[:name]}"
58
+ a[:handler] = Netzke::Core::JsonLiteral.new <<-JS
59
+ function() {
60
+ var cmp = Ext.getCmp('#{js_id}'),
61
+ f = cmp.on#{a[:handler].to_s.camelize};
62
+ if (Ext.isFunction(f)) {
63
+ f.apply(cmp, arguments);
64
+ } else {
65
+ Netzke.warning("Undefined handler for action '#{a[:name]}'");
66
+ }
67
+ }
68
+ JS
68
69
 
69
70
  a[:icon] = "#{Netzke::Core.icons_uri}/#{a[:icon]}.png" if a[:icon].is_a?(Symbol)
70
71
  end
@@ -0,0 +1,22 @@
1
+ module Netzke
2
+ module Basepack
3
+ # A tab panel that can load components dynamically by their class name. Components can be loaded in the current or new tab.
4
+ # For example:
5
+ #
6
+ # this.netzkeLoadComponentByClass('BookGrid', {newTab: true, clientConfig: {read_only: true}});
7
+ #
8
+ class DynamicTabPanel < Netzke::Base
9
+ js_configure do |c|
10
+ c.extend = "Ext.tab.Panel"
11
+ c.mixin
12
+ end
13
+
14
+ # Override this method if you need more control on what components can/cannot be loaded, or in order to access
15
+ # `client_config`
16
+ component :child do |c|
17
+ # c.client_config <== is accessible here
18
+ c.klass = (c.client_config[:klass] || "Netzke::Core::Panel").constantize
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ {
2
+ netzkeTabComponentDelivered: function(c, config) {
3
+ var tab,
4
+ i,
5
+ activeTab = this.getActiveTab(),
6
+ cmp = Ext.ComponentManager.create(Ext.apply(c, {closable: true}));
7
+
8
+ if (config.newTab || activeTab == null) {
9
+ tab = this.add(cmp);
10
+ } else {
11
+ tab = this.getActiveTab();
12
+ i = this.items.indexOf(tab);
13
+ this.remove(tab);
14
+ tab = this.insert(i, cmp);
15
+ }
16
+
17
+ this.setActiveTab(tab);
18
+ },
19
+
20
+ netzkeLoadComponentByClass: function(klass, options) {
21
+ this.netzkeLoadComponent('child', Ext.apply(options, {
22
+ configOnly: true,
23
+ clone: true,
24
+ clientConfig: Ext.apply(options.clientConfig || {}, {klass: klass}),
25
+ callback: this.netzkeTabComponentDelivered,
26
+ scope: this,
27
+ }));
28
+ }
29
+ }
@@ -47,9 +47,6 @@ module Netzke
47
47
  @fields_from_items[c.name.to_sym] = c
48
48
 
49
49
  c.set_defaults!
50
-
51
- # netzkeremotecombo requires our js_id
52
- c.parent_id = self.js_id if c.xtype == :netzkeremotecombo
53
50
  end
54
51
  end
55
52
 
@@ -31,6 +31,7 @@ module Netzke
31
31
  # +query+ - what's typed-in in the combobox
32
32
  # +id+ - selected record id
33
33
  endpoint :get_combobox_options do |params, this|
34
+ ::Rails.logger.debug "\n!!! params: #{params.inspect}\n"
34
35
  column = final_columns.detect{ |c| c[:name] == params[:attr] }
35
36
  this.data = data_adapter.combo_data(column, params[:query])
36
37
  end
@@ -67,7 +67,7 @@
67
67
 
68
68
  /* Exception handler. TODO: will responses with status 200 land here? */
69
69
  loadExceptionHandler: function(proxy, response, operation){
70
- Netzke.warning('Server exception occured. Override loadExceptionHandler, or catch globally by listenning to serverexception event of Netzke.directProvider');
70
+ Netzke.warning('Server exception occured. Override loadExceptionHandler, or catch globally by listenning to exception event of Netzke.directProvider');
71
71
  },
72
72
 
73
73
  // Inline editing of 1 row
@@ -22,8 +22,8 @@
22
22
  this.netzkeProcessColumns();
23
23
 
24
24
  // Define the model
25
- if (!this.netzkeIsModelDefined()) {
26
- Ext.define(this.netzkeModelName(), {
25
+ if (!Netzke.isModelDefined(this.id)) {
26
+ Ext.define(Netzke.modelName(this.id), {
27
27
  extend: 'Ext.data.Model',
28
28
  idProperty: this.pri, // Primary key
29
29
  fields: this.fields
@@ -218,7 +218,7 @@
218
218
  }
219
219
 
220
220
  if (c.editor) {
221
- Ext.applyIf(c.editor, {selectOnFocus: true, parentId: this.id});
221
+ Ext.applyIf(c.editor, {selectOnFocus: true, netzkeParent: this});
222
222
  }
223
223
 
224
224
  // Setting the default filter type
@@ -234,7 +234,7 @@
234
234
 
235
235
  netzkeBuildStore: function() {
236
236
  var store = Ext.create('Ext.data.Store', Ext.apply({
237
- model: this.netzkeModelName(),
237
+ model: Netzke.modelName(this.id),
238
238
  proxy: this.netzkeBuildProxy(),
239
239
  pruneModifiedRecords: true,
240
240
  remoteSort: true,
@@ -309,14 +309,6 @@
309
309
  return r.isNew ? "grid-dirty-record" : ""
310
310
  },
311
311
 
312
- netzkeModelName: function(){
313
- return "Netzke.models." + this.id;
314
- },
315
-
316
- netzkeIsModelDefined: function(){
317
- return !!(Netzke.models || {})[this.id];
318
- },
319
-
320
312
  // Normalizes the renderer for a column.
321
313
  // Renderer may be:
322
314
  // 1) a string that contains the name of the function to be used as renderer.
@@ -1,5 +1,5 @@
1
1
  module Netzke
2
2
  module Basepack
3
- VERSION = "0.12.0.beta"
3
+ VERSION = "0.12.0.rc1"
4
4
  end
5
5
  end
@@ -4,7 +4,7 @@ Gem::Specification.new do |s|
4
4
  s.name = "netzke-basepack"
5
5
  s.version = Netzke::Basepack::VERSION
6
6
  s.author = "Max Gorin"
7
- s.email = "gorinme@gmail.com"
7
+ s.email = "max@goodbitlabs.com"
8
8
  s.homepage = "http://netzke.org"
9
9
  s.summary = "Pre-built Netzke components"
10
10
  s.description = "A set of feature-rich extendible Netzke components (such as Form, Grid, Window, TabPanel, etc) and component extensions which can be used as building blocks for your RIA"
@@ -13,7 +13,8 @@ Gem::Specification.new do |s|
13
13
  s.test_files = Dir["{test}/**/*"]
14
14
  s.require_paths = ["lib"]
15
15
 
16
- s.add_dependency 'netzke-core', '~> 0.12.0.beta'
16
+ s.add_dependency 'netzke-core', '~> 0.12.0.rc1'
17
+ s.add_dependency 'netzke-testing', '~> 0.12.0.beta2'
17
18
 
18
19
  s.add_development_dependency 'rails', '~> 4.2.0'
19
20
  s.add_development_dependency 'sqlite3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: netzke-basepack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0.beta
4
+ version: 0.12.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Gorin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-08 00:00:00.000000000 Z
11
+ date: 2015-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: netzke-core
@@ -16,14 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.12.0.beta
19
+ version: 0.12.0.rc1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.12.0.beta
26
+ version: 0.12.0.rc1
27
+ - !ruby/object:Gem::Dependency
28
+ name: netzke-testing
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.12.0.beta2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.12.0.beta2
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rails
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -97,7 +111,7 @@ dependencies:
97
111
  description: A set of feature-rich extendible Netzke components (such as Form, Grid,
98
112
  Window, TabPanel, etc) and component extensions which can be used as building blocks
99
113
  for your RIA
100
- email: gorinme@gmail.com
114
+ email: max@goodbitlabs.com
101
115
  executables: []
102
116
  extensions: []
103
117
  extra_rdoc_files: []
@@ -115,7 +129,6 @@ files:
115
129
  - lib/netzke/basepack.rb
116
130
  - lib/netzke/basepack/accordion.rb
117
131
  - lib/netzke/basepack/action_column.rb
118
- - lib/netzke/basepack/action_column/javascripts/action_column.js
119
132
  - lib/netzke/basepack/active_record.rb
120
133
  - lib/netzke/basepack/active_record/relation_extensions.rb
121
134
  - lib/netzke/basepack/attr_config.rb
@@ -124,6 +137,8 @@ files:
124
137
  - lib/netzke/basepack/data_accessor.rb
125
138
  - lib/netzke/basepack/data_adapters/abstract_adapter.rb
126
139
  - lib/netzke/basepack/data_adapters/active_record_adapter.rb
140
+ - lib/netzke/basepack/dynamic_tab_panel.rb
141
+ - lib/netzke/basepack/dynamic_tab_panel/javascripts/dynamic_tab_panel.js
127
142
  - lib/netzke/basepack/field_config.rb
128
143
  - lib/netzke/basepack/fields.rb
129
144
  - lib/netzke/basepack/form.rb
@@ -1,61 +0,0 @@
1
- Ext.define('Ext.grid.column.NetzkeAction', {
2
- extend: 'Ext.grid.column.Action',
3
- alias: ['widget.netzkeactioncolumn'],
4
-
5
- constructor: function(config) {
6
- var me = this,
7
- cfg = Ext.apply({}, config),
8
- i,
9
- item;
10
-
11
- me.callParent([cfg]);
12
-
13
- me.renderer = function(actions, meta) {
14
- // previous renderer
15
- var v = Ext.isFunction(cfg.renderer) ? cfg.renderer.apply(this, arguments)||'' : '',
16
- actions = Ext.isEmpty(actions) ? [] : Ext.decode(actions),
17
- l = actions.length,
18
- action;
19
-
20
- meta.tdCls += ' ' + Ext.baseCSSPrefix + 'action-col-cell';
21
-
22
- for (i = 0; i < l; i++) {
23
- action = actions[i];
24
- if (!action.hidden) {
25
- v += '<img alt="' + (action.altText || me.altText) + '" src="' + (action.icon || Ext.BLANK_IMAGE_URL) +
26
- '" class="' + Ext.baseCSSPrefix + 'action-col-icon ' + Ext.baseCSSPrefix + 'action-col-' + String(i) + ' ' + (action.iconCls || '') +
27
- ' ' + (Ext.isFunction(action.getClass) ? action.getClass.apply(action.scope||me.scope||me, arguments) : (me.iconCls || '')) + '"' +
28
- ((action.tooltip) ? ' data-qtip="' + action.tooltip + '"' : '') +
29
- ' data-name="' + action.name + '"' +
30
- ((action.handler) ? ' data-handler="' + action.handler + '"' : '') + ' />';
31
- }
32
- }
33
-
34
- return v;
35
- };
36
- },
37
-
38
- processEvent : function(type, view, cell, recordIndex, cellIndex, e){
39
- var me = this,
40
- target = e.getTarget(),
41
- match = target.className.match("x-action-col-icon"),
42
- fn, grid, record;
43
- if (match) {
44
- if (type == 'click') {
45
- grid = me.ownerCt.ownerCt;
46
- fn = (target.getAttribute("data-handler") || "").camelize(true);
47
- fn = Ext.isFunction(grid[fn]) ? grid[fn] : undefined;
48
- // if (fn) fn.call(grid, view, recordIndex, cellIndex, target, e);
49
- if (fn) {
50
- record = grid.getStore().getAt(recordIndex);
51
- fn.call(grid, record, target, e);
52
- } else {
53
- Netzke.warning("Undefined handler for column action '" + target.getAttribute("data-name") + "'");
54
- }
55
- } else if (type == 'mousedown') {
56
- return false;
57
- }
58
- }
59
- return me.callParent(arguments);
60
- }
61
- });