neo.mjs 8.11.0 → 8.12.0
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/apps/ServiceWorker.mjs +2 -2
- package/apps/portal/index.html +1 -1
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/examples/ConfigurationViewport.mjs +1 -7
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +2 -2
- package/resources/scss/src/draggable/DragProxyComponent.scss +9 -0
- package/resources/scss/src/draggable/grid/header/toolbar/SortZone.scss +16 -0
- package/resources/scss/src/draggable/table/header/toolbar/SortZone.scss +32 -0
- package/resources/scss/src/grid/header/Toolbar.scss +0 -1
- package/resources/scss/src/table/header/Button.scss +0 -4
- package/resources/scss/theme-dark/draggable/grid/header/toolbar/SortZone.scss +3 -0
- package/resources/scss/theme-dark/draggable/table/header/toolbar/SortZone.scss +3 -0
- package/resources/scss/theme-light/draggable/grid/header/toolbar/SortZone.scss +3 -0
- package/resources/scss/theme-light/draggable/table/header/toolbar/SortZone.scss +3 -0
- package/resources/scss/theme-neo-light/draggable/grid/header/toolbar/SortZone.scss +3 -0
- package/resources/scss/theme-neo-light/draggable/table/header/toolbar/SortZone.scss +3 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/component/Base.mjs +2 -6
- package/src/draggable/grid/header/toolbar/SortZone.mjs +74 -0
- package/src/draggable/table/header/toolbar/SortZone.mjs +70 -0
- package/src/draggable/toolbar/SortZone.mjs +23 -14
- package/src/grid/header/Button.mjs +0 -109
- package/src/grid/header/Toolbar.mjs +32 -0
- package/src/main/DomEvents.mjs +10 -50
- package/src/main/addon/DragDrop.mjs +9 -20
- package/src/selection/grid/BaseModel.mjs +1 -1
- package/src/selection/table/BaseModel.mjs +1 -1
- package/src/table/Container.mjs +6 -6
- package/src/table/View.mjs +10 -10
- package/src/table/header/Button.mjs +0 -105
- package/src/table/header/Toolbar.mjs +34 -2
- package/src/util/Rectangle.mjs +1 -1
package/apps/ServiceWorker.mjs
CHANGED
package/apps/portal/index.html
CHANGED
@@ -208,13 +208,7 @@ class ConfigurationViewport extends Viewport {
|
|
208
208
|
if (target === 'cmp') {
|
209
209
|
me.exampleComponent.theme = newTheme
|
210
210
|
} else {
|
211
|
-
|
212
|
-
id : me.id, // the viewport can get imported into other apps, so an id makes sense for scoping
|
213
|
-
cls: {
|
214
|
-
add : [newTheme],
|
215
|
-
remove: [oldTheme]
|
216
|
-
}
|
217
|
-
})
|
211
|
+
me.app.mainView.theme = newTheme
|
218
212
|
}
|
219
213
|
}
|
220
214
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "8.
|
3
|
+
"version": "8.12.0",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -54,7 +54,7 @@
|
|
54
54
|
"envinfo": "^7.14.0",
|
55
55
|
"fs-extra": "^11.3.0",
|
56
56
|
"highlightjs-line-numbers.js": "^2.9.0",
|
57
|
-
"inquirer": "^12.3.
|
57
|
+
"inquirer": "^12.3.3",
|
58
58
|
"marked": "^15.0.6",
|
59
59
|
"monaco-editor": "0.50.0",
|
60
60
|
"neo-jsdoc": "1.0.1",
|
@@ -1,3 +1,12 @@
|
|
1
|
+
body:has(.neo-is-dragging) {
|
2
|
+
cursor: move !important;
|
3
|
+
|
4
|
+
// We can not put pointer-events: none on the same level as cursor, since it prevents cursor changes
|
5
|
+
* {
|
6
|
+
pointer-events: none !important;
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
1
10
|
.neo-dragproxy {
|
2
11
|
pointer-events : none;
|
3
12
|
position : absolute !important;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
.neo-grid-header-toolbar {
|
2
|
+
&.neo-dragproxy {
|
3
|
+
height: 30px !important; // Hack to increase the height by the border-bottom height (29 + 1)
|
4
|
+
|
5
|
+
.neo-button {
|
6
|
+
border-right: 1px solid var(--grid-container-border-color);
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
&.neo-is-dragging {
|
11
|
+
.neo-button {
|
12
|
+
border-right: 1px solid var(--grid-container-border-color); // Would be missing for the last button otherwise
|
13
|
+
opacity : var(--grid-header-button-opacity-is-dragging);
|
14
|
+
}
|
15
|
+
}
|
16
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
.neo-table-container:has(.neo-is-dragging) {
|
2
|
+
border-top-width: 1px;
|
3
|
+
}
|
4
|
+
|
5
|
+
.neo-table-header-toolbar {
|
6
|
+
&.neo-dragproxy {
|
7
|
+
border-bottom: 1px solid var(--table-container-border-color);
|
8
|
+
height : 31px !important; // Hack to increase the height by the border-bottom height (29 + 1)
|
9
|
+
padding: 0 0 1px 0;
|
10
|
+
|
11
|
+
.neo-table-header-button {
|
12
|
+
border-right: 1px solid var(--table-container-border-color);
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
&.neo-is-dragging {
|
17
|
+
height: 32px !important;
|
18
|
+
|
19
|
+
.neo-table-header-button {
|
20
|
+
border-right: 1px solid var(--table-container-border-color); // Would be missing for the last button otherwise
|
21
|
+
opacity : var(--table-header-button-opacity-is-dragging);
|
22
|
+
}
|
23
|
+
|
24
|
+
.neo-draggable {
|
25
|
+
background-color : unset;
|
26
|
+
height : 32px !important;
|
27
|
+
transition-duration : 200ms;
|
28
|
+
transition-property : left, top;
|
29
|
+
transition-timing-function: ease-out;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
package/src/DefaultConfig.mjs
CHANGED
@@ -262,12 +262,12 @@ const DefaultConfig = {
|
|
262
262
|
useVdomWorker: true,
|
263
263
|
/**
|
264
264
|
* buildScripts/injectPackageVersion.mjs will update this value
|
265
|
-
* @default '8.
|
265
|
+
* @default '8.12.0'
|
266
266
|
* @memberOf! module:Neo
|
267
267
|
* @name config.version
|
268
268
|
* @type String
|
269
269
|
*/
|
270
|
-
version: '8.
|
270
|
+
version: '8.12.0'
|
271
271
|
};
|
272
272
|
|
273
273
|
Object.assign(DefaultConfig, {
|
package/src/component/Base.mjs
CHANGED
@@ -331,7 +331,7 @@ class Component extends Base {
|
|
331
331
|
*/
|
332
332
|
style_: null,
|
333
333
|
/**
|
334
|
-
* You can pass
|
334
|
+
* You can pass a used theme directly to any component,
|
335
335
|
* to style specific component trees differently from your main view.
|
336
336
|
* @member {String|null} theme_=null
|
337
337
|
*/
|
@@ -1119,11 +1119,7 @@ class Component extends Base {
|
|
1119
1119
|
}
|
1120
1120
|
}
|
1121
1121
|
|
1122
|
-
|
1123
|
-
me.needsVdomUpdate = true
|
1124
|
-
} else if (me.mounted) {
|
1125
|
-
me.updateCls(value, oldValue)
|
1126
|
-
}
|
1122
|
+
me.update()
|
1127
1123
|
}
|
1128
1124
|
|
1129
1125
|
/**
|
@@ -0,0 +1,74 @@
|
|
1
|
+
import BaseSortZone from '../../../toolbar/SortZone.mjs';
|
2
|
+
import NeoArray from '../../../../util/Array.mjs';
|
3
|
+
|
4
|
+
/**
|
5
|
+
* @class Neo.draggable.grid.header.toolbar.SortZone
|
6
|
+
* @extends Neo.draggable.toolbar.SortZone
|
7
|
+
*/
|
8
|
+
class SortZone extends BaseSortZone {
|
9
|
+
static config = {
|
10
|
+
/**
|
11
|
+
* @member {String} className='Neo.draggable.grid.header.toolbar.SortZone'
|
12
|
+
* @protected
|
13
|
+
*/
|
14
|
+
className: 'Neo.draggable.grid.header.toolbar.SortZone',
|
15
|
+
/**
|
16
|
+
* @member {String} ntype='grid-header-toolbar-sortzone'
|
17
|
+
* @protected
|
18
|
+
*/
|
19
|
+
ntype: 'grid-header-toolbar-sortzone',
|
20
|
+
/**
|
21
|
+
* @member {String|null} itemMargin=null
|
22
|
+
* @protected
|
23
|
+
*/
|
24
|
+
itemMargin: '1px',
|
25
|
+
/**
|
26
|
+
* @member {Boolean} moveVertical=false
|
27
|
+
*/
|
28
|
+
moveVertical: false
|
29
|
+
}
|
30
|
+
|
31
|
+
/**
|
32
|
+
* @param {Neo.util.Rectangle} rect
|
33
|
+
* @param {Neo.util.Rectangle} parentRect
|
34
|
+
*/
|
35
|
+
adjustProxyRectToParent(rect, parentRect) {
|
36
|
+
rect.x = rect.x - parentRect.x - 1;
|
37
|
+
rect.y = rect.y - parentRect.y - 1
|
38
|
+
}
|
39
|
+
|
40
|
+
/**
|
41
|
+
* @param {Number} fromIndex
|
42
|
+
* @param {Number} toIndex
|
43
|
+
*/
|
44
|
+
moveTo(fromIndex, toIndex) {
|
45
|
+
super.moveTo(fromIndex, toIndex);
|
46
|
+
|
47
|
+
// It is crucial to use _columns to not get a shallow copy
|
48
|
+
NeoArray.move(this.owner.parent._columns, fromIndex, toIndex);
|
49
|
+
}
|
50
|
+
|
51
|
+
/**
|
52
|
+
* @param {Object} data
|
53
|
+
*/
|
54
|
+
async onDragEnd(data) {
|
55
|
+
await super.onDragEnd(data);
|
56
|
+
|
57
|
+
let {owner} = this;
|
58
|
+
|
59
|
+
owner.items.forEach((item, index) => {
|
60
|
+
item.vdom['aria-colindex'] = index + 1; // 1 based
|
61
|
+
});
|
62
|
+
|
63
|
+
owner.updateDepth = 2;
|
64
|
+
owner.update();
|
65
|
+
|
66
|
+
await owner.passSizeToView();
|
67
|
+
|
68
|
+
await this.timeout(20);
|
69
|
+
|
70
|
+
owner.parent.view.createViewData()
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
export default Neo.setupClass(SortZone);
|
@@ -0,0 +1,70 @@
|
|
1
|
+
import BaseSortZone from '../../../toolbar/SortZone.mjs';
|
2
|
+
import NeoArray from '../../../../util/Array.mjs';
|
3
|
+
|
4
|
+
/**
|
5
|
+
* @class Neo.draggable.table.header.toolbar.SortZone
|
6
|
+
* @extends Neo.draggable.toolbar.SortZone
|
7
|
+
*/
|
8
|
+
class SortZone extends BaseSortZone {
|
9
|
+
static config = {
|
10
|
+
/**
|
11
|
+
* @member {String} className='Neo.draggable.table.header.toolbar.SortZone'
|
12
|
+
* @protected
|
13
|
+
*/
|
14
|
+
className: 'Neo.draggable.table.header.toolbar.SortZone',
|
15
|
+
/**
|
16
|
+
* @member {String} ntype='table-header-toolbar-sortzone'
|
17
|
+
* @protected
|
18
|
+
*/
|
19
|
+
ntype: 'table-header-toolbar-sortzone',
|
20
|
+
/**
|
21
|
+
* @member {String|null} itemMargin=null
|
22
|
+
* @protected
|
23
|
+
*/
|
24
|
+
itemMargin: '-2px 1px 1px 1px',
|
25
|
+
/**
|
26
|
+
* @member {Boolean} moveVertical=false
|
27
|
+
*/
|
28
|
+
moveVertical: false,
|
29
|
+
/**
|
30
|
+
* @member {Number} offsetY=0
|
31
|
+
*/
|
32
|
+
offsetY: 5
|
33
|
+
}
|
34
|
+
|
35
|
+
/**
|
36
|
+
* @param {Neo.util.Rectangle} rect
|
37
|
+
* @param {Neo.util.Rectangle} parentRect
|
38
|
+
*/
|
39
|
+
adjustProxyRectToParent(rect, parentRect) {
|
40
|
+
rect.x = rect.x - parentRect.x - 1;
|
41
|
+
rect.y = rect.y - parentRect.y
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* @param {Number} fromIndex
|
46
|
+
* @param {Number} toIndex
|
47
|
+
*/
|
48
|
+
moveTo(fromIndex, toIndex) {
|
49
|
+
super.moveTo(fromIndex, toIndex);
|
50
|
+
|
51
|
+
// It is crucial to use _columns to not get a shallow copy
|
52
|
+
NeoArray.move(this.owner.parent._columns, fromIndex, toIndex);
|
53
|
+
}
|
54
|
+
|
55
|
+
/**
|
56
|
+
* @param {Object} data
|
57
|
+
*/
|
58
|
+
async onDragEnd(data) {
|
59
|
+
await super.onDragEnd(data);
|
60
|
+
|
61
|
+
let {owner} = this;
|
62
|
+
|
63
|
+
owner.updateDepth = 2;
|
64
|
+
owner.update();
|
65
|
+
|
66
|
+
owner.parent.view.createViewData()
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
export default Neo.setupClass(SortZone);
|
@@ -31,6 +31,11 @@ class SortZone extends DragZone {
|
|
31
31
|
* @protected
|
32
32
|
*/
|
33
33
|
indexMap: null,
|
34
|
+
/**
|
35
|
+
* @member {String|null} itemMargin=null
|
36
|
+
* @protected
|
37
|
+
*/
|
38
|
+
itemMargin: null,
|
34
39
|
/**
|
35
40
|
* @member {Array|null} itemRects=null
|
36
41
|
* @protected
|
@@ -96,11 +101,12 @@ class SortZone extends DragZone {
|
|
96
101
|
owner.style = ownerStyle;
|
97
102
|
|
98
103
|
owner.items.forEach((item, index) => {
|
99
|
-
itemStyle = item.
|
104
|
+
itemStyle = item.wrapperStyle || {};
|
100
105
|
|
101
106
|
Object.assign(itemStyle, {
|
102
107
|
height : itemStyles[index].height || null,
|
103
108
|
left : null,
|
109
|
+
margin : null,
|
104
110
|
position: null,
|
105
111
|
top : null,
|
106
112
|
width : itemStyles[index].width || null
|
@@ -110,7 +116,7 @@ class SortZone extends DragZone {
|
|
110
116
|
itemStyle.visibility = null
|
111
117
|
}
|
112
118
|
|
113
|
-
item.
|
119
|
+
item.wrapperStyle = itemStyle
|
114
120
|
});
|
115
121
|
|
116
122
|
if (me.startIndex !== me.currentIndex) {
|
@@ -202,8 +208,8 @@ class SortZone extends DragZone {
|
|
202
208
|
indexMap[index] = index;
|
203
209
|
|
204
210
|
itemStyles.push({
|
205
|
-
height: item.style?.height,
|
206
|
-
width : item.style?.width
|
211
|
+
height: item.height ? `${item.height}px` : item.style?.height,
|
212
|
+
width : item.width ? `${item.width}px` : item.style?.width
|
207
213
|
})
|
208
214
|
});
|
209
215
|
|
@@ -221,12 +227,15 @@ class SortZone extends DragZone {
|
|
221
227
|
me.itemRects = itemRects;
|
222
228
|
|
223
229
|
owner.items.forEach((item, index) => {
|
224
|
-
itemStyle = item.
|
230
|
+
itemStyle = item.wrapperStyle || {};
|
225
231
|
rect = itemRects[index];
|
226
232
|
|
227
|
-
|
233
|
+
me.adjustProxyRectToParent?.(rect, me.ownerRect);
|
234
|
+
|
235
|
+
item.wrapperStyle = Object.assign(itemStyle, {
|
228
236
|
height : `${rect.height}px`,
|
229
237
|
left : `${rect.left}px`,
|
238
|
+
margin : me.itemMargin,
|
230
239
|
position: 'absolute',
|
231
240
|
top : `${rect.top}px`,
|
232
241
|
width : `${rect.width}px`
|
@@ -235,9 +244,9 @@ class SortZone extends DragZone {
|
|
235
244
|
|
236
245
|
// we need to add a short (1 frame) delay to ensure the item has switched to an absolute position
|
237
246
|
me.timeout(5).then(() => {
|
238
|
-
itemStyle = button.
|
247
|
+
itemStyle = button.wrapperStyle || {};
|
239
248
|
itemStyle.visibility = 'hidden';
|
240
|
-
button.
|
249
|
+
button.wrapperStyle = itemStyle
|
241
250
|
})
|
242
251
|
})
|
243
252
|
}
|
@@ -288,14 +297,14 @@ class SortZone extends DragZone {
|
|
288
297
|
* @param {Object} rect
|
289
298
|
*/
|
290
299
|
updateItem(index, rect) {
|
291
|
-
let me
|
292
|
-
item
|
293
|
-
{
|
300
|
+
let me = this,
|
301
|
+
item = me.owner.items[me.indexMap[index]],
|
302
|
+
{wrapperStyle} = item;
|
294
303
|
|
295
|
-
|
296
|
-
|
304
|
+
wrapperStyle.left = `${rect.left}px`;
|
305
|
+
wrapperStyle.top = `${rect.top}px`;
|
297
306
|
|
298
|
-
item.
|
307
|
+
item.wrapperStyle = wrapperStyle
|
299
308
|
}
|
300
309
|
}
|
301
310
|
|
@@ -45,10 +45,6 @@ class Button extends BaseButton {
|
|
45
45
|
* @member {String} defaultSortDirection='ASC'
|
46
46
|
*/
|
47
47
|
defaultSortDirection: 'ASC',
|
48
|
-
/**
|
49
|
-
* @member {Boolean} draggable_=true
|
50
|
-
*/
|
51
|
-
draggable_: true,
|
52
48
|
/**
|
53
49
|
* @member {Object} editorConfig=null
|
54
50
|
*/
|
@@ -100,43 +96,6 @@ class Button extends BaseButton {
|
|
100
96
|
sortable_: true
|
101
97
|
}
|
102
98
|
|
103
|
-
/**
|
104
|
-
* @param {Object} config
|
105
|
-
*/
|
106
|
-
construct(config) {
|
107
|
-
super.construct(config);
|
108
|
-
|
109
|
-
let me = this;
|
110
|
-
|
111
|
-
me.draggable && me.addDomListeners({
|
112
|
-
dragend : me.onDragEnd,
|
113
|
-
dragenter: me.onDragEnter,
|
114
|
-
dragleave: me.onDragLeave,
|
115
|
-
dragover : me.onDragOver,
|
116
|
-
dragstart: me.onDragStart,
|
117
|
-
drop : me.onDrop,
|
118
|
-
scope : me
|
119
|
-
})
|
120
|
-
}
|
121
|
-
|
122
|
-
/**
|
123
|
-
* Triggered after the draggable config got changed
|
124
|
-
* @param {Boolean} value
|
125
|
-
* @param {Boolean} oldValue
|
126
|
-
* @protected
|
127
|
-
*/
|
128
|
-
afterSetDraggable(value, oldValue) {
|
129
|
-
let me = this;
|
130
|
-
|
131
|
-
if (value === true) {
|
132
|
-
me.getVdomRoot().draggable = true
|
133
|
-
} else {
|
134
|
-
delete me.getVdomRoot().draggable
|
135
|
-
}
|
136
|
-
|
137
|
-
me.update()
|
138
|
-
}
|
139
|
-
|
140
99
|
/**
|
141
100
|
* Triggered after the isSorted config got changed
|
142
101
|
* @param {String|null} value
|
@@ -315,74 +274,6 @@ class Button extends BaseButton {
|
|
315
274
|
me.isSorted = map[me.isSorted + '']
|
316
275
|
}
|
317
276
|
|
318
|
-
/**
|
319
|
-
* @protected
|
320
|
-
*/
|
321
|
-
onDragEnd() {
|
322
|
-
let me = this,
|
323
|
-
{style} = me;
|
324
|
-
|
325
|
-
delete style.opacity;
|
326
|
-
me.style = style
|
327
|
-
}
|
328
|
-
|
329
|
-
/**
|
330
|
-
* @protected
|
331
|
-
*/
|
332
|
-
onDragEnter() {
|
333
|
-
let me = this,
|
334
|
-
{cls} = me;
|
335
|
-
|
336
|
-
NeoArray.add(cls, 'neo-drag-over');
|
337
|
-
me.cls = cls
|
338
|
-
}
|
339
|
-
|
340
|
-
/**
|
341
|
-
* @protected
|
342
|
-
*/
|
343
|
-
onDragLeave() {
|
344
|
-
let me = this,
|
345
|
-
{cls} = me;
|
346
|
-
|
347
|
-
NeoArray.remove(cls, 'neo-drag-over');
|
348
|
-
me.cls = cls
|
349
|
-
}
|
350
|
-
|
351
|
-
/**
|
352
|
-
* @param {Object} event
|
353
|
-
*/
|
354
|
-
onDragOver(event) {
|
355
|
-
//console.log('onDragOver', event);
|
356
|
-
}
|
357
|
-
|
358
|
-
/**
|
359
|
-
* @protected
|
360
|
-
*/
|
361
|
-
onDragStart() {
|
362
|
-
let me = this,
|
363
|
-
{style} = me;
|
364
|
-
|
365
|
-
style.opacity = 0.4;
|
366
|
-
me.style = style
|
367
|
-
}
|
368
|
-
|
369
|
-
/**
|
370
|
-
* @param {Object} data
|
371
|
-
*/
|
372
|
-
onDrop(data) {
|
373
|
-
let me = this,
|
374
|
-
headerToolbar = me.parent,
|
375
|
-
{style} = me,
|
376
|
-
gridContainer = headerToolbar.parent;
|
377
|
-
|
378
|
-
me.onDragLeave();
|
379
|
-
headerToolbar.switchItems(me.id, data.srcId);
|
380
|
-
gridContainer.createViewData(gridContainer.store.data);
|
381
|
-
|
382
|
-
style.opacity = 1;
|
383
|
-
me.style = style
|
384
|
-
}
|
385
|
-
|
386
277
|
/**
|
387
278
|
* @param {Object} data
|
388
279
|
*/
|
@@ -21,6 +21,10 @@ class Toolbar extends BaseToolbar {
|
|
21
21
|
* @member {String[]} baseCls=['neo-grid-header-toolbar','neo-toolbar']
|
22
22
|
*/
|
23
23
|
baseCls: ['neo-grid-header-toolbar', 'neo-toolbar'],
|
24
|
+
/**
|
25
|
+
* @member {Boolean} draggable_=true
|
26
|
+
*/
|
27
|
+
draggable_: true,
|
24
28
|
/**
|
25
29
|
* @member {Neo.grid.Container|null} gridContainer=null
|
26
30
|
*/
|
@@ -40,6 +44,8 @@ class Toolbar extends BaseToolbar {
|
|
40
44
|
*/
|
41
45
|
showHeaderFilters_: false,
|
42
46
|
/**
|
47
|
+
* Convenience shortcut to pass sortable to all toolbar items.
|
48
|
+
* If set to true, header clicks will sort the matching column (ASC, DESC, null)
|
43
49
|
* @member {Boolean} sortable=true
|
44
50
|
*/
|
45
51
|
sortable: true,
|
@@ -50,6 +56,31 @@ class Toolbar extends BaseToolbar {
|
|
50
56
|
{'aria-rowindex': 1, cn: [{cn: []}]}
|
51
57
|
}
|
52
58
|
|
59
|
+
/**
|
60
|
+
* Triggered after the draggable config got changed
|
61
|
+
* @param {Boolean} value
|
62
|
+
* @param {Boolean} oldValue
|
63
|
+
* @protected
|
64
|
+
*/
|
65
|
+
afterSetDraggable(value, oldValue) {
|
66
|
+
let me = this;
|
67
|
+
|
68
|
+
if (value && !me.sortZone) {
|
69
|
+
import('../../draggable/grid/header/toolbar/SortZone.mjs').then(module => {
|
70
|
+
let {appName, id, windowId} = me;
|
71
|
+
|
72
|
+
me.sortZone = Neo.create({
|
73
|
+
module : module.default,
|
74
|
+
appName,
|
75
|
+
boundaryContainerId: id,
|
76
|
+
owner : me,
|
77
|
+
windowId,
|
78
|
+
...me.sortZoneConfig
|
79
|
+
})
|
80
|
+
})
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
53
84
|
/**
|
54
85
|
* Triggered after the mounted config got changed
|
55
86
|
* @param {Boolean} value
|
@@ -98,6 +129,7 @@ class Toolbar extends BaseToolbar {
|
|
98
129
|
})
|
99
130
|
});
|
100
131
|
|
132
|
+
me.updateDepth = 2;
|
101
133
|
me.update()
|
102
134
|
}
|
103
135
|
}
|
package/src/main/DomEvents.mjs
CHANGED
@@ -194,7 +194,7 @@ class DomEvents extends Base {
|
|
194
194
|
|
195
195
|
/**
|
196
196
|
* Local domEvent listener
|
197
|
-
* @param {
|
197
|
+
* @param {Event} event
|
198
198
|
*/
|
199
199
|
domEventListener(event) {
|
200
200
|
let me = this,
|
@@ -211,40 +211,7 @@ class DomEvents extends Base {
|
|
211
211
|
}
|
212
212
|
};
|
213
213
|
|
214
|
-
// console.log('domEventListener', event.type, target.id, target.value, event);
|
215
|
-
|
216
214
|
switch (event.type) {
|
217
|
-
case 'dragend':
|
218
|
-
me.dragElementId = null;
|
219
|
-
break
|
220
|
-
case 'dragenter':
|
221
|
-
if (me.dragElementId === target.id) {
|
222
|
-
return // ignore target and source to be the same
|
223
|
-
}
|
224
|
-
break
|
225
|
-
case 'dragleave':
|
226
|
-
if (me.dragElementId === target.id) {
|
227
|
-
return // ignore target and source to be the same
|
228
|
-
}
|
229
|
-
break
|
230
|
-
case 'dragover':
|
231
|
-
me.onDragOver(event);
|
232
|
-
event.preventDefault();
|
233
|
-
break
|
234
|
-
case 'dragstart':
|
235
|
-
me.dragElementId = target.id;
|
236
|
-
break
|
237
|
-
case 'drop':
|
238
|
-
if (!me.dragElementId || me.dragElementId === target.id) {
|
239
|
-
return // drop fires twice by default & drop should not trigger on the drag element
|
240
|
-
}
|
241
|
-
if (event.stopPropagation) {
|
242
|
-
event.stopPropagation() // stops the browser from redirecting.
|
243
|
-
}
|
244
|
-
event.preventDefault();
|
245
|
-
config.data.srcId = me.dragElementId;
|
246
|
-
me.dragElementId = null;
|
247
|
-
break
|
248
215
|
case 'mousemove':
|
249
216
|
Object.assign(config.data, me.getMouseEventData(event));
|
250
217
|
break
|
@@ -427,10 +394,10 @@ class DomEvents extends Base {
|
|
427
394
|
* @param {Object} event
|
428
395
|
*/
|
429
396
|
onBeforeUnload(event) {
|
430
|
-
let
|
397
|
+
let {Manager} = Neo.worker;
|
431
398
|
|
432
|
-
|
433
|
-
|
399
|
+
Manager.appNames.forEach(appName => {
|
400
|
+
Manager.broadcast({action: 'disconnect', appName, windowId: Manager.windowId})
|
434
401
|
})
|
435
402
|
}
|
436
403
|
|
@@ -498,13 +465,6 @@ class DomEvents extends Base {
|
|
498
465
|
me.testPathInclusion(event, preventClickTargets) && event.preventDefault()
|
499
466
|
}
|
500
467
|
|
501
|
-
/**
|
502
|
-
* @param {Object} event
|
503
|
-
*/
|
504
|
-
onDragOver(event) {
|
505
|
-
event.dataTransfer.dropEffect = 'move'
|
506
|
-
}
|
507
|
-
|
508
468
|
/**
|
509
469
|
* @param {FocusEvent} event
|
510
470
|
*/
|
@@ -616,13 +576,11 @@ class DomEvents extends Base {
|
|
616
576
|
* @param {Event} event
|
617
577
|
*/
|
618
578
|
onOrientationChange(event) {
|
619
|
-
|
620
|
-
{orientation} = screen,
|
579
|
+
let {orientation} = screen,
|
621
580
|
{angle, type} = orientation,
|
622
|
-
layout = angle === 0 || angle === 180 ? 'portrait' : 'landscape'
|
623
|
-
{Manager} = Neo.worker;
|
581
|
+
layout = angle === 0 || angle === 180 ? 'portrait' : 'landscape';
|
624
582
|
|
625
|
-
Manager.sendMessage('app', {
|
583
|
+
Neo.worker.Manager.sendMessage('app', {
|
626
584
|
action: 'orientationChange',
|
627
585
|
data : {angle, layout, type}
|
628
586
|
})
|
@@ -633,7 +591,9 @@ class DomEvents extends Base {
|
|
633
591
|
*/
|
634
592
|
onScroll(event) {
|
635
593
|
let {clientHeight, clientWidth, scrollLeft, scrollTop} = event.target;
|
636
|
-
|
594
|
+
|
595
|
+
event.preventDefault();
|
596
|
+
|
637
597
|
this.sendMessageToApp({
|
638
598
|
...this.getEventData(event),
|
639
599
|
clientHeight,
|
@@ -196,17 +196,13 @@ class DragDrop extends Base {
|
|
196
196
|
}
|
197
197
|
|
198
198
|
/**
|
199
|
-
* @param {
|
199
|
+
* @param {Event} event
|
200
200
|
*/
|
201
201
|
onDragEnd(event) {
|
202
202
|
let me = this,
|
203
203
|
parsedEvent = me.getEventData(event),
|
204
204
|
isDrop = me.pathIncludesDropZone(parsedEvent.targetPath);
|
205
205
|
|
206
|
-
DomAccess.setBodyCls({
|
207
|
-
remove: ['neo-unselectable']
|
208
|
-
});
|
209
|
-
|
210
206
|
if (me.bodyCursorStyle) {
|
211
207
|
DomAccess.setStyle({
|
212
208
|
id : 'document.body',
|
@@ -254,7 +250,7 @@ class DragDrop extends Base {
|
|
254
250
|
}
|
255
251
|
|
256
252
|
/**
|
257
|
-
* @param {
|
253
|
+
* @param {Event} event
|
258
254
|
*/
|
259
255
|
onDragMove(event) {
|
260
256
|
let me = this,
|
@@ -290,17 +286,14 @@ class DragDrop extends Base {
|
|
290
286
|
}
|
291
287
|
}
|
292
288
|
|
293
|
-
if (
|
294
|
-
left =
|
289
|
+
if (me.moveHorizontal) {
|
290
|
+
me.dragProxyElement.style.left = `${left}px`
|
295
291
|
}
|
296
292
|
|
297
|
-
me.dragProxyElement.style.left = `${left}px`;
|
298
293
|
|
299
|
-
if (
|
300
|
-
top =
|
294
|
+
if (me.moveVertical) {
|
295
|
+
me.dragProxyElement.style.top = `${top}px`
|
301
296
|
}
|
302
|
-
|
303
|
-
me.dragProxyElement.style.top = `${top}px`
|
304
297
|
}
|
305
298
|
|
306
299
|
if (!me.dragProxyElement || me.alwaysFireDragMove) {
|
@@ -318,16 +311,12 @@ class DragDrop extends Base {
|
|
318
311
|
}
|
319
312
|
|
320
313
|
/**
|
321
|
-
* @param {
|
314
|
+
* @param {Event} event
|
322
315
|
*/
|
323
316
|
onDragStart(event) {
|
324
317
|
let me = this,
|
325
318
|
rect = event.target.getBoundingClientRect();
|
326
319
|
|
327
|
-
DomAccess.setBodyCls({
|
328
|
-
add: ['neo-unselectable']
|
329
|
-
});
|
330
|
-
|
331
320
|
Object.assign(me, {
|
332
321
|
dragProxyRect: rect,
|
333
322
|
offsetX : event.detail.clientX - rect.left,
|
@@ -341,7 +330,7 @@ class DragDrop extends Base {
|
|
341
330
|
}
|
342
331
|
|
343
332
|
/**
|
344
|
-
* @param {
|
333
|
+
* @param {Event} event
|
345
334
|
*/
|
346
335
|
onMouseEnter(event) {
|
347
336
|
let me = this;
|
@@ -356,7 +345,7 @@ class DragDrop extends Base {
|
|
356
345
|
}
|
357
346
|
|
358
347
|
/**
|
359
|
-
* @param {
|
348
|
+
* @param {Event} event
|
360
349
|
*/
|
361
350
|
onMouseLeave(event) {
|
362
351
|
let me = this;
|
package/src/table/Container.mjs
CHANGED
@@ -192,7 +192,7 @@ class Container extends BaseContainer {
|
|
192
192
|
headerToolbar.createItems()
|
193
193
|
}
|
194
194
|
|
195
|
-
me.view?.createViewData(
|
195
|
+
me.view?.createViewData()
|
196
196
|
}
|
197
197
|
}
|
198
198
|
|
@@ -407,12 +407,12 @@ class Container extends BaseContainer {
|
|
407
407
|
}
|
408
408
|
|
409
409
|
/**
|
410
|
-
*
|
410
|
+
*
|
411
411
|
*/
|
412
|
-
createViewData(
|
412
|
+
createViewData() {
|
413
413
|
let me = this;
|
414
414
|
|
415
|
-
me.view.createViewData(
|
415
|
+
me.view.createViewData();
|
416
416
|
|
417
417
|
if (me.useCustomScrollbars && me.scrollbarsCssApplied === false) {
|
418
418
|
me.applyCustomScrollbarsCss()
|
@@ -478,7 +478,7 @@ class Container extends BaseContainer {
|
|
478
478
|
let me = this;
|
479
479
|
|
480
480
|
if (me.rendered) {
|
481
|
-
me.createViewData(
|
481
|
+
me.createViewData();
|
482
482
|
|
483
483
|
if (me.store.sorters.length < 1) {
|
484
484
|
me.removeSortingCss()
|
@@ -486,7 +486,7 @@ class Container extends BaseContainer {
|
|
486
486
|
} else {
|
487
487
|
me.on('rendered', () => {
|
488
488
|
me.timeout(50).then(() => {
|
489
|
-
me.createViewData(
|
489
|
+
me.createViewData()
|
490
490
|
})
|
491
491
|
}, me, {once: true})
|
492
492
|
}
|
package/src/table/View.mjs
CHANGED
@@ -310,17 +310,17 @@ class View extends Component {
|
|
310
310
|
}
|
311
311
|
|
312
312
|
/**
|
313
|
-
*
|
313
|
+
*
|
314
314
|
*/
|
315
|
-
createViewData(
|
316
|
-
let me
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
for (; i <
|
323
|
-
rows.push(me.createRow({record:
|
315
|
+
createViewData() {
|
316
|
+
let me = this,
|
317
|
+
{selectedRows, store} = me,
|
318
|
+
countRecords = store.getCount(),
|
319
|
+
i = 0,
|
320
|
+
rows = [];
|
321
|
+
|
322
|
+
for (; i < countRecords; i++) {
|
323
|
+
rows.push(me.createRow({record: store.items[i], rowIndex: i}))
|
324
324
|
}
|
325
325
|
|
326
326
|
me.vdom.cn = rows;
|
@@ -110,43 +110,6 @@ class Button extends BaseButton {
|
|
110
110
|
]}
|
111
111
|
}
|
112
112
|
|
113
|
-
/**
|
114
|
-
* @param {Object} config
|
115
|
-
*/
|
116
|
-
construct(config) {
|
117
|
-
super.construct(config);
|
118
|
-
|
119
|
-
let me = this;
|
120
|
-
|
121
|
-
me.draggable && me.addDomListeners({
|
122
|
-
dragend : me.onDragEnd,
|
123
|
-
dragenter: me.onDragEnter,
|
124
|
-
dragleave: me.onDragLeave,
|
125
|
-
dragover : me.onDragOver,
|
126
|
-
dragstart: me.onDragStart,
|
127
|
-
drop : me.onDrop,
|
128
|
-
scope : me
|
129
|
-
})
|
130
|
-
}
|
131
|
-
|
132
|
-
/**
|
133
|
-
* Triggered after the draggable config got changed
|
134
|
-
* @param {Boolean} value
|
135
|
-
* @param {Boolean} oldValue
|
136
|
-
* @protected
|
137
|
-
*/
|
138
|
-
afterSetDraggable(value, oldValue) {
|
139
|
-
let me = this;
|
140
|
-
|
141
|
-
if (value === true) {
|
142
|
-
me.getVdomRoot().draggable = true
|
143
|
-
} else {
|
144
|
-
delete me.getVdomRoot().draggable
|
145
|
-
}
|
146
|
-
|
147
|
-
me.update()
|
148
|
-
}
|
149
|
-
|
150
113
|
/**
|
151
114
|
* Triggered after the isSorted config got changed
|
152
115
|
* @param {String|null} value
|
@@ -413,74 +376,6 @@ class Button extends BaseButton {
|
|
413
376
|
me.isSorted = map[me.isSorted + '']
|
414
377
|
}
|
415
378
|
|
416
|
-
/**
|
417
|
-
* @protected
|
418
|
-
*/
|
419
|
-
onDragEnd() {
|
420
|
-
let me = this,
|
421
|
-
{style} = me;
|
422
|
-
|
423
|
-
delete style.opacity;
|
424
|
-
me.style = style
|
425
|
-
}
|
426
|
-
|
427
|
-
/**
|
428
|
-
* @protected
|
429
|
-
*/
|
430
|
-
onDragEnter() {
|
431
|
-
let me = this,
|
432
|
-
{cls} = me;
|
433
|
-
|
434
|
-
NeoArray.add(cls, 'neo-drag-over');
|
435
|
-
me.cls = cls
|
436
|
-
}
|
437
|
-
|
438
|
-
/**
|
439
|
-
* @protected
|
440
|
-
*/
|
441
|
-
onDragLeave() {
|
442
|
-
let me = this,
|
443
|
-
{cls} = me;
|
444
|
-
|
445
|
-
NeoArray.remove(cls, 'neo-drag-over');
|
446
|
-
me.cls = cls
|
447
|
-
}
|
448
|
-
|
449
|
-
/**
|
450
|
-
* @param {Object} event
|
451
|
-
*/
|
452
|
-
onDragOver(event) {
|
453
|
-
//console.log('onDragOver', event);
|
454
|
-
}
|
455
|
-
|
456
|
-
/**
|
457
|
-
* @protected
|
458
|
-
*/
|
459
|
-
onDragStart() {
|
460
|
-
let me = this,
|
461
|
-
{style} = me;
|
462
|
-
|
463
|
-
style.opacity = 0.4;
|
464
|
-
me.style = style
|
465
|
-
}
|
466
|
-
|
467
|
-
/**
|
468
|
-
* @param {Object} data
|
469
|
-
*/
|
470
|
-
onDrop(data) {
|
471
|
-
let me = this,
|
472
|
-
headerToolbar = me.parent,
|
473
|
-
{style} = me,
|
474
|
-
tableContainer = headerToolbar.parent;
|
475
|
-
|
476
|
-
me.onDragLeave();
|
477
|
-
headerToolbar.switchItems(me.id, data.srcId);
|
478
|
-
tableContainer.createViewData(tableContainer.store.data);
|
479
|
-
|
480
|
-
style.opacity = 1;
|
481
|
-
me.style = style
|
482
|
-
}
|
483
|
-
|
484
379
|
/**
|
485
380
|
* @protected
|
486
381
|
*/
|
@@ -17,9 +17,13 @@ class Toolbar extends BaseToolbar {
|
|
17
17
|
*/
|
18
18
|
ntype: 'table-header-toolbar',
|
19
19
|
/**
|
20
|
-
* @member {String[]} baseCls=['table-header-toolbar']
|
20
|
+
* @member {String[]} baseCls=['neo-table-header-toolbar']
|
21
21
|
*/
|
22
|
-
baseCls: ['table-header-toolbar'],
|
22
|
+
baseCls: ['neo-table-header-toolbar'],
|
23
|
+
/**
|
24
|
+
* @member {Boolean} draggable_=true
|
25
|
+
*/
|
26
|
+
draggable_: true,
|
23
27
|
/**
|
24
28
|
* @member {String} layout='base'
|
25
29
|
*/
|
@@ -35,6 +39,8 @@ class Toolbar extends BaseToolbar {
|
|
35
39
|
*/
|
36
40
|
showHeaderFilters_: false,
|
37
41
|
/**
|
42
|
+
* Convenience shortcut to pass sortable to all toolbar items.
|
43
|
+
* If set to true, header clicks will sort the matching column (ASC, DESC, null)
|
38
44
|
* @member {Boolean} sortable=true
|
39
45
|
*/
|
40
46
|
sortable: true,
|
@@ -47,6 +53,31 @@ class Toolbar extends BaseToolbar {
|
|
47
53
|
]}
|
48
54
|
}
|
49
55
|
|
56
|
+
/**
|
57
|
+
* Triggered after the draggable config got changed
|
58
|
+
* @param {Boolean} value
|
59
|
+
* @param {Boolean} oldValue
|
60
|
+
* @protected
|
61
|
+
*/
|
62
|
+
afterSetDraggable(value, oldValue) {
|
63
|
+
let me = this;
|
64
|
+
|
65
|
+
if (value && !me.sortZone) {
|
66
|
+
import('../../draggable/table/header/toolbar/SortZone.mjs').then(module => {
|
67
|
+
let {appName, id, windowId} = me;
|
68
|
+
|
69
|
+
me.sortZone = Neo.create({
|
70
|
+
module : module.default,
|
71
|
+
appName,
|
72
|
+
boundaryContainerId: id,
|
73
|
+
owner : me,
|
74
|
+
windowId,
|
75
|
+
...me.sortZoneConfig
|
76
|
+
})
|
77
|
+
})
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
50
81
|
/**
|
51
82
|
* Triggered after the showHeaderFilters config got changed
|
52
83
|
* @param {Boolean} value
|
@@ -84,6 +115,7 @@ class Toolbar extends BaseToolbar {
|
|
84
115
|
})
|
85
116
|
});
|
86
117
|
|
118
|
+
me.updateDepth = 2;
|
87
119
|
me.update()
|
88
120
|
}
|
89
121
|
}
|
package/src/util/Rectangle.mjs
CHANGED
@@ -309,7 +309,7 @@ export default class Rectangle extends DOMRect {
|
|
309
309
|
|
310
310
|
/**
|
311
311
|
* Returns a clone of this Rectangle expanded according to the edges array.
|
312
|
-
* @param {Number
|
312
|
+
* @param {Number[]} edges
|
313
313
|
* @returns {Rectangle}
|
314
314
|
*/
|
315
315
|
expand(edges) {
|