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

Commit 60006b3

Browse files
feat(#54): add a new actions slot
1 parent 05aaabb commit 60006b3

File tree

14 files changed

+73
-7
lines changed

14 files changed

+73
-7
lines changed

src/components/deck/deckdeckgo-deck/deckdeckgo-deck.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ div.deckgo-pager {
3232
pointer-events: none;
3333
}
3434

35+
::slotted([slot="actions"]) {
36+
display: none;
37+
}
38+
3539
@media print {
3640
div.deckgo-deck {
3741
display: initial;

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

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ export class DeckdeckgoDeck {
8484

8585
const toggleFullscreen: boolean = DeckdeckgoUtils.isFullscreen();
8686
await this.hideOrClearMouseCursorTimer(toggleFullscreen);
87+
await this.showHideActionsSlot(toggleFullscreen);
8788
}, 100));
8889
}
8990
}
@@ -339,7 +340,8 @@ export class DeckdeckgoDeck {
339340
const definedSlides: HTMLCollection = this.el.children;
340341
const loadedSlides: NodeListOf<HTMLElement> = this.el.querySelectorAll('.deckgo-slide-container');
341342

342-
const definedSlidesLength: number = await this.countDefinedSlides(definedSlides);
343+
const filteredSlides: Element[] = await this.filterSlides(definedSlides);
344+
const definedSlidesLength: number = filteredSlides ? filteredSlides.length : 0;
343345

344346
// Are all slides loaded?
345347
if (definedSlides && loadedSlides && loadedSlides.length === definedSlidesLength && definedSlidesLength === this.length) {
@@ -357,6 +359,8 @@ export class DeckdeckgoDeck {
357359
this.slidesDidLoad.emit(orderedSlidesTagNames);
358360

359361
await this.lazyLoadFirstSlides();
362+
363+
await this.cloneActionsSlot(filteredSlides);
360364
}
361365

362366
resolve();
@@ -374,19 +378,38 @@ export class DeckdeckgoDeck {
374378
});
375379
}
376380

377-
// The last child might be a background and note a slides
378-
private countDefinedSlides(definedSlides: HTMLCollection): Promise<number> {
379-
return new Promise<number>((resolve) => {
381+
private cloneActionsSlot(slides: Element[]): Promise<void> {
382+
return new Promise<void>((resolve) => {
383+
if (!slides || slides.length <= 0) {
384+
resolve();
385+
return;
386+
}
387+
388+
const actions: HTMLElement = this.el.querySelector('[slot=\'actions\']');
389+
390+
if (actions) {
391+
slides.forEach((slide: Element) => {
392+
slide.appendChild(actions.cloneNode(true));
393+
});
394+
}
395+
396+
resolve();
397+
});
398+
}
399+
400+
// The last children might be slots (background, note or action)
401+
private filterSlides(definedSlides: HTMLCollection): Promise<Element[]> {
402+
return new Promise<Element[]>((resolve) => {
380403
if (!definedSlides || definedSlides.length <= 0) {
381-
resolve(0);
404+
resolve(null);
382405
return;
383406
}
384407

385408
const slides: Element[] = Array.from(definedSlides).filter((slide: Element) => {
386409
return slide.tagName.toLocaleLowerCase().indexOf('deckgo-slide-') > -1
387410
});
388411

389-
resolve(slides ? slides.length : 0);
412+
resolve(slides);
390413
});
391414
}
392415

@@ -635,6 +658,23 @@ export class DeckdeckgoDeck {
635658
});
636659
}
637660

661+
private showHideActionsSlot(toggleFullscreen: boolean): Promise<void> {
662+
return new Promise<void>((resolve) => {
663+
const slider: HTMLElement = this.el.shadowRoot.querySelector('div.deckgo-deck');
664+
665+
if (!slider) {
666+
resolve();
667+
return;
668+
}
669+
670+
if (toggleFullscreen) {
671+
slider.style.setProperty('--slide-actions-display', 'none');
672+
} else {
673+
slider.style.removeProperty('--slide-actions-display');
674+
}
675+
});
676+
}
677+
638678
/* END: Full screen */
639679

640680
/* BEGIN: Utils */
@@ -675,6 +715,7 @@ export class DeckdeckgoDeck {
675715
return [
676716
<div class="deckgo-deck">
677717
<slot/>
718+
<slot name="actions"></slot>
678719
<slot name="background"></slot>
679720
</div>,
680721
<div class="deckgo-pager">{this.pager ? <deckgo-pager active-index={this.activeIndex} length={this.length}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export class DeckdeckgoSlideAuthor implements DeckdeckgoSlide {
5858
</div>
5959
</div>
6060
<slot name="notes"></slot>
61+
<slot name="actions"></slot>
6162
</div>;
6263
}
6364

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ export class DeckdeckgoSlideChart implements DeckdeckgoSlide {
119119
{this.renderChart()}
120120
</div>
121121
<slot name="notes"></slot>
122+
<slot name="actions"></slot>
122123
</div>
123124
}
124125

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ div.deckgo-slide-code-container {
4444
flex-direction: column;
4545

4646
background: var(--deckgo-show-info-background);
47+
z-index: var(--deckgo-show-info-zindex, 1);
4748

4849
pointer-events: initial;
4950
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ export class DeckdeckgoSlideCode implements DeckdeckgoSlide {
221221
<slot name="code"></slot>
222222
<slot name="info"></slot>
223223
<slot name="notes"></slot>
224+
<slot name="actions"></slot>
224225
</div>;
225226
}
226227

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export class DeckdeckgoSlideContent implements DeckdeckgoSlide {
4747
<slot name="title"></slot>
4848
<slot name="content"></slot>
4949
<slot name="notes"></slot>
50+
<slot name="actions"></slot>
5051
</div>;
5152
}
5253

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export class DeckdeckgoSlideGif implements DeckdeckgoSlide {
7373
<deckgo-gif src={this.src} alt={this.alt} fullscreen={this.fullscreen}></deckgo-gif>
7474
<slot name="footer"></slot>
7575
<slot name="notes"></slot>
76+
<slot name="actions"></slot>
7677
</div>
7778
</div>
7879
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export class DeckdeckgoSlideQrcode implements DeckdeckgoSlide {
9292
<deckgo-qrcode content={this.content}></deckgo-qrcode>
9393
</div>
9494
<slot name="notes"></slot>
95+
<slot name="actions"></slot>
9596
</div>;
9697
}
9798

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export class DeckdeckgoSlideSplit implements DeckdeckgoSlide {
4848
<div class="deckgo-slide-split deckgo-slide-split-start"><slot name="start"></slot></div>
4949
<div class="deckgo-slide-split deckgo-slide-split-end"><slot name="end"></slot></div>
5050
<slot name="notes"></slot>
51+
<slot name="actions"></slot>
5152
</div>;
5253
}
5354

0 commit comments

Comments
 (0)