ru.coon 2.7.53 → 2.7.55
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 +29 -0
- package/package.json +1 -1
- package/src/report/component/ReportPanel.js +53 -5
- package/src/report/component/reportpanel/ReportGrid.js +3 -5
- package/src/report/component/reportpanel/ReportTree.js +3 -5
- package/src/report/component/settings/plugin/PluginSelectWindow.js +1 -1
- package/src/report/component/settings/plugin/ReportFormPluginPanelController.js +4 -1
- package/src/report/component/settings/plugin/ReportToolbarFunctions.js +176 -0
- package/src/report/plugin/configPanel/ReportToolbarPluginConfigPanel.js +195 -0
- package/src/report/plugin/grid/ExportReportDataToFilePlugin.js +7 -0
- package/src/report/plugin/grid/GroupButtonsPlugin.js +4 -1
- package/src/report/plugin/grid/ToolbarItemPlugin.js +5 -4
- package/src/report/plugin/report/ReportToolbarPlugin.js +66 -0
- package/src/report/toolbar/ButtonsByType.scss +168 -0
- package/src/report/toolbar/ReportGridToolbar.js +248 -0
- package/src/report/toolbar/ReportGridToolbar.scss +9 -0
- package/src/report/toolbar/dropdown/ToolbarConfigurationPanel.js +234 -0
- package/src/report/toolbar/dropdown/ToolbarConfigurationPanel.scss +13 -0
- package/src/report/toolbar/dropdown/ToolbarOverflowButton.js +113 -0
- package/src/report/toolbar/dropdown/ToolbarOverflowButton.scss +94 -0
- package/src/report/toolbar/dropdown/ToolbarOverflowPanel.js +188 -0
- package/src/report/toolbar/dropdown/ToolbarOverflowPanel.scss +37 -0
- package/src/report/toolbar/layout/ReportToolbarOverflow.js +374 -0
- package/src/uielement/component/settings/UiAceEditor.js +3 -0
- package/src/uielement/component/settings/plugin/UiCustomPanelPluginGrid.js +6 -31
- package/src/uielement/component/settings/plugin/UiCustomPanelPluginModel.js +30 -0
- package/src/uielement/component/settings/plugin/UiCustomPanelPluginStore.js +5 -0
- package/src/version.js +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
.ToolbarOverflowPanel {
|
|
2
|
+
|
|
3
|
+
border: 1px solid #9DB2BF;
|
|
4
|
+
border-top: none;
|
|
5
|
+
.x-btn-button > .fix-btn-width {
|
|
6
|
+
width: 30px;
|
|
7
|
+
}
|
|
8
|
+
.white-space{
|
|
9
|
+
background-color: transparent;
|
|
10
|
+
border-top: 1px solid #9DB2BF;
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 1px;
|
|
13
|
+
position: absolute;
|
|
14
|
+
top: 0;
|
|
15
|
+
right: 32px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.panel-body-buttons > .x-panel-bodyWrap > .x-panel-body{
|
|
19
|
+
border-bottom: 1px solid #9DB2BF !important;
|
|
20
|
+
//padding-bottom: 20px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.panel-body-buttons .x-btn{
|
|
24
|
+
margin: 0 3px 5px 3px !important;
|
|
25
|
+
border: 1px solid transparent;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
.shadow-elem{
|
|
31
|
+
background-repeat: no-repeat;
|
|
32
|
+
background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iMzUiIHZpZXdCb3g9IjAgMCA0MCAzNSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMzY4MV84MTY1MCkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQgMEMxMC42ODYzIDAgOCAyLjY4NjI5IDggNlYyNkM4IDI3LjA1MDYgNy43OTMwNyAyOC4wOTA5IDcuMzkxMDQgMjkuMDYxNUM2Ljk4OSAzMC4wMzIxIDYuMzk5NzIgMzAuOTE0IDUuNjU2ODUgMzEuNjU2OUM0LjkxMzk5IDMyLjM5OTcgNC4wMzIwNyAzMi45ODkgMy4wNjE0NyAzMy4zOTFDMi4wOTA4NiAzMy43OTMxIDEuMDUwNTggMzQgMCAzNFYzNUg4SDlINDBWNkM0MCAyLjY4NjI5IDM3LjMxMzcgMCAzNCAwSDE0WiIgZmlsbD0id2hpdGUiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMwLjUzMDMgMTguNTMwM0MzMC4yMzc0IDE4LjgyMzIgMjkuNzYyNiAxOC44MjMyIDI5LjQ2OTcgMTguNTMwM0wyNCAxMy4wNjA3TDE4LjUzMDMgMTguNTMwM0MxOC4yMzc0IDE4LjgyMzIgMTcuNzYyNiAxOC44MjMyIDE3LjQ2OTcgMTguNTMwM0MxNy4xNzY4IDE4LjIzNzQgMTcuMTc2OCAxNy43NjI2IDE3LjQ2OTcgMTcuNDY5N0wyMy40Njk3IDExLjQ2OTdDMjMuNzYyNiAxMS4xNzY4IDI0LjIzNzQgMTEuMTc2OCAyNC41MzAzIDExLjQ2OTdMMzAuNTMwMyAxNy40Njk3QzMwLjgyMzIgMTcuNzYyNiAzMC44MjMyIDE4LjIzNzQgMzAuNTMwMyAxOC41MzAzWiIgZmlsbD0iIzNENjc4MCIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOSA2QzkgMy4yMzg1OCAxMS4yMzg2IDEgMTQgMUgzNEMzNi43NjE0IDEgMzkgMy4yMzg1OCAzOSA2VjI2VjM0VjM1SDQwVjZDNDAgMi42ODYyOSAzNy4zMTM3IDAgMzQgMEgxNEMxMC42ODYzIDAgOCAyLjY4NjI5IDggNlYyNkM4IDI3LjA1MDYgNy43OTMwNyAyOC4wOTA5IDcuMzkxMDQgMjkuMDYxNUM2Ljk4OSAzMC4wMzIxIDYuMzk5NzIgMzAuOTE0IDUuNjU2ODUgMzEuNjU2OUM0LjkxMzk5IDMyLjM5OTcgNC4wMzIwNyAzMi45ODkgMy4wNjE0NyAzMy4zOTFDMi4wOTA4NiAzMy43OTMxIDEuMDUwNTggMzQgMCAzNFYzNUMxLjE4MTkgMzUgMi4zNTIyMiAzNC43NjcyIDMuNDQ0MTUgMzQuMzE0OUMzLjY3NTExIDM0LjIxOTIgMy45MDE2MSAzNC4xMTQyIDQuMTIzMSAzNEM0Ljk0ODc5IDMzLjU3NDQgNS43MDUgMzMuMDIyOSA2LjM2Mzk2IDMyLjM2NEM2LjQ2ODQzIDMyLjI1OTUgNi41NzAxOSAzMi4xNTI2IDYuNjY5MTkgMzIuMDQzM0M3LjM2MjEzIDMxLjI3ODYgNy45MTkxNiAzMC4zOTk2IDguMzE0OTIgMjkuNDQ0MkM4Ljc2NzIxIDI4LjM1MjIgOSAyNy4xODE5IDkgMjZWNloiIGZpbGw9IiMzRDY3ODAiIGZpbGwtb3BhY2l0eT0iMC41Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDBfMzY4MV84MTY1MCI+PHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjM1IiBmaWxsPSJ3aGl0ZSIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==");
|
|
33
|
+
position: absolute;
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
width: 40px;
|
|
36
|
+
height: 40px;
|
|
37
|
+
}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
Ext.define('Coon.report.toolbar.layout.ReportToolbarOverflow', {
|
|
2
|
+
extend: 'Ext.layout.container.boxOverflow.Menu',
|
|
3
|
+
alias: 'box.overflow.ReportToolbarOverflow',
|
|
4
|
+
|
|
5
|
+
pTypePriority: {
|
|
6
|
+
CopyRowsFromGrid: 1,
|
|
7
|
+
ExportReportDataToFilePlugin: 2,
|
|
8
|
+
ExporterPlugin: 3,
|
|
9
|
+
PrintPdfButtonPlugin: 4,
|
|
10
|
+
GroupButtonsPlugin: 5,
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
constructor: function(config) {
|
|
14
|
+
const me = this;
|
|
15
|
+
|
|
16
|
+
me.callParent([config]);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @property {Array} menuItems
|
|
20
|
+
* Array of all items that are currently hidden and should go into the dropdown menu
|
|
21
|
+
*/
|
|
22
|
+
me.menuItems = [];
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @property {Array} buttons
|
|
26
|
+
* Массив системных кнопок
|
|
27
|
+
*/
|
|
28
|
+
me.systemItems = [];
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
beginLayout: function(ownerContext) {
|
|
32
|
+
this.callParent([ownerContext]);
|
|
33
|
+
// Before layout, we need to re-show all items which we may have hidden due to a
|
|
34
|
+
// previous overflow...
|
|
35
|
+
if (this.menuButton.dropDownMenu) {
|
|
36
|
+
this.layout.owner.foldItemsContainer.items.items.forEach((button) => {
|
|
37
|
+
if (button.hasCls(this.menuItemOverflowedCls)) {
|
|
38
|
+
this.layout.owner.add(button);
|
|
39
|
+
button.removeCls(this.menuItemOverflowedCls);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
this.clearOverflow(ownerContext);
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
beginLayoutCycle: function(ownerContext, firstCycle) {
|
|
47
|
+
this.callParent([ownerContext, firstCycle]);
|
|
48
|
+
|
|
49
|
+
if (!firstCycle) {
|
|
50
|
+
// if we are being re-run, we need to clear any overflow from the last run and
|
|
51
|
+
// recache the childItems collection
|
|
52
|
+
this.clearOverflow(ownerContext);
|
|
53
|
+
|
|
54
|
+
this.layout.cacheChildItems(ownerContext);
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @private
|
|
60
|
+
* Called by the layout, when it determines that there is no overflow.
|
|
61
|
+
* Also called as an interceptor to the layout's onLayout method to reshow
|
|
62
|
+
* previously hidden overflowing items.
|
|
63
|
+
*/
|
|
64
|
+
clearOverflow: function(ownerContext) {
|
|
65
|
+
const me = this;
|
|
66
|
+
const items = me.menuItems;
|
|
67
|
+
const length = items.length;
|
|
68
|
+
const owner = me.layout.owner;
|
|
69
|
+
const asLayoutRoot = owner._asLayoutRoot;
|
|
70
|
+
let item; let i;
|
|
71
|
+
|
|
72
|
+
owner.suspendLayouts();
|
|
73
|
+
me.captureChildElements();
|
|
74
|
+
me.hideSystemToolbar();
|
|
75
|
+
owner.resumeLayouts();
|
|
76
|
+
|
|
77
|
+
for (i = 0; i < length; i++) {
|
|
78
|
+
item = items[i];
|
|
79
|
+
|
|
80
|
+
// What we are doing here is preventing the layout bubble from invalidating our
|
|
81
|
+
// owner component. We need just the button to be added to the layout run.
|
|
82
|
+
item.suspendLayouts();
|
|
83
|
+
item.removeCls(me.menuItemOverflowedCls);
|
|
84
|
+
me.clearItem(item);
|
|
85
|
+
item.resumeLayouts(asLayoutRoot);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
items.length = 0;
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
hideSystemToolbar: function() {
|
|
92
|
+
const systemContainer = this.systemContainer;
|
|
93
|
+
|
|
94
|
+
if (systemContainer) {
|
|
95
|
+
systemContainer.setWidth(this.systemContainerTotalWidth);
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
// Вызывается в hbox лейауте в шаблоне
|
|
100
|
+
getSuffixConfig: function() {
|
|
101
|
+
const me = this;
|
|
102
|
+
const layout = me.layout;
|
|
103
|
+
const owner = layout.owner;
|
|
104
|
+
const oid = owner.id;
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
picker
|
|
108
|
+
me.menuButton = Ext.create('Coon.report.toolbar.dropdown.TestPicker', {
|
|
109
|
+
width: 200,
|
|
110
|
+
minWidth: 10,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
me.menuButton.on({
|
|
114
|
+
scope: me,
|
|
115
|
+
expand: me.beforeMenuShow,
|
|
116
|
+
});*/
|
|
117
|
+
me.menuButton = Ext.widget('ToolbarOverflowButton', {
|
|
118
|
+
id: oid + '-menu-trigger',
|
|
119
|
+
// To enable the Menu to ascertain a valid zIndexManager owner in the same tree
|
|
120
|
+
ownerCt: owner,
|
|
121
|
+
ownerLayout: layout,
|
|
122
|
+
reportToolbar: owner,
|
|
123
|
+
position: 999,
|
|
124
|
+
style: {
|
|
125
|
+
marginRight: '10px',
|
|
126
|
+
marginLeft: '10px',
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
me.menuButton.dropDownMenu.on({
|
|
130
|
+
scope: me,
|
|
131
|
+
beforeshow: me.beforeMenuShow,
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
const systemItemsList = [...me.systemItems, me.menuButton];
|
|
135
|
+
|
|
136
|
+
me.systemContainer = Ext.create({
|
|
137
|
+
xtype: 'container',
|
|
138
|
+
itemId: 'systemContainer',
|
|
139
|
+
layout: 'hbox',
|
|
140
|
+
width: 2,
|
|
141
|
+
defaults: {
|
|
142
|
+
style: {
|
|
143
|
+
marginLeft: '10px',
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
style: {
|
|
147
|
+
borderLeft: '3px solid #D3D3D3',
|
|
148
|
+
},
|
|
149
|
+
items: systemItemsList,
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
return me.systemContainer.getRenderTree();
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
// Добавление кнопки в системный тулбар
|
|
156
|
+
addButton: function(button) {
|
|
157
|
+
const me = this;
|
|
158
|
+
if (button.pType !== 'ToolbarOverflowButton') {
|
|
159
|
+
button.setTooltip(button.getText());
|
|
160
|
+
button.setText('');
|
|
161
|
+
this.setIconClsByType(button);
|
|
162
|
+
}
|
|
163
|
+
button.arrowVisible = false;
|
|
164
|
+
me.systemItems.push(button);
|
|
165
|
+
me.systemContainer.insert(0, button);
|
|
166
|
+
this.setButtonsPositionsByPType();
|
|
167
|
+
this.sortButtons();
|
|
168
|
+
if (!me.systemContainer.rendered) {
|
|
169
|
+
me.systemContainer.on('afterrender', function(btn) {
|
|
170
|
+
this.systemContainer.setWidth(this.systemContainer.getWidth() + btn.getWidth());
|
|
171
|
+
}, me, {single: true});
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
|
|
175
|
+
setIconClsByType(button) {
|
|
176
|
+
let cls = '';
|
|
177
|
+
switch (button.pType) {
|
|
178
|
+
case 'CopyRowsFromGrid':
|
|
179
|
+
cls = 'print-excel-button';
|
|
180
|
+
break;
|
|
181
|
+
case 'ExportReportDataToFilePlugin':
|
|
182
|
+
switch (button.exportFileFormat) {
|
|
183
|
+
case 'excel':
|
|
184
|
+
default:
|
|
185
|
+
cls = 'print-excel-button';
|
|
186
|
+
break;
|
|
187
|
+
case 'pdf':
|
|
188
|
+
cls = 'print-pdf-button';
|
|
189
|
+
break;
|
|
190
|
+
case 'csv':
|
|
191
|
+
cls = 'print-csv-button';
|
|
192
|
+
break;
|
|
193
|
+
case 'txt':
|
|
194
|
+
cls = 'print-txt-button';
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
case 'ExporterPlugin':
|
|
199
|
+
cls = 'print-excel-button';
|
|
200
|
+
break;
|
|
201
|
+
case 'PrintPdfButtonPlugin':
|
|
202
|
+
cls = 'print-pdf-button';
|
|
203
|
+
break;
|
|
204
|
+
case 'GroupButtonsPlugin':
|
|
205
|
+
cls = 'go-to-button';
|
|
206
|
+
break;
|
|
207
|
+
default:
|
|
208
|
+
cls = 'fa fa-plus';
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
button.setIconCls(' masked-system-button '+ cls);
|
|
212
|
+
},
|
|
213
|
+
setButtonsPositionsByPType() {
|
|
214
|
+
const buttons = this.systemContainer.items.items;
|
|
215
|
+
if (buttons.length <= 1) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
buttons.forEach((button) => {
|
|
219
|
+
if (button.xtype !== 'ToolbarOverflowButton') {
|
|
220
|
+
button.position = this.pTypePriority[button.pType] || 0;
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
},
|
|
224
|
+
|
|
225
|
+
sortButtons() {
|
|
226
|
+
if (this.systemContainer.items.length <= 1) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
this.systemContainer.items.doSort((a, b) => {
|
|
230
|
+
if (a.position < b.position) {
|
|
231
|
+
return -1;
|
|
232
|
+
}
|
|
233
|
+
if (a.position > b.position) {
|
|
234
|
+
return 1;
|
|
235
|
+
}
|
|
236
|
+
return 0;
|
|
237
|
+
});
|
|
238
|
+
},
|
|
239
|
+
/**
|
|
240
|
+
* Вычисление ширины системной части тулбара
|
|
241
|
+
*/
|
|
242
|
+
calculateSystemContainerWidth() {
|
|
243
|
+
const me = this;
|
|
244
|
+
const systemContainer = me.systemContainer;
|
|
245
|
+
const names = me.layout.names;
|
|
246
|
+
const DEFAULT_BUTTON_WIDTH = 0;
|
|
247
|
+
const systemButtonsWidth = me.systemItems.reduce((acc, button) => {
|
|
248
|
+
// console.log('button width', button.rendered && Ext.isFunction(button.getWidth) ?
|
|
249
|
+
// button.getWidth() + 10:
|
|
250
|
+
// DEFAULT_BUTTON_WIDTH);
|
|
251
|
+
acc += button.rendered && Ext.isFunction(button.getWidth) ?
|
|
252
|
+
button.getWidth() + 10:
|
|
253
|
+
DEFAULT_BUTTON_WIDTH;
|
|
254
|
+
return acc;
|
|
255
|
+
}, 0);
|
|
256
|
+
// console.log('buttons width', systemButtonsWidth);
|
|
257
|
+
// console.log('menuButton', me.menuButton.getWidth());
|
|
258
|
+
// console.log('getMargin', systemContainer.el.getMargin(names.parallelMargins));
|
|
259
|
+
const width = systemButtonsWidth +
|
|
260
|
+
(me.menuButton.getWidth() || 30) + 20 +
|
|
261
|
+
systemContainer.el.getMargin(names.parallelMargins);
|
|
262
|
+
// console.log('allWidth', width);
|
|
263
|
+
return width;
|
|
264
|
+
},
|
|
265
|
+
calculate: function(ownerContext) {
|
|
266
|
+
const me = this;
|
|
267
|
+
const plan = ownerContext.state.boxPlan;
|
|
268
|
+
let overflow;
|
|
269
|
+
if (plan /* && plan.tooNarrow*/) { // Не учитываем, есть переполнение или нет
|
|
270
|
+
overflow = me.handleOverflow(ownerContext);
|
|
271
|
+
if (overflow) {
|
|
272
|
+
if (overflow.reservedSpace) {
|
|
273
|
+
me.layout.publishInnerCtSize(ownerContext, overflow.reservedSpace);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
|
|
279
|
+
handleOverflow: function(ownerContext) {
|
|
280
|
+
const me = this;
|
|
281
|
+
const layout = me.layout;
|
|
282
|
+
|
|
283
|
+
me.showSystemToolbar(ownerContext);
|
|
284
|
+
|
|
285
|
+
// Center the systemContainer button only if we are not vertical.
|
|
286
|
+
if (layout.direction !== 'vertical') {
|
|
287
|
+
me.systemContainer.setLocalY(
|
|
288
|
+
(ownerContext.state.boxPlan.maxSize - me.systemContainer[layout.names.getHeight]()) / 2
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
return {
|
|
292
|
+
reservedSpace: me.systemContainerTotalWidth,
|
|
293
|
+
};
|
|
294
|
+
},
|
|
295
|
+
|
|
296
|
+
beforeMenuShow: function(toolbarOverflowPanel) {
|
|
297
|
+
const me = this;
|
|
298
|
+
const layout = me.layout;
|
|
299
|
+
const owner = layout.owner;
|
|
300
|
+
const report = owner.up('ReportPanel');
|
|
301
|
+
const reportId = report.reportId;
|
|
302
|
+
const allChildItems = this.layout.owner.items.getRange().filter((item) => !item.isContainer); // Все кнопки
|
|
303
|
+
const overvlowedItems = allChildItems.filter((b) => b.hasCls(this.menuItemOverflowedCls) === true);
|
|
304
|
+
const foldItems = owner.foldItemsContainer.items.getRange().filter((b) => b.hasCls(this.menuItemOverflowedCls) !== true);
|
|
305
|
+
// Контейнер, содержащий припаркованные кнопки
|
|
306
|
+
toolbarOverflowPanel.getController().doInit(reportId, allChildItems, overvlowedItems, foldItems);
|
|
307
|
+
},
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* @private
|
|
311
|
+
* Shows the overflow trigger when enableOverflow is set to true and the items
|
|
312
|
+
* in the layout are too wide to fit in the space available
|
|
313
|
+
*/
|
|
314
|
+
showSystemToolbar: function(ownerContext) {
|
|
315
|
+
const me = this;
|
|
316
|
+
const layout = me.layout;
|
|
317
|
+
const owner = layout.owner;
|
|
318
|
+
const names = layout.names;
|
|
319
|
+
const startProp = names.x;
|
|
320
|
+
const sizeProp = names.width;
|
|
321
|
+
const plan = ownerContext.state.boxPlan;
|
|
322
|
+
let available = plan.targetSize[sizeProp];
|
|
323
|
+
const childItems = ownerContext.childItems;
|
|
324
|
+
const systemContainer = me.systemContainer;
|
|
325
|
+
const menuItems = me.menuItems;
|
|
326
|
+
let childContext; let comp; let i; let props; let len;
|
|
327
|
+
|
|
328
|
+
// We don't want the systemContainer.show to cause owner's layout to be invalidated, so
|
|
329
|
+
// we force just the button to be invalidated and added to the current run.
|
|
330
|
+
systemContainer.suspendLayouts();
|
|
331
|
+
systemContainer.show();
|
|
332
|
+
systemContainer.resumeLayouts(me._asLayoutRoot);
|
|
333
|
+
|
|
334
|
+
available -= me.systemContainerTotalWidth;
|
|
335
|
+
owner.suspendLayouts();
|
|
336
|
+
// Hide all items which are off the end, and store them to allow them to be restored
|
|
337
|
+
// before each layout operation.
|
|
338
|
+
for (i = 0, len = menuItems.length; i < len; ++i) {
|
|
339
|
+
me.clearItem(menuItems[i]);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
menuItems.length = 0;
|
|
343
|
+
let indicator = false;
|
|
344
|
+
for (i = 0, len = childItems.length; i < len; i++) {
|
|
345
|
+
childContext = childItems[i];
|
|
346
|
+
props = childContext.props;
|
|
347
|
+
if (props[startProp] + props[sizeProp] > available) {
|
|
348
|
+
comp = childContext.target;
|
|
349
|
+
if (comp.itemId === 'hiddenDisplayElement') {
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
comp.addCls(me.menuItemOverflowedCls);
|
|
353
|
+
indicator = true;
|
|
354
|
+
me.menuItems.push(comp);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
this.menuButton.setOverflowIndicator(indicator);
|
|
358
|
+
owner.resumeLayouts();
|
|
359
|
+
},
|
|
360
|
+
|
|
361
|
+
captureChildElements: function() {
|
|
362
|
+
const me = this;
|
|
363
|
+
const systemContainer = me.systemContainer;
|
|
364
|
+
const names = me.layout.names;
|
|
365
|
+
|
|
366
|
+
// The rendering flag is set when getRenderTree is called which we do
|
|
367
|
+
// when returning markup string for the owning layout's "suffix"
|
|
368
|
+
if (systemContainer.rendering) {
|
|
369
|
+
systemContainer.finishRender();
|
|
370
|
+
}
|
|
371
|
+
const calculatedWidth = me.calculateSystemContainerWidth();
|
|
372
|
+
me.systemContainerTotalWidth = calculatedWidth + systemContainer.el.getMargin(names.parallelMargins);
|
|
373
|
+
},
|
|
374
|
+
});
|
|
@@ -239,6 +239,9 @@ Ext.define('Coon.uielement.component.settings.UiAceEditor', {
|
|
|
239
239
|
renderEditor: function() {
|
|
240
240
|
this.editor = Ext.xAceEditor.edit(this.getId());
|
|
241
241
|
this.editor.setTheme('ace/theme/xcode');
|
|
242
|
+
if (this.mode === 'javascript') {
|
|
243
|
+
this.editor.session.setOption('useWorker', !Ext.isProduction);
|
|
244
|
+
}
|
|
242
245
|
if (typeof this.mode === 'string') {
|
|
243
246
|
this.editor.session.setMode(`ace/mode/${this.mode}`);
|
|
244
247
|
} else {
|
|
@@ -7,6 +7,8 @@ Ext.define('Coon.uielement.component.settings.plugin.UiCustomPanelPluginGrid', {
|
|
|
7
7
|
requires: [
|
|
8
8
|
'Coon.uielement.component.settings.plugin.UiCustomPanelPluginSelectWindow',
|
|
9
9
|
'Coon.uielement.component.settings.plugin.UiCustomPanelPluginGridController',
|
|
10
|
+
'Coon.uielement.component.settings.plugin.UiCustomPanelPluginModel',
|
|
11
|
+
'Coon.uielement.component.settings.plugin.UiCustomPanelPluginStore',
|
|
10
12
|
'Coon.stateProvider'
|
|
11
13
|
],
|
|
12
14
|
controller: 'UiCustomPanelPluginGridController',
|
|
@@ -22,37 +24,10 @@ Ext.define('Coon.uielement.component.settings.plugin.UiCustomPanelPluginGrid', {
|
|
|
22
24
|
|
|
23
25
|
stateId: 'UiCustomPanelPluginGrid',
|
|
24
26
|
|
|
25
|
-
store:
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
fields: [
|
|
30
|
-
{name: 'isSingle', type: 'boolean'},
|
|
31
|
-
{name: 'isNew', type: 'boolean'},
|
|
32
|
-
{name: 'sequenceNumber', type: 'number'},
|
|
33
|
-
{name: 'sortSequence', type: 'number'},
|
|
34
|
-
{name: 'ptype', type: 'string'},
|
|
35
|
-
{name: 'xtype', type: 'string', convert(_, plugin) {
|
|
36
|
-
return plugin.data.ptype;
|
|
37
|
-
}},
|
|
38
|
-
{
|
|
39
|
-
name: 'handlerName',
|
|
40
|
-
type: 'string',
|
|
41
|
-
convert(v) {
|
|
42
|
-
return v || '-/-';
|
|
43
|
-
}},
|
|
44
|
-
{
|
|
45
|
-
name: 'name',
|
|
46
|
-
type: 'string',
|
|
47
|
-
convert(val, plugin) {
|
|
48
|
-
return `${plugin.data.ptype}${plugin.data.handlerName ? '.'+plugin.data.handlerName : ''}`;
|
|
49
|
-
},
|
|
50
|
-
},
|
|
51
|
-
'properties',
|
|
52
|
-
'jsonProperties'
|
|
53
|
-
],
|
|
54
|
-
}),
|
|
55
|
-
}),
|
|
27
|
+
store: {
|
|
28
|
+
type: 'UiCustomPanelPluginStore',
|
|
29
|
+
},
|
|
30
|
+
|
|
56
31
|
viewConfig: {
|
|
57
32
|
getRowClass: function(rec) {
|
|
58
33
|
if (rec.get('isDeleted')) {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
Ext.define('Coon.uielement.component.settings.plugin.UiCustomPanelPluginModel', {
|
|
2
|
+
extend: 'Ext.data.Model',
|
|
3
|
+
entityName: 'UiCustomPanelPluginModel',
|
|
4
|
+
|
|
5
|
+
fields: [
|
|
6
|
+
{name: 'isSingle', type: 'boolean'},
|
|
7
|
+
{name: 'isNew', type: 'boolean'},
|
|
8
|
+
{name: 'sequenceNumber', type: 'number'},
|
|
9
|
+
{name: 'sortSequence', type: 'number'},
|
|
10
|
+
{name: 'ptype', type: 'string'},
|
|
11
|
+
{name: 'xtype', type: 'string', convert(_, plugin) {
|
|
12
|
+
return plugin.data.ptype;
|
|
13
|
+
}},
|
|
14
|
+
{
|
|
15
|
+
name: 'handlerName',
|
|
16
|
+
type: 'string',
|
|
17
|
+
convert(v) {
|
|
18
|
+
return v || '-/-';
|
|
19
|
+
}},
|
|
20
|
+
{
|
|
21
|
+
name: 'name',
|
|
22
|
+
type: 'string',
|
|
23
|
+
convert(val, plugin) {
|
|
24
|
+
return `${plugin.data.ptype}${plugin.data.handlerName ? '.'+plugin.data.handlerName : ''}`;
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
'properties',
|
|
28
|
+
'jsonProperties'
|
|
29
|
+
],
|
|
30
|
+
});
|
package/src/version.js
CHANGED