Skip to content

Commit

Permalink
presenter console: skip hidden slide in next slide preview
Browse files Browse the repository at this point in the history
Moreover hidden slide are skipped in the thumbnails view, too.

Updated presenter console cypress test.

Signed-off-by: Marco Cecchetti <[email protected]>
Change-Id: Id8b9ada5e25e9bf1fee43b78b904c39425c5114c
  • Loading branch information
mcecchetti committed Dec 7, 2024
1 parent aa936df commit b8699f4
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 32 deletions.
81 changes: 49 additions & 32 deletions browser/src/slideshow/PresenterConsole.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,22 @@ class PresenterConsole {
`;
}

_getSlidesCount() {
return this._presenter._getSlidesCount();
}

_isSlideHidden(slideNumber) {
return this._presenter.isSlideHidden(slideNumber);
}

_getNextVisibleSlide(slideNumber) {
return this._presenter.getNextVisibleSlide(slideNumber);
}

_getVisibleIndex(slideNumber) {
return this._presenter.getVisibleIndex(slideNumber);
}

_onPresentationInfo() {
if (!this._proxyPresenter) {
return;
Expand All @@ -134,7 +150,8 @@ class PresenterConsole {
this._ticks = 0;
this._pause = false;

this._previews = new Array(this._presenter._getSlidesCount());
this._visibleSlidesCount = this._presenter.getVisibleSlidesCount();
this._previews = new Array(this._getSlidesCount());
if (this._previews.length > 1) {
let list = this._proxyPresenter.document.querySelectorAll('button');
for (let index = 0; index < list.length; index++) {
Expand All @@ -145,8 +162,10 @@ class PresenterConsole {
if (this._slides) {
let img;
let elem = this._slides.querySelector('#slides-preview');
for (let index = 0; index < this._previews.length; index++) {
for (let index = 0; index < this._getSlidesCount(); index++) {
if (this._isSlideHidden(index)) continue;
img = this._proxyPresenter.document.createElement('img');
img.id = `preview-slide-${index}`;
img.src = document.querySelector('meta[name="previewImg"]').content;
img.style.marginLeft = '10px';
img.style.marginRight = '10px';
Expand Down Expand Up @@ -779,15 +798,15 @@ class PresenterConsole {
autoUpdate: false,
});

for (let index = 0; index < this._previews.length; index++) {
for (let index = 0; index < this._visibleSlidesCount; index++) {
preview = previews.children.item(index);
if (
preview.width !== size.width ||
preview.height !== size.height ||
width !== size.width ||
height !== size.height
) {
this._map.getPreview(2000, index, size.width, size.height, {
this._map.getPreview(2000, preview._index, size.width, size.height, {
autoUpdate: false,
slideshow: true,
});
Expand Down Expand Up @@ -994,19 +1013,20 @@ class PresenterConsole {
let next =
this._proxyPresenter.document.querySelector('#next-presentation');
if (
this._ticks % 2 == 0 &&
this._ticks % 2 === 0 &&
typeof this._lastIndex !== 'undefined' &&
next
) {
const nextIndex = this._getNextVisibleSlide(this._lastIndex);
this._proxyPresenter.setTimeout(
L.bind(this._fetchPreview, this, this._lastIndex + 1, next),
L.bind(this._fetchPreview, this, nextIndex, next),
0,
);
}
}

_fetchPreview(index, elem) {
if (index >= this._presenter._getSlidesCount()) {
if (index >= this._getSlidesCount()) {
return;
}

Expand Down Expand Up @@ -1109,7 +1129,9 @@ class PresenterConsole {
let previews =
this._proxyPresenter.document.querySelector('#slides-preview');
if (previews && typeof this._currentIndex !== 'undefined') {
let preview = previews.children.item(this._currentIndex);
let preview = this._proxyPresenter.document.querySelector(
`#preview-slide-${this._currentIndex}`,
);
// 80vh
let height = this._proxyPresenter.innerHeight * 0.8;
// 25vw
Expand Down Expand Up @@ -1137,13 +1159,14 @@ class PresenterConsole {
let elem = this._proxyPresenter.document.querySelector('#title-current');
if (elem) {
elem.innerText = _('Slide {0} of {1}')
.replace('{0}', e.slide + 1)
.replace('{1}', this._previews.length);
.replace('{0}', this._getVisibleIndex(e.slide) + 1)
.replace('{1}', this._visibleSlidesCount);
}

elem = this._proxyPresenter.document.querySelector('#next-presentation');
if (elem) {
this._fetchPreview(this._currentIndex + 1, elem);
const nextIndex = this._getNextVisibleSlide(this._currentIndex);
this._fetchPreview(nextIndex, elem);
}
}

