@netless/slide 0.3.9 → 0.4.1
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/README.md +67 -0
- package/lib/RenderingTaskManager.d.ts +1 -0
- package/lib/RenderingTaskManager.js +3 -0
- package/lib/Slide.d.ts +28 -3
- package/lib/Slide.js +14 -14
- package/lib/SyncTaskManager.d.ts +2 -0
- package/lib/SyncTaskManager.js +5 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -358,6 +358,63 @@ clearSlideCache(): void;
|
|
|
358
358
|
static clearLocalCache(): void;
|
|
359
359
|
```
|
|
360
360
|
|
|
361
|
+
### 资源代理
|
|
362
|
+
|
|
363
|
+
**注意: `@netless/slide@0.4.0` 版本才开始支持。**
|
|
364
|
+
|
|
365
|
+
从 `@netless/slide@0.4.0` 开始, 你可以在创建 Slide 对象时提供一个 loaderDelegate 对象, 从而代理 Slide 内部所有远程资源, 进而可以实现
|
|
366
|
+
资源重定向, 资源鉴权等需求.
|
|
367
|
+
|
|
368
|
+
loaderDelegate 属性需符合 `ILoaderDelegate` 接口, 需要注意对于媒体资源, 并不能直接返回资源内容, 只能同步的返回重定向后的资源地址.
|
|
369
|
+
|
|
370
|
+
```typescript
|
|
371
|
+
export interface ILoaderDelegate {
|
|
372
|
+
/**
|
|
373
|
+
* 加载 json 资源, 需返回 json 文本
|
|
374
|
+
* @param url 原始资源地址
|
|
375
|
+
*/
|
|
376
|
+
loadJson(url: string): Promise<string>;
|
|
377
|
+
/**
|
|
378
|
+
* 加载图片资源, 需返回 Blob 对象
|
|
379
|
+
* @param url 原始资源地址
|
|
380
|
+
*/
|
|
381
|
+
loadImage(url: string): Promise<Blob>;
|
|
382
|
+
/**
|
|
383
|
+
* 媒体文件重定向, mp3 和 mp4 资源会调用这个代理函数, 需返回重定向后的 url
|
|
384
|
+
* @param url 原始资源地址
|
|
385
|
+
*/
|
|
386
|
+
redirectMedia(url: string): string;
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
一个什么也不干的 loaderDelegate 如下所示, 但是你可以对传入的 url 进行加工:
|
|
391
|
+
|
|
392
|
+
```typescript
|
|
393
|
+
import { Slide, ILoaderDelegate } from "@netless/slide"
|
|
394
|
+
|
|
395
|
+
const delegate: ILoaderDelegate = {
|
|
396
|
+
loadJson(url: string): Promise<string> {
|
|
397
|
+
return fetch(url).then(res => {
|
|
398
|
+
return res.text();
|
|
399
|
+
});
|
|
400
|
+
},
|
|
401
|
+
loadImage(url: string): Promise<Blob> {
|
|
402
|
+
return fetch(url).then(res => {
|
|
403
|
+
return res.blob();
|
|
404
|
+
});
|
|
405
|
+
},
|
|
406
|
+
redirectMedia(url: string): string {
|
|
407
|
+
return url;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
const slide = new Slide({
|
|
412
|
+
/// ... 其他初始化配置
|
|
413
|
+
loaderDelegate: delegate,
|
|
414
|
+
})
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
|
|
361
418
|
## [示例及具体文档参考](https://github.com/netless-io/netless-slide-demo)
|
|
362
419
|
|
|
363
420
|
## changelog
|
|
@@ -499,3 +556,13 @@ static clearLocalCache(): void;
|
|
|
499
556
|
#### 0.3.9
|
|
500
557
|
* 新增 resourceTimeout 配置
|
|
501
558
|
* 修复资源加载引起的错误无法跳转下一页的问题
|
|
559
|
+
|
|
560
|
+
#### 0.3.10
|
|
561
|
+
* 新增本地日志下载功能
|
|
562
|
+
* 修复加载状态不一致导致无法下一步的问题
|
|
563
|
+
|
|
564
|
+
#### 0.4.0
|
|
565
|
+
* 新增资源代理功能
|
|
566
|
+
|
|
567
|
+
#### 0.4.1
|
|
568
|
+
* 新增导航代理功能
|
|
@@ -131,6 +131,9 @@ var RenderingTaskManager = /** @class */ (function () {
|
|
|
131
131
|
RenderingTaskManager.prototype.hasStartTask = function () {
|
|
132
132
|
return this.tasks.some(function (t) { return t.state === "start"; });
|
|
133
133
|
};
|
|
134
|
+
RenderingTaskManager.prototype.destroy = function () {
|
|
135
|
+
this.eventHub.removeAllListeners();
|
|
136
|
+
};
|
|
134
137
|
return RenderingTaskManager;
|
|
135
138
|
}());
|
|
136
139
|
export { RenderingTaskManager };
|
package/lib/Slide.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { SlideError, ILoaderDelegate } from "@netless/ppt-player";
|
|
1
2
|
export { ErrorType } from "@netless/ppt-player";
|
|
3
|
+
export type { ILoaderDelegate } from "@netless/ppt-player";
|
|
2
4
|
export interface RtcAudio {
|
|
3
5
|
/**
|
|
4
6
|
* 开始播放音频.
|
|
@@ -113,6 +115,9 @@ export interface ISlideRenderOptions {
|
|
|
113
115
|
/** 播放切页动画时候的背景颜色, 接受 css 颜色字符串或者 16进制颜色值("#ffffff",0xffffff) */
|
|
114
116
|
transactionBgColor?: string | number;
|
|
115
117
|
}
|
|
118
|
+
export interface INavigatorDelegate {
|
|
119
|
+
gotoPage(index: number): void;
|
|
120
|
+
}
|
|
116
121
|
export interface ISlideConfig {
|
|
117
122
|
/** canvas 挂载点 */
|
|
118
123
|
anchor: HTMLDivElement;
|
|
@@ -157,6 +162,14 @@ export interface ISlideConfig {
|
|
|
157
162
|
* 资源加载超时时间, 默认 15 秒
|
|
158
163
|
*/
|
|
159
164
|
resourceTimeout?: number;
|
|
165
|
+
/**
|
|
166
|
+
* 远程资源代理, 详细使用参考 README
|
|
167
|
+
*/
|
|
168
|
+
loaderDelegate?: ILoaderDelegate;
|
|
169
|
+
/**
|
|
170
|
+
* ppt 页码导航代理, 添加此属性后, ppt 内部动作引起的页码变换, 全部走代理逻辑.
|
|
171
|
+
*/
|
|
172
|
+
navigatorDelegate?: INavigatorDelegate;
|
|
160
173
|
}
|
|
161
174
|
interface MediaState {
|
|
162
175
|
type: "pause" | "play";
|
|
@@ -239,11 +252,11 @@ export interface SlideEventEmitter {
|
|
|
239
252
|
emit(event: typeof SLIDE_EVENTS.syncReceive, args: SyncEvent): boolean;
|
|
240
253
|
on(event: typeof SLIDE_EVENTS.syncReceive, listener: (event: SyncEvent) => void): this;
|
|
241
254
|
emit(event: typeof SLIDE_EVENTS.renderError, args: {
|
|
242
|
-
error:
|
|
255
|
+
error: SlideError;
|
|
243
256
|
index: number;
|
|
244
257
|
}): boolean;
|
|
245
258
|
on(event: typeof SLIDE_EVENTS.renderError, listener: (args: {
|
|
246
|
-
error:
|
|
259
|
+
error: SlideError;
|
|
247
260
|
index: number;
|
|
248
261
|
}) => void): this;
|
|
249
262
|
emit(event: typeof SLIDE_EVENTS.animateStart): boolean;
|
|
@@ -261,6 +274,10 @@ export interface SlideEventEmitter {
|
|
|
261
274
|
}
|
|
262
275
|
declare const Slide_base: new () => SlideEventEmitter;
|
|
263
276
|
export declare class Slide extends Slide_base {
|
|
277
|
+
static logStore: LocalForage;
|
|
278
|
+
static _tempLog: string;
|
|
279
|
+
static _tempLogIndex: number;
|
|
280
|
+
static flushLog(): Promise<void>;
|
|
264
281
|
private iosResetCache;
|
|
265
282
|
private iosNewPlayer?;
|
|
266
283
|
private needClearCacheImage;
|
|
@@ -268,6 +285,7 @@ export declare class Slide extends Slide_base {
|
|
|
268
285
|
private __slideState;
|
|
269
286
|
private userInputTime;
|
|
270
287
|
private isSyncingSlideState;
|
|
288
|
+
private randomId;
|
|
271
289
|
private resize;
|
|
272
290
|
private isAnimating;
|
|
273
291
|
private renderingTaskManager;
|
|
@@ -303,6 +321,7 @@ export declare class Slide extends Slide_base {
|
|
|
303
321
|
private _receiveIncrId;
|
|
304
322
|
private get dispatchIncrId();
|
|
305
323
|
constructor(config: ISlideConfig);
|
|
324
|
+
static handleLogDownload: () => Promise<void>;
|
|
306
325
|
private initPlayer;
|
|
307
326
|
private userInputHandle;
|
|
308
327
|
private handleViewClick;
|
|
@@ -412,7 +431,13 @@ export declare class Slide extends Slide_base {
|
|
|
412
431
|
renderSlide(index: number, isForward?: boolean): void;
|
|
413
432
|
private needCreateNewPlayer;
|
|
414
433
|
private poseRenderSlide;
|
|
415
|
-
|
|
434
|
+
/**
|
|
435
|
+
* 直接渲染 index 指定的页码, 不论当前是 sync 还是 interactive 模式.
|
|
436
|
+
* 即调用此方法不会触发 syncDispatch 事件
|
|
437
|
+
* @param index 要渲染的页码
|
|
438
|
+
* @param isForward 是否向前翻页, 影响切页动画时正放还是倒放
|
|
439
|
+
*/
|
|
440
|
+
doRenderSlide(index: number, isForward?: boolean): Promise<void>;
|
|
416
441
|
/**
|
|
417
442
|
* 执行下一个主序列动画
|
|
418
443
|
*/
|