ru.coon 3.0.9 → 3.0.11

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # Version 3.0.11, [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/81bfea3da8aa88897674b9f4908dcebd7fccfec9)
2
+ * ## Fixes
3
+ * <span style='color:red'>fix title on menuItem components</span> ([80e0e1], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/80e0e17c03e338820fd24a5cc8d5d24f53c43d8a))
4
+
5
+ * up ([92525a], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/92525a0e9d6bacf6107595796d27f1de04086a93))
6
+ * update: CHANGELOG.md ([203567], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/20356738803f224ae31cd3dba9f3fb2b47938242))
7
+
8
+ # Version 3.0.10, [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/60813ea5c62acce6fef1c27368b21647bf1d3300)
9
+ * ## Fixes
10
+ * <span style='color:red'>fix ReportPanel afterlayout</span> ([e3012c], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/e3012c8728acac4bf64acb3a8d828200e92c1f7e))
11
+ * <span style='color:red'> HT-12487 change Error.isError to instanceof Error</span> ([f38aba], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/f38aba2b4db7edff8d067879b3ce576fb5f1145b))
12
+
13
+ * refactoring ([7b5203], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/7b5203d452efd97cea1cc6a556de21bf1e924fe7))
14
+ * update: CHANGELOG.md ([ab3f61], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/ab3f6182999bcd5456714b289eb8efed65263f13))
15
+
1
16
  # Version 3.0.9, [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/59c87d3246401ff37a357319af2e14f2c5842409)
2
17
  * ## Fixes
