tcic-electron-sdk 1.5.245 → 1.5.248
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/dist/boardRenderer.bundle.js +1 -402
- package/dist/cameraRenderer.bundle.js +1 -112
- package/dist/config.json +3 -3
- package/dist/main.bundle.js +1 -3663
- package/dist/mainRenderer.bundle.js +1 -459
- package/dist/resource.zip +0 -0
- package/dist/videoRenderer.bundle.js +1 -142
- package/locales/en.json +32 -0
- package/locales/jp.json +32 -0
- package/locales/zh.json +30 -0
- package/package.json +1 -1
|
@@ -1,402 +1 @@
|
|
|
1
|
-
/******/ (() => { // webpackBootstrap
|
|
2
|
-
/******/ "use strict";
|
|
3
|
-
/******/ var __webpack_modules__ = ({
|
|
4
|
-
|
|
5
|
-
/***/ "./src/boardRenderer.ts":
|
|
6
|
-
/*!******************************!*\
|
|
7
|
-
!*** ./src/boardRenderer.ts ***!
|
|
8
|
-
\******************************/
|
|
9
|
-
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
// This file is required by the board.html file and will
|
|
13
|
-
// be executed in the renderer process for that window.
|
|
14
|
-
// No Node.js APIs are available in this process because
|
|
15
|
-
// `nodeIntegration` is turned off. Use `preload.js` to
|
|
16
|
-
// selectively enable features needed in the rendering
|
|
17
|
-
// process.
|
|
18
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
19
|
-
if (k2 === undefined) k2 = k;
|
|
20
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
21
|
-
}) : (function(o, m, k, k2) {
|
|
22
|
-
if (k2 === undefined) k2 = k;
|
|
23
|
-
o[k2] = m[k];
|
|
24
|
-
}));
|
|
25
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
-
}) : function(o, v) {
|
|
28
|
-
o["default"] = v;
|
|
29
|
-
});
|
|
30
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
31
|
-
if (mod && mod.__esModule) return mod;
|
|
32
|
-
var result = {};
|
|
33
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
34
|
-
__setModuleDefault(result, mod);
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
38
|
-
const electron_1 = __webpack_require__(/*! electron */ "electron");
|
|
39
|
-
const rendererUtil = __importStar(__webpack_require__(/*! ./rendererUtil */ "./src/rendererUtil.ts"));
|
|
40
|
-
// import { tcicSdkVersion } from './sentry'; // 用于初始化异常捕获,切勿删除
|
|
41
|
-
// console.log('version', tcicSdkVersion);
|
|
42
|
-
class BoardRender {
|
|
43
|
-
static setVisibleRect(bounds) {
|
|
44
|
-
if (bounds) {
|
|
45
|
-
if (BoardRender.screenHeight === 0 || BoardRender.screenWidth === 0) {
|
|
46
|
-
BoardRender.screenHeight = screen.height;
|
|
47
|
-
BoardRender.screenWidth = screen.width;
|
|
48
|
-
BoardRender.boardElement.style.width = `${screen.width}px`;
|
|
49
|
-
BoardRender.boardElement.style.height = `${screen.height}px`;
|
|
50
|
-
}
|
|
51
|
-
BoardRender.boardWrapElement.style.width = `${bounds.width}px`;
|
|
52
|
-
BoardRender.boardWrapElement.style.height = `${bounds.height}px`;
|
|
53
|
-
BoardRender.boardWrapElement.style.left = `${bounds.x}px`;
|
|
54
|
-
BoardRender.boardWrapElement.style.top = `${bounds.y}px`;
|
|
55
|
-
BoardRender.boardWrapElement.style.position = 'absolute';
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
BoardRender.boardWrapElement.removeAttribute('style');
|
|
59
|
-
BoardRender.boardElement.removeAttribute('style');
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
;
|
|
63
|
-
static updateCursor() {
|
|
64
|
-
if (!BoardRender.teduBoard)
|
|
65
|
-
return;
|
|
66
|
-
const toolType = BoardRender.teduBoard.getToolType();
|
|
67
|
-
const brushColor = BoardRender.teduBoard.getBrushColor();
|
|
68
|
-
if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_PEN) {
|
|
69
|
-
const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?><svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>mouse_pen</title>
|
|
70
|
-
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
71
|
-
<g id="光标及状态栏状态" transform="translate(-89.000000, -268.000000)">
|
|
72
|
-
<g id="mouse_pen" transform="translate(89.000000, 268.000000)">
|
|
73
|
-
<rect id="矩形" x="0" y="0" width="40" height="40"></rect>
|
|
74
|
-
<g id="编组-13" transform="translate(8.000000, 3.000000)" fill="${brushColor}" stroke="#182E25">
|
|
75
|
-
<path d="M0.756984031,32.1383216 L3.68816089e-13,26.5292023 L17.8941729,7.81597009e-14 L24.5264735,4.47354323 L6.63230058,31.0027455 L0.756984031,32.1383216 Z" id="形状结合"></path>
|
|
76
|
-
</g>
|
|
77
|
-
</g>
|
|
78
|
-
</g>
|
|
79
|
-
</g>
|
|
80
|
-
</svg>`;
|
|
81
|
-
const cursorBase64 = `data:image/svg+xml;charset=utf-8,${escape(cursorSvg)}`;
|
|
82
|
-
BoardRender.teduBoard.setCursorIcon(toolType, {
|
|
83
|
-
cursor: 'url',
|
|
84
|
-
url: cursorBase64,
|
|
85
|
-
offsetX: 10,
|
|
86
|
-
offsetY: 40,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LINE) {
|
|
90
|
-
const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
|
|
91
|
-
<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
92
|
-
<title>mouse_line</title>
|
|
93
|
-
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
94
|
-
<g id="光标及状态栏状态" transform="translate(-785.000000, -272.000000)">
|
|
95
|
-
<g id="mouse_line" transform="translate(785.000000, 272.000000)">
|
|
96
|
-
<g id="编组-3">
|
|
97
|
-
<rect id="矩形" x="0" y="0" width="40" height="40"></rect>
|
|
98
|
-
<g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
|
|
99
|
-
<path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
|
|
100
|
-
</g>
|
|
101
|
-
</g>
|
|
102
|
-
<line x1="28.5" y1="7.5" x2="36.5" y2="7.5" id="直线-6" stroke="${brushColor}" stroke-width="2" stroke-linecap="square"></line>
|
|
103
|
-
</g>
|
|
104
|
-
</g>
|
|
105
|
-
</g>
|
|
106
|
-
</svg>`;
|
|
107
|
-
const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
|
|
108
|
-
BoardRender.teduBoard.setCursorIcon(toolType, {
|
|
109
|
-
cursor: 'url',
|
|
110
|
-
url: cursorBase64,
|
|
111
|
-
offsetX: 20,
|
|
112
|
-
offsetY: 20,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_RECT) {
|
|
116
|
-
const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
|
|
117
|
-
<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
118
|
-
<title>mouse_rectangle</title>
|
|
119
|
-
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
120
|
-
<g id="光标及状态栏状态" transform="translate(-551.000000, -272.000000)">
|
|
121
|
-
<g id="mouse_rectangle" transform="translate(551.000000, 272.000000)">
|
|
122
|
-
<g id="编组-3">
|
|
123
|
-
<rect id="矩形" x="0" y="0" width="40" height="40"></rect>
|
|
124
|
-
<g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
|
|
125
|
-
<path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
|
|
126
|
-
</g>
|
|
127
|
-
</g>
|
|
128
|
-
<rect id="矩形" stroke="${brushColor}" stroke-width="2" x="28" y="3" width="8" height="8"></rect>
|
|
129
|
-
</g>
|
|
130
|
-
</g>
|
|
131
|
-
</g>
|
|
132
|
-
</svg>`;
|
|
133
|
-
const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
|
|
134
|
-
BoardRender.teduBoard.setCursorIcon(toolType, {
|
|
135
|
-
cursor: 'url',
|
|
136
|
-
url: cursorBase64,
|
|
137
|
-
offsetX: 20,
|
|
138
|
-
offsetY: 20,
|
|
139
|
-
});
|
|
140
|
-
// 矩形也设置一下(当按住shift键的时候,工具会切换为矩形)
|
|
141
|
-
BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_SQUARE, {
|
|
142
|
-
cursor: 'url',
|
|
143
|
-
url: cursorBase64,
|
|
144
|
-
offsetX: 20,
|
|
145
|
-
offsetY: 20,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_OVAL) {
|
|
149
|
-
const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
|
|
150
|
-
<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
151
|
-
<title>mouse_circle</title>
|
|
152
|
-
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
153
|
-
<g id="光标及状态栏状态" transform="translate(-323.000000, -272.000000)">
|
|
154
|
-
<g id="mouse_circle" transform="translate(323.000000, 272.000000)">
|
|
155
|
-
<g id="编组-3">
|
|
156
|
-
<rect id="矩形" x="0" y="0" width="40" height="40"></rect>
|
|
157
|
-
<g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
|
|
158
|
-
<path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
|
|
159
|
-
</g>
|
|
160
|
-
</g>
|
|
161
|
-
<circle id="椭圆形" stroke="${brushColor}" stroke-width="2" cx="32" cy="7" r="4"></circle>
|
|
162
|
-
</g>
|
|
163
|
-
</g>
|
|
164
|
-
</g>
|
|
165
|
-
</svg>`;
|
|
166
|
-
const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
|
|
167
|
-
BoardRender.teduBoard.setCursorIcon(toolType, {
|
|
168
|
-
cursor: 'url',
|
|
169
|
-
url: cursorBase64,
|
|
170
|
-
offsetX: 20,
|
|
171
|
-
offsetY: 20,
|
|
172
|
-
});
|
|
173
|
-
// 正圆也设置一下(当按住shift键的时候,工具会切换为正圆)
|
|
174
|
-
BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_CIRCLE, {
|
|
175
|
-
cursor: 'url',
|
|
176
|
-
url: cursorBase64,
|
|
177
|
-
offsetX: 20,
|
|
178
|
-
offsetY: 20,
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
BoardRender.teduBoard.setToolType(toolType); // 马上再更新一下工具,保证光标生效(白板bug)
|
|
182
|
-
}
|
|
183
|
-
;
|
|
184
|
-
static callBoardMethod(arg) {
|
|
185
|
-
console.log('callBoardMethod', BoardRender.teduBoard, JSON.stringify(arg));
|
|
186
|
-
if (BoardRender.teduBoard) {
|
|
187
|
-
// eslint-disable-next-line prefer-spread
|
|
188
|
-
BoardRender.teduBoard[arg.method].apply(BoardRender.teduBoard, arg.params);
|
|
189
|
-
BoardRender.updateCursor();
|
|
190
|
-
// if (arg.method === 'setToolType') {
|
|
191
|
-
// const toolType = arg.params[0];
|
|
192
|
-
// // 系统光标对阴影滤镜支持不好,激光笔渐变部分会出现黑色阴影,目前先将激光笔用模拟的方式来实现,其他工具继续使用系统光标(同时在touch设备下系统光标也不会出现)
|
|
193
|
-
// if (toolType === BoardRender.teduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LASER) {
|
|
194
|
-
// BoardRender.teduBoard.setSystemCursorEnable(false);
|
|
195
|
-
// } else {
|
|
196
|
-
// BoardRender.teduBoard.setSystemCursorEnable(true);
|
|
197
|
-
// }
|
|
198
|
-
// }
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
;
|
|
202
|
-
}
|
|
203
|
-
BoardRender.TEduBoard = window.TEduBoard;
|
|
204
|
-
BoardRender.teduBoard = null;
|
|
205
|
-
BoardRender.boardElement = null;
|
|
206
|
-
BoardRender.boardWrapElement = null;
|
|
207
|
-
BoardRender.screenWidth = 0;
|
|
208
|
-
BoardRender.screenHeight = 0;
|
|
209
|
-
BoardRender.callMethodCache = []; // 缓存白板初始化完成前的指令
|
|
210
|
-
BoardRender.isBoardReady = false;
|
|
211
|
-
;
|
|
212
|
-
window.BoardRender = BoardRender;
|
|
213
|
-
electron_1.ipcRenderer.on('initBoard', (event, params) => {
|
|
214
|
-
const BoardRender = window.BoardRender;
|
|
215
|
-
if (BoardRender.teduBoard) {
|
|
216
|
-
return;
|
|
217
|
-
}
|
|
218
|
-
const initParams = {
|
|
219
|
-
id: 'board',
|
|
220
|
-
sdkAppId: params.sdkAppId,
|
|
221
|
-
classId: params.roomId,
|
|
222
|
-
userId: params.userId,
|
|
223
|
-
userSig: params.userSig,
|
|
224
|
-
ratio: `${screen.width}:${screen.height}`,
|
|
225
|
-
systemCursorEnable: false,
|
|
226
|
-
enableLocalMode: true,
|
|
227
|
-
styleConfig: {
|
|
228
|
-
globalBackgroundColor: 'rgba(0, 0, 0, 0.01)',
|
|
229
|
-
textColor: '#ff0000',
|
|
230
|
-
selectBoxColor: '#727272',
|
|
231
|
-
cursorSize: [40, 40],
|
|
232
|
-
brushThin: 50,
|
|
233
|
-
selectAnchorColor: '#006eff',
|
|
234
|
-
},
|
|
235
|
-
};
|
|
236
|
-
BoardRender.teduBoard = new BoardRender.TEduBoard(initParams);
|
|
237
|
-
// 监听白板错误事件
|
|
238
|
-
BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_ERROR, (code, msg) => {
|
|
239
|
-
});
|
|
240
|
-
// 监听白板告警事件
|
|
241
|
-
BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_WARNING, (code, msg) => {
|
|
242
|
-
});
|
|
243
|
-
BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_HISTROYDATA_SYNCCOMPLETED, () => {
|
|
244
|
-
// 默认使用鼠标工具
|
|
245
|
-
BoardRender.teduBoard.setToolType(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_MOUSE);
|
|
246
|
-
// 启用笔锋特性
|
|
247
|
-
BoardRender.teduBoard.setHandwritingEnable(true);
|
|
248
|
-
// 设置橡皮擦自定义图标
|
|
249
|
-
BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_ERASER, {
|
|
250
|
-
cursor: 'url',
|
|
251
|
-
url: 'https://res.qcloudtiw.com/board/icons/xkt/eraser.svg',
|
|
252
|
-
offsetX: 7,
|
|
253
|
-
offsetY: 25,
|
|
254
|
-
});
|
|
255
|
-
BoardRender.updateCursor();
|
|
256
|
-
if (BoardRender.callMethodCache.length === 0) {
|
|
257
|
-
// 没有指令,则默认设置未鼠标工具
|
|
258
|
-
BoardRender.teduBoard.setToolType(0);
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
// 执行缓存指令
|
|
262
|
-
BoardRender.callMethodCache.forEach((arg) => {
|
|
263
|
-
BoardRender.callBoardMethod(arg);
|
|
264
|
-
});
|
|
265
|
-
BoardRender.callMethodCache = [];
|
|
266
|
-
}
|
|
267
|
-
BoardRender.isBoardReady = true;
|
|
268
|
-
});
|
|
269
|
-
// 监听事件,image为截图内容的base64数据
|
|
270
|
-
BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_SNAPSHOT, (data) => {
|
|
271
|
-
electron_1.ipcRenderer.send('onScreenShareSnapshot', data);
|
|
272
|
-
});
|
|
273
|
-
BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_OPERATE_CANREDO_STATUS_CHANGED, (status) => {
|
|
274
|
-
electron_1.ipcRenderer.send('onBoardCanRedoChange', status);
|
|
275
|
-
});
|
|
276
|
-
BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_OPERATE_CANUNDO_STATUS_CHANGED, (status) => {
|
|
277
|
-
electron_1.ipcRenderer.send('onBoardCanUndoChange', status);
|
|
278
|
-
});
|
|
279
|
-
BoardRender.setVisibleRect(params.shareWindowBounds);
|
|
280
|
-
});
|
|
281
|
-
electron_1.ipcRenderer.on('onShareWindowBoundsChanged', (event, bounds) => {
|
|
282
|
-
const BoardRender = window.BoardRender;
|
|
283
|
-
BoardRender.setVisibleRect(bounds);
|
|
284
|
-
});
|
|
285
|
-
electron_1.ipcRenderer.on('callMethod', (event, arg) => {
|
|
286
|
-
const BoardRender = window.BoardRender;
|
|
287
|
-
if (!BoardRender.isBoardReady) { // 白板为初始化完成,缓存白板指令
|
|
288
|
-
BoardRender.callMethodCache.push(arg);
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
BoardRender.callBoardMethod(arg);
|
|
292
|
-
});
|
|
293
|
-
const events = ['touchstart', 'touchend'];
|
|
294
|
-
electron_1.ipcRenderer.on('enableWatchMouseMoveEvent', (event, enabled) => {
|
|
295
|
-
rendererUtil.watchEvents(document, events, enabled);
|
|
296
|
-
});
|
|
297
|
-
window.onload = () => {
|
|
298
|
-
BoardRender.boardWrapElement = document.getElementById('board-wrap');
|
|
299
|
-
BoardRender.boardElement = document.getElementById('board');
|
|
300
|
-
};
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
/***/ }),
|
|
304
|
-
|
|
305
|
-
/***/ "./src/rendererUtil.ts":
|
|
306
|
-
/*!*****************************!*\
|
|
307
|
-
!*** ./src/rendererUtil.ts ***!
|
|
308
|
-
\*****************************/
|
|
309
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
313
|
-
exports.watchEvents = void 0;
|
|
314
|
-
const electron_1 = __webpack_require__(/*! electron */ "electron");
|
|
315
|
-
function createMouseMoveProcessor() {
|
|
316
|
-
const lastX = 0;
|
|
317
|
-
const lastY = 0;
|
|
318
|
-
return (e) => {
|
|
319
|
-
let x;
|
|
320
|
-
let y;
|
|
321
|
-
if (e instanceof TouchEvent) { // 触摸事件
|
|
322
|
-
x = Math.round(e.changedTouches[0].screenX);
|
|
323
|
-
y = Math.round(e.changedTouches[0].screenY);
|
|
324
|
-
}
|
|
325
|
-
else { // 鼠标事件
|
|
326
|
-
x = e.screenX;
|
|
327
|
-
y = e.screenY;
|
|
328
|
-
}
|
|
329
|
-
if (x !== lastX || y !== lastY) { // 只有位置发生变化时才发送消息,减少资源消耗
|
|
330
|
-
const args = { type: e.type, x, y };
|
|
331
|
-
electron_1.ipcRenderer.send('onMouseEvent', args);
|
|
332
|
-
console.log('onMouseEvent', args);
|
|
333
|
-
}
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
const eventProcessor = createMouseMoveProcessor();
|
|
337
|
-
function watchEvents(target, events, enabled) {
|
|
338
|
-
events.forEach((event) => {
|
|
339
|
-
if (enabled) {
|
|
340
|
-
target.addEventListener(event, eventProcessor, {
|
|
341
|
-
capture: true,
|
|
342
|
-
passive: false,
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
else {
|
|
346
|
-
target.removeEventListener(event, eventProcessor, {
|
|
347
|
-
capture: true,
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
});
|
|
351
|
-
}
|
|
352
|
-
exports.watchEvents = watchEvents;
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
/***/ }),
|
|
356
|
-
|
|
357
|
-
/***/ "electron":
|
|
358
|
-
/*!***************************!*\
|
|
359
|
-
!*** external "electron" ***!
|
|
360
|
-
\***************************/
|
|
361
|
-
/***/ ((module) => {
|
|
362
|
-
|
|
363
|
-
module.exports = require("electron");
|
|
364
|
-
|
|
365
|
-
/***/ })
|
|
366
|
-
|
|
367
|
-
/******/ });
|
|
368
|
-
/************************************************************************/
|
|
369
|
-
/******/ // The module cache
|
|
370
|
-
/******/ var __webpack_module_cache__ = {};
|
|
371
|
-
/******/
|
|
372
|
-
/******/ // The require function
|
|
373
|
-
/******/ function __webpack_require__(moduleId) {
|
|
374
|
-
/******/ // Check if module is in cache
|
|
375
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
376
|
-
/******/ if (cachedModule !== undefined) {
|
|
377
|
-
/******/ return cachedModule.exports;
|
|
378
|
-
/******/ }
|
|
379
|
-
/******/ // Create a new module (and put it into the cache)
|
|
380
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
381
|
-
/******/ // no module.id needed
|
|
382
|
-
/******/ // no module.loaded needed
|
|
383
|
-
/******/ exports: {}
|
|
384
|
-
/******/ };
|
|
385
|
-
/******/
|
|
386
|
-
/******/ // Execute the module function
|
|
387
|
-
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
388
|
-
/******/
|
|
389
|
-
/******/ // Return the exports of the module
|
|
390
|
-
/******/ return module.exports;
|
|
391
|
-
/******/ }
|
|
392
|
-
/******/
|
|
393
|
-
/************************************************************************/
|
|
394
|
-
/******/
|
|
395
|
-
/******/ // startup
|
|
396
|
-
/******/ // Load entry module and return exports
|
|
397
|
-
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
398
|
-
/******/ var __webpack_exports__ = __webpack_require__("./src/boardRenderer.ts");
|
|
399
|
-
/******/
|
|
400
|
-
/******/ })()
|
|
401
|
-
;
|
|
402
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay8uL3NyYy9ib2FyZFJlbmRlcmVyLnRzIiwid2VicGFjazovL3RjaWMtZWxlY3Ryb24tc2RrLy4vc3JjL3JlbmRlcmVyVXRpbC50cyIsIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay9leHRlcm5hbCBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsd0RBQXdEO0FBQ3hELHVEQUF1RDtBQUN2RCx3REFBd0Q7QUFDeEQsdURBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFWCxtRUFBdUM7QUFDdkMsc0dBQStDO0FBQy9DLCtEQUErRDtBQUUvRCwwQ0FBMEM7QUFFMUMsTUFBTSxXQUFXO0lBU1IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFXO1FBQ3RDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxXQUFXLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRTtnQkFDbkUsV0FBVyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUN6QyxXQUFXLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQztnQkFDM0QsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDO2FBQzlEO1lBQ0QsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxN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bkM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztBQUVsRCxTQUFnQixXQUFXLENBQUMsTUFBbUIsRUFBRSxNQUFnQixFQUFFLE9BQWdCO0lBQ2pGLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN2QixJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFO2dCQUM3QyxPQUFPLEVBQUUsSUFBSTtnQkFDYixPQUFPLEVBQUUsS0FBSzthQUNmLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDaEQsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7U0FDSjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWJELGtDQWFDOzs7Ozs7Ozs7OztBQ3JDRCxxQzs7Ozs7O1VDQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7OztVQ3RCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJib2FyZFJlbmRlcmVyLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBieSB0aGUgYm9hcmQuaHRtbCBmaWxlIGFuZCB3aWxsXG4vLyBiZSBleGVjdXRlZCBpbiB0aGUgcmVuZGVyZXIgcHJvY2VzcyBmb3IgdGhhdCB3aW5kb3cuXG4vLyBObyBOb2RlLmpzIEFQSXMgYXJlIGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MgYmVjYXVzZVxuLy8gYG5vZGVJbnRlZ3JhdGlvbmAgaXMgdHVybmVkIG9mZi4gVXNlIGBwcmVsb2FkLmpzYCB0b1xuLy8gc2VsZWN0aXZlbHkgZW5hYmxlIGZlYXR1cmVzIG5lZWRlZCBpbiB0aGUgcmVuZGVyaW5nXG4vLyBwcm9jZXNzLlxuXG5pbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcbmltcG9ydCAqIGFzIHJlbmRlcmVyVXRpbCBmcm9tICcuL3JlbmRlcmVyVXRpbCc7XG4vLyBpbXBvcnQgeyB0Y2ljU2RrVmVyc2lvbiB9IGZyb20gJy4vc2VudHJ5JzsgLy8g55So5LqO5Yid5aeL5YyW5byC5bi45o2V6I6377yM5YiH5Yu/5Yig6ZmkXG5cbi8vIGNvbnNvbGUubG9nKCd2ZXJzaW9uJywgdGNpY1Nka1ZlcnNpb24pO1xuXG5jbGFzcyBCb2FyZFJlbmRlciB7XG4gIHB1YmxpYyBzdGF0aWMgVEVkdUJvYXJkOiBhbnkgPSAod2luZG93IGFzIGFueSkuVEVkdUJvYXJkO1xuICBwdWJsaWMgc3RhdGljIHRlZHVCb2FyZDogYW55ID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBib2FyZEVsZW1lbnQ6IGFueSA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWMgYm9hcmRXcmFwRWxlbWVudDogYW55ID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBzY3JlZW5XaWR0aCA9IDA7XG4gIHB1YmxpYyBzdGF0aWMgc2NyZWVuSGVpZ2h0ID0gMDtcbiAgcHVibGljIHN0YXRpYyBjYWxsTWV0aG9kQ2FjaGU6IGFueSA9IFtdOyAvLyDnvJPlrZjnmb3mnb/liJ3lp4vljJblrozmiJDliY3nmoTmjIfku6RcbiAgcHVibGljIHN0YXRpYyBpc0JvYXJkUmVhZHkgPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBzZXRWaXNpYmxlUmVjdChib3VuZHM6IGFueSkge1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGlmIChCb2FyZFJlbmRlci5zY3JlZW5IZWlnaHQgPT09IDAgfHwgQm9hcmRSZW5kZXIuc2NyZWVuV2lkdGggPT09IDApIHtcbiAgICAgICAgQm9hcmRSZW5kZXIuc2NyZWVuSGVpZ2h0ID0gc2NyZWVuLmhlaWdodDtcbiAgICAgICAgQm9hcmRSZW5kZXIuc2NyZWVuV2lkdGggPSBzY3JlZW4ud2lkdGg7XG4gICAgICAgIEJvYXJkUmVuZGVyLmJvYXJkRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3NjcmVlbi53aWR0aH1weGA7XG4gICAgICAgIEJvYXJkUmVuZGVyLmJvYXJkRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtzY3JlZW4uaGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZHMud2lkdGh9cHhgO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRXcmFwRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtib3VuZHMuaGVpZ2h0fXB4YDtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kcy54fXB4YDtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUudG9wID0gYCR7Ym91bmRzLnl9cHhgO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRXcmFwRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICB9XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlQ3Vyc29yKCkge1xuICAgIGlmICghQm9hcmRSZW5kZXIudGVkdUJvYXJkKSByZXR1cm47XG4gICAgY29uc3QgdG9vbFR5cGUgPSBCb2FyZFJlbmRlci50ZWR1Qm9hcmQuZ2V0VG9vbFR5cGUoKTtcbiAgICBjb25zdCBicnVzaENvbG9yID0gQm9hcmRSZW5kZXIudGVkdUJvYXJkLmdldEJydXNoQ29sb3IoKTtcbiAgICBpZiAodG9vbFR5cGUgPT09IEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9QRU4pIHtcbiAgICAgIGNvbnN0IGN1cnNvclN2ZyA9IGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz48c3ZnIHdpZHRoPVwiNDBweFwiIGhlaWdodD1cIjQwcHhcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj48dGl0bGU+bW91c2VfcGVuPC90aXRsZT5cbiAgICAgICAgICAgICAgPGcgaWQ9XCLpobXpnaItMVwiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtODkuMDAwMDAwLCAtMjY4LjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIm1vdXNlX3BlblwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg4OS4wMDAwMDAsIDI2OC4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPVwi55+p5b2iXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4QtMTNcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOC4wMDAwMDAsIDMuMDAwMDAwKVwiIGZpbGw9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlPVwiIzE4MkUyNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wLjc1Njk4NDAzMSwzMi4xMzgzMjE2IEwzLjY4ODE2MDg5ZS0xMywyNi41MjkyMDIzIEwxNy44OTQxNzI5LDcuODE1OTcwMDllLTE0IEwyNC41MjY0NzM1LDQuNDczNTQzMjMgTDYuNjMyMzAwNTgsMzEuMDAyNzQ1NSBMMC43NTY5ODQwMzEsMzIuMTM4MzIxNiBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8L3N2Zz5gO1xuICAgICAgY29uc3QgY3Vyc29yQmFzZTY0ID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZXNjYXBlKGN1cnNvclN2Zyl9YDtcbiAgICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRDdXJzb3JJY29uKHRvb2xUeXBlLCB7XG4gICAgICAgIGN1cnNvcjogJ3VybCcsXG4gICAgICAgIHVybDogY3Vyc29yQmFzZTY0LFxuICAgICAgICBvZmZzZXRYOiAxMCxcbiAgICAgICAgb2Zmc2V0WTogNDAsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRvb2xUeXBlID09PSBCb2FyZFJlbmRlci5URWR1Qm9hcmQuVEVkdUJvYXJkVG9vbFR5cGUuVEVEVV9CT0FSRF9UT09MX1RZUEVfTElORSkge1xuICAgICAgY29uc3QgY3Vyc29yU3ZnID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwcHhcIiBoZWlnaHQ9XCI0MHB4XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XG4gICAgICAgICAgICAgICAgPHRpdGxlPm1vdXNlX2xpbmU8L3RpdGxlPlxuICAgICAgICAgICAgICAgIDxnIGlkPVwi6aG16Z2iLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNzg1LjAwMDAwMCwgLTI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIm1vdXNlX2xpbmVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNzg1LjAwMDAwMCwgMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIue8lue7hC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPVwi55+p5b2iXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4RcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMi42MjgxNTcsIDIuNTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwiI0ZGRkZGRlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS42NTc0MDg5LDAgTDE5LjY1NywxNS41IEwzNC42MjU5NTM0LDE1LjUgTDM0LjYyNTk1MzQsMTkuNSBMMTkuNjU3LDE5LjUgTDE5LjY1NzQwODksMzUgTDE1LjY1NzQwODksMzUgTDE1LjY1NywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTkuNSBMLTEuMTM2ODY4MzhlLTEzLDE1LjUgTDE1LjY1NywxNS41IEwxNS42NTc0MDg5LDAgTDE5LjY1NzQwODksMCBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIyOC41XCIgeTE9XCI3LjVcIiB4Mj1cIjM2LjVcIiB5Mj1cIjcuNVwiIGlkPVwi55u057q/LTZcIiBzdHJva2U9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwic3F1YXJlXCI+PC9saW5lPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodG9vbFR5cGUgPT09IEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9SRUNUKSB7XG4gICAgICBjb25zdCBjdXJzb3JTdmcgPSBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4gIDxzdmcgd2lkdGg9XCI0MHB4XCIgaGVpZ2h0PVwiNDBweFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPlxuICAgICAgPHRpdGxlPm1vdXNlX3JlY3RhbmdsZTwvdGl0bGU+XG4gICAgICA8ZyBpZD1cIumhtemdoi0xXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNTUxLjAwMDAwMCwgLTI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgIDxnIGlkPVwibW91c2VfcmVjdGFuZ2xlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDU1MS4wMDAwMDAsIDI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICA8ZyBpZD1cIue8lue7hC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3QgaWQ9XCLnn6nlvaJcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwi57yW57uEXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDIuNjI4MTU3LCAyLjUwMDAwMClcIiBmaWxsPVwiIzAwMDAwMFwiIHN0cm9rZT1cIiNGRkZGRkZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS42NTc0MDg5LDAgTDE5LjY1NywxNS41IEwzNC42MjU5NTM0LDE1LjUgTDM0LjYyNTk1MzQsMTkuNSBMMTkuNjU3LDE5LjUgTDE5LjY1NzQwODksMzUgTDE1LjY1NzQwODksMzUgTDE1LjY1NywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTkuNSBMLTEuMTM2ODY4MzhlLTEzLDE1LjUgTDE1LjY1NywxNS41IEwxNS42NTc0MDg5LDAgTDE5LjY1NzQwODksMCBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgPHJlY3QgaWQ9XCLnn6nlvaJcIiBzdHJva2U9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHg9XCIyOFwiIHk9XCIzXCIgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvZz5cbiAgICAgIDwvZz5cbiAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgICAgLy8g55+p5b2i5Lmf6K6+572u5LiA5LiLKOW9k+aMieS9j3NoaWZ06ZSu55qE5pe25YCZ77yM5bel5YW35Lya5YiH5o2i5Li655+p5b2iKVxuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX1NRVUFSRSwge1xuICAgICAgICBjdXJzb3I6ICd1cmwnLFxuICAgICAgICB1cmw6IGN1cnNvckJhc2U2NCxcbiAgICAgICAgb2Zmc2V0WDogMjAsXG4gICAgICAgIG9mZnNldFk6IDIwLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0b29sVHlwZSA9PT0gQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX09WQUwpIHtcbiAgICAgIGNvbnN0IGN1cnNvclN2ZyA9IGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbiAgPHN2ZyB3aWR0aD1cIjQwcHhcIiBoZWlnaHQ9XCI0MHB4XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XG4gICAgICA8dGl0bGU+bW91c2VfY2lyY2xlPC90aXRsZT5cbiAgICAgIDxnIGlkPVwi6aG16Z2iLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgIDxnIGlkPVwi5YWJ5qCH5Y+K54q25oCB5qCP54q25oCBXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0zMjMuMDAwMDAwLCAtMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgPGcgaWQ9XCJtb3VzZV9jaXJjbGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMzIzLjAwMDAwMCwgMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgIDxnIGlkPVwi57yW57uELTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD1cIuefqeW9olwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIj48L3JlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4RcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMi42MjgxNTcsIDIuNTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwiI0ZGRkZGRlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5LjY1NzQwODksMCBMMTkuNjU3LDE1LjUgTDM0LjYyNTk1MzQsMTUuNSBMMzQuNjI1OTUzNCwxOS41IEwxOS42NTcsMTkuNSBMMTkuNjU3NDA4OSwzNSBMMTUuNjU3NDA4OSwzNSBMMTUuNjU3LDE5LjUgTC0xLjEzNjg2ODM4ZS0xMywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTUuNSBMMTUuNjU3LDE1LjUgTDE1LjY1NzQwODksMCBMMTkuNjU3NDA4OSwwIFpcIiBpZD1cIuW9oueKtue7k+WQiFwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPVwi5qSt5ZyG5b2iXCIgc3Ryb2tlPVwiJHticnVzaENvbG9yfVwiIHN0cm9rZS13aWR0aD1cIjJcIiBjeD1cIjMyXCIgY3k9XCI3XCIgcj1cIjRcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvZz5cbiAgICAgIDwvZz5cbiAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgICAgLy8g5q2j5ZyG5Lmf6K6+572u5LiA5LiLKOW9k+aMieS9j3NoaWZ06ZSu55qE5pe25YCZ77yM5bel5YW35Lya5YiH5o2i5Li65q2j5ZyGKVxuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX0NJUkNMRSwge1xuICAgICAgICBjdXJzb3I6ICd1cmwnLFxuICAgICAgICB1cmw6IGN1cnNvckJhc2U2NCxcbiAgICAgICAgb2Zmc2V0WDogMjAsXG4gICAgICAgIG9mZnNldFk6IDIwLFxuICAgICAgfSk7XG4gICAgfVxuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRUb29sVHlwZSh0b29sVHlwZSk7ICAvLyDpqazkuIrlho3mm7TmlrDkuIDkuIvlt6XlhbfvvIzkv53or4HlhYnmoIfnlJ/mlYjvvIjnmb3mnb9idWfvvIlcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGNhbGxCb2FyZE1ldGhvZChhcmc6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdjYWxsQm9hcmRNZXRob2QnLCBCb2FyZFJlbmRlci50ZWR1Qm9hcmQsIEpTT04uc3RyaW5naWZ5KGFyZykpO1xuICAgIGlmIChCb2FyZFJlbmRlci50ZWR1Qm9hcmQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItc3ByZWFkXG4gICAgICBCb2FyZFJlbmRlci50ZWR1Qm9hcmRbYXJnLm1ldGhvZF0uYXBwbHkoQm9hcmRSZW5kZXIudGVkdUJvYXJkLCBhcmcucGFyYW1zKTtcbiAgICAgIEJvYXJkUmVuZGVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgLy8gaWYgKGFyZy5tZXRob2QgPT09ICdzZXRUb29sVHlwZScpIHtcbiAgICAgIC8vICAgY29uc3QgdG9vbFR5cGUgPSBhcmcucGFyYW1zWzBdO1xuICAgICAgLy8gICAvLyDns7vnu5/lhYnmoIflr7npmLTlvbHmu6TplZzmlK/mjIHkuI3lpb3vvIzmv4DlhYnnrJTmuJDlj5jpg6jliIbkvJrlh7rnjrDpu5HoibLpmLTlvbHvvIznm67liY3lhYjlsIbmv4DlhYnnrJTnlKjmqKHmi5/nmoTmlrnlvI/mnaXlrp7njrDvvIzlhbbku5blt6Xlhbfnu6fnu63kvb/nlKjns7vnu5/lhYnmoIco5ZCM5pe25ZyodG91Y2jorr7lpIfkuIvns7vnu5/lhYnmoIfkuZ/kuI3kvJrlh7rnjrApXG4gICAgICAvLyAgIGlmICh0b29sVHlwZSA9PT0gQm9hcmRSZW5kZXIudGVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX0xBU0VSKSB7XG4gICAgICAvLyAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFN5c3RlbUN1cnNvckVuYWJsZShmYWxzZSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFN5c3RlbUN1cnNvckVuYWJsZSh0cnVlKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH1cbiAgfTtcbn07XG5cbih3aW5kb3cgYXMgYW55KS5Cb2FyZFJlbmRlciA9IEJvYXJkUmVuZGVyO1xuXG5pcGNSZW5kZXJlci5vbignaW5pdEJvYXJkJywgKGV2ZW50OiBhbnksIHBhcmFtczogYW55KSA9PiB7XG4gIGNvbnN0IEJvYXJkUmVuZGVyID0gKHdpbmRvdyBhcyBhbnkpLkJvYXJkUmVuZGVyO1xuICBpZiAoQm9hcmRSZW5kZXIudGVkdUJvYXJkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5pdFBhcmFtcyA9IHtcbiAgICBpZDogJ2JvYXJkJywgLy8gZG9t6IqC54K5aWRcbiAgICBzZGtBcHBJZDogcGFyYW1zLnNka0FwcElkLCAvLyDmlbTmlbBcbiAgICBjbGFzc0lkOiBwYXJhbXMucm9vbUlkLCAvLyDor77loIIgSUTvvIwzMuS9jeaVtOWei++8jOWPluWAvOiMg+WbtFsxLCA0Mjk0OTY3Mjk0XVxuICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCwgLy8g5a2X56ym5LiyXG4gICAgdXNlclNpZzogcGFyYW1zLnVzZXJTaWcsXG4gICAgcmF0aW86IGAke3NjcmVlbi53aWR0aH06JHtzY3JlZW4uaGVpZ2h0fWAsXG4gICAgc3lzdGVtQ3Vyc29yRW5hYmxlOiBmYWxzZSxcbiAgICBlbmFibGVMb2NhbE1vZGU6IHRydWUsXG4gICAgc3R5bGVDb25maWc6IHtcbiAgICAgIGdsb2JhbEJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4wMSknLFxuICAgICAgdGV4dENvbG9yOiAnI2ZmMDAwMCcsXG4gICAgICBzZWxlY3RCb3hDb2xvcjogJyM3MjcyNzInLFxuICAgICAgY3Vyc29yU2l6ZTogWzQwLCA0MF0sXG4gICAgICBicnVzaFRoaW46IDUwLFxuICAgICAgc2VsZWN0QW5jaG9yQ29sb3I6ICcjMDA2ZWZmJyxcbiAgICB9LFxuICB9O1xuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQgPSBuZXcgQm9hcmRSZW5kZXIuVEVkdUJvYXJkKGluaXRQYXJhbXMpO1xuXG4gIC8vIOebkeWQrOeZveadv+mUmeivr+S6i+S7tlxuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQub24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLkVWRU5ULlRFQl9FUlJPUiwgKGNvZGU6IG51bWJlciwgbXNnOiBzdHJpbmcpID0+IHtcbiAgfSk7XG5cbiAgLy8g55uR5ZCs55m95p2/5ZGK6K2m5LqL5Lu2XG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX1dBUk5JTkcsIChjb2RlOiBudW1iZXIsIG1zZzogc3RyaW5nKSA9PiB7XG4gIH0pO1xuXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX0hJU1RST1lEQVRBX1NZTkNDT01QTEVURUQsICgpID0+IHtcbiAgICAvLyDpu5jorqTkvb/nlKjpvKDmoIflt6XlhbdcbiAgICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQuc2V0VG9vbFR5cGUoQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX01PVVNFKTtcblxuICAgIC8vIOWQr+eUqOeslOmUi+eJueaAp1xuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRIYW5kd3JpdGluZ0VuYWJsZSh0cnVlKTtcblxuICAgIC8vIOiuvue9ruapoeearuaTpuiHquWumuS5ieWbvuagh1xuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRDdXJzb3JJY29uKEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9FUkFTRVIsIHtcbiAgICAgIGN1cnNvcjogJ3VybCcsXG4gICAgICB1cmw6ICdodHRwczovL3Jlcy5xY2xvdWR0aXcuY29tL2JvYXJkL2ljb25zL3hrdC9lcmFzZXIuc3ZnJyxcbiAgICAgIG9mZnNldFg6IDcsXG4gICAgICBvZmZzZXRZOiAyNSxcbiAgICB9KTtcblxuICAgIEJvYXJkUmVuZGVyLnVwZGF0ZUN1cnNvcigpO1xuXG4gICAgaWYgKEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIOayoeacieaMh+S7pO+8jOWImem7mOiupOiuvue9ruacqum8oOagh+W3peWFt1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFRvb2xUeXBlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDmiafooYznvJPlrZjmjIfku6RcbiAgICAgIEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5mb3JFYWNoKChhcmc6IGFueSkgPT4ge1xuICAgICAgICBCb2FyZFJlbmRlci5jYWxsQm9hcmRNZXRob2QoYXJnKTtcbiAgICAgIH0pO1xuICAgICAgQm9hcmRSZW5kZXIuY2FsbE1ldGhvZENhY2hlID0gW107XG4gICAgfVxuICAgIEJvYXJkUmVuZGVyLmlzQm9hcmRSZWFkeSA9IHRydWU7XG4gIH0pO1xuXG4gIC8vIOebkeWQrOS6i+S7tu+8jGltYWdl5Li65oiq5Zu+5YaF5a6555qEYmFzZTY05pWw5o2uXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX1NOQVBTSE9ULCAoZGF0YTogYW55KSA9PiB7XG4gICAgaXBjUmVuZGVyZXIuc2VuZCgnb25TY3JlZW5TaGFyZVNuYXBzaG90JywgZGF0YSk7XG4gIH0pO1xuXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX09QRVJBVEVfQ0FOUkVET19TVEFUVVNfQ0hBTkdFRCwgKHN0YXR1czogYW55KSA9PiB7XG4gICAgaXBjUmVuZGVyZXIuc2VuZCgnb25Cb2FyZENhblJlZG9DaGFuZ2UnLCBzdGF0dXMpO1xuICB9KTtcblxuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQub24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLkVWRU5ULlRFQl9PUEVSQVRFX0NBTlVORE9fU1RBVFVTX0NIQU5HRUQsIChzdGF0dXM6IGFueSkgPT4ge1xuICAgIGlwY1JlbmRlcmVyLnNlbmQoJ29uQm9hcmRDYW5VbmRvQ2hhbmdlJywgc3RhdHVzKTtcbiAgfSk7XG5cbiAgQm9hcmRSZW5kZXIuc2V0VmlzaWJsZVJlY3QocGFyYW1zLnNoYXJlV2luZG93Qm91bmRzKTtcbn0pO1xuXG5cbmlwY1JlbmRlcmVyLm9uKCdvblNoYXJlV2luZG93Qm91bmRzQ2hhbmdlZCcsIChldmVudCwgYm91bmRzKSA9PiB7XG4gIGNvbnN0IEJvYXJkUmVuZGVyID0gKHdpbmRvdyBhcyBhbnkpLkJvYXJkUmVuZGVyO1xuICBCb2FyZFJlbmRlci5zZXRWaXNpYmxlUmVjdChib3VuZHMpO1xufSk7XG5cbmlwY1JlbmRlcmVyLm9uKCdjYWxsTWV0aG9kJywgKGV2ZW50LCBhcmcpID0+IHtcbiAgY29uc3QgQm9hcmRSZW5kZXIgPSAod2luZG93IGFzIGFueSkuQm9hcmRSZW5kZXI7XG4gIGlmICghQm9hcmRSZW5kZXIuaXNCb2FyZFJlYWR5KSB7IC8vIOeZveadv+S4uuWIneWni+WMluWujOaIkO+8jOe8k+WtmOeZveadv+aMh+S7pFxuICAgIEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5wdXNoKGFyZyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJvYXJkUmVuZGVyLmNhbGxCb2FyZE1ldGhvZChhcmcpO1xufSk7XG5cbmNvbnN0IGV2ZW50cyA9IFsndG91Y2hzdGFydCcsICd0b3VjaGVuZCddO1xuaXBjUmVuZGVyZXIub24oJ2VuYWJsZVdhdGNoTW91c2VNb3ZlRXZlbnQnLCAoZXZlbnQsIGVuYWJsZWQpID0+IHtcbiAgcmVuZGVyZXJVdGlsLndhdGNoRXZlbnRzKGRvY3VtZW50LCBldmVudHMsIGVuYWJsZWQpO1xufSk7XG5cbndpbmRvdy5vbmxvYWQgPSAoKSA9PiB7XG4gIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9hcmQtd3JhcCcpO1xuICBCb2FyZFJlbmRlci5ib2FyZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9hcmQnKTtcbn07XG4iLCJpbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcblxuZnVuY3Rpb24gY3JlYXRlTW91c2VNb3ZlUHJvY2Vzc29yKCkge1xuICBjb25zdCBsYXN0WCA9IDA7XG4gIGNvbnN0IGxhc3RZID0gMDtcbiAgcmV0dXJuIChlOiBhbnkpID0+IHtcbiAgICBsZXQgeDsgbGV0IHk7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBUb3VjaEV2ZW50KSB7ICAvLyDop6bmkbjkuovku7ZcbiAgICAgIHggPSBNYXRoLnJvdW5kKGUuY2hhbmdlZFRvdWNoZXNbMF0uc2NyZWVuWCk7XG4gICAgICB5ID0gTWF0aC5yb3VuZChlLmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblkpO1xuICAgIH0gZWxzZSB7ICAvLyDpvKDmoIfkuovku7ZcbiAgICAgIHggPSBlLnNjcmVlblg7XG4gICAgICB5ID0gZS5zY3JlZW5ZO1xuICAgIH1cbiAgICBpZiAoeCAhPT0gbGFzdFggfHwgeSAhPT0gbGFzdFkpIHsgIC8vIOWPquacieS9jee9ruWPkeeUn+WPmOWMluaXtuaJjeWPkemAgea2iOaBr++8jOWHj+Wwkei1hOa6kOa2iOiAl1xuICAgICAgY29uc3QgYXJncyA9IHsgdHlwZTogZS50eXBlLCB4LCB5IH07XG4gICAgICBpcGNSZW5kZXJlci5zZW5kKCdvbk1vdXNlRXZlbnQnLCBhcmdzKTtcbiAgICAgIGNvbnNvbGUubG9nKCdvbk1vdXNlRXZlbnQnLCBhcmdzKTtcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IGV2ZW50UHJvY2Vzc29yID0gY3JlYXRlTW91c2VNb3ZlUHJvY2Vzc29yKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEV2ZW50cyh0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudHM6IHN0cmluZ1tdLCBlbmFibGVkOiBib29sZWFuKSB7XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZXZlbnRQcm9jZXNzb3IsIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGV2ZW50UHJvY2Vzc29yLCB7XG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2JvYXJkUmVuZGVyZXIudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
(()=>{"use strict";var e={761:function(e,t,o){var r=this&&this.__createBinding||(Object.create?function(e,t,o,r){void 0===r&&(r=o),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[o]}})}:function(e,t,o,r){void 0===r&&(r=o),e[r]=t[o]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),d=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)"default"!==o&&Object.hasOwnProperty.call(e,o)&&r(t,e,o);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});const s=o(933),a=d(o(280));class i{static setVisibleRect(e){e?(0!==i.screenHeight&&0!==i.screenWidth||(i.screenHeight=screen.height,i.screenWidth=screen.width,i.boardElement.style.width=`${screen.width}px`,i.boardElement.style.height=`${screen.height}px`),i.boardWrapElement.style.width=`${e.width}px`,i.boardWrapElement.style.height=`${e.height}px`,i.boardWrapElement.style.left=`${e.x}px`,i.boardWrapElement.style.top=`${e.y}px`,i.boardWrapElement.style.position="absolute"):(i.boardWrapElement.removeAttribute("style"),i.boardElement.removeAttribute("style"))}static updateCursor(){if(!i.teduBoard)return;const e=i.teduBoard.getToolType(),t=i.teduBoard.getBrushColor();if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_PEN){const o=`data:image/svg+xml;charset=utf-8,${escape(`<?xml version="1.0" encoding="UTF-8"?><svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>mouse_pen</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-89.000000, -268.000000)">\n <g id="mouse_pen" transform="translate(89.000000, 268.000000)">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组-13" transform="translate(8.000000, 3.000000)" fill="${t}" stroke="#182E25">\n <path d="M0.756984031,32.1383216 L3.68816089e-13,26.5292023 L17.8941729,7.81597009e-14 L24.5264735,4.47354323 L6.63230058,31.0027455 L0.756984031,32.1383216 Z" id="形状结合"></path>\n </g>\n </g>\n </g>\n </g>\n </svg>`)}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:o,offsetX:10,offsetY:40})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LINE){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_line</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-785.000000, -272.000000)">\n <g id="mouse_line" transform="translate(785.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <line x1="28.5" y1="7.5" x2="36.5" y2="7.5" id="直线-6" stroke="${t}" stroke-width="2" stroke-linecap="square"></line>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_RECT){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_rectangle</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-551.000000, -272.000000)">\n <g id="mouse_rectangle" transform="translate(551.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <rect id="矩形" stroke="${t}" stroke-width="2" x="28" y="3" width="8" height="8"></rect>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20}),i.teduBoard.setCursorIcon(i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_SQUARE,{cursor:"url",url:r,offsetX:20,offsetY:20})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_OVAL){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_circle</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-323.000000, -272.000000)">\n <g id="mouse_circle" transform="translate(323.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <circle id="椭圆形" stroke="${t}" stroke-width="2" cx="32" cy="7" r="4"></circle>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20}),i.teduBoard.setCursorIcon(i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_CIRCLE,{cursor:"url",url:r,offsetX:20,offsetY:20})}i.teduBoard.setToolType(e)}static callBoardMethod(e){console.log("callBoardMethod",i.teduBoard,JSON.stringify(e)),i.teduBoard&&(i.teduBoard[e.method].apply(i.teduBoard,e.params),i.updateCursor())}}i.TEduBoard=window.TEduBoard,i.teduBoard=null,i.boardElement=null,i.boardWrapElement=null,i.screenWidth=0,i.screenHeight=0,i.callMethodCache=[],i.isBoardReady=!1,window.BoardRender=i,s.ipcRenderer.on("initBoard",((e,t)=>{const o=window.BoardRender;if(o.teduBoard)return;const r={id:"board",sdkAppId:t.sdkAppId,classId:t.roomId,userId:t.userId,userSig:t.userSig,ratio:`${screen.width}:${screen.height}`,systemCursorEnable:!1,enableLocalMode:!0,styleConfig:{globalBackgroundColor:"rgba(0, 0, 0, 0.01)",textColor:"#ff0000",selectBoxColor:"#727272",cursorSize:[40,40],brushThin:50,selectAnchorColor:"#006eff"}};o.teduBoard=new o.TEduBoard(r),o.teduBoard.on(o.TEduBoard.EVENT.TEB_ERROR,((e,t)=>{})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_WARNING,((e,t)=>{})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_HISTROYDATA_SYNCCOMPLETED,(()=>{o.teduBoard.setToolType(o.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_MOUSE),o.teduBoard.setHandwritingEnable(!0),o.teduBoard.setCursorIcon(o.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_ERASER,{cursor:"url",url:"https://res.qcloudtiw.com/board/icons/xkt/eraser.svg",offsetX:7,offsetY:25}),o.updateCursor(),0===o.callMethodCache.length?o.teduBoard.setToolType(0):(o.callMethodCache.forEach((e=>{o.callBoardMethod(e)})),o.callMethodCache=[]),o.isBoardReady=!0})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_SNAPSHOT,(e=>{s.ipcRenderer.send("onScreenShareSnapshot",e)})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_OPERATE_CANREDO_STATUS_CHANGED,(e=>{s.ipcRenderer.send("onBoardCanRedoChange",e)})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_OPERATE_CANUNDO_STATUS_CHANGED,(e=>{s.ipcRenderer.send("onBoardCanUndoChange",e)})),o.setVisibleRect(t.shareWindowBounds)})),s.ipcRenderer.on("onShareWindowBoundsChanged",((e,t)=>{window.BoardRender.setVisibleRect(t)})),s.ipcRenderer.on("callMethod",((e,t)=>{const o=window.BoardRender;o.isBoardReady?o.callBoardMethod(t):o.callMethodCache.push(t)}));const l=["touchstart","touchend"];s.ipcRenderer.on("enableWatchMouseMoveEvent",((e,t)=>{a.watchEvents(document,l,t)})),window.onload=()=>{i.boardWrapElement=document.getElementById("board-wrap"),i.boardElement=document.getElementById("board")}},280:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.watchEvents=void 0;const r=o(933),n=e=>{let t,o;if(e instanceof TouchEvent?(t=Math.round(e.changedTouches[0].screenX),o=Math.round(e.changedTouches[0].screenY)):(t=e.screenX,o=e.screenY),0!==t||0!==o){const n={type:e.type,x:t,y:o};r.ipcRenderer.send("onMouseEvent",n),console.log("onMouseEvent",n)}};t.watchEvents=function(e,t,o){t.forEach((t=>{o?e.addEventListener(t,n,{capture:!0,passive:!1}):e.removeEventListener(t,n,{capture:!0})}))}},933:e=>{e.exports=require("electron")}},t={};!function o(r){var n=t[r];if(void 0!==n)return n.exports;var d=t[r]={exports:{}};return e[r].call(d.exports,d,d.exports,o),d.exports}(761)})();
|
|
@@ -1,112 +1 @@
|
|
|
1
|
-
|
|
2
|
-
/******/ "use strict";
|
|
3
|
-
/******/ var __webpack_modules__ = ({
|
|
4
|
-
|
|
5
|
-
/***/ "electron":
|
|
6
|
-
/*!***************************!*\
|
|
7
|
-
!*** external "electron" ***!
|
|
8
|
-
\***************************/
|
|
9
|
-
/***/ ((module) => {
|
|
10
|
-
|
|
11
|
-
module.exports = require("electron");
|
|
12
|
-
|
|
13
|
-
/***/ })
|
|
14
|
-
|
|
15
|
-
/******/ });
|
|
16
|
-
/************************************************************************/
|
|
17
|
-
/******/ // The module cache
|
|
18
|
-
/******/ var __webpack_module_cache__ = {};
|
|
19
|
-
/******/
|
|
20
|
-
/******/ // The require function
|
|
21
|
-
/******/ function __webpack_require__(moduleId) {
|
|
22
|
-
/******/ // Check if module is in cache
|
|
23
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
24
|
-
/******/ if (cachedModule !== undefined) {
|
|
25
|
-
/******/ return cachedModule.exports;
|
|
26
|
-
/******/ }
|
|
27
|
-
/******/ // Create a new module (and put it into the cache)
|
|
28
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
29
|
-
/******/ // no module.id needed
|
|
30
|
-
/******/ // no module.loaded needed
|
|
31
|
-
/******/ exports: {}
|
|
32
|
-
/******/ };
|
|
33
|
-
/******/
|
|
34
|
-
/******/ // Execute the module function
|
|
35
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
36
|
-
/******/
|
|
37
|
-
/******/ // Return the exports of the module
|
|
38
|
-
/******/ return module.exports;
|
|
39
|
-
/******/ }
|
|
40
|
-
/******/
|
|
41
|
-
/************************************************************************/
|
|
42
|
-
var __webpack_exports__ = {};
|
|
43
|
-
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
|
44
|
-
(() => {
|
|
45
|
-
var exports = __webpack_exports__;
|
|
46
|
-
/*!*******************************!*\
|
|
47
|
-
!*** ./src/cameraRenderer.ts ***!
|
|
48
|
-
\*******************************/
|
|
49
|
-
|
|
50
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
51
|
-
const electron_1 = __webpack_require__(/*! electron */ "electron");
|
|
52
|
-
class CameraController {
|
|
53
|
-
constructor() {
|
|
54
|
-
this._videoElement = document.getElementById('camera');
|
|
55
|
-
this._videoElement.addEventListener('timeupdate', () => {
|
|
56
|
-
});
|
|
57
|
-
this._videoElement.addEventListener('durationchange', () => {
|
|
58
|
-
});
|
|
59
|
-
this._videoElement.addEventListener('seeked', () => {
|
|
60
|
-
});
|
|
61
|
-
this._videoElement.addEventListener('playing', () => {
|
|
62
|
-
electron_1.ipcRenderer.send('playing', {
|
|
63
|
-
width: this._params.width,
|
|
64
|
-
height: this._params.height,
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
static get instance() {
|
|
69
|
-
if (this._instance === null) {
|
|
70
|
-
this._instance = new CameraController();
|
|
71
|
-
}
|
|
72
|
-
return this._instance;
|
|
73
|
-
}
|
|
74
|
-
start(params) {
|
|
75
|
-
return new Promise((resolve, reject) => {
|
|
76
|
-
this._params = params;
|
|
77
|
-
navigator.mediaDevices.enumerateDevices()
|
|
78
|
-
.then((devices) => {
|
|
79
|
-
const cameraDevices = devices.filter(device => device.kind === 'videoinput');
|
|
80
|
-
navigator.mediaDevices.getUserMedia({
|
|
81
|
-
video: {
|
|
82
|
-
deviceId: cameraDevices[params.deviceIndex].deviceId,
|
|
83
|
-
aspectRatio: 1.7777777778,
|
|
84
|
-
width: params.width,
|
|
85
|
-
height: params.height,
|
|
86
|
-
},
|
|
87
|
-
audio: false,
|
|
88
|
-
})
|
|
89
|
-
.then((stream) => {
|
|
90
|
-
this._videoElement.srcObject = stream;
|
|
91
|
-
this._videoElement.play();
|
|
92
|
-
})
|
|
93
|
-
.catch((error) => {
|
|
94
|
-
reject(error);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
stop() {
|
|
100
|
-
this._videoElement.stop();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
CameraController._instance = null;
|
|
104
|
-
electron_1.ipcRenderer.on('start', (event, params) => {
|
|
105
|
-
CameraController.instance.start(params);
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
})();
|
|
109
|
-
|
|
110
|
-
/******/ })()
|
|
111
|
-
;
|
|
112
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay9leHRlcm5hbCBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvLi9zcmMvY2FtZXJhUmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLHFDOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7Ozs7Ozs7Ozs7QUN0QkEsbUVBQXVDO0FBRXZDLE1BQU0sZ0JBQWdCO0lBVXBCO1FBQ0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2xELHNCQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTthQUM1QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUF2Qk0sTUFBTSxLQUFLLFFBQVE7UUFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBbUJNLEtBQUssQ0FBQyxNQUFXO1FBQ3RCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRTtpQkFDdEMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDO2dCQUM3RSxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztvQkFDbEMsS0FBSyxFQUFFO3dCQUNMLFFBQVEsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVE7d0JBQ3BELFdBQVcsRUFBRSxZQUFZO3dCQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7d0JBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtxQkFDdEI7b0JBQ0QsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQztxQkFDQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDZixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVCLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTSxJQUFJO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDOztBQTdDYywwQkFBUyxHQUFxQixJQUFJLENBQUM7QUFnRHBELHNCQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUN4QyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6ImNhbWVyYVJlbmRlcmVyLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcblxuY2xhc3MgQ2FtZXJhQ29udHJvbGxlciB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGluc3RhbmNlKCk6IENhbWVyYUNvbnRyb2xsZXIge1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgQ2FtZXJhQ29udHJvbGxlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBDYW1lcmFDb250cm9sbGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBfdmlkZW9FbGVtZW50OiBhbnk7XG4gIHByaXZhdGUgX3BhcmFtczogYW55O1xuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbWVyYScpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgKCkgPT4ge1xuICAgIH0pO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdkdXJhdGlvbmNoYW5nZScsICgpID0+IHtcbiAgICB9KTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Vla2VkJywgKCkgPT4ge1xuICAgIH0pO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgKCkgPT4ge1xuICAgICAgaXBjUmVuZGVyZXIuc2VuZCgncGxheWluZycsIHtcbiAgICAgICAgd2lkdGg6IHRoaXMuX3BhcmFtcy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLl9wYXJhbXMuaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXJ0KHBhcmFtczogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcbiAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2FtZXJhRGV2aWNlcyA9IGRldmljZXMuZmlsdGVyKGRldmljZSA9PiBkZXZpY2Uua2luZCA9PT0gJ3ZpZGVvaW5wdXQnKTtcbiAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICAgICAgICB2aWRlbzoge1xuICAgICAgICAgICAgICBkZXZpY2VJZDogY2FtZXJhRGV2aWNlc1twYXJhbXMuZGV2aWNlSW5kZXhdLmRldmljZUlkLFxuICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogMS43Nzc3Nzc3Nzc4LFxuICAgICAgICAgICAgICB3aWR0aDogcGFyYW1zLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHBhcmFtcy5oZWlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXVkaW86IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoc3RyZWFtKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zdG9wKCk7XG4gIH1cbn1cblxuaXBjUmVuZGVyZXIub24oJ3N0YXJ0JywgKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgQ2FtZXJhQ29udHJvbGxlci5pbnN0YW5jZS5zdGFydChwYXJhbXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9
|
|
1
|
+
(()=>{"use strict";var e={933:e=>{e.exports=require("electron")}},t={};function i(n){var s=t[n];if(void 0!==s)return s.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,i),r.exports}(()=>{const e=i(933);class t{constructor(){this._videoElement=document.getElementById("camera"),this._videoElement.addEventListener("timeupdate",(()=>{})),this._videoElement.addEventListener("durationchange",(()=>{})),this._videoElement.addEventListener("seeked",(()=>{})),this._videoElement.addEventListener("playing",(()=>{e.ipcRenderer.send("playing",{width:this._params.width,height:this._params.height})}))}static get instance(){return null===this._instance&&(this._instance=new t),this._instance}start(e){return new Promise(((t,i)=>{this._params=e,navigator.mediaDevices.enumerateDevices().then((t=>{const n=t.filter((e=>"videoinput"===e.kind));navigator.mediaDevices.getUserMedia({video:{deviceId:n[e.deviceIndex].deviceId,aspectRatio:1.7777777778,width:e.width,height:e.height},audio:!1}).then((e=>{this._videoElement.srcObject=e,this._videoElement.play()})).catch((e=>{i(e)}))}))}))}stop(){this._videoElement.stop()}}t._instance=null,e.ipcRenderer.on("start",((e,i)=>{t.instance.start(i)}))})()})();
|
package/dist/config.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"resources": [
|
|
3
3
|
{
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "756187788c31c589c15e4c40bc1f2b601d09e7dc",
|
|
5
5
|
"sdkAppId": "0",
|
|
6
6
|
"schoolId": "0",
|
|
7
|
-
"url": "https://class.qcloudclass.com/1.5.0/cache/
|
|
7
|
+
"url": "https://class.qcloudclass.com/1.5.0/cache/offline_756187788c31c589c15e4c40bc1f2b601d09e7dc.zip",
|
|
8
8
|
"files": {
|
|
9
9
|
},
|
|
10
10
|
"regexes": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"supportFomats": "mp4|rmvb|avi|mov|flv|wmv|m3u8|mpeg|mp3|wav|pcm|aac|ogg"
|
|
26
26
|
},
|
|
27
27
|
"expired": 200,
|
|
28
|
-
"devBuildTime":
|
|
28
|
+
"devBuildTime": 1639550920,
|
|
29
29
|
"domains": {
|
|
30
30
|
"www.xxx.com": [
|
|
31
31
|
"www.aaa.com"
|