netzke-basepack 0.12.0.beta → 0.12.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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
- });