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

Commit 38dff2a

Browse files
feat: trigger a special event for slide gif
1 parent 9ad838b commit 38dff2a

File tree

4 files changed

+36
-5
lines changed

4 files changed

+36
-5
lines changed

studio/src/app/helpers/editor/editor.helper.tsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ export class EditorHelper {
3737
init(el: HTMLElement) {
3838
this.el = el;
3939

40-
this.el.addEventListener('input', this.onSlideInputChange, false);
40+
this.el.addEventListener('input', this.onInputChange, false);
41+
this.el.addEventListener('slideInputChange', this.onSlideInputChange, false);
4142
this.el.addEventListener('slideDidChange', this.onSlideChange, false);
4243
this.el.addEventListener('slideDidLoad', this.onSlideDidLoad, false);
4344
this.el.addEventListener('slideDelete', this.onSlideDelete, false);
@@ -48,7 +49,8 @@ export class EditorHelper {
4849
}
4950

5051
destroy() {
51-
this.el.removeEventListener('input', this.onSlideInputChange, true);
52+
this.el.removeEventListener('input', this.onInputChange, true);
53+
this.el.removeEventListener('slideInputChange', this.onSlideInputChange, true);
5254
this.el.removeEventListener('slideDidChange', this.onSlideChange, true);
5355
this.el.removeEventListener('slideDidLoad', this.onSlideDidLoad, true);
5456
this.el.removeEventListener('slideDelete', this.onSlideDelete, true);
@@ -72,7 +74,7 @@ export class EditorHelper {
7274
this.updateSlideSubject.next($event.detail);
7375
};
7476

75-
private onSlideInputChange = async ($event: Event) => {
77+
private onInputChange = async ($event: Event) => {
7678
if (!$event || !$event.target || !($event.target instanceof HTMLElement)) {
7779
return;
7880
}
@@ -86,6 +88,20 @@ export class EditorHelper {
8688
this.updateSlideSubject.next(parent);
8789
};
8890

91+
private onSlideInputChange = async ($event: Event) => {
92+
if (!$event || !$event.target || !($event.target instanceof HTMLElement)) {
93+
return;
94+
}
95+
96+
const parent: HTMLElement = ($event.target as HTMLElement);
97+
98+
if (!parent || !parent.nodeName || parent.nodeName.toLowerCase().indexOf('deckgo-slide') <= -1) {
99+
return;
100+
}
101+
102+
this.updateSlideSubject.next(parent);
103+
};
104+
89105
private onSlideDelete = async ($event: CustomEvent) => {
90106
if (!$event || !$event.detail) {
91107
return;

studio/src/components.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import '@stencil/core';
99

1010
import '@ionic/core';
11-
import 'ionicons';
1211
import 'deckdeckgo';
1312
import 'deckdeckgo-inline-editor';
13+
import 'ionicons';
1414
import {
1515
EventEmitter,
1616
} from '@stencil/core';

webcomponents/core/src/components.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import '@stencil/core';
99

1010

11+
import {
12+
EventEmitter,
13+
} from '@stencil/core';
1114

1215

1316
export namespace Components {
@@ -205,6 +208,7 @@ export namespace Components {
205208
'alt'?: string;
206209
'fullscreen'?: boolean;
207210
'onSlideDidLoad'?: (event: CustomEvent<void>) => void;
211+
'onSlideInputChange'?: (event: CustomEvent<EventTarget>) => void;
208212
'src'?: string;
209213
}
210214

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component, Element, Event, EventEmitter, Method, Prop} from '@stencil/core';
1+
import {Component, Element, Event, EventEmitter, Method, Prop, Listen} from '@stencil/core';
22

33
import {DeckdeckgoSlide, DeckdeckgoSlideUtils} from '../deckdeckgo-slide';
44
import {DeckdeckgoUtils} from '../../utils/deckdeckgo-utils';
@@ -19,6 +19,8 @@ export class DeckdeckgoSlideGif implements DeckdeckgoSlide {
1919

2020
@Prop() fullscreen: boolean = false;
2121

22+
@Event() private slideInputChange: EventEmitter<EventTarget>;
23+
2224
async componentDidLoad() {
2325
await DeckdeckgoUtils.hideLazyLoadImages(this.el);
2426

@@ -27,6 +29,15 @@ export class DeckdeckgoSlideGif implements DeckdeckgoSlide {
2729
await this.moveSlots();
2830
}
2931

32+
@Listen('input')
33+
onInput($event: UIEvent) {
34+
if ($event) {
35+
$event.stopPropagation();
36+
37+
this.slideInputChange.emit($event.target);
38+
}
39+
}
40+
3041
@Method()
3142
beforeSwipe(_enter: boolean): Promise<boolean> {
3243
return new Promise<boolean>((resolve) => {

0 commit comments

Comments
 (0)