Expand All @@ -1162,12 +1185,11 @@ class PresenterConsole {
notesContentElem.innerText = notes;
}

let elem = this._slides.querySelector('#slides-preview');
if (elem) {
elem = elem.children.item(this._currentIndex);
if (elem) {
this._selectImg(elem);
}
let img = this._slides.querySelector(
`#preview-slide-${this._currentIndex}`,
);
if (img) {
this._selectImg(img);
}

let next =
Expand Down Expand Up @@ -1201,7 +1223,8 @@ class PresenterConsole {
autoUpdate: false,
});

if (this._currentIndex + 1 >= this._presenter._getSlidesCount()) {
const nextSlideIndex = this._getNextVisibleSlide(this._currentIndex);
if (nextSlideIndex >= this._getSlidesCount()) {
this.drawEnd(size).then(function (blob) {
var reader = new FileReader();
reader.onload = function (e) {
Expand All @@ -1212,24 +1235,18 @@ class PresenterConsole {
return;
}

let preview = this._previews[this._currentIndex + 1];
let preview = this._previews[nextSlideIndex];
if (!preview) {
elem.src = document.querySelector('meta[name="previewImg"]').content;
} else {
elem.src = preview;
}

if (!preview || rect.width !== size.width || rect.height !== size.height) {
this._map.getPreview(
2000,
this._currentIndex + 1,
size.width,
size.height,
{
autoUpdate: false,
slideshow: true,
},
);
this._map.getPreview(2000, nextSlideIndex, size.width, size.height, {
autoUpdate: false,
slideshow: true,
});
elem.style.width = size.width + 'px';
elem.style.height = size.height + 'px';
}
Expand Down Expand Up @@ -1296,7 +1313,8 @@ class PresenterConsole {
return;
}

if (this._currentIndex + 1 === e.part) {
const nextSlideIndex = this._getNextVisibleSlide(this._currentIndex);
if (nextSlideIndex === e.part) {
let next =
this._proxyPresenter.document.querySelector('#next-presentation');
if (next) {
Expand All @@ -1307,8 +1325,7 @@ class PresenterConsole {
this._previews[e.part] = e.tile.src;
this._lastIndex = e.part;

let elem = this._slides.querySelector('#slides-preview');
let img = elem.children.item(e.part);
let img = this._slides.querySelector(`#preview-slide-${e.part}`);
if (img) {
img.src = e.tile.src;
img.width = e.width;
Expand Down
32 changes: 32 additions & 0 deletions browser/src/slideshow/SlideShowPresenter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,38 @@ class SlideShowPresenter {
return this._presentationInfo ? this._presentationInfo.slides.length : 0;
}

public isSlideHidden(slideNumber: number) {
const slideInfo = this.getSlideInfo(slideNumber);
return slideInfo ? slideInfo.hidden : true;
}

public getVisibleSlidesCount() {
let count = 0;
const slideCount = this._getSlidesCount();
for (let i = 0; i < slideCount; ++i) {
if (this.isSlideHidden(i)) continue;
++count;
}
return count;
}

public getNextVisibleSlide(slideNumber: number) {
let next = slideNumber;
while (next < this._getSlidesCount()) {
++next;
if (!this.isSlideHidden(next)) break;
}
return next;
}

public getVisibleIndex(slideNumber: number) {
let index = slideNumber;
for (let i = 0; i < slideNumber; ++i) {
if (this.isSlideHidden(i)) --index;
}
return index;
}

public isFullscreen() {
if (this._cypressSVGPresentationTest) return false;
return !!this._fullscreen;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,18 @@ describe(['tagdesktop'], 'Presenter Console.', function() {
return 2;
}

getVisibleSlidesCount() {
this._getSlidesCount();
}

isSlideHidden() {
return false;
}

getNextVisibleSlide(slideNumber) {
return slideNumber + 1;
}

getNotes() {
return "test notes";
}
Expand Down

0 comments on commit b8699f4

Please sign in to comment.