neo.mjs 7.1.0 → 7.2.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/model/Example.mjs +46 -0
- package/apps/portal/resources/data/examples_devmode.json +173 -0
- package/apps/portal/resources/data/examples_dist_dev.json +164 -0
- package/apps/portal/resources/data/examples_dist_prod.json +164 -0
- package/apps/portal/store/Examples.mjs +33 -0
- package/apps/portal/view/HeaderToolbar.mjs +3 -0
- package/apps/portal/view/Viewport.mjs +3 -2
- package/apps/portal/view/ViewportController.mjs +32 -14
- package/apps/portal/view/about/Container.mjs +2 -2
- package/apps/portal/view/blog/List.mjs +3 -3
- package/apps/portal/view/examples/List.mjs +122 -0
- package/apps/portal/view/examples/TabContainer.mjs +79 -0
- package/apps/portal/view/examples/TabContainerController.mjs +41 -0
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/apps/shareddialog/view/MainContainerController.mjs +37 -30
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/todoList/version2/TodoListModel.mjs +1 -1
- package/package.json +1 -1
- package/resources/scss/src/apps/portal/about/MemberContainer.scss +5 -4
- package/resources/scss/src/apps/portal/blog/Container.scss +2 -0
- package/resources/scss/src/apps/portal/examples/List.scss +157 -0
- package/resources/scss/src/apps/portal/examples/TabContainer.scss +36 -0
- package/resources/scss/src/button/Base.scss +4 -0
- package/resources/scss/src/calendar/view/calendars/ColorsList.scss +4 -0
- package/resources/scss/src/calendar/view/calendars/List.scss +2 -1
- package/resources/scss/src/dialog/Base.scss +2 -2
- package/resources/scss/src/list/Base.scss +3 -3
- package/resources/scss/theme-neo-light/button/Base.scss +3 -3
- package/src/DefaultConfig.mjs +2 -2
- package/src/calendar/view/MainContainer.mjs +7 -5
- package/src/calendar/view/calendars/EditContainer.mjs +3 -2
- package/src/calendar/view/calendars/List.mjs +1 -0
- package/src/calendar/view/week/Component.mjs +5 -3
- package/src/calendar/view/week/plugin/DragDrop.mjs +4 -3
- package/src/layout/Cube.mjs +44 -38
@@ -43,13 +43,15 @@ class ViewportController extends Controller {
|
|
43
43
|
* @member {Object} routes
|
44
44
|
*/
|
45
45
|
routes: {
|
46
|
-
'/about-us'
|
47
|
-
'/blog'
|
48
|
-
'/docs'
|
49
|
-
'/
|
50
|
-
'/
|
51
|
-
'/
|
52
|
-
'/
|
46
|
+
'/about-us' : 'onAboutUsRoute',
|
47
|
+
'/blog' : 'onBlogRoute',
|
48
|
+
'/docs' : 'onDocsRoute',
|
49
|
+
'/examples' : 'onExamplesRoute',
|
50
|
+
'/examples/{itemId}': 'onExamplesRoute',
|
51
|
+
'/home' : 'onHomeRoute',
|
52
|
+
'/learn' : 'onLearnRoute',
|
53
|
+
'/learn/{itemId}' : 'onLearnRoute',
|
54
|
+
'/services' : 'onServicesRoute'
|
53
55
|
},
|
54
56
|
/**
|
55
57
|
* Values are: large, medium, small, xSmall
|
@@ -230,7 +232,16 @@ class ViewportController extends Controller {
|
|
230
232
|
* @param {Object} oldValue
|
231
233
|
*/
|
232
234
|
onDocsRoute(params, value, oldValue) {
|
233
|
-
this.setMainContentIndex(
|
235
|
+
this.setMainContentIndex(6)
|
236
|
+
}
|
237
|
+
|
238
|
+
/**
|
239
|
+
* @param {Object} params
|
240
|
+
* @param {Object} value
|
241
|
+
* @param {Object} oldValue
|
242
|
+
*/
|
243
|
+
onExamplesRoute(params, value, oldValue) {
|
244
|
+
this.setMainContentIndex(4)
|
234
245
|
}
|
235
246
|
|
236
247
|
/**
|
@@ -257,7 +268,7 @@ class ViewportController extends Controller {
|
|
257
268
|
* @param {Object} oldValue
|
258
269
|
*/
|
259
270
|
onServicesRoute(params, value, oldValue) {
|
260
|
-
this.setMainContentIndex(
|
271
|
+
this.setMainContentIndex(3)
|
261
272
|
}
|
262
273
|
|
263
274
|
/**
|
@@ -272,12 +283,19 @@ class ViewportController extends Controller {
|
|
272
283
|
|
273
284
|
if (index !== activeIndex) {
|
274
285
|
me.activeIndex = index;
|
275
|
-
me.#transitionId++;
|
276
|
-
|
277
|
-
transitionId = me.#transitionId;
|
278
286
|
|
279
|
-
|
280
|
-
|
287
|
+
if (
|
288
|
+
mainContentLayout === 'mixed' &&
|
289
|
+
// skip the initial layout-switch, since we do not need a transition
|
290
|
+
Neo.isNumber(activeIndex) &&
|
291
|
+
// also skip the layout switch in case the index >= 6, since a cube only has 6 faces
|
292
|
+
index < 6 &&
|
293
|
+
// also skip the layout switch in case we navigate back from a non-cube item
|
294
|
+
activeIndex < 6
|
295
|
+
) {
|
296
|
+
me.#transitionId++;
|
297
|
+
|
298
|
+
transitionId = me.#transitionId;
|
281
299
|
updateLayout = false;
|
282
300
|
|
283
301
|
// enable "fast clicking" on main nav items => do not replace a cube layout with a new instance of cube
|
@@ -58,9 +58,9 @@ class Container extends Base {
|
|
58
58
|
teamRole : 'Training'
|
59
59
|
}],
|
60
60
|
/**
|
61
|
-
* @member {Object} layout={ntype:'vbox',align:'
|
61
|
+
* @member {Object} layout={ntype:'vbox',align:'center'}
|
62
62
|
*/
|
63
|
-
layout: {ntype: 'vbox', align: '
|
63
|
+
layout: {ntype: 'vbox', align: 'center'}
|
64
64
|
}
|
65
65
|
}
|
66
66
|
|
@@ -28,9 +28,9 @@ class List extends BaseList {
|
|
28
28
|
/**
|
29
29
|
* Specify the amount of delayed observe() calls, in case the IntersectionObserver does not find targets.
|
30
30
|
* This can happen when moving the component inside the DOM (e.g. cube layout)
|
31
|
-
* @member {Number} intersectionObserverReconnects=
|
31
|
+
* @member {Number} intersectionObserverReconnects=10
|
32
32
|
*/
|
33
|
-
intersectionObserverReconnects:
|
33
|
+
intersectionObserverReconnects: 10,
|
34
34
|
/**
|
35
35
|
* Specify how many blog item images to preload when intersecting
|
36
36
|
* @member {Number} preloadImages=5
|
@@ -249,7 +249,7 @@ class List extends BaseList {
|
|
249
249
|
len = me.intersectionObserverReconnects,
|
250
250
|
data;
|
251
251
|
|
252
|
-
await me.timeout(
|
252
|
+
await me.timeout(150);
|
253
253
|
|
254
254
|
data = await Neo.main.addon.IntersectionObserver.register({
|
255
255
|
...opts,
|
@@ -0,0 +1,122 @@
|
|
1
|
+
import BaseList from '../../../../src/list/Base.mjs';
|
2
|
+
import Examples from '../../store/Examples.mjs';
|
3
|
+
|
4
|
+
/**
|
5
|
+
* @class Portal.view.examples.List
|
6
|
+
* @extends Neo.list.Base
|
7
|
+
*/
|
8
|
+
class List extends BaseList {
|
9
|
+
/**
|
10
|
+
* A regex to enforce a maxLength (word break)
|
11
|
+
* @member {RegExp} nameRegEx
|
12
|
+
* @protected
|
13
|
+
* @static
|
14
|
+
*/
|
15
|
+
static nameRegEx = /^(.{65}[^\s]*).*/
|
16
|
+
|
17
|
+
static config = {
|
18
|
+
/**
|
19
|
+
* @member {String} className='Portal.view.examples.List'
|
20
|
+
* @protected
|
21
|
+
*/
|
22
|
+
className: 'Portal.view.examples.List',
|
23
|
+
/**
|
24
|
+
* @member {String[]} baseCls=['portal-examples-list','neo-list']
|
25
|
+
*/
|
26
|
+
baseCls: ['portal-examples-list', 'neo-list'],
|
27
|
+
/**
|
28
|
+
* @member {Neo.data.Store} store=Examples
|
29
|
+
*/
|
30
|
+
store: Examples,
|
31
|
+
/**
|
32
|
+
* @member {String|null} storeUrl_=null
|
33
|
+
*/
|
34
|
+
storeUrl_: null,
|
35
|
+
/**
|
36
|
+
* @member {Boolean} useWrapperNode=true
|
37
|
+
*/
|
38
|
+
useWrapperNode: true,
|
39
|
+
/**
|
40
|
+
* @member {Object} _vdom
|
41
|
+
*/
|
42
|
+
_vdom:
|
43
|
+
{cn: [
|
44
|
+
{tag: 'ul', cn: []}
|
45
|
+
]}
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Triggered before the store config gets changed.
|
50
|
+
* @param {Object|Neo.data.Store} value
|
51
|
+
* @param {Object|Neo.data.Store} oldValue
|
52
|
+
* @returns {Neo.data.Store}
|
53
|
+
* @protected
|
54
|
+
*/
|
55
|
+
beforeSetStore(value, oldValue) {
|
56
|
+
if (value) {
|
57
|
+
if (value.isClass) {
|
58
|
+
value = {
|
59
|
+
module: value,
|
60
|
+
url : this.storeUrl
|
61
|
+
};
|
62
|
+
} else if (Neo.isObject(value)) {
|
63
|
+
value.url = this.storeUrl;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
return super.beforeSetStore(value, oldValue);
|
68
|
+
}
|
69
|
+
|
70
|
+
/**
|
71
|
+
* @param {Object} record
|
72
|
+
*/
|
73
|
+
createItemContent(record) {
|
74
|
+
let basePath;
|
75
|
+
|
76
|
+
if (Neo.config.isGitHubPages) {
|
77
|
+
basePath = '../../../../resources_pub/website/examples';
|
78
|
+
|
79
|
+
if (Neo.config.environment !== 'development') {
|
80
|
+
basePath = '../../' + basePath
|
81
|
+
}
|
82
|
+
} else {
|
83
|
+
basePath = 'https://raw.githubusercontent.com/neomjs/pages/main/resources_pub/website/examples'
|
84
|
+
}
|
85
|
+
|
86
|
+
return [
|
87
|
+
{cls: ['content', 'neo-relative'], cn: [
|
88
|
+
{cls: ['neo-full-size', 'preview-image'], style: {
|
89
|
+
backgroundImage: `url('${basePath}/${record.image}'), linear-gradient(#777, #333)`}
|
90
|
+
},
|
91
|
+
{cls: ['neo-absolute', 'neo-item-bottom-position'], cn: [
|
92
|
+
{tag: 'a', cls: ['neo-title'], href: record.url, target: '_blank', cn: [
|
93
|
+
{html: record.name.replace(List.nameRegEx, "$1")}
|
94
|
+
]},
|
95
|
+
{cls: ['neo-top-20'], cn: [
|
96
|
+
{tag: 'a', cls: ['fab fa-github', 'neo-github-image'], href: record.sourceUrl, target: '_blank'},
|
97
|
+
{cls: ['neo-inner-content'], cn: [
|
98
|
+
{cls: ['neo-inner-details'], html: record.browsers.join(', ')},
|
99
|
+
{cls: ['neo-inner-details'], html: record.environments.join(', ')}
|
100
|
+
]}
|
101
|
+
]}
|
102
|
+
]}
|
103
|
+
]}
|
104
|
+
]
|
105
|
+
}
|
106
|
+
|
107
|
+
/**
|
108
|
+
* @returns {Object}
|
109
|
+
*/
|
110
|
+
getVdomRoot() {
|
111
|
+
return this.vdom.cn[0]
|
112
|
+
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
* @returns {Object}
|
116
|
+
*/
|
117
|
+
getVnodeRoot() {
|
118
|
+
return this.vnode.childNodes[0]
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
export default Neo.setupClass(List);
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import Container from '../../../../src/tab/Container.mjs';
|
2
|
+
import List from './List.mjs';
|
3
|
+
import TabContainerController from './TabContainerController.mjs';
|
4
|
+
|
5
|
+
/**
|
6
|
+
* @class Portal.view.examples.TabContainer
|
7
|
+
* @extends Neo.tab.Container
|
8
|
+
*/
|
9
|
+
class TabContainer extends Container {
|
10
|
+
static config = {
|
11
|
+
/**
|
12
|
+
* @member {String} className='Portal.view.examples.TabContainer'
|
13
|
+
* @protected
|
14
|
+
*/
|
15
|
+
className: 'Portal.view.examples.TabContainer',
|
16
|
+
/**
|
17
|
+
* @member {Number|null} activeIndex=null
|
18
|
+
*/
|
19
|
+
activeIndex: null,
|
20
|
+
/**
|
21
|
+
* @member {String[]} baseCls=['portal-examples-tab-container','neo-tab-container']
|
22
|
+
*/
|
23
|
+
baseCls: ['portal-examples-tab-container', 'neo-tab-container'],
|
24
|
+
/**
|
25
|
+
* @member {Neo.controller.Component} controller=TabContainerController
|
26
|
+
*/
|
27
|
+
controller: TabContainerController,
|
28
|
+
/**
|
29
|
+
* @member {Object} headerToolbarDefaults
|
30
|
+
*/
|
31
|
+
headerToolbarDefaults: {
|
32
|
+
cls: ['portal-examples-tab-header-toolbar']
|
33
|
+
},
|
34
|
+
/**
|
35
|
+
* @member {Object} itemDefaults
|
36
|
+
*/
|
37
|
+
itemDefaults: {
|
38
|
+
module: List
|
39
|
+
},
|
40
|
+
/**
|
41
|
+
* @member {Object[]} items
|
42
|
+
*/
|
43
|
+
items: [{
|
44
|
+
reference : 'examples-devmode-list',
|
45
|
+
storeUrl : '../../apps/portal/resources/data/examples_devmode.json',
|
46
|
+
tabButtonConfig: {
|
47
|
+
iconCls: 'fa fa-chess-knight',
|
48
|
+
route : '/examples/devmode',
|
49
|
+
text : 'DevMode'
|
50
|
+
}
|
51
|
+
}, {
|
52
|
+
reference : 'examples-dist-dev-list',
|
53
|
+
storeUrl : '../../apps/portal/resources/data/examples_dist_dev.json',
|
54
|
+
tabButtonConfig: {
|
55
|
+
iconCls: 'fa fa-chess-queen',
|
56
|
+
route : '/examples/dist_dev',
|
57
|
+
text : 'dist/dev'
|
58
|
+
}
|
59
|
+
}, {
|
60
|
+
reference : 'examples-dist-prod-list',
|
61
|
+
storeUrl : '../../apps/portal/resources/data/examples_dist_prod.json',
|
62
|
+
tabButtonConfig: {
|
63
|
+
iconCls: 'fa fa-chess-king',
|
64
|
+
route : '/examples/dist_prod',
|
65
|
+
text : 'dist/prod'
|
66
|
+
}
|
67
|
+
}],
|
68
|
+
/**
|
69
|
+
* @member {Boolean} sortable=true
|
70
|
+
*/
|
71
|
+
sortable: true,
|
72
|
+
/**
|
73
|
+
* @member {String} tabBarPosition='left'
|
74
|
+
*/
|
75
|
+
tabBarPosition: 'left',
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
export default Neo.setupClass(TabContainer);
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import Component from '../../../../src/controller/Component.mjs';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* @class Portal.view.examples.TabContainerController
|
5
|
+
* @extends Neo.controller.Component
|
6
|
+
*/
|
7
|
+
class TabContainerController extends Component {
|
8
|
+
static config = {
|
9
|
+
/**
|
10
|
+
* @member {String} className='Portal.view.examples.TabContainerController'
|
11
|
+
* @protected
|
12
|
+
*/
|
13
|
+
className: 'Portal.view.examples.TabContainerController',
|
14
|
+
/**
|
15
|
+
* @member {Object} routes
|
16
|
+
*/
|
17
|
+
routes: {
|
18
|
+
'/examples' : 'onExamplesRoute',
|
19
|
+
'/examples/{itemId}': 'onExamplesRoute'
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
/**
|
24
|
+
* @param {Object} params
|
25
|
+
* @param {Object} value
|
26
|
+
* @param {Object} oldValue
|
27
|
+
*/
|
28
|
+
onExamplesRoute(params, value, oldValue) {
|
29
|
+
let me = this,
|
30
|
+
itemId = params?.itemId || 'dist_prod',
|
31
|
+
store = me.getReference(`examples-${itemId.replace('_', '-')}-list`).store;
|
32
|
+
|
33
|
+
if (store?.getCount() < 1) {
|
34
|
+
store.load()
|
35
|
+
}
|
36
|
+
|
37
|
+
me.component.activeIndex = itemId === 'dist_prod' ? 2 : itemId === 'dist_dev' ? 1 : 0
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
export default Neo.setupClass(TabContainerController);
|
@@ -28,6 +28,10 @@ class MainContainerController extends ComponentController {
|
|
28
28
|
* @member {String} dockedWindowAppName='SharedDialog2'
|
29
29
|
*/
|
30
30
|
dockedWindowAppName: 'SharedDialog2',
|
31
|
+
/**
|
32
|
+
* @member {Number|null} dockedWindowId=null
|
33
|
+
*/
|
34
|
+
dockedWindowId: null,
|
31
35
|
/**
|
32
36
|
* @member {Neo.component.Base|null} dockedWindowProxy=null
|
33
37
|
*/
|
@@ -40,7 +44,7 @@ class MainContainerController extends ComponentController {
|
|
40
44
|
/**
|
41
45
|
* @member {Number} dockedWindowSize=500
|
42
46
|
*/
|
43
|
-
dockedWindowSize:
|
47
|
+
dockedWindowSize: 620,
|
44
48
|
/**
|
45
49
|
* @member {Object} dialogRect=null
|
46
50
|
*/
|
@@ -67,7 +71,7 @@ class MainContainerController extends ComponentController {
|
|
67
71
|
connect : me.onAppConnect,
|
68
72
|
disconnect: me.onAppDisconnect,
|
69
73
|
scope : me
|
70
|
-
})
|
74
|
+
})
|
71
75
|
}
|
72
76
|
|
73
77
|
/**
|
@@ -81,7 +85,7 @@ class MainContainerController extends ComponentController {
|
|
81
85
|
Neo.main.addon.WindowPosition.setDock({
|
82
86
|
name: this.dockedWindowAppName,
|
83
87
|
dock: value
|
84
|
-
})
|
88
|
+
})
|
85
89
|
}
|
86
90
|
}
|
87
91
|
|
@@ -90,15 +94,17 @@ class MainContainerController extends ComponentController {
|
|
90
94
|
* @param {String} appName
|
91
95
|
*/
|
92
96
|
createDialog(data, appName) {
|
93
|
-
let me
|
97
|
+
let me = this,
|
98
|
+
{windowId} = me;
|
94
99
|
|
95
100
|
me.enableOpenDialogButtons(false);
|
96
101
|
|
97
102
|
me.dialog = Neo.create(DemoDialog, {
|
98
103
|
animateTargetId : data.component.id,
|
99
|
-
appName
|
104
|
+
appName,
|
100
105
|
boundaryContainerId: null,
|
101
106
|
cls : [me.currentTheme, 'neo-dialog', 'neo-panel', 'neo-container'],
|
107
|
+
windowId,
|
102
108
|
|
103
109
|
dragZoneConfig: {
|
104
110
|
alwaysFireDragMove: true
|
@@ -109,7 +115,7 @@ class MainContainerController extends ComponentController {
|
|
109
115
|
dragZoneCreated: me.onDragZoneCreated,
|
110
116
|
scope : me
|
111
117
|
}
|
112
|
-
})
|
118
|
+
})
|
113
119
|
}
|
114
120
|
|
115
121
|
/**
|
@@ -164,7 +170,7 @@ class MainContainerController extends ComponentController {
|
|
164
170
|
me.mountDialogInOtherWindow({
|
165
171
|
fullyIncludeIntoWindow: true,
|
166
172
|
proxyRect : proxyRect
|
167
|
-
})
|
173
|
+
})
|
168
174
|
}
|
169
175
|
}
|
170
176
|
|
@@ -173,15 +179,15 @@ class MainContainerController extends ComponentController {
|
|
173
179
|
*/
|
174
180
|
enableOpenDialogButtons(enable) {
|
175
181
|
this.getOpenDialogButtons().forEach(button => {
|
176
|
-
button.disabled = !enable
|
177
|
-
})
|
182
|
+
button.disabled = !enable
|
183
|
+
})
|
178
184
|
}
|
179
185
|
|
180
186
|
/**
|
181
187
|
* @return {Neo.button.Base}
|
182
188
|
*/
|
183
189
|
getOpenDockedWindowButton() {
|
184
|
-
return this.component.down({iconCls: 'far fa-window-restore'})
|
190
|
+
return this.component.down({iconCls: 'far fa-window-restore'})
|
185
191
|
}
|
186
192
|
|
187
193
|
/**
|
@@ -190,7 +196,7 @@ class MainContainerController extends ComponentController {
|
|
190
196
|
getOpenDialogButtons() {
|
191
197
|
return ComponentManager.find({
|
192
198
|
flag: 'open-dialog-button'
|
193
|
-
})
|
199
|
+
})
|
194
200
|
}
|
195
201
|
|
196
202
|
/**
|
@@ -203,7 +209,7 @@ class MainContainerController extends ComponentController {
|
|
203
209
|
left : 'right',
|
204
210
|
right : 'left',
|
205
211
|
top : 'bottom'
|
206
|
-
}[side]
|
212
|
+
}[side]
|
207
213
|
}
|
208
214
|
|
209
215
|
/**
|
@@ -237,17 +243,14 @@ class MainContainerController extends ComponentController {
|
|
237
243
|
break;
|
238
244
|
}
|
239
245
|
|
240
|
-
return {
|
241
|
-
left: left,
|
242
|
-
top : top
|
243
|
-
};
|
246
|
+
return {left, top}
|
244
247
|
}
|
245
248
|
|
246
249
|
/**
|
247
250
|
* @return {Boolean}
|
248
251
|
*/
|
249
252
|
hasDockedWindow() {
|
250
|
-
return this.connectedApps.includes(this.dockedWindowAppName)
|
253
|
+
return this.connectedApps.includes(this.dockedWindowAppName)
|
251
254
|
}
|
252
255
|
|
253
256
|
/**
|
@@ -277,6 +280,8 @@ class MainContainerController extends ComponentController {
|
|
277
280
|
me.timeout(70).then(() => {
|
278
281
|
dialog.appName = dialog.appName === dragEndWindowAppName ? appName : dragEndWindowAppName;
|
279
282
|
|
283
|
+
// todo: windowI
|
284
|
+
|
280
285
|
me.getOpenDialogButtons().forEach(button => {
|
281
286
|
if (button.appName === dialog.appName) {
|
282
287
|
dialog.animateTargetId = button.id
|
@@ -299,6 +304,7 @@ class MainContainerController extends ComponentController {
|
|
299
304
|
/**
|
300
305
|
* @param {Object} data
|
301
306
|
* @param {String} data.appName
|
307
|
+
* @param {Number} data.windowId
|
302
308
|
*/
|
303
309
|
onAppConnect(data) {
|
304
310
|
let me = this,
|
@@ -311,6 +317,7 @@ class MainContainerController extends ComponentController {
|
|
311
317
|
}
|
312
318
|
|
313
319
|
if (name === me.dockedWindowAppName) {
|
320
|
+
me.dockedWindowId = data.windowId;
|
314
321
|
me.getOpenDockedWindowButton().disabled = true
|
315
322
|
}
|
316
323
|
|
@@ -385,9 +392,8 @@ class MainContainerController extends ComponentController {
|
|
385
392
|
|
386
393
|
if (Rectangle.leavesSide(dragStartWindowRect, proxyRect, side)) {
|
387
394
|
if (Rectangle.excludes(dragStartWindowRect, proxyRect)) {
|
388
|
-
|
389
|
-
|
390
|
-
})
|
395
|
+
console.log('mountDialogInOtherWindow');
|
396
|
+
me.mountDialogInOtherWindow({proxyRect})
|
391
397
|
} else {
|
392
398
|
me.dropDialogBetweenWindows(proxyRect)
|
393
399
|
}
|
@@ -400,18 +406,17 @@ class MainContainerController extends ComponentController {
|
|
400
406
|
*/
|
401
407
|
onDragMove(data) {
|
402
408
|
if (this.hasDockedWindow()) {
|
403
|
-
let me
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
proxyRect = Rectangle.moveTo(dialogRect, data.clientX - data.offsetX, data.clientY - data.offsetY),
|
408
|
-
side = me.dockedWindowSide,
|
409
|
+
let me = this,
|
410
|
+
{dialogRect, dragStartWindowRect, dockedWindowAppName, dockedWindowId} = me,
|
411
|
+
proxyRect = Rectangle.moveTo(dialogRect, data.clientX - data.offsetX, data.clientY - data.offsetY),
|
412
|
+
side = me.dockedWindowSide,
|
409
413
|
proxyPosition, vdom;
|
410
414
|
|
411
415
|
// in case we trigger the drag:start inside the docked window,
|
412
416
|
// we can keep the same logic with just flipping the side.
|
413
417
|
if (me.dialog.appName === dockedWindowAppName) {
|
414
418
|
dockedWindowAppName = me.component.appName;
|
419
|
+
dockedWindowId = me.component.windowId;
|
415
420
|
side = me.getOppositeSide(me.dockedWindowSide);
|
416
421
|
}
|
417
422
|
|
@@ -434,14 +439,16 @@ class MainContainerController extends ComponentController {
|
|
434
439
|
appName : dockedWindowAppName,
|
435
440
|
autoMount : true,
|
436
441
|
autoRender: true,
|
437
|
-
cls : ['neo-dialog-
|
442
|
+
cls : ['neo-dialog', 'neo-dragproxy'],
|
438
443
|
parentId : 'document.body',
|
439
|
-
vdom : vdom
|
444
|
+
vdom : vdom,
|
445
|
+
windowId : dockedWindowId
|
440
446
|
});
|
441
|
-
|
447
|
+
console.log(me.windowId, dockedWindowId);
|
442
448
|
// The other window has most likely not loaded The dialog JS module yet,
|
443
449
|
// but the drag proxy is using some CSS rules of it.
|
444
|
-
Neo.currentWorker.insertThemeFiles(
|
450
|
+
Neo.currentWorker.insertThemeFiles(dockedWindowId, Neo.dialog.Base.prototype);
|
451
|
+
Neo.currentWorker.insertThemeFiles(dockedWindowId, Neo.draggable.DragProxyComponent.prototype)
|
445
452
|
} else {
|
446
453
|
me.updateDockedWindowProxyStyle({
|
447
454
|
...proxyPosition,
|
@@ -6,7 +6,7 @@ import Model from '../../../src/data/Model.mjs';
|
|
6
6
|
*/
|
7
7
|
class TodoListModel extends Model {
|
8
8
|
static config = {
|
9
|
-
className : 'Neo.examples.todoList.version2.
|
9
|
+
className : 'Neo.examples.todoList.version2.TodoListModel',
|
10
10
|
keyProperty: 'id',
|
11
11
|
|
12
12
|
fields: [{
|
package/package.json
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
.portal-about-member-container {
|
2
|
-
border
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
border : 1px solid var(--sem-color-border-default);
|
3
|
+
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.3);
|
4
|
+
min-width : 600px;
|
5
|
+
padding : 1em 1em 4em;
|
6
|
+
position : relative;
|
6
7
|
|
7
8
|
&:not(:nth-child(2)) {
|
8
9
|
margin-top: 1em;
|