@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 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
+ * 新增导航代理功能
@@ -17,4 +17,5 @@ export declare class RenderingTaskManager {
17
17
  private replaceIdleTask;
18
18
  addTask(fn: () => Promise<void>, slideIndex: number, id: string): void;
19
19
  hasStartTask(): boolean;
20
+ destroy(): void;
20
21
  }
@@ -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: Error;
255
+ error: SlideError;
243
256
  index: number;
244
257
  }): boolean;
245
258
  on(event: typeof SLIDE_EVENTS.renderError, listener: (args: {
246
- error: 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
- private doRenderSlide;
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
  */