@netless/window-manager 0.4.35 → 0.4.38
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 +12 -0
- package/README.md +89 -63
- package/README.zh-cn.md +223 -0
- package/dist/index.cjs.js +3 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +14 -5
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +3 -3
- package/dist/index.umd.js.map +1 -1
- package/docs/app-context.md +73 -0
- package/docs/custom-max-bar.md +31 -0
- package/package.json +1 -1
- package/src/BoxManager.ts +12 -0
- package/src/View/MainView.ts +3 -4
package/docs/app-context.md
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
## AppContext
|
2
2
|
|
3
|
+
`AppContext` 是插件运行时传入的上下文
|
4
|
+
你可以通过此对象操作 APP 的 ui, 获取当前房间的状态, 以及订阅状态的变化
|
5
|
+
|
3
6
|
- [api](#api)
|
4
7
|
- [view](#view)
|
5
8
|
- [page](#page)
|
6
9
|
- [storage](#storage)
|
10
|
+
- [ui(box)](#box)
|
7
11
|
- [events](#events)
|
8
12
|
- [Advanced](#Advanced)
|
9
13
|
|
@@ -234,6 +238,52 @@ manager.addApp({
|
|
234
238
|
context.dispatchMagixEvent("click", { data: "data" });
|
235
239
|
```
|
236
240
|
|
241
|
+
<h2>UI (box)</h2>
|
242
|
+
|
243
|
+
box 是白板为所有应用默认创建的 UI
|
244
|
+
应用所有可以操作的 UI 部分都在 box 范围内
|
245
|
+
|
246
|
+
- **context.getBox()**
|
247
|
+
|
248
|
+
获取 box
|
249
|
+
返回类型: `ReadonlyTeleBox`
|
250
|
+
|
251
|
+
- **box.mountStyles()**
|
252
|
+
|
253
|
+
挂载样式到 `box`
|
254
|
+
参数: `string | HTMLStyleElement`
|
255
|
+
|
256
|
+
```js
|
257
|
+
const box = context.getBox();
|
258
|
+
box.mountStyles(`
|
259
|
+
.app-span {
|
260
|
+
color: red;
|
261
|
+
}
|
262
|
+
`)
|
263
|
+
```
|
264
|
+
|
265
|
+
- **box.mountContent()**
|
266
|
+
|
267
|
+
挂载元素到 `box`
|
268
|
+
参数: `HTMLElement`
|
269
|
+
|
270
|
+
```js
|
271
|
+
const box = context.getBox();
|
272
|
+
const content = document.createElement("div");
|
273
|
+
box.mountContent(context);
|
274
|
+
```
|
275
|
+
|
276
|
+
- **box.mountFooter()**
|
277
|
+
|
278
|
+
挂载元素到 `box` 的 `footer`
|
279
|
+
参数: `HTMLElement`
|
280
|
+
|
281
|
+
```js
|
282
|
+
const box = context.getBox();
|
283
|
+
const footer = document.createElement("div");
|
284
|
+
box.mountFooter(context);
|
285
|
+
```
|
286
|
+
|
237
287
|
<h2 id="events">events</h2>
|
238
288
|
|
239
289
|
- **destroy**
|
@@ -284,6 +334,29 @@ manager.addApp({
|
|
284
334
|
// { index: 0, length: 1 }
|
285
335
|
});
|
286
336
|
```
|
337
|
+
- **roomStageChange**
|
338
|
+
|
339
|
+
房间的状态变化时触发\
|
340
|
+
比如当教具切换时
|
341
|
+
|
342
|
+
```js
|
343
|
+
context.emitter.on("roomStageChange", stage => {
|
344
|
+
if (state.memberState) {
|
345
|
+
console.log("appliance change to", state.memberState.currentApplianceName);
|
346
|
+
}
|
347
|
+
});
|
348
|
+
```
|
349
|
+
|
350
|
+
或者是当前房间人数变化时
|
351
|
+
|
352
|
+
```js
|
353
|
+
context.emitter.on("roomStageChange", stage => {
|
354
|
+
if (state.roomMembers) {
|
355
|
+
console.log("current room members change", state.roomMembers);
|
356
|
+
}
|
357
|
+
});
|
358
|
+
```
|
359
|
+
详细状态的介绍请参考 https://developer.netless.link/javascript-zh/home/business-state-management
|
287
360
|
|
288
361
|
<h2 id="Advanced">Advanced</h2>
|
289
362
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
## 如何自定义最大化 `titleBar`
|
2
|
+
|
3
|
+
获取并订阅所有的 `box`
|
4
|
+
|
5
|
+
```js
|
6
|
+
manager.boxManager.teleboxManager.boxes$.subscribe(boxes => {
|
7
|
+
// boxes 为所有的窗口,当窗口添加和删除时都会触发
|
8
|
+
})
|
9
|
+
```
|
10
|
+
|
11
|
+
切换 `box` 的 `focus`
|
12
|
+
```js
|
13
|
+
manager.boxManager.teleBoxManager.focusBox(box)
|
14
|
+
```
|
15
|
+
|
16
|
+
关闭某个 `box`
|
17
|
+
```js
|
18
|
+
manager.boxManager.teleBoxManager.remove(box)
|
19
|
+
```
|
20
|
+
|
21
|
+
切换最大化状态
|
22
|
+
```js
|
23
|
+
manager.boxManager.teleBoxManager.setMaximized(false)
|
24
|
+
manager.boxManager.teleBoxManager.setMaximized(true)
|
25
|
+
```
|
26
|
+
|
27
|
+
切换最小化状态
|
28
|
+
```js
|
29
|
+
manager.boxManager.teleBoxManager.setMinimized(true)
|
30
|
+
manager.boxManager.teleBoxManager.setMaximized(false)
|
31
|
+
```
|
package/package.json
CHANGED
package/src/BoxManager.ts
CHANGED
@@ -108,6 +108,18 @@ export class BoxManager {
|
|
108
108
|
callbacks.emit("prefersColorSchemeChange", colorScheme);
|
109
109
|
});
|
110
110
|
|
111
|
+
// ppt 在最小化后刷新恢复正常大小,拿不到正确的宽高,需要手动触发一下窗口的 resize
|
112
|
+
this.teleBoxManager._minimized$.reaction(minimized => {
|
113
|
+
if (!minimized) {
|
114
|
+
setTimeout(() => {
|
115
|
+
const offset = 0.001 * (Math.random() > 0.5 ? 1 : -1);
|
116
|
+
this.teleBoxManager.boxes.forEach(box => {
|
117
|
+
box.resize(box.intrinsicWidth + offset, box.intrinsicHeight + offset, true);
|
118
|
+
});
|
119
|
+
}, 400);
|
120
|
+
}
|
121
|
+
});
|
122
|
+
|
111
123
|
// events.on 的值则会根据 skipUpdate 来决定是否触发回调
|
112
124
|
this.teleBoxManager.events.on("minimized", minimized => {
|
113
125
|
this.context.safeSetAttributes({ minimized });
|
package/src/View/MainView.ts
CHANGED
@@ -39,7 +39,9 @@ export class MainViewProxy {
|
|
39
39
|
});
|
40
40
|
this.sideEffectManager.add(() => {
|
41
41
|
return emitter.on("startReconnect", () => {
|
42
|
-
this.
|
42
|
+
if (!this.didRelease) {
|
43
|
+
this.mainView.release();
|
44
|
+
}
|
43
45
|
});
|
44
46
|
});
|
45
47
|
}
|
@@ -119,9 +121,6 @@ export class MainViewProxy {
|
|
119
121
|
public onUpdateContainerSizeRatio = () => {
|
120
122
|
const size = this.store.getMainViewSize();
|
121
123
|
this.sizeChangeHandler(size);
|
122
|
-
if (size.id === this.manager.uid) {
|
123
|
-
this.setCameraAndSize();
|
124
|
-
}
|
125
124
|
}
|
126
125
|
|
127
126
|
public get view(): View {
|