Skip to content
This repository was archived by the owner on Feb 6, 2024. It is now read-only.

Commit 703b2a0

Browse files
feat(#22): pause video after swipe of the Youtube slide
1 parent 1ee2deb commit 703b2a0

File tree

10 files changed

+79
-3
lines changed

10 files changed

+79
-3
lines changed

src/components.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export namespace Components {
9595
}
9696

9797
interface DeckgoSlideAuthor {
98+
'afterSwipe': () => Promise<void>;
9899
'beforeSwipe': (_swipeLeft: boolean) => Promise<boolean>;
99100
'imgAlt': string;
100101
'imgSrc': string;
@@ -107,6 +108,7 @@ export namespace Components {
107108
}
108109

109110
interface DeckgoSlideCode {
111+
'afterSwipe': () => Promise<void>;
110112
'anchor': string;
111113
'anchorZoom': string;
112114
'beforeSwipe': (_swipeLeft: boolean) => Promise<boolean>;
@@ -126,6 +128,7 @@ export namespace Components {
126128
}
127129

128130
interface DeckgoSlideContent {
131+
'afterSwipe': () => Promise<void>;
129132
'beforeSwipe': (_swipeLeft: boolean) => Promise<boolean>;
130133
'lazyLoadContent': () => Promise<void>;
131134
'reveal': boolean;
@@ -138,6 +141,7 @@ export namespace Components {
138141
}
139142

140143
interface DeckgoSlideGif {
144+
'afterSwipe': () => Promise<void>;
141145
'alt': string;
142146
'beforeSwipe': (_swipeLeft: boolean) => Promise<boolean>;
143147
'fullscreen': boolean;
@@ -152,6 +156,7 @@ export namespace Components {
152156
}
153157

154158
interface DeckgoSlideSplit {
159+
'afterSwipe': () => Promise<void>;
155160
'beforeSwipe': (_swipeLeft: boolean) => Promise<boolean>;
156161
'lazyLoadContent': () => Promise<void>;
157162
'reveal': boolean;
@@ -164,6 +169,7 @@ export namespace Components {
164169
}
165170

166171
interface DeckgoSlideTitle {
172+
'afterSwipe': () => Promise<void>;
167173
'beforeSwipe': (_swipeLeft: boolean) => Promise<boolean>;
168174
'lazyLoadContent': () => Promise<void>;
169175
'reveal': boolean;
@@ -176,6 +182,7 @@ export namespace Components {
176182
}
177183

178184
interface DeckgoSlideYoutube {
185+
'afterSwipe': () => Promise<void>;
179186
'beforeSwipe': (_swipeLeft: boolean) => Promise<boolean>;
180187
'height': number;
181188
'lazyLoadContent': () => Promise<void>;

src/components/deck/deckdeckgo-deck/deckdeckgo-deck.tsx

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ export class DeckdeckgoDeck {
163163
return;
164164
}
165165

166-
167166
const couldSwipeLeft: boolean = deltaX.swipeLeft && this.activeIndex < this.length - 1;
168167
const couldSwipeRight: boolean = !deltaX.swipeLeft && this.activeIndex > 0;
169168

@@ -340,7 +339,7 @@ export class DeckdeckgoDeck {
340339
if (!slideAnimation) {
341340
couldSwipe = true;
342341
} else {
343-
couldSwipe = await this.couldSwipe(swipeLeft);
342+
couldSwipe = await this.beforeSwipe(swipeLeft);
344343
}
345344

346345
// We might want first to show hide stuffs in the slide before swiping
@@ -352,10 +351,12 @@ export class DeckdeckgoDeck {
352351
};
353352

354353
await this.swipeSlide(deltaX, emitEvent);
354+
355+
await this.afterSwipe(swipeLeft);
355356
}
356357
}
357358

358-
private couldSwipe(swipeLeft: boolean): Promise<boolean> {
359+
private beforeSwipe(swipeLeft: boolean): Promise<boolean> {
359360
return new Promise<boolean>(async (resolve) => {
360361
const slide: HTMLElement = this.el.querySelector('.deckgo-slide-container:nth-child(' + (this.activeIndex + 1) + ')');
361362

@@ -369,6 +370,27 @@ export class DeckdeckgoDeck {
369370
});
370371
}
371372

373+
private afterSwipe(swipeLeft: boolean): Promise<void> {
374+
return new Promise<void>(async (resolve) => {
375+
const indexPreviousSlide: number = swipeLeft ? this.activeIndex - 1 : this.activeIndex + 1;
376+
377+
if (isNaN(indexPreviousSlide) || indexPreviousSlide < 0 || indexPreviousSlide > this.length) {
378+
resolve();
379+
return;
380+
}
381+
382+
const slide: HTMLElement = this.el.querySelector('.deckgo-slide-container:nth-child(' + (indexPreviousSlide + 1) + ')');
383+
384+
if (!slide) {
385+
// Might be a swipe after the first or last slide
386+
resolve();
387+
} else {
388+
await (slide as any).afterSwipe();
389+
resolve();
390+
}
391+
});
392+
}
393+
372394
private lazyLoadContent(index: number): Promise<void> {
373395
return new Promise<void>(async (resolve) => {
374396
const slide: HTMLElement = this.el.querySelector('.deckgo-slide-container:nth-child(' + (index + 1) + ')');

src/components/slides/deckdeckgo-slide-author/deckdeckgo-slide-author.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ export class DeckdeckgoSlideAuthor implements DeckdeckgoSlide {
3030
});
3131
}
3232

33+
@Method()
34+
afterSwipe(): Promise<void> {
35+
return DeckdeckgoSlideUtils.afterSwipe();
36+
}
37+
3338
@Method()
3439
lazyLoadContent(): Promise<void> {
3540
return DeckdeckgoSlideUtils.lazyLoadContent(this.el);

src/components/slides/deckdeckgo-slide-code/deckdeckgo-slide-code.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,11 @@ export class DeckdeckgoSlideCode implements DeckdeckgoSlide {
105105
});
106106
}
107107

108+
@Method()
109+
afterSwipe(): Promise<void> {
110+
return DeckdeckgoSlideUtils.afterSwipe();
111+
}
112+
108113
// DeckDeckGo
109114
private scrollToNext(swipeLeft: boolean): Promise<boolean> {
110115
return new Promise<boolean>(async (resolve) => {

src/components/slides/deckdeckgo-slide-content/deckdeckgo-slide-content.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export class DeckdeckgoSlideContent implements DeckdeckgoSlide {
3232
return DeckdeckgoSlideUtils.beforeSwipe(this.el, _swipeLeft, this.reveal);
3333
}
3434

35+
@Method()
36+
afterSwipe(): Promise<void> {
37+
return DeckdeckgoSlideUtils.afterSwipe();
38+
}
39+
3540
@Method()
3641
lazyLoadContent(): Promise<void> {
3742
return DeckdeckgoSlideUtils.lazyLoadContent(this.el);

src/components/slides/deckdeckgo-slide-gif/deckdeckgo-slide-gif.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@ export class DeckdeckgoSlideGif implements DeckdeckgoSlide {
3434
});
3535
}
3636

37+
@Method()
38+
afterSwipe(): Promise<void> {
39+
return DeckdeckgoSlideUtils.afterSwipe();
40+
}
41+
3742
@Method()
3843
lazyLoadContent(): Promise<void> {
3944
return DeckdeckgoSlideUtils.lazyLoadContent(this.el);

src/components/slides/deckdeckgo-slide-split/deckdeckgo-slide-split.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export class DeckdeckgoSlideSplit implements DeckdeckgoSlide {
3232
return DeckdeckgoSlideUtils.beforeSwipe(this.el, _swipeLeft, this.reveal);
3333
}
3434

35+
@Method()
36+
afterSwipe(): Promise<void> {
37+
return DeckdeckgoSlideUtils.afterSwipe();
38+
}
39+
3540
@Method()
3641
lazyLoadContent(): Promise<void> {
3742
return DeckdeckgoSlideUtils.lazyLoadContent(this.el);

src/components/slides/deckdeckgo-slide-title/deckdeckgo-slide-title.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ export class DeckdeckgoSlideTitle implements DeckdeckgoSlide {
3232
return DeckdeckgoSlideUtils.beforeSwipe(this.el, _swipeLeft, this.reveal);
3333
}
3434

35+
@Method()
36+
afterSwipe(): Promise<void> {
37+
return DeckdeckgoSlideUtils.afterSwipe();
38+
}
39+
3540
@Method()
3641
lazyLoadContent(): Promise<void> {
3742
return DeckdeckgoSlideUtils.lazyLoadContent(this.el);

src/components/slides/deckdeckgo-slide-youtube/deckdeckgo-slide-youtube.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ export class DeckdeckgoSlideYoutube implements DeckdeckgoSlide {
4242
});
4343
}
4444

45+
@Method()
46+
afterSwipe(): Promise<void> {
47+
return new Promise<void>(async (resolve) => {
48+
// Stop video after swipe to prev or next slide
49+
await this.playPauseVideo(false);
50+
resolve();
51+
});
52+
}
53+
4554
@Method()
4655
lazyLoadContent(): Promise<void> {
4756
return DeckdeckgoSlideUtils.lazyLoadContent(this.el);

src/components/slides/deckdeckgo-slide.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import {DeckdeckgoExtraUtils} from '../extra/deckdeckgo-extra';
44
export interface DeckdeckgoSlide {
55
beforeSwipe(_swipeLeft: boolean): Promise<boolean>;
66

7+
afterSwipe(): Promise<void>;
8+
79
lazyLoadContent(): Promise<void>;
810
}
911

@@ -84,6 +86,12 @@ export class DeckdeckgoSlideUtils {
8486
});
8587
}
8688

89+
static afterSwipe(): Promise<void> {
90+
return new Promise<void>((resolve) => {
91+
resolve();
92+
});
93+
};
94+
8795
// Source: http://detectmobilebrowsers.com
8896
static isMobile(): boolean {
8997
if (!window) {

0 commit comments

Comments
 (0)