3
18
  * <span style='color:red'>fix error on invalid menuItem id in url</span> ([2ea41b], [link](http://gitlab-dbr.sigma-it.local/dbr/ru.coon/-/commit/2ea41b986155f8457088d5f11c988418d645c9ac))
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "name": "ru.coon"
5
5
  },
6
6
  "description": "",
7
- "version": "3.0.9",
7
+ "version": "3.0.11",
8
8
  "repository": {
9
9
  "type": "git",
10
10
  "url": "git+http://gitlab-dbr.sigma-it.local/dbr/ru.coon"
@@ -17,8 +17,12 @@ Ext.define('Coon.app.viewPort.CVWrapperPanel', {
17
17
  }
18
18
  },
19
19
 
20
+ getWrappedComponent() {
21
+ return this.getComponent(0);
22
+ },
23
+
20
24
  getComponentTitle() {
21
- const component = this.getComponent(0);
25
+ const component = this.getWrappedComponent();
22
26
  const header = component.getHeader();
23
27
  return header && header.getTitle();
24
28
  },
@@ -30,6 +34,9 @@ Ext.define('Coon.app.viewPort.CVWrapperPanel', {
30
34
  component.on('afterrender', function() {
31
35
  const title = this.getComponentTitle();
32
36
  if (title && title.iconEl) {
37
+ if (typeof title.title === 'string') {
38
+ component.setTitle(title.title);
39
+ }
33
40
  const props = Coon.nav.menu.FavoriteCfg.get().favorite || [];
34
41
  const index = props.indexOf(this.menuItem.MENU_ENTRY_CD);
35
42
  if (index >= 0) {
@@ -95,7 +95,7 @@ Ext.define('Coon.app.viewPort.CenterView', {
95
95
  return;
96
96
  }
97
97
  const component = Coon.common.ComponentFactory.createTabComponent(route);
98
- if (Error.isError(component)) {
98
+ if (component instanceof Error) {
99
99
  Coon.log.error(component);
100
100
  return;
101
101
  }
@@ -55,7 +55,6 @@ Ext.define('Coon.common.ComponentFactory', {
55
55
  return cachedComponent;
56
56
  }
57
57
  const config = route.uiElement;
58
-
59
58
  const paramsObject = this.paramsToObject(params);
60
59
  const filterDefaults =
61
60
  (paramsObject && Object.assign(paramsObject, {doFilter: true})) || {};
@@ -127,7 +126,7 @@ Ext.define('Coon.common.ComponentFactory', {
127
126
 
128
127
  createTabComponent(route) {
129
128
  const config = this.getRootComponentConfig(route);
130
- if (Error.isError(config)) {
129
+ if (config instanceof Error) {
131
130
  return config;
132
131
  }
133
132
  const menuItem = config.menuItem;
@@ -161,7 +160,7 @@ Ext.define('Coon.common.ComponentFactory', {
161
160
  iconCls: menuItem.MENU_ENTRY_ICON,
162
161
  },
163
162
  items: [config],
164
- title: menuItem.MENU_ENTRY_DESCR,
163
+ // title: menuItem.MENU_ENTRY_DESCR,
165
164
  };
166
165
  const instance = Ext.create(instanceConfig);
167
166
  return instance;
@@ -421,12 +421,14 @@ Ext.define('Coon.report.component.ReportPanel', {
421
421
  this.el && this.el.dom && this.el.dom.setAttribute('data-report', this.r_id || this.reportId);
422
422
  }, this);
423
423
  this.on('afterlayout', function() {
424
- const grid = this.grid;
425
- grid && setTimeout(function() {
426
- if (grid.viewConfig) {
427
- grid.scrollTo(0, 0);
424
+ if (!this.grid || this.grid.destroyed) {
425
+ return;
426
+ }
427
+ setTimeout(function() {
428
+ if (this.grid.viewConfig) {
429
+ this.grid.scrollTo(0, 0);
428
430
  }
429
- }, 500);
431
+ }.bind(this), 500);
430
432
  }, this);
431
433
  this.on('invalidateCache', this.filterHandler.bind(this, true));
432
434
  },
@@ -84,6 +84,7 @@ Ext.define('Coon.research.componentHierarchy.ComponentHierarchyLoader', {
84
84
  const node = {
85
85
  name: name || config.reportDescription || 'noname!',
86
86
  cid,
87
+ config,
87
88
  cacheId,
88
89
  xtype: 'ReportPanel',
89
90
  leaf: true,
@@ -132,6 +133,7 @@ Ext.define('Coon.research.componentHierarchy.ComponentHierarchyLoader', {
132
133
  xtype: 'UiCustomPanel',
133
134
  name: name || config.description || 'noname',
134
135
  cid,
136
+ config,
135
137
  cacheId,
136
138
  leaf: true,
137
139
  };
@@ -153,4 +155,28 @@ Ext.define('Coon.research.componentHierarchy.ComponentHierarchyLoader', {
153
155
  this.cmpCache.set(cacheId, node);
154
156
  return Object.assign({}, node);
155
157
  },
158
+
159
+ async loadChildren(node) {
160
+ const children = [];
161
+ if (!Array.isArray(node.refIds) || !node.refIds.length) {
162
+ return [];
163
+ }
164
+ for (const child of node.refIds) {
165
+ let childNode;
166
+ if (child.xtype === 'UiCustomPanel') {
167
+ childNode = await this.customPanelLoader(child.cid, child.name);
168
+ }
169
+ if (child.xtype === 'ReportPanel') {
170
+ childNode = await this.reportLoader(child.cid, child.name);
171
+ }
172
+ if (childNode) {
173
+ childNode.source = child.source;
174
+ childNode.plugin = child.plugin;
175
+ children.push(childNode);
176
+ } else {
177
+ Coon.log.debug('loadChildren: no childNode', {child});
178
+ }
179
+ }
180
+ return children;
181
+ },
156
182
  });
@@ -24,8 +24,6 @@ Ext.define('Coon.research.componentHierarchy.ComponentHierarchyView', {
24
24
  align: 'stretch',
25
25
  },
26
26
 
27
- title: 'Иерархия компонентов',
28
-
29
27
  items: [
30
28
  {
31
29
  xtype: 'treepanel',
@@ -13,7 +13,8 @@ Ext.define('Coon.research.componentHierarchy.ComponentOptionsView', {
13
13
  items: [
14
14
  {
15
15
  title: 'опции',
16
- xtype: 'panel',
16
+ xtype: 'form',
17
+ reference: 'optionForm',
17
18
  disabled: true,
18
19
  bind: {
19
20
  disabled: '{!selectedComponent}',
@@ -23,9 +24,27 @@ Ext.define('Coon.research.componentHierarchy.ComponentOptionsView', {
23
24
  {
24
25
  xtype: 'button',
25
26
  text: 'открыть в редакторе',
27
+ border: 1,
28
+ style: {
29
+ borderStyle: 'outset!important',
30
+ borderRadius: '8px!important',
31
+ borderColor: 'gray',
32
+ },
26
33
  itemId: 'openInEditorBtn',
34
+ },
35
+ {
36
+ xtype: 'fieldset',
37
+ title: 'заголовок(вкладка и заголовок окна)',
38
+ defaults: {xtype: 'textfield', anchor: '100%'},
39
+ items: [
40
+ {name: 'static', fieldLabel: 'статический заголовок', bind: '{titleConfig.static}'},
41
+ {name: 'context', fieldLabel: 'контекст заголовока', bind: '{titleConfig.context}'}
42
+ ],
27
43
  }
28
44
  ],
45
+ buttons: [
46
+ {text: 'сохранить изменения', handler: 'submitOptions'}
47
+ ],
29
48
  },
30
49
  {
31
50
  title: 'debugInfo',
@@ -11,9 +11,23 @@ Ext.define('Coon.research.componentHierarchy.ComponentOptionsViewController', {
11
11
  init() {
12
12
  this.vm = this.getViewModel();
13
13
  this.vm.bind('{ui}', this.setDebugInfo, this);
14
- // this.vm.bind('{selectedComponent}', (v) =>
15
- // console.log(`selectedComponent: ${v && v.get('id')}`, {v, data: v && v.getData()})
16
- // , this);
14
+ this.vm.bind('{selectedComponent}', this.selectComponent, this);
15
+ },
16
+
17
+ selectComponent(node) {
18
+ this.vm.set('titleConfig', {});
19
+ const xtype = node.get('xtype');
20
+ const config = node.get('config');
21
+ Coon.log.debug({xtype, config});
22
+ if (xtype === 'UiCustomPanel') {
23
+ const titleConfig = config?.properties?.componentTitle;
24
+ this.vm.set('titleConfig', titleConfig);
25
+ }
26
+ },
27
+
28
+ submitOptions() {
29
+ const optionForm = this.lookup('optionForm');
30
+ Coon.log.debug('optionForm', optionForm.getValues());
17
31
  },
18
32
 
19
33
  setDebugInfo(ui) {
@@ -20,6 +20,8 @@ Ext.define('Coon.research.componentHierarchy.ComponentTreeViewController', {
20
20
  }
21
21
  data.properties = data.xtype === 'UiCustomPanel' ? JSON5.parse(data.propertyData) : Ext.decode(data.propertyData, true);
22
22
  data.children = [];
23
+ data.componentXtype = data.xtype;
24
+ data.xtype = '---';
23
25
  return data;
24
26
  });
25
27
  },
@@ -32,21 +34,11 @@ Ext.define('Coon.research.componentHierarchy.ComponentTreeViewController', {
32
34
  if (!Array.isArray(record.get('refIds')) || !record.get('refIds').length || record._isLoaded || record.leaf) {
33
35
  return;
34
36
  }
35
- view.mask('load children...');
37
+ view.mask(`load children for ${record.get('cid')}`);
36
38
  try {
37
- for (const child of record.get('refIds')) {
38
- let childNode;
39
- if (child.xtype === 'UiCustomPanel') {
40
- childNode = await this.parser.customPanelLoader(child.cid, child.name);
41
- }
42
- if (child.xtype === 'ReportPanel') {
43
- childNode = await this.parser.reportLoader(child.cid, child.name);
44
- }
45
- if (childNode) {
46
- childNode.source = child.source;
47
- childNode.plugin = child.plugin;
48
- record.appendChild(childNode);
49
- }
39
+ const children = await this.parser.loadChildren(record.getData());
40
+ if (children.length) {
41
+ record.appendChild(children);
50
42
  }
51
43
  record.expand();
52
44
  record._isLoaded = true;
@@ -80,7 +72,7 @@ Ext.define('Coon.research.componentHierarchy.ComponentTreeViewController', {
80
72
  this.vm.set('ui', ui);
81
73
  return;
82
74
  }
83
- if (['ReportPanel', 'DynamicReportForm'].includes(ui.xtype)) {
75
+ if (['ReportPanel', 'DynamicReportForm'].includes(ui.componentXtype)) {
84
76
  const id = ui.properties.reportId || ui.properties.reportID;
85
77
  ui.children = await this.parser.reportLoader(id)
86
78
  .then((node) => {
@@ -88,7 +80,7 @@ Ext.define('Coon.research.componentHierarchy.ComponentTreeViewController', {
88
80
  return [node];
89
81
  });
90
82
  }
91
- if (['UiCustomPanel'].includes(ui.xtype)) {
83
+ if (['UiCustomPanel'].includes(ui.componentXtype)) {
92
84
  ui.children = await this.parser.customPanelLoader(ui.id)
93
85
  .then((node) => {
94
86
  node.source = 'menuUiElement';
@@ -0,0 +1,110 @@
1
+ <?xml version="1.0" encoding="utf-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-d2-version="v0.6.9" preserveAspectRatio="xMinYMin meet" viewBox="0 0 803 1082"><svg class="d2-2679128136 d2-svg" width="803" height="1082" viewBox="-91 -101 803 1082"><rect x="-91.000000" y="-101.000000" width="803.000000" height="1082.000000" rx="0.000000" fill="#FFFFFF" class=" fill-N7" stroke-width="0" /><style type="text/css"><![CDATA[
2
+ .d2-2679128136 .text {
3
+ font-family: "d2-2679128136-font-regular";
4
+ }
5
+ @font-face {
6
+ font-family: d2-2679128136-font-regular;
7
+ src: url("data:application/font-woff;base64,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");
8
+ }
9
+ .d2-2679128136 .text-bold {
10
+ font-family: "d2-2679128136-font-bold";
11
+ }
12
+ @font-face {
13
+ font-family: d2-2679128136-font-bold;
14
+ src: url("data:application/font-woff;base64,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");
15
+ }]]></style><style type="text/css"><![CDATA[.shape {
16
+ shape-rendering: geometricPrecision;
17
+ stroke-linejoin: round;
18
+ }
19
+ .connection {
20
+ stroke-linecap: round;
21
+ stroke-linejoin: round;
22
+ }
23
+ .blend {
24
+ mix-blend-mode: multiply;
25
+ opacity: 0.5;
26
+ }
27
+
28
+ .d2-2679128136 .fill-N1{fill:#0A0F25;}
29
+ .d2-2679128136 .fill-N2{fill:#676C7E;}
30
+ .d2-2679128136 .fill-N3{fill:#9499AB;}
31
+ .d2-2679128136 .fill-N4{fill:#CFD2DD;}
32
+ .d2-2679128136 .fill-N5{fill:#DEE1EB;}
33
+ .d2-2679128136 .fill-N6{fill:#EEF1F8;}
34
+ .d2-2679128136 .fill-N7{fill:#FFFFFF;}
35
+ .d2-2679128136 .fill-B1{fill:#0D32B2;}
36
+ .d2-2679128136 .fill-B2{fill:#0D32B2;}
37
+ .d2-2679128136 .fill-B3{fill:#E3E9FD;}
38
+ .d2-2679128136 .fill-B4{fill:#E3E9FD;}
39
+ .d2-2679128136 .fill-B5{fill:#EDF0FD;}
40
+ .d2-2679128136 .fill-B6{fill:#F7F8FE;}
41
+ .d2-2679128136 .fill-AA2{fill:#4A6FF3;}
42
+ .d2-2679128136 .fill-AA4{fill:#EDF0FD;}
43
+ .d2-2679128136 .fill-AA5{fill:#F7F8FE;}
44
+ .d2-2679128136 .fill-AB4{fill:#EDF0FD;}
45
+ .d2-2679128136 .fill-AB5{fill:#F7F8FE;}
46
+ .d2-2679128136 .stroke-N1{stroke:#0A0F25;}
47
+ .d2-2679128136 .stroke-N2{stroke:#676C7E;}
48
+ .d2-2679128136 .stroke-N3{stroke:#9499AB;}
49
+ .d2-2679128136 .stroke-N4{stroke:#CFD2DD;}
50
+ .d2-2679128136 .stroke-N5{stroke:#DEE1EB;}
51
+ .d2-2679128136 .stroke-N6{stroke:#EEF1F8;}
52
+ .d2-2679128136 .stroke-N7{stroke:#FFFFFF;}
53
+ .d2-2679128136 .stroke-B1{stroke:#0D32B2;}
54
+ .d2-2679128136 .stroke-B2{stroke:#0D32B2;}
55
+ .d2-2679128136 .stroke-B3{stroke:#E3E9FD;}
56
+ .d2-2679128136 .stroke-B4{stroke:#E3E9FD;}
57
+ .d2-2679128136 .stroke-B5{stroke:#EDF0FD;}
58
+ .d2-2679128136 .stroke-B6{stroke:#F7F8FE;}
59
+ .d2-2679128136 .stroke-AA2{stroke:#4A6FF3;}
60
+ .d2-2679128136 .stroke-AA4{stroke:#EDF0FD;}
61
+ .d2-2679128136 .stroke-AA5{stroke:#F7F8FE;}
62
+ .d2-2679128136 .stroke-AB4{stroke:#EDF0FD;}
63
+ .d2-2679128136 .stroke-AB5{stroke:#F7F8FE;}
64
+ .d2-2679128136 .background-color-N1{background-color:#0A0F25;}
65
+ .d2-2679128136 .background-color-N2{background-color:#676C7E;}
66
+ .d2-2679128136 .background-color-N3{background-color:#9499AB;}
67
+ .d2-2679128136 .background-color-N4{background-color:#CFD2DD;}
68
+ .d2-2679128136 .background-color-N5{background-color:#DEE1EB;}
69
+ .d2-2679128136 .background-color-N6{background-color:#EEF1F8;}
70
+ .d2-2679128136 .background-color-N7{background-color:#FFFFFF;}
71
+ .d2-2679128136 .background-color-B1{background-color:#0D32B2;}
72
+ .d2-2679128136 .background-color-B2{background-color:#0D32B2;}
73
+ .d2-2679128136 .background-color-B3{background-color:#E3E9FD;}
74
+ .d2-2679128136 .background-color-B4{background-color:#E3E9FD;}
75
+ .d2-2679128136 .background-color-B5{background-color:#EDF0FD;}
76
+ .d2-2679128136 .background-color-B6{background-color:#F7F8FE;}
77
+ .d2-2679128136 .background-color-AA2{background-color:#4A6FF3;}
78
+ .d2-2679128136 .background-color-AA4{background-color:#EDF0FD;}
79
+ .d2-2679128136 .background-color-AA5{background-color:#F7F8FE;}
80
+ .d2-2679128136 .background-color-AB4{background-color:#EDF0FD;}
81
+ .d2-2679128136 .background-color-AB5{background-color:#F7F8FE;}
82
+ .d2-2679128136 .color-N1{color:#0A0F25;}
83
+ .d2-2679128136 .color-N2{color:#676C7E;}
84
+ .d2-2679128136 .color-N3{color:#9499AB;}
85
+ .d2-2679128136 .color-N4{color:#CFD2DD;}
86
+ .d2-2679128136 .color-N5{color:#DEE1EB;}
87
+ .d2-2679128136 .color-N6{color:#EEF1F8;}
88
+ .d2-2679128136 .color-N7{color:#FFFFFF;}
89
+ .d2-2679128136 .color-B1{color:#0D32B2;}
90
+ .d2-2679128136 .color-B2{color:#0D32B2;}
91
+ .d2-2679128136 .color-B3{color:#E3E9FD;}
92
+ .d2-2679128136 .color-B4{color:#E3E9FD;}
93
+ .d2-2679128136 .color-B5{color:#EDF0FD;}
94
+ .d2-2679128136 .color-B6{color:#F7F8FE;}
95
+ .d2-2679128136 .color-AA2{color:#4A6FF3;}
96
+ .d2-2679128136 .color-AA4{color:#EDF0FD;}
97
+ .d2-2679128136 .color-AA5{color:#F7F8FE;}
98
+ .d2-2679128136 .color-AB4{color:#EDF0FD;}
99
+ .d2-2679128136 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-2679128136);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-2679128136);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-2679128136);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-2679128136);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-2679128136);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-2679128136);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-2679128136);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-2679128136);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]></style><g class="VUlFbGVtZW50"><g class="shape" ><rect x="279.000000" y="0.000000" width="119.000000" height="66.000000" stroke="#0D32B2" fill="#F7F8FE" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="338.500000" y="38.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">UIElement</text></g><g class="UmVwb3J0UGFuZWw="><g class="shape" ><rect x="403.000000" y="186.000000" width="208.000000" height="126.000000" stroke="#0D32B2" fill="#E3E9FD" class=" stroke-B1 fill-B4" style="stroke-width:2;" /></g><text x="507.000000" y="173.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:28px">ReportPanel</text></g><g class="VWlDdXN0b21QYW5lbA=="><g class="shape" ><rect x="10.000000" y="186.000000" width="196.000000" height="508.000000" stroke="#0D32B2" fill="#E3E9FD" class=" stroke-B1 fill-B4" style="stroke-width:2;" /></g><text x="108.000000" y="173.000000" fill="#0A0F25" class="text fill-N1" style="text-anchor:middle;font-size:28px">UiCustomPanel</text></g><g class="ZmlsdGVyT0NQQg=="><g class="shape" ><rect x="260.000000" y="432.000000" width="121.000000" height="66.000000" stroke="#0D32B2" fill="#F7F8FE" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="320.500000" y="470.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">filterOCPB</text></g><g class="ZmlsdGVyT1A="><g class="shape" ><rect x="441.000000" y="432.000000" width="101.000000" height="66.000000" stroke="#0D32B2" fill="#F7F8FE" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="491.500000" y="470.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">filterOP</text></g><g class="ZmlsdGVyUmVwb3J0cw=="><g class="shape" ><rect x="279.000000" y="814.000000" width="136.000000" height="66.000000" stroke="#0D32B2" fill="#F7F8FE" class=" stroke-B1 fill-B6" style="stroke-width:2;" /></g><text x="347.000000" y="852.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">filterReports</text></g><g class="UmVwb3J0UGFuZWwucGx1Z2lucw=="><g class="shape" ><rect x="433.000000" y="216.000000" width="96.000000" height="66.000000" stroke="#0D32B2" fill="#EDF0FD" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="481.000000" y="254.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">plugins</text></g><g class="VWlDdXN0b21QYW5lbC5wbHVnaW5z"><g class="shape" ><rect x="80.000000" y="216.000000" width="96.000000" height="66.000000" stroke="#0D32B2" fill="#EDF0FD" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="128.000000" y="254.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">plugins</text></g><g class="VWlDdXN0b21QYW5lbC5wcm9wZXJ0aWVz"><g class="shape" ><rect x="40.000000" y="598.000000" width="119.000000" height="66.000000" stroke="#0D32B2" fill="#EDF0FD" class=" stroke-B1 fill-B5" style="stroke-width:2;" /></g><text x="99.500000" y="636.500000" fill="#0A0F25" class="text-bold fill-N1" style="text-anchor:middle;font-size:16px">properties</text></g><g class="KFVJRWxlbWVudCAtJmd0OyBSZXBvcnRQYW5lbClbMF0="><marker id="mk-d2-2679128136-3488378134" markerWidth="10.000000" markerHeight="12.000000" refX="7.000000" refY="6.000000" viewBox="0.000000 0.000000 10.000000 12.000000" orient="auto" markerUnits="userSpaceOnUse"> <polygon points="0.000000,0.000000 10.000000,6.000000 0.000000,12.000000" fill="#0D32B2" class="connection fill-B1" stroke-width="2" /> </marker><path d="M 396.479014 67.005241 C 463.549988 106.000000 480.750000 121.800003 480.750000 141.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2679128136-3488378134)" mask="url(#d2-2679128136)" /></g><g class="KFVJRWxlbWVudCAtJmd0OyBVaUN1c3RvbVBhbmVsKVswXQ=="><path d="M 277.072157 50.532372 C 87.799004 102.800003 40.000000 121.800003 40.000000 141.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2679128136-3488378134)" mask="url(#d2-2679128136)" /></g><g class="KFJlcG9ydFBhbmVsLnBsdWdpbnMgLSZndDsgZmlsdGVyT0NQQilbMF0="><path d="M 430.973487 274.740686 C 342.750000 320.364014 320.250000 392.000000 320.250000 428.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2679128136-3488378134)" mask="url(#d2-2679128136)" /></g><g class="KGZpbHRlck9DUEIgLSZndDsgVWlDdXN0b21QYW5lbClbMF0="><path d="M 257.842301 489.258561 L 209.565397 504.456846" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2679128136-3488378134)" mask="url(#d2-2679128136)" /></g><g class="KFVpQ3VzdG9tUGFuZWwucGx1Z2lucyAtJmd0OyBmaWx0ZXJPUClbMF0="><path d="M 128.000000 284.000000 C 128.000000 322.000000 190.550003 396.291992 436.850500 452.569989" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2679128136-3488378134)" mask="url(#d2-2679128136)" /></g><g class="KGZpbHRlck9QIC0mZ3Q7IFVpQ3VzdG9tUGFuZWwpWzBd"><path d="M 438.804476 478.031607 L 209.641047 532.640765" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2679128136-3488378134)" mask="url(#d2-2679128136)" /></g><g class="KFVpQ3VzdG9tUGFuZWwucHJvcGVydGllcyAtJmd0OyBmaWx0ZXJSZXBvcnRzKVswXQ=="><path d="M 99.500000 666.000000 C 99.500000 704.000000 135.500000 776.000000 275.705267 822.735089" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2679128136-3488378134)" mask="url(#d2-2679128136)" /></g><g class="KGZpbHRlclJlcG9ydHMgLSZndDsgUmVwb3J0UGFuZWwpWzBd"><path d="M 417.135388 822.263713 C 548.450012 775.786011 581.750000 754.000000 581.750000 739.000000 C 581.750000 724.000000 581.750000 697.400024 581.750000 672.500000 C 581.750000 647.599976 581.750000 614.400024 581.750000 589.500000 C 581.750000 564.599976 581.750000 531.400024 581.750000 506.500000 C 581.750000 481.600006 581.750000 368.000000 581.750000 316.000000" stroke="#0D32B2" fill="none" class="connection stroke-B1" style="stroke-width:2;" marker-end="url(#mk-d2-2679128136-3488378134)" mask="url(#d2-2679128136)" /></g><mask id="d2-2679128136" maskUnits="userSpaceOnUse" x="-91" y="-101" width="803" height="1082">
100
+ <rect x="-91" y="-101" width="803" height="1082" fill="white"></rect>
101
+ <rect x="301.500000" y="22.500000" width="74" height="21" fill="rgba(0,0,0,0.75)"></rect>
102
+ <rect x="435.000000" y="145.000000" width="144" height="36" fill="rgba(0,0,0,0.75)"></rect>
103
+ <rect x="18.000000" y="145.000000" width="180" height="36" fill="rgba(0,0,0,0.75)"></rect>
104
+ <rect x="282.500000" y="454.500000" width="76" height="21" fill="rgba(0,0,0,0.75)"></rect>
105
+ <rect x="463.500000" y="454.500000" width="56" height="21" fill="rgba(0,0,0,0.75)"></rect>
106
+ <rect x="301.500000" y="836.500000" width="91" height="21" fill="rgba(0,0,0,0.75)"></rect>
107
+ <rect x="455.500000" y="238.500000" width="51" height="21" fill="rgba(0,0,0,0.75)"></rect>
108
+ <rect x="102.500000" y="238.500000" width="51" height="21" fill="rgba(0,0,0,0.75)"></rect>
109
+ <rect x="62.500000" y="620.500000" width="74" height="21" fill="rgba(0,0,0,0.75)"></rect>
110
+ </mask></svg></svg>
package/src/util.js CHANGED
@@ -62,6 +62,9 @@ Ext.define('Coon.util', {
62
62
  if (!path) {
63
63
  return;
64
64
  }
65
+ if (path === '#') {
66
+ return obj;
67
+ }
65
68
  if (typeof path === 'string') {
66
69
  path = path.split('.');
67
70
  }
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  Ext.define('Coon.version', {
2
2
  singleton: true,
3
- number: '3.0.9',
3
+ number: '3.0.11',
4
4
  });