@netless/app-slide 0.2.8 → 0.2.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@netless/app-slide",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "main": "dist/main.cjs.js",
5
5
  "module": "dist/main.es.js",
6
6
  "types": "dist/index.d.ts",
@@ -10,7 +10,6 @@
10
10
  "README-zh.md"
11
11
  ],
12
12
  "devDependencies": {
13
- "@netless/app-shared": "0.1.2",
14
13
  "@netless/slide": "^0.6.4",
15
14
  "@types/color-string": "^1.5.2",
16
15
  "color-string": "^1.9.1",
@@ -31,6 +31,7 @@ export const EmptyAttributes: Attributes = {
31
31
  export interface SlideControllerOptions {
32
32
  context: AppContext<Attributes, MagixEvents, AppOptions>;
33
33
  anchor: HTMLDivElement;
34
+ onRenderEnd: () => void;
34
35
  onPageChanged: (page: number) => void;
35
36
  onTransitionStart: () => void;
36
37
  onTransitionEnd: () => void;
@@ -54,10 +54,12 @@ export class SlideDocsViewer {
54
54
 
55
55
  public $slide!: HTMLDivElement;
56
56
  public $whiteboardView!: HTMLDivElement;
57
+ public $overlay!: HTMLDivElement;
57
58
 
58
59
  public render() {
59
60
  this.viewer.$content.appendChild(this.renderSlideContainer());
60
61
  this.viewer.$content.appendChild(this.renderWhiteboardView());
62
+ this.viewer.$content.appendChild(this.renderOverlay());
61
63
  this.sideEffect.addEventListener(window, "keydown", ev => {
62
64
  if (this.box.focus && this.slideController) {
63
65
  switch (ev.key) {
@@ -79,6 +81,15 @@ export class SlideDocsViewer {
79
81
  });
80
82
  }
81
83
 
84
+ protected renderOverlay(): HTMLDivElement {
85
+ if (!this.$overlay) {
86
+ const $overlay = document.createElement("div");
87
+ $overlay.className = this.wrapClassName("overlay");
88
+ this.$overlay = $overlay;
89
+ }
90
+ return this.$overlay;
91
+ }
92
+
82
93
  protected renderSlideContainer(): HTMLDivElement {
83
94
  if (!this.$slide) {
84
95
  const $slide = document.createElement("div");
@@ -103,6 +114,7 @@ export class SlideDocsViewer {
103
114
 
104
115
  this.slideController = this.mountSlideController({
105
116
  anchor: this.$slide,
117
+ onRenderEnd: this.onRenderEnd,
106
118
  onTransitionStart: this.viewer.setPlaying,
107
119
  onTransitionEnd: this.viewer.setPaused,
108
120
  onReady: this.refreshPages,
@@ -120,9 +132,15 @@ export class SlideDocsViewer {
120
132
 
121
133
  protected onError = ({ error }: { error: Error }) => {
122
134
  this.viewer.setPaused();
135
+ this.$overlay.textContent = `Error on slide[page=${this.slideController?.page}]: ${error.message}`;
136
+ this.$overlay.style.opacity = "1";
123
137
  logger.warn("[Slide] render error", error);
124
138
  };
125
139
 
140
+ protected onRenderEnd = () => {
141
+ this.$overlay.style.opacity = "";
142
+ };
143
+
126
144
  protected refreshPages = () => {
127
145
  if (this.slideController) {
128
146
  this.viewer.pages = createDocsViewerPages(this.slideController.slide);
@@ -9,3 +9,19 @@ $namespace: "netless-app-slide";
9
9
  z-index: 100;
10
10
  overflow: hidden;
11
11
  }
12
+
13
+ .#{$namespace}-overlay {
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ position: absolute;
18
+ z-index: 200;
19
+ top: 0;
20
+ left: 0;
21
+ width: 100%;
22
+ height: 100%;
23
+ background: rgba(255, 0, 0, 0.25);
24
+ transition: opacity 0.3s;
25
+ opacity: 0;
26
+ pointer-events: none;
27
+ }
package/src/index.ts CHANGED
@@ -141,6 +141,7 @@ const SlideApp: NetlessApp<Attributes, MagixEvents, AppOptions, Controller> = {
141
141
  }
142
142
  const page = slideController.slide.slideState.currentSlideIndex;
143
143
  log("[Slide] page to", page, synced ? "(synced)" : "", "(on ready)");
144
+ slideController.slide.on("renderEnd", options.onRenderEnd);
144
145
  });
145
146
  return slideController;
146
147
  };