neo.mjs 6.10.3 → 6.10.5
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/form/model/SideNav.mjs +3 -3
- package/apps/form/view/SideNavList.mjs +8 -3
- package/apps/form/view/ViewportController.mjs +6 -7
- package/apps/portal/Overwrites.mjs +21 -0
- package/apps/portal/app.mjs +7 -0
- package/apps/portal/data/blog.json +743 -0
- package/apps/portal/index.html +15 -0
- package/apps/portal/model/BlogPost.mjs +59 -0
- package/apps/{learnneo → portal}/model/Content.mjs +3 -3
- package/apps/{learnneo → portal}/neo-config.json +1 -1
- package/apps/portal/store/BlogPosts.mjs +43 -0
- package/apps/{learnneo → portal}/store/Content.mjs +2 -5
- package/apps/portal/view/HeaderToolbar.mjs +65 -0
- package/apps/portal/view/Viewport.mjs +59 -0
- package/apps/portal/view/ViewportController.mjs +79 -0
- package/apps/portal/view/blog/Container.mjs +50 -0
- package/apps/portal/view/blog/List.mjs +173 -0
- package/apps/{newwebsite/view/Viewport.mjs → portal/view/home/MainContainer.mjs} +7 -8
- package/apps/{learnneo/view/home → portal/view/learn}/ContentTreeList.mjs +6 -6
- package/apps/{learnneo/view/home → portal/view/learn}/ContentView.mjs +3 -3
- package/apps/{learnneo/view → portal/view/learn}/LivePreview.mjs +32 -19
- package/apps/{learnneo/view/home → portal/view/learn}/MainContainer.mjs +27 -31
- package/apps/{learnneo/view/home → portal/view/learn}/MainContainerController.mjs +3 -3
- package/apps/{learnneo/view/home → portal/view/learn}/MainContainerModel.mjs +3 -3
- package/apps/website/Overwrites.mjs +16 -0
- package/apps/website/app.mjs +2 -1
- package/apps/website/view/blog/List.mjs +1 -1
- package/buildScripts/webpack/development/webpack.config.appworker.mjs +3 -1
- package/buildScripts/webpack/json/myApps.template.json +1 -1
- package/buildScripts/webpack/production/webpack.config.appworker.mjs +3 -1
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +2 -2
- package/resources/data/deck/learnneo/p/stylesheet.md +4 -1
- package/resources/design-tokens/json/component.json +22 -0
- package/resources/design-tokens/json/core.json +4 -0
- package/resources/design-tokens/json/semantic.json +8 -0
- package/resources/examples/data/formSideNav.json +19 -19
- package/resources/scss/src/apps/portal/blog/Container.scss +18 -0
- package/resources/scss/src/apps/portal/blog/List.scss +183 -0
- package/resources/scss/src/apps/{newwebsite/Viewport.scss → portal/home/MainContainer.scss} +1 -1
- package/resources/scss/src/tab/Strip.scss +1 -0
- package/resources/scss/src/tooltip/Base.scss +10 -6
- package/resources/scss/theme-dark/tooltip/Base.scss +10 -0
- package/resources/scss/theme-light/tooltip/Base.scss +10 -0
- package/resources/scss/theme-neo-light/button/Base.scss +24 -20
- package/resources/scss/theme-neo-light/design-tokens/Component.scss +6 -0
- package/resources/scss/theme-neo-light/design-tokens/Core.scss +2 -0
- package/resources/scss/theme-neo-light/design-tokens/Semantic.scss +4 -2
- package/resources/scss/theme-neo-light/tab/header/Button.scss +8 -7
- package/resources/scss/theme-neo-light/tooltip/Base.scss +13 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/Main.mjs +1 -1
- package/src/component/Base.mjs +5 -0
- package/src/component/Toast.mjs +5 -2
- package/src/container/Base.mjs +14 -0
- package/src/controller/Application.mjs +2 -1
- package/src/controller/Base.mjs +14 -3
- package/src/controller/Component.mjs +1 -1
- package/src/core/Base.mjs +7 -5
- package/src/core/Observable.mjs +15 -15
- package/src/data/RecordFactory.mjs +3 -3
- package/src/form/Container.mjs +50 -0
- package/src/form/field/Text.mjs +2 -2
- package/src/form/field/TextArea.mjs +5 -0
- package/src/main/addon/WindowPosition.mjs +72 -34
- package/src/tab/Strip.mjs +21 -36
- package/src/tab/header/Button.mjs +5 -7
- package/src/worker/App.mjs +26 -1
- package/src/worker/Base.mjs +41 -29
- package/src/worker/Canvas.mjs +4 -4
- package/src/worker/Manager.mjs +4 -3
- package/src/worker/mixin/RemoteMethodAccess.mjs +20 -18
- package/apps/learnneo/app.mjs +0 -6
- package/apps/learnneo/index.html +0 -21
- package/apps/learnneo/view/Viewport.mjs +0 -52
- package/apps/learnneo/view/ViewportController.mjs +0 -19
- package/apps/learnneo/view/home/HeaderToolbar.mjs +0 -47
- package/apps/newwebsite/app.mjs +0 -6
- package/apps/newwebsite/index.html +0 -13
- package/apps/newwebsite/neo-config.json +0 -7
- /package/resources/scss/src/apps/{learnneo/home → portal}/HeaderToolbar.scss +0 -0
- /package/resources/scss/src/apps/{learnneo → portal}/Viewport.scss +0 -0
- /package/resources/scss/src/apps/{learnneo/home → portal/learn}/ContentTreeList.scss +0 -0
- /package/resources/scss/src/apps/{learnneo/home → portal/learn}/ContentView.scss +0 -0
- /package/resources/scss/src/apps/{learnneo/home → portal/learn}/MainContainer.scss +0 -0
@@ -1,7 +1,6 @@
|
|
1
1
|
import Base from '../../core/Base.mjs';
|
2
2
|
|
3
3
|
/**
|
4
|
-
*
|
5
4
|
* @class Neo.main.addon.WindowPosition
|
6
5
|
* @extends Neo.core.Base
|
7
6
|
* @singleton
|
@@ -13,14 +12,22 @@ class WindowPosition extends Base {
|
|
13
12
|
* @protected
|
14
13
|
*/
|
15
14
|
className: 'Neo.main.addon.WindowPosition',
|
15
|
+
/**
|
16
|
+
* @member {Boolean} adjustWindowPositions=false
|
17
|
+
*/
|
18
|
+
adjustWindowPositions: false,
|
16
19
|
/**
|
17
20
|
* @member {String|null} intervalId=null
|
18
21
|
*/
|
19
22
|
intervalId: null,
|
20
23
|
/**
|
21
|
-
* @member {Number} intervalTime=
|
24
|
+
* @member {Number} intervalTime=20
|
22
25
|
*/
|
23
26
|
intervalTime: 20,
|
27
|
+
/**
|
28
|
+
* @member {Boolean} observeResize_=false
|
29
|
+
*/
|
30
|
+
observeResize_: false,
|
24
31
|
/**
|
25
32
|
* Remote method access for other workers
|
26
33
|
* @member {Object} remote
|
@@ -29,6 +36,7 @@ class WindowPosition extends Base {
|
|
29
36
|
remote: {
|
30
37
|
app: [
|
31
38
|
'registerWindow',
|
39
|
+
'setConfigs',
|
32
40
|
'setDock',
|
33
41
|
'unregisterWindow'
|
34
42
|
]
|
@@ -53,6 +61,12 @@ class WindowPosition extends Base {
|
|
53
61
|
windows: {}
|
54
62
|
}
|
55
63
|
|
64
|
+
/**
|
65
|
+
* @member {Function|null} resizeListener=null
|
66
|
+
* @protected
|
67
|
+
*/
|
68
|
+
resizeListener = null
|
69
|
+
|
56
70
|
/**
|
57
71
|
* @param {Object} config
|
58
72
|
*/
|
@@ -65,8 +79,23 @@ class WindowPosition extends Base {
|
|
65
79
|
me.screenLeft = win.screenLeft;
|
66
80
|
me.screenTop = win.screenTop;
|
67
81
|
|
68
|
-
win.addEventListener('mouseout', me.onMouseOut.bind(me))
|
69
|
-
|
82
|
+
win.addEventListener('mouseout', me.onMouseOut.bind(me))
|
83
|
+
}
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Triggered after the observeResize config got changed
|
87
|
+
* @param {Boolean} value
|
88
|
+
* @param {Boolean} oldValue
|
89
|
+
* @protected
|
90
|
+
*/
|
91
|
+
afterSetObserveResize(value, oldValue) {
|
92
|
+
let me = this;
|
93
|
+
|
94
|
+
if (!me.resizeListener) {
|
95
|
+
me.resizeListener = me.onResize.bind(me)
|
96
|
+
}
|
97
|
+
|
98
|
+
window[value ? 'addEventListener' : 'removeEventListener']('resize', me.resizeListener)
|
70
99
|
}
|
71
100
|
|
72
101
|
/**
|
@@ -82,8 +111,8 @@ class WindowPosition extends Base {
|
|
82
111
|
windowName: key,
|
83
112
|
x : position.left,
|
84
113
|
y : position.top
|
85
|
-
})
|
86
|
-
})
|
114
|
+
})
|
115
|
+
})
|
87
116
|
}
|
88
117
|
|
89
118
|
/**
|
@@ -100,7 +129,7 @@ class WindowPosition extends Base {
|
|
100
129
|
if (me.screenLeft !== screenLeft || me.screenTop !== screenTop) {
|
101
130
|
winData = Neo.Main.getWindowData();
|
102
131
|
|
103
|
-
me.adjustPositions();
|
132
|
+
me.adjustWindowPositions && me.adjustPositions();
|
104
133
|
|
105
134
|
Manager.sendMessage('app', {
|
106
135
|
action: 'windowPositionChange',
|
@@ -111,7 +140,7 @@ class WindowPosition extends Base {
|
|
111
140
|
});
|
112
141
|
|
113
142
|
me.screenLeft = screenLeft;
|
114
|
-
me.screenTop = screenTop
|
143
|
+
me.screenTop = screenTop
|
115
144
|
}
|
116
145
|
}
|
117
146
|
|
@@ -124,7 +153,7 @@ class WindowPosition extends Base {
|
|
124
153
|
*/
|
125
154
|
dockDirectionChange(oldValue, newValue) {
|
126
155
|
return (oldValue === 'bottom' || oldValue === 'top') && (newValue === 'left' || newValue === 'right')
|
127
|
-
|| (newValue === 'bottom' || newValue === 'top') && (oldValue === 'left' || oldValue === 'right')
|
156
|
+
|| (newValue === 'bottom' || newValue === 'top') && (oldValue === 'left' || oldValue === 'right')
|
128
157
|
}
|
129
158
|
|
130
159
|
/**
|
@@ -134,29 +163,26 @@ class WindowPosition extends Base {
|
|
134
163
|
let win = window,
|
135
164
|
left, top;
|
136
165
|
|
137
|
-
switch
|
166
|
+
switch(data.dock) {
|
138
167
|
case 'bottom':
|
139
168
|
left = win.screenLeft;
|
140
169
|
top = win.outerHeight + win.screenTop - 50;
|
141
|
-
break
|
170
|
+
break
|
142
171
|
case 'left':
|
143
172
|
left = win.screenLeft - data.size;
|
144
173
|
top = win.screenTop + 28;
|
145
|
-
break
|
174
|
+
break
|
146
175
|
case 'right':
|
147
176
|
left = win.outerWidth + win.screenLeft;
|
148
177
|
top = win.screenTop + 28;
|
149
|
-
break
|
178
|
+
break
|
150
179
|
case 'top':
|
151
180
|
left = win.screenLeft;
|
152
181
|
top = win.screenTop - data.size + 78;
|
153
|
-
break
|
182
|
+
break
|
154
183
|
}
|
155
184
|
|
156
|
-
return {
|
157
|
-
left: left,
|
158
|
-
top : top
|
159
|
-
};
|
185
|
+
return {left, top}
|
160
186
|
}
|
161
187
|
|
162
188
|
/**
|
@@ -167,18 +193,18 @@ class WindowPosition extends Base {
|
|
167
193
|
|
168
194
|
if (!event.toElement) {
|
169
195
|
if (!me.intervalId) {
|
170
|
-
me.intervalId = setInterval(me.checkMovement.bind(me), me.intervalTime)
|
196
|
+
me.intervalId = setInterval(me.checkMovement.bind(me), me.intervalTime)
|
171
197
|
}
|
172
198
|
} else if (me.intervalId) {
|
173
199
|
clearInterval(me.intervalId);
|
174
|
-
me.intervalId = null
|
200
|
+
me.intervalId = null
|
175
201
|
}
|
176
202
|
}
|
177
203
|
|
178
204
|
/**
|
179
205
|
* @param {Object} event
|
180
206
|
*/
|
181
|
-
onResize(event) {
|
207
|
+
onResize(event) { console.log('onResize');
|
182
208
|
let me = this,
|
183
209
|
win = window,
|
184
210
|
height, width;
|
@@ -188,21 +214,23 @@ class WindowPosition extends Base {
|
|
188
214
|
case 'bottom':
|
189
215
|
case 'top':
|
190
216
|
width = win.outerWidth;
|
191
|
-
break
|
217
|
+
break
|
192
218
|
case 'left':
|
193
219
|
case 'right':
|
194
220
|
height = win.outerHeight - 28;
|
195
|
-
break
|
221
|
+
break
|
196
222
|
}
|
197
223
|
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
224
|
+
if (me.adjustWindowPositions) {
|
225
|
+
Neo.Main.windowResizeTo({
|
226
|
+
height,
|
227
|
+
width,
|
228
|
+
windowName: key
|
229
|
+
});
|
204
230
|
|
205
|
-
|
231
|
+
me.adjustPositions()
|
232
|
+
}
|
233
|
+
})
|
206
234
|
}
|
207
235
|
|
208
236
|
/**
|
@@ -212,7 +240,17 @@ class WindowPosition extends Base {
|
|
212
240
|
* @param {Number} data.size
|
213
241
|
*/
|
214
242
|
registerWindow(data) {
|
215
|
-
this.windows[data.name] = data
|
243
|
+
this.windows[data.name] = data
|
244
|
+
}
|
245
|
+
|
246
|
+
/**
|
247
|
+
* Set configs from within the app worker
|
248
|
+
* @param {Object} data
|
249
|
+
* @param {String} data.appName
|
250
|
+
*/
|
251
|
+
setConfigs(data) {
|
252
|
+
delete data.appName;
|
253
|
+
this.set(data)
|
216
254
|
}
|
217
255
|
|
218
256
|
/**
|
@@ -239,14 +277,14 @@ class WindowPosition extends Base {
|
|
239
277
|
height : dock === 'bottom' || dock === 'top' ? win.size : window.outerHeight - 28,
|
240
278
|
width : dock === 'left' || dock === 'right' ? win.size : window.outerWidth,
|
241
279
|
windowName: name
|
242
|
-
})
|
280
|
+
})
|
243
281
|
}
|
244
282
|
|
245
283
|
Neo.Main.windowMoveTo({
|
246
284
|
windowName: name,
|
247
285
|
x : position.left,
|
248
286
|
y : position.top
|
249
|
-
})
|
287
|
+
})
|
250
288
|
}
|
251
289
|
}
|
252
290
|
|
@@ -255,7 +293,7 @@ class WindowPosition extends Base {
|
|
255
293
|
* @param {String} data.name
|
256
294
|
*/
|
257
295
|
unregisterWindow(data) {
|
258
|
-
delete this.windows[data.name]
|
296
|
+
delete this.windows[data.name]
|
259
297
|
}
|
260
298
|
}
|
261
299
|
|
package/src/tab/Strip.mjs
CHANGED
@@ -44,44 +44,28 @@ class Strip extends Component {
|
|
44
44
|
* @protected
|
45
45
|
*/
|
46
46
|
afterSetUseActiveTabIndicator(value, oldValue) {
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
me.vdom.cn[0].removeDom = !value;
|
51
|
-
|
52
|
-
if (me.mounted && value) {
|
53
|
-
me.getActiveTabRectThenMove();
|
54
|
-
} else {
|
55
|
-
me.update();
|
56
|
-
}
|
57
|
-
}
|
47
|
+
this.vdom.cn[0].removeDom = !value;
|
48
|
+
this.update()
|
58
49
|
}
|
59
50
|
|
60
51
|
/**
|
52
|
+
* Gets the DomRect of the active tab, then moves the indicator
|
61
53
|
* @param {Object|null} opts
|
62
54
|
* @param {Number} opts.oldValue
|
63
55
|
* @param {Number} opts.value
|
64
|
-
* Gets the DomRect of the active tab, then moves the indicator
|
65
56
|
*/
|
66
57
|
getActiveTabRectThenMove(opts) {
|
67
58
|
let me = this,
|
68
|
-
ids = [],
|
59
|
+
ids = [me.id],
|
69
60
|
tabContainer = me.getTabContainer();
|
70
61
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
} else {
|
75
|
-
ids.push(tabContainer.getTabAtIndex(tabContainer.activeIndex));
|
76
|
-
}
|
77
|
-
|
78
|
-
ids = ids.map(e => e?.id).filter(Boolean);
|
62
|
+
// We do not need a movement, in case there is no oldValue
|
63
|
+
if (me.useActiveTabIndicator && me.vnode && Neo.isNumber(opts?.oldValue)) {
|
64
|
+
ids.push(tabContainer.getTabAtIndex(opts.value).id, tabContainer.getTabAtIndex(opts.oldValue).id);
|
79
65
|
|
80
|
-
|
81
|
-
me.
|
82
|
-
|
83
|
-
});
|
84
|
-
}
|
66
|
+
me.getDomRect(ids).then(data => {
|
67
|
+
me.moveActiveIndicator(data)
|
68
|
+
})
|
85
69
|
}
|
86
70
|
}
|
87
71
|
|
@@ -89,7 +73,7 @@ class Strip extends Component {
|
|
89
73
|
*
|
90
74
|
*/
|
91
75
|
getTabContainer() {
|
92
|
-
return Neo.getComponent(this.tabContainerId)
|
76
|
+
return Neo.getComponent(this.tabContainerId)
|
93
77
|
}
|
94
78
|
|
95
79
|
/**
|
@@ -105,8 +89,9 @@ class Strip extends Component {
|
|
105
89
|
* @param {Number} rects[0].y
|
106
90
|
*/
|
107
91
|
moveActiveIndicator(rects) {
|
108
|
-
let me
|
109
|
-
|
92
|
+
let me = this,
|
93
|
+
tabStripRect = rects.shift(),
|
94
|
+
rect = rects[1] || rects[0],
|
110
95
|
activeTabIndicator, tabContainer;
|
111
96
|
|
112
97
|
if (me.useActiveTabIndicator) {
|
@@ -118,20 +103,20 @@ class Strip extends Component {
|
|
118
103
|
case 'top':
|
119
104
|
activeTabIndicator.style = {
|
120
105
|
height: null,
|
121
|
-
left : `${rect.left}px`,
|
106
|
+
left : `${rect.left - tabStripRect.left}px`,
|
122
107
|
top : null,
|
123
108
|
width : `${rect.width}px`
|
124
109
|
};
|
125
|
-
break
|
110
|
+
break
|
126
111
|
case 'left':
|
127
112
|
case 'right':
|
128
113
|
activeTabIndicator.style = {
|
129
114
|
height: `${rect.height}px`,
|
130
115
|
left : null,
|
131
|
-
top : `${rect.top}px`,
|
116
|
+
top : `${rect.top - tabStripRect.top}px`,
|
132
117
|
width : null
|
133
118
|
};
|
134
|
-
break
|
119
|
+
break
|
135
120
|
}
|
136
121
|
|
137
122
|
// in case there is a dynamic change (oldValue), call this method again
|
@@ -140,7 +125,7 @@ class Strip extends Component {
|
|
140
125
|
me.update();
|
141
126
|
|
142
127
|
setTimeout(() => {
|
143
|
-
me.moveActiveIndicator([rects[0]])
|
128
|
+
me.moveActiveIndicator([tabStripRect, rects[0]])
|
144
129
|
}, 50)
|
145
130
|
} else {
|
146
131
|
activeTabIndicator.style.opacity = 1;
|
@@ -148,8 +133,8 @@ class Strip extends Component {
|
|
148
133
|
|
149
134
|
setTimeout(() => {
|
150
135
|
activeTabIndicator.style.opacity = 0;
|
151
|
-
me.update()
|
152
|
-
}, 300)
|
136
|
+
me.update()
|
137
|
+
}, 300)
|
153
138
|
}
|
154
139
|
}
|
155
140
|
}
|
@@ -71,26 +71,24 @@ class Button extends BaseButton {
|
|
71
71
|
* @protected
|
72
72
|
*/
|
73
73
|
afterSetUseActiveTabIndicator(value, oldValue) {
|
74
|
-
this.updateUseActiveTabIndicator()
|
74
|
+
this.updateUseActiveTabIndicator()
|
75
75
|
}
|
76
76
|
|
77
77
|
/**
|
78
78
|
* @param {Object} data
|
79
79
|
*/
|
80
80
|
showRipple(data) {
|
81
|
-
!this.pressed && super.showRipple(data)
|
81
|
+
!this.pressed && super.showRipple(data)
|
82
82
|
}
|
83
83
|
|
84
84
|
/**
|
85
85
|
* @param {Boolean} silent=false
|
86
86
|
*/
|
87
87
|
updateUseActiveTabIndicator(silent=false) {
|
88
|
-
let me
|
89
|
-
vdom = me.vdom;
|
90
|
-
|
91
|
-
vdom.cn[4].removeDom = !me.useActiveTabIndicator;
|
88
|
+
let me = this;
|
92
89
|
|
93
|
-
me[
|
90
|
+
me.vdom.cn[4].removeDom = !me.useActiveTabIndicator;
|
91
|
+
!silent && me.update()
|
94
92
|
}
|
95
93
|
}
|
96
94
|
|
package/src/worker/App.mjs
CHANGED
@@ -29,6 +29,7 @@ class App extends Base {
|
|
29
29
|
main: [
|
30
30
|
'createNeoInstance',
|
31
31
|
'destroyNeoInstance',
|
32
|
+
'fireEvent',
|
32
33
|
'setConfigs'
|
33
34
|
]
|
34
35
|
},
|
@@ -189,6 +190,30 @@ class App extends Base {
|
|
189
190
|
return false
|
190
191
|
}
|
191
192
|
|
193
|
+
/**
|
194
|
+
* Fires a custom event based on core.Observable on any app realm based Neo instance from main
|
195
|
+
* @param {Object} data
|
196
|
+
* @param {String} data.id
|
197
|
+
* @param {String} data.name
|
198
|
+
*/
|
199
|
+
fireEvent(data) {
|
200
|
+
let instance = Neo.get(data.id),
|
201
|
+
name;
|
202
|
+
|
203
|
+
if (instance) {
|
204
|
+
name = data.name;
|
205
|
+
|
206
|
+
delete data.id;
|
207
|
+
delete data.name;
|
208
|
+
|
209
|
+
instance.fire(name, data);
|
210
|
+
|
211
|
+
return true
|
212
|
+
}
|
213
|
+
|
214
|
+
return false
|
215
|
+
}
|
216
|
+
|
192
217
|
/**
|
193
218
|
* Only needed for the SharedWorkers context
|
194
219
|
* @param {String} eventName
|
@@ -196,7 +221,7 @@ class App extends Base {
|
|
196
221
|
*/
|
197
222
|
fireMainViewsEvent(eventName, data) {
|
198
223
|
this.ports.forEach(port => {
|
199
|
-
Neo.apps[port.appName].
|
224
|
+
Neo.apps[port.appName].mainView.fire(eventName, data)
|
200
225
|
})
|
201
226
|
}
|
202
227
|
|
package/src/worker/Base.mjs
CHANGED
@@ -112,10 +112,8 @@ class Base extends CoreBase {
|
|
112
112
|
onConnect(data) {
|
113
113
|
// short delay to ensure app VCs are in place
|
114
114
|
setTimeout(() => {
|
115
|
-
this.fire('connect', {
|
116
|
-
|
117
|
-
});
|
118
|
-
}, 10);
|
115
|
+
this.fire('connect', {appName: data.appName})
|
116
|
+
}, 10)
|
119
117
|
}
|
120
118
|
|
121
119
|
/**
|
@@ -129,9 +127,10 @@ class Base extends CoreBase {
|
|
129
127
|
me.isConnected = true;
|
130
128
|
|
131
129
|
me.ports.push({
|
132
|
-
appName: null,
|
130
|
+
appName : null,
|
133
131
|
id,
|
134
|
-
port
|
132
|
+
port : e.ports[0],
|
133
|
+
windowId: null
|
135
134
|
});
|
136
135
|
|
137
136
|
me.ports[me.ports.length - 1].port.onmessage = me.onMessage.bind(me);
|
@@ -141,7 +140,7 @@ class Base extends CoreBase {
|
|
141
140
|
|
142
141
|
me.sendMessage('main', {action: 'workerConstructed', port: id});
|
143
142
|
|
144
|
-
me.afterConnect()
|
143
|
+
me.afterConnect()
|
145
144
|
}
|
146
145
|
|
147
146
|
/**
|
@@ -154,7 +153,7 @@ class Base extends CoreBase {
|
|
154
153
|
|
155
154
|
if (!me.isSharedWorker) {
|
156
155
|
me.sendMessage('main', {action: 'workerConstructed'});
|
157
|
-
me.afterConnect()
|
156
|
+
me.afterConnect()
|
158
157
|
}
|
159
158
|
}
|
160
159
|
|
@@ -163,9 +162,7 @@ class Base extends CoreBase {
|
|
163
162
|
* @param {Object} data
|
164
163
|
*/
|
165
164
|
onDisconnect(data) {
|
166
|
-
this.fire('disconnect', {
|
167
|
-
appName: data.appName
|
168
|
-
});
|
165
|
+
this.fire('disconnect', {appName: data.appName})
|
169
166
|
}
|
170
167
|
|
171
168
|
/**
|
@@ -186,12 +183,12 @@ class Base extends CoreBase {
|
|
186
183
|
me['on' + Neo.capitalize(action)](data);
|
187
184
|
} else if (promise = action === 'reply' && me.promises[replyId]) {
|
188
185
|
if (data.reject) {
|
189
|
-
promise.reject(data.data)
|
186
|
+
promise.reject(data.data)
|
190
187
|
} else {
|
191
|
-
promise.resolve(data.data)
|
188
|
+
promise.resolve(data.data)
|
192
189
|
}
|
193
190
|
|
194
|
-
delete me.promises[replyId]
|
191
|
+
delete me.promises[replyId]
|
195
192
|
}
|
196
193
|
}
|
197
194
|
|
@@ -199,9 +196,7 @@ class Base extends CoreBase {
|
|
199
196
|
* @param {Object} msg
|
200
197
|
*/
|
201
198
|
onPing(msg) {
|
202
|
-
this.resolve(msg, {
|
203
|
-
originMsg: msg
|
204
|
-
});
|
199
|
+
this.resolve(msg, {originMsg: msg})
|
205
200
|
}
|
206
201
|
|
207
202
|
/**
|
@@ -217,8 +212,8 @@ class Base extends CoreBase {
|
|
217
212
|
for (port of me.ports) {
|
218
213
|
if (!port.appName) {
|
219
214
|
port.appName = appName;
|
220
|
-
me.onConnect({
|
221
|
-
break
|
215
|
+
me.onConnect({appName});
|
216
|
+
break
|
222
217
|
}
|
223
218
|
}
|
224
219
|
}
|
@@ -228,7 +223,19 @@ class Base extends CoreBase {
|
|
228
223
|
*/
|
229
224
|
onRegisterNeoConfig(msg) {
|
230
225
|
Neo.config = Neo.config || {};
|
231
|
-
|
226
|
+
|
227
|
+
let me = this,
|
228
|
+
{windowId} = msg.data,
|
229
|
+
port;
|
230
|
+
|
231
|
+
for (port of me.ports) {
|
232
|
+
if (!port.windowId) {
|
233
|
+
port.windowId = windowId;
|
234
|
+
break
|
235
|
+
}
|
236
|
+
}
|
237
|
+
|
238
|
+
Object.assign(Neo.config, msg.data)
|
232
239
|
}
|
233
240
|
|
234
241
|
/**
|
@@ -246,12 +253,12 @@ class Base extends CoreBase {
|
|
246
253
|
let message = me.sendMessage(dest, opts, transfer),
|
247
254
|
msgId = message.id;
|
248
255
|
|
249
|
-
me.promises[msgId] = { reject, resolve }
|
250
|
-
})
|
256
|
+
me.promises[msgId] = { reject, resolve }
|
257
|
+
})
|
251
258
|
}
|
252
259
|
|
253
260
|
/**
|
254
|
-
* @param {String} dest app, data, main or vdom (excluding the current worker)
|
261
|
+
* @param {String} dest app, canvas, data, main or vdom (excluding the current worker)
|
255
262
|
* @param {Object} opts configs for Neo.worker.Message
|
256
263
|
* @param {Array} [transfer] An optional array of Transferable objects to transfer ownership of.
|
257
264
|
* If the ownership of an object is transferred, it becomes unusable (neutered) in the context it was sent from
|
@@ -268,24 +275,29 @@ class Base extends CoreBase {
|
|
268
275
|
if (me.channelPorts[dest]) {
|
269
276
|
port = me.channelPorts[dest];
|
270
277
|
} else if (!me.isSharedWorker) {
|
271
|
-
port = globalThis
|
278
|
+
port = globalThis
|
272
279
|
} else {
|
273
280
|
if (opts.port) {
|
274
|
-
port = me.getPort({id: opts.port}).port
|
275
|
-
} else if (opts.
|
281
|
+
port = me.getPort({id: opts.port}).port
|
282
|
+
} else if (opts.windowId) {
|
283
|
+
portObject = me.getPort({windowId: opts.windowId});
|
284
|
+
port = portObject.port;
|
285
|
+
|
286
|
+
opts.port = portObject.id
|
287
|
+
} else if (opts.appName) {
|
276
288
|
portObject = me.getPort({appName: opts.appName});
|
277
289
|
port = portObject.port;
|
278
290
|
|
279
|
-
opts.port = portObject.id
|
291
|
+
opts.port = portObject.id
|
280
292
|
} else {
|
281
|
-
port = me.ports[0].port
|
293
|
+
port = me.ports[0].port
|
282
294
|
}
|
283
295
|
}
|
284
296
|
|
285
297
|
message = new Message(opts);
|
286
298
|
|
287
299
|
port.postMessage(message, transfer);
|
288
|
-
return message
|
300
|
+
return message
|
289
301
|
}
|
290
302
|
}
|
291
303
|
|
package/src/worker/Canvas.mjs
CHANGED
@@ -45,7 +45,7 @@ class Canvas extends Base {
|
|
45
45
|
|
46
46
|
me.sendMessage('app', {action: 'registerPort', transfer: port2}, [port2]);
|
47
47
|
|
48
|
-
me.channelPorts.app = port1
|
48
|
+
me.channelPorts.app = port1
|
49
49
|
}
|
50
50
|
|
51
51
|
/**
|
@@ -58,7 +58,7 @@ class Canvas extends Base {
|
|
58
58
|
action : 'reply',
|
59
59
|
replyId: data.id,
|
60
60
|
success: true
|
61
|
-
})
|
61
|
+
})
|
62
62
|
}
|
63
63
|
|
64
64
|
/**
|
@@ -75,8 +75,8 @@ class Canvas extends Base {
|
|
75
75
|
/* webpackMode: "lazy" */
|
76
76
|
`../../${path}/canvas.mjs`
|
77
77
|
).then(module => {
|
78
|
-
module.onStart()
|
79
|
-
})
|
78
|
+
module.onStart()
|
79
|
+
})
|
80
80
|
}
|
81
81
|
}
|
82
82
|
|
package/src/worker/Manager.mjs
CHANGED
@@ -6,7 +6,8 @@ import Observable from '../core/Observable.mjs';
|
|
6
6
|
import RemoteMethodAccess from './mixin/RemoteMethodAccess.mjs';
|
7
7
|
|
8
8
|
const NeoConfig = Neo.config,
|
9
|
-
devMode = NeoConfig.environment === 'development'
|
9
|
+
devMode = NeoConfig.environment === 'development',
|
10
|
+
windowId = new Date().getTime();
|
10
11
|
|
11
12
|
/**
|
12
13
|
* The worker manager lives inside the main thread and creates the App, Data & VDom worker.
|
@@ -207,8 +208,8 @@ class Manager extends Base {
|
|
207
208
|
|
208
209
|
me.sendMessage(key, {
|
209
210
|
action: 'registerNeoConfig',
|
210
|
-
data : config
|
211
|
-
})
|
211
|
+
data : {...config, windowId}
|
212
|
+
})
|
212
213
|
}
|
213
214
|
}
|
214
215
|